Как очистить КЭШ

http://programmist1s.ru/kak-pochistit-kesh-v-1s/

Как очистить кэш 1С 8.1, 8.2?

Бывают случаи, когда на данном компьютере пользователя в рабочей базе была старая конфигурация, хотя на любом другом ПК и на сервере она обновилась. Так же может возникать ошибка потока данных. В этих и некоторых других случаях поможет очистка кеша.

В связи с тем, что 1С может быть установлена на различных операционных системах, папка, где хранится кэш, может быть различной.

Найти каталог, где хранятся временные файлы 1С, их можно увидеть в меню настройки в списке ИБ:

Для Win XP:

%userprofile%\Local Settings\Application Data\1C\1Cv82

%userprofile%\Application Data\1C\1Cv82

Для Win 7:

%userprofile%\AppData\Roaming\1C\1Cv82

%userprofile%\AppData\Local\1C\1Cv82

Серверные оси Windows 2008

C:\Users\<username>\AppData\Local\1C

C:\Users\<username>\AppData\Roaming\1C

А самый простой способ найти папки – это использовать поиск по системе(win + F) по ключевым словам «1сv81» и/или «1cv82». Нужные нам папки находятся в каталоге пользователя.

Напимер:

C:\Documents and Settings\%userprofile%\Local Settings\Application Data\1C\1Cv81

C:\Documents and Settings\%userprofile% \Local Settings\Application Data\1C\1Cv82

C:\Documents and Settings\%userprofile% \Application Data\1C\1Cv81\

C:\Documents and Settings\%userprofile% \Application Data\1C\1Cv82\

Важно:

1) Кэш хранится в двух папках. Чаще всего эти папки называются «LocalSettings» и «ApplicationData». Обе папки находятся в каталоге пользователя.

2) Формат кэш-файлов выглядит вот так: «0df525c2-1c3e-44be-b852-c7059f17c5aa» или «0f2c4d8f-cc84-4033-8744-1acfa6204474». Удалять необходимо только те папки, у которых такой же формат в названии.

3.) Не удаляйте файл ibases.v8i — он содержит список баз

Зайдя туда, мы находим множество (количество папок равно количеству конфигураций) интересных папок:

Можно ли изменить путь кэша метаданных?

Можно. С помощью групповых политик (gpedit.msc) можно переопределить путь профиля пользователя целиком (не только кэш метаданных).

ВАРИАНТЫ АВТОМАТИЗАЦИИ:

1. Доп. ключик командной строки /ClearCache — очистка кэша клиент-серверных вызовов (используется для тонкого и толстого клиентов в режиме 1С:Предприятия).

2. bat / cmd файл:

Код VBS

@FOR /D %%i in ("C:\Users\*") do (

@FOR /D %%j in ("%%i\Local settings\Application data\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%j"

@FOR /D %%j in ("%%i\AppData\Roaming\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%j"

)

и текст батника с проверкой на ХР или 7:

Код VBS

If Exist %USERPROFILE%\AppData\Roaming\1C\1Cv82 (

rem Удаляем все файлы в 7

Del /F /Q %USERPROFILE%\AppData\Roaming\1C\1Cv82\*.*

Del /F /Q %USERPROFILE%\AppData\Local\1C\1Cv82\*.*

rem Удаляем все каталоги в 7

for /d %%i in ("%USERPROFILE%\AppData\Roaming\1C\1Cv82\*") do rmdir /s /q "%%i"

for /d %%i in ("%USERPROFILE%\AppData\Local\1C\1Cv82\*") do rmdir /s /q "%%i"

)

If Exist %USERPROFILE%\Local Settings\Application Data\1C\1Cv82 (

rem Удаляем все файлы в XP

Del /F /Q %USERPROFILE%\Local Settings\Application Data\1C\1Cv82\*.*

Del /F /Q %USERPROFILE%\Application Data\1C\1Cv82\*.*

rem Удаляем все файлы в XP

for /d %%i in ("%USERPROFILE%\Local Settings\Application Data\1C\1Cv82\*") do rmdir /s /q "%%i"

for /d %%i in ("%USERPROFILE%\Application Data\1C\1Cv82\*") do rmdir /s /q "%%i"

)

3. Процедуру ОчиститьКэшИПерезапуститьПрограмму() создаем в глобальном модуле и вызываем ее когда нужно почистить кэш 1С

Код 1C v 8.х

// Процедура создает и запускает vbs файл, который производит очистку кэша.

// 1С и презапускает программу

//

Процедура ОчиститьКэшИПерезапуститьПрограмму() Экспорт

СкриптФайл = Новый ТекстовыйДокумент;

СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы();

СтрокаЗапускаПрограммы = КаталогПрограммы();

ПутьКФайлуСкрипта = КаталогВременныхФайлов() + "CacheCleaning.vbs";

ПутьКФайлу1С = СтрокаЗапускаПрограммы + "1cv8.exe";

ИмяСервера = "";

ИмяБазы = "";

Путь = "";

КомандаЗапуска = "";

Один = """";

Два = """""";

Три = """""""";

Если (Найти(СтрокаСоединенияСБД, "File=") <> 0) Тогда

Путь = СтрЗаменить(СтрокаСоединенияСБД, "File=", "");

Путь = Лев(Путь, СтрДлина(Путь)-1);

КомандаЗапуска = "WshShell.Run " + Три + ПутьКФайлу1С + Два + " ENTERPRISE /F" + Путь + Один + ", 1, true";

Иначе

МассивПараметровСоединения = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаСоединенияИнформационнойБазы(), ";");

МассивПараметровСервера = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(МассивПараметровСоединения[0], """");

ИмяСервера = СокрЛП(МассивПараметровСервера[1]);

МассивПараметровБазы = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(МассивПараметровСоединения[1], """");

ИмяБазы = СокрЛП(МассивПараметровБазы[1]);

КомандаЗапуска = "WshShell.Run " + Три + ПутьКФайлу1С + Два + " ENTERPRISE /S" + ИмяСервера + "\" + ИмяБазы + Один + ", 1, true";

КонецЕсли;

// Если пользователь не хочет перезапускать сеанс 1С, то после выполнения скрипта ничего не делаем.

Если Не глЗначениеПеременной("глПерезапускатьСеансРаботыСПрограммой") Тогда

КомандаЗапуска = "";

КонецЕсли;

СкриптФайл.УстановитьТекст("WScript.Sleep(5000)

|

|Dim FSO

|Set FSO = WScript.CreateObject(""Scripting.FileSystemObject"")

|Set WshShell = WScript.CreateObject(""WScript.Shell"")

|Set colEnvVars = WshShell.Environment(""Process"")

|

|strComputer = "".""

|Set objWMIService = GetObject(""winmgmts:"" _

|& ""{impersonationLevel=impersonate}!\\"" _

|& strComputer & ""\root\cimv2"")

|

|Set colProcesses = objWMIService.ExecQuery( _

|""S_elect * From Win32_Process "" _

|& ""Where Name = '1cv8.exe'"")

|

|For Each objProcess In colProcesses

| objProcess.Terminate

|Next

|

|WScript.Sleep(1000)

|

|FolderName1 = ""\Local Settings\Application Data\1C\1Cv82""

|FolderName2 = ""\Local Settings\Application Data\1C\1Cv81""

|FolderName3 = ""\appdata\Local\1C\1Cv82""

|FolderName4 = ""\appdata\Local\1C\1Cv81""

|

|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName1) Then

| GoSubFolders colEnvVars(""userprofile"") & FolderName1

|End If

|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName2) Then

|GoSubFolders colEnvVars(""userprofile"") & FolderName2

| End If

|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName3) Then

| GoSubFolders colEnvVars(""userprofile"") & FolderName3

|End If

|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName4) Then

| GoSubFolders colEnvVars(""userprofile"") & FolderName4

|End If

|

|" + КомандаЗапуска + "

|Set WshShell = Nothing

|

|Sub DelFile(sFILE)

| On Error Resume Next

| FSO.DeleteFile sFILE, True

| If Err.Number <> 0 Then

| Wscript.Echo ""Error deleting file: "" & sFILE

| End If

|End sub

|

|Function GetFolder(sFOLDER)

| On Error Resume Next

| Set GetFolder = FSO.GetFolder(sFOLDER)

| If Err.Number <> 0 Then

| Wscript.Echo ""Error connecting to folder:"" & sFOLDER & VBlf & ""["" & Err.Number & ""]"" & Err.Description

| Wscript.Quit Err.Number

| End If

|End Function

|

|Sub GoSubFolders (objDIR)

| ProcessFilesInFolder objDIR

| Set sFolder = GetFolder(objDIR)

| For Each eFolder in sFolder.SubFolders

| GoSubFolders eFolder

| Next

| FSO.DeleteFolder sFolder, True

|End Sub

|

|Sub ProcessFilesInFolder (objDIR)

|Set sFolder = GetFolder(objDIR)

|For Each objFile in sFolder.Files

| DelFile objFile

|Next

|End Sub");

Попытка

СкриптФайл.Записать(ПутьКФайлуСкрипта, КодировкаТекста.Системная);

ЗапуститьПриложение(ПутьКФайлуСкрипта);

Исключение

КонецПопытки;

КонецПроцедуры