Имя: Пароль:
1C
1С v8
Очистить КЭШ параметров сеанса
0 Вуглускр1991
 
05.04.13
15:21
Привет!
Помню, где-то было, 20 минут поиска не помогли.
Какой процедурой это делается?
Я меняю в УТ10 текущегоПользователя.
1 Trotter
 
05.04.13
15:23
Как очистить кэш 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

А самый простой способ найти папки – это использовать поиск по системе(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 — он содержит список баз
2 Trotter
 
05.04.13
15:23
или это не подходит ?
3 Вуглускр1991
 
05.04.13
15:27
(2) Спасибо, скорее нет, у меня впечатление такое, что 1С услышали разработчиков и сделали такую процедуру, чтобы мы не лазили туда.
4 Trotter
 
05.04.13
15:29
(3) вот стырил
// Процедура создает и запускает 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");

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

КонецПроцедуры
5 Вуглускр1991
 
05.04.13
15:34
(4) Круто! И морочно :(
я меняю параметр сеанса в управляемом приложении, которое прилепляю к УТ10. Надеюсь, что я не попаду на процедуры, написанные в 1С, которым могло бы повредить изменение пользователя "на лету". на RLS и ошибки кэша. Пока написал просто:
ПараметрыСеанса.ТекущийПользователь = НовПользак;
6 dmrjan
 
05.04.13
15:34
Я просто создал .CMD
Для чистки temp поместил в автозагрузку
Для чистки кэша 1с - на рабочий стол ярлык

Очистка temp
WinXP
del /F /Q /S "%USERPROFILE%\Local Settings\Temp\"
Win 7
del /F /Q /S "%USERPROFILE%\AppData\Local\Temp"

Очистка кэша 1с
Win 7
del /F /Q /S "%USERPROFILE%\AppData\Local\1C\1Cv82"
del /F /Q /S "%USERPROFILE%\AppData\Roaming\1C\1Cv82"
WinXP
del /F /Q /S "%USERPROFILE%\AppData\Local\Temp"
7 dmrjan
 
05.04.13
15:35
Для ХР наврал.
8 Trotter
 
05.04.13
15:35
(7) CMD или BAT ?))
9 dmrjan
 
05.04.13
15:37
XP
del /F /Q /S "%USERPROFILE%\Local Settings\Application Data\1C\1Cv82"
del /F /Q /S "%USERPROFILE%\Application Data\1C\1Cv82\"

Да обозвал .cmd - работает
10 dmrjan
 
05.04.13
15:38
Единственно - каталоги не чистит, зато под юзером нормально чистит, прав хватает.