После динамического обновления часто возникает ситуация, когда при перезапуске клиента он подхватывает не актуальную версию конфигурации с сервера, в результате чего могут появляться совершенно непредсказуемые глюки.
Данный скрипт очищает локальный кэш 1С и при следующем запуске 1С подхватывает актуальную версию конфигурации. Скрипт настроен на удаление кешей 8.0-8.2 платформ. Работает только если на локали нет ни одного запущенного процесса 1С 8.
Причиной написания данного скрипта послужило то, что параметр /ClearCache часто не решает проблему.
Для использования необходимо создать текстовый файл, скопировать в него текст скрипта и изменить его расширение с *.txt на *.js.
Реализовано на VBScript:
Текст скрипта:
Dim FSO
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set colEnvVars = WshShell.Environment("Process")
FolderName1 = "\Local Settings\Application Data\1C\1Cv82"
FolderName2 = "\Local Settings\Application Data\1C\1Cv81"
FolderName3 = "\Local Settings\Application Data\1C\1Cv80"
FolderName4 = "\Local Settings\Application Data\1C\1Cv8"
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
WScript.Echo "OK"
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
Реализовано на JScript.
При возникновении ошибкок при удалении каждый раз не выводится окно с ошибкой, а выводится только в самом конце одно.
Текст скрипта:
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var colEnvVars = WshShell.Environment("Process");
var sErrors = false;
var FolderName1 = "\\Local Settings\\Application Data\\1C\\1Cv82";
var FolderName2 = "\\Local Settings\\Application Data\\1C\\1Cv81";
var FolderName3 = "\\Local Settings\\Application Data\\1C\\1Cv80";
var FolderName4 = "\\Local Settings\\Application Data\\1C\\1Cv8";
if (FSO.FolderExists(colEnvVars("userprofile") + FolderName1))
GoSubFolders(colEnvVars("userprofile") + FolderName1);
if (FSO.FolderExists(colEnvVars("userprofile") + FolderName2))
GoSubFolders(colEnvVars("userprofile") + FolderName2);
if (FSO.FolderExists(colEnvVars("userprofile") + FolderName3))
GoSubFolders(colEnvVars("userprofile") + FolderName3);
if (FSO.FolderExists(colEnvVars("userprofile") + FolderName4))
GoSubFolders(colEnvVars("userprofile") + FolderName4);
if (!sErrors)
WScript.Echo("Обновление кэша прошло успешно");
else
WScript.Echo("Возникли ошибки. Возможно запущена 1С");
function DelFile(sFILE)
{
try
{
FSO.DeleteFile(sFILE, True);
}
catch(e)
{
sErrors = true;
}
}
function GetFolder(sFOLDER)
{
try
{
return FSO.GetFolder(sFOLDER);
}
catch(e)
{
sErrors = true;
}
}
function GoSubFolders(objDIR)
{
ProcessFilesInFolder(objDIR);
var sFolder = GetFolder(objDIR);
var subFlds = new Enumerator(sFolder.SubFolders);
for (; !subFlds.atEnd(); subFlds.moveNext())
{
GoSubFolders(subFlds.item());
}
try
{
FSO.DeleteFolder(sFolder, true);
}
catch(e)
{
sErrors = true;
}
}
function ProcessFilesInFolder(objDIR)
{
var sFolder = GetFolder(objDIR);
var subFiles = new Enumerator(sFolder.Files);
for (; !subFiles.atEnd(); subFiles.moveNext())
{
DelFile(subFiles.item());
}
}