Как достали эти пользователи, которые звонят и говорят, что их система не работает. Заходишь, проверяешь — все работает.
Приходится чистить кэш скриптом или руками. Пользователю не объяснишь, что такое кэш и зачем его надо чистить.
ВНИМАНИЕ! Данная обработка в процессе своей работы закрывает все 1С для текущей ИБ без предупреждения!
Принцип работы:
1) Закрывает соединения только текущей ИБ на кластере серверов;
2) Отключает процессы Windows только текущей ИБ;
3) Чистит кэши только нужной ИБ.
В модуле объекта обработки представлено 3 пропроцедуры:
1) Функция ДобавитьПрисоединенныеФайлыКСообщению(Объект, МассивСтруктур, СоглашениеЭД)
Служит для информирования пользователей о результатах работы рег. задания;
2) Процедура РегламентнаяЧисткаКэша(ЛогинКластера=»», ПарольКластера=»», ИмяПользователяWindows=»», ИмяПользователя1С=»») Экспорт
Основная процедура, которая и представляет из себя регламентную чистку кэша. Ее нужно прописать в общем неглобальном модуле. И настроить регламентное задание на выполнение. Предположительно раз в неделю в ночь.
3) Процедура ОчисткаКэшаСебе() Экспорт
Данная процедура проверяет при старте системы необходимость очистки кэша для данного пользователя, основываясь на значении константы «ДатаОчисткиКэша». В случаем необходимости вызывает фоновым заданием РегламентнаяЧисткаКэша для конкретного пользователя.
Что необходимо сделать для начала работы?
1) Если сервер 64-битный, то нужно сделать так:
http://www.forum.mista.ru/topic.php?id=668883
2) Добавить в ИБ константу «ДатаОчисткиКэша» типа Дата, в которой будет прописываться дату очистки кэша.
3) Прописать в любой неглобальный общий модуль процедуру Процедура РегламентнаяЧисткаКэша(ЛогинКластера=»», ПарольКластера=»», ИмяПользователяWindows=»», ИмяПользователя1С=»») Экспорт из модуля объекта обработки ВнешняяОбработкаОчисткиКэша.epf (в дальнейшем будем исходить из того, что название этого неглобального общего модуля есть «НашОМ»)
3.5) В самом начале процедуры необходимы жестко задать параметры авторищации на кластере:
ЛогинКластера = "admin";
ПарольКластера = "password";
4) Внести необходимые изменения в процедуру Процедура ОчисткиКэшаСебе() Экспорт в самом конце:
МассивПараметров = Новый Массив;
МассивПараметров.Добавить("admin"); //Логин администратора кластера (если нет, оставить пустым)
МассивПараметров.Добавить("password"); //Пароль администратора кластера (если нет администраторов кластера, оставить пустым)
МассивПараметров.Добавить(Пользователь); //Имя пользователя Windows
МассивПараметров.Добавить(Пользователь1С); //Имя пользователя 1С
ФоновыеЗадания.Выполнить("НашОМ.РегламентнаяЧисткаКэша",МассивПараметров
, Новый УникальныйИдентификатор, "Тестовое задание");
Предупреждение("Ваш кэш безнадежно устарел. Необходимо перезапустить 1С! Работа системы будет завершена",5);
Здесь нужно прописать логин и пароль администратора кластера и наименование общего модуля НашОМ. После этого сохраняем обработку ВнешняяОбработкаОчисткиКэша.epf;
Здесь нужно прописать логин и пароль администратора кластера и наименование общего модуля НашОМ. После этого сохраняем обработку ВнешняяОбработкаОчисткиКэша.epf.
5) Создать регламентное задание «АвтоматическаяОчисткаКэша«, имя метода «НашОМ.РегламентнаяЧисткаКэша», определить расписание (например каждое Воскресенье в 2 часа ночи), проставить галки «Предопределенное», «Использование»;
6) Прописать в «Модуль Обычного приложения» и в «Модуль Управляемого приложения» процедуру Процедура ОчисткаКэшаСебе() Экспорт из модуля объекта обработки ВнешняяОбработкаОчисткиКэша.epf. Сделать вызов данной процедуры из процедуры «ПередНачаломРаботыСистемы()»
Следующие пункты служат для отправки уведомлений по электронной почте, если у вас нет своего метода и не обязательны к исполнению, в отличие от предыдущих пунктов.
Изменения в типовую конфигурацию приводятся на примере БухгалтерияПредприятия 2.0.
7) Внести изменения в общий модуль «ЭлектронныеДокументыСлужебныйВызовСервера» (вместо company.ru можно и нужно указать адрес сайта своей компании):
а) В процедуру «ОтправкаПакетовЭД» общего модуля «ЭлектронныеДокументыСлужебныйВызовСервера» вместо 31 строки процедуры вставляем следующий код:
// Код изменен
обработан = ложь;
если ПакетЭД.ЭлектронныеДокументы.Количество()>0 тогда
ОбъектВладелец = ПакетЭД.ЭлектронныеДокументы[0].ОбъектВладелец;
Комментарий = ОбъектВладелец.Комментарий;
Текст = ОбъектВладелец.Текст;
Тема = ?(ПустаяСтрока(Комментарий),Текст,Комментарий);
если Найти(Тема, "company.ru:")>0 тогда
АдресКаталогаОтправки = СформироватьФайлыДляОтправки(ОбъектВладелец);
обработан = Истина;
конецесли;
конецесли;
если НЕ обработан тогда
АдресКаталогаОтправки = СформироватьФайлыДляОтправки(ПакетЭД);
конецесли;
//АдресКаталогаОтправки = СформироватьФайлыДляОтправки(ПакетЭД);
б) Изменения в процедуре «ПередатьПисьмоСВложениями» общего модуля «ЭлектронныеДокументыСлужебныйВызовСервера» вместо 17 строки вставляем код:
// Код изменен
Обработан = Ложь;
если ПакетЭД.ЭлектронныеДокументы.Количество()>0 тогда
ОбъектВладелец = ПакетЭД.ЭлектронныеДокументы[0].ОбъектВладелец;
Комментарий = ОбъектВладелец.Комментарий;
Текст = ОбъектВладелец.Текст;
Тема = ?(ПустаяСтрока(Комментарий),Текст,Комментарий);
если Найти(Тема, "company.ru:")>0 тогда
Обработан = Истина;
конецесли;
конецесли;
если НЕ Обработан тогда
Тема = СформироватьТемуПисьма(Отправитель, Получатель);
конецесли;
Также в структуре ПараметрыОтправки для элемента «Тема» передаем параметр «Тема».
8) Добавляем нового контрагента с наименованием «Ответственные по IT»;
9) В 1С:Предприятие заходим в меню «Сервис—Настройка программы«, переходим на вкладку «Электронные документы» и проставляем галку «Использовать обмен электронными документами (ЭД)»;
10) В 1С:Предприятие заходим в меню «Сервис—Обмен электронными документами-Учетные записи электронной почты». Параметры можно уточнить у админов, возможно придется создавать новый ящик. У нас следующие настройки:
11) В 1С:Предприятие заходим в меню «Сервис—Обмен электронными документами-Профили настроек ЭДО». Создаем новый профиль с примерно такими настройками:
12) В 1С:Предприятие заходим в меню «Сервис—Обмен электронными документами-Настройки ЭДО». Заполняем в поле контрагента «Ответственные по IT» и организацию. Нажимаем кнопку «Создать».
13) Заполням параметры, как на 2 следующих картинках и сохраняем:
14) В 1С:Предприятие заходим в меню «Сервис—Обмен электронными документами-Настройки ЭДО». Переходим на вторую закладку «Все настройки«, заходим в нашу созданую настройку и выставляем состояние принудительно в статус «Действует»
15) В процедуре Процедура РегламентнаяЧисткаКэша(ЛогинКластера=»», ПарольКластера=»», ИмяПользователяWindows=»», ИмяПользователя1С=»») Экспорт (и в обработке и общем модуле НашОМ) в самом конце раскомментируем блок отправки сообщения:
ТекстДок.ДобавитьСтроку("Формируется письмо для отправки.");
Текст = НСтр("ru = 'Закончено регламентное задание.'");
ЗаписьЖурналаРегистрации(НСтр("ru = 'Автоматическая чистка кэша 1С'"),
УровеньЖурналаРегистрации.Информация, , , Текст);
ТекстДляПисьма = "Успешно завершено регламентное задание (Автоматическая чистка кэша 1С). ";
Тема = "company.ru: успешное завершение регламентного задания по автоматической чистке кэша на "+ формат(дата, "ДФ=dd.MM.yyyy");
ИмяФайла = "Автоматическая чистка кэша" + формат(дата, "ДФ=dd.MM.yyyy")+".txt";
ВыбранныйФайл = КаталогВременныхФайлов()+""+ИмяФайла;
ТекстДок.Записать(ВыбранныйФайл);
/////////////////////////////
ЭД = Документы.ПроизвольныйЭД.СоздатьДокумент();
ЭД.Дата = Дата;
ЭД.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Ответственные по IT");
ЭД.Организация = глЗначениеПеременной("ОсновнаяОрганизация");
ЭД.СтатусДокумента = перечисления.СтатусыЭД.НеОтправлен;
ЭД.Комментарий = Тема;
ЭД.Направление = перечисления.НаправленияЭД.Исходящий;
ЭД.Текст = ТекстДляПисьма;
// опрелеление соглашения обмена
СоглашениеЭД = Справочники.СоглашенияОбИспользованииЭД.ПустаяСсылка();
НастройкиЭД = ЭлектронныеДокументыСлужебный.ОпределитьНастройкиОбменаЭДПоИсточнику(ЭД.Ссылка);
Если ЗначениеЗаполнено(НастройкиЭД) Тогда
ЭД.ДополнительныеСвойства.Вставить("ЕстьСоглашение", Истина);
СоглашениеЭД = НастройкиЭД.СоглашениеЭД;
КонецЕсли;
ЭД.Записать(РежимЗаписиДокумента.Запись);
// присоединенные файлы
МассивНаОтправку = новый Массив;
СтруктураФайла = Новый Структура;
МассивСтруктур = Новый Массив;
АдресВХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВыбранныйФайл));
Если НЕ ПустаяСтрока(АдресВХранилище) Тогда
ФайлДанных = Новый Файл(ВыбранныйФайл);
СтруктураФайла.Вставить("ФайлБезРасширения", ФайлДанных.ИмяБезРасширения);
СтруктураФайла.Вставить("ФайлРасширение", ФайлДанных.Расширение);
СтруктураФайла.Вставить("АдресВоВременномХранилище", АдресВХранилище);
МассивСтруктур.Добавить(СтруктураФайла);
МассивНаОтправку = ДобавитьПрисоединенныеФайлыКСообщению(ЭД.ЭтотОбъект, МассивСтруктур, СоглашениеЭД);
КонецЕсли;
УдалитьФайлы(ВыбранныйФайл);
Соответствие = Новый Соответствие;
СтруктураРезультата = ЭлектронныеДокументыСлужебныйВызовСервера.СоздатьИОтправитьДокументыПЭД(МассивНаОтправку, Ложь, Соответствие);
На этом в общем-то все.
Теперь чистка кэша будет выполняться раз в неделю по расписанию и при входе каждого пользователя, если его кэш по какой-то причине не очистился (не было доступа, был выключен компьютер, прочее).
По содержанию отчету можно понять порядок действий, которые выполняет регламентное задание.
На почту приходят вот такие отчеты:
Производится удаление кэша для базы: Srvr="servername";Ref="basename2";
для пользователя ОС:nameofuser
для пользователя 1С:nameofuser
Версия платформы 1С:8.3.6.2100
Этап 1: Удаление соединений информационной базы с кластера серверов:
Подсоединяемся к агенту сервера:servername
Подсоединяемся к кластеру:Локальный кластер 1541 на сервере:servername
Получаем рабочие процессы на кластере:Локальный кластер 1541 на сервере:servername
Получаем ИБ на кластере:Локальный кластер 1541 на сервере:servername
Перебираем ИБ:basename1 на кластере:Локальный кластер 1541 на сервере:servername
Перебираем ИБ:basename2 на кластере:Локальный кластер 1541 на сервере:servername
Нашли нужную информационную базу ИБ:basename2 на кластере:Локальный кластер 1541 на сервере:servername
Получаем сессии ИБ:basename2 на кластере:Локальный кластер 1541 на сервере:servername
Проверяем сессию пользователя:nameofuser, с приложением :BackgroundJob
Проверяем сессию пользователя:nameofuser, с приложением :1CV8
Отключаем сессию пользователя:nameofuser, с приложением :1CV8
Проверяем сессию пользователя:nameofuser, с приложением :Designer
Отключаем сессию пользователя:nameofuser, с приложением :Designer
Закончен перебор всех сессий ИБ:ИБ:basename2 на кластере:Локальный кластер 1541 на сервере:servername
Перебираем ИБ:basename3 на кластере:Локальный кластер 1541 на сервере:servername
Этап 2: Завершение процессов 1CV8:
Подключение к компьютеру localhost
Получаем все операционные системы компьютера localhost
Перебираем операционную систему:Microsoft® Windows Home® 2025 Standard |C:Windows|DeviceHarddisk0Partition1 компьютера servername
Версия ОС:12.0.6001
Получаем пользователей компьютера:servername
Начало сбора 1С баз у пользователей компьютера:servername
Окончание сбора 1С баз у пользователей компьютера:servername
Количество баз 1С:37 у пользователей компьютера:servername
Имя сервера:localhost, ИмяБазы:basename1,Пользователь:nameofuser,НазваниеБазы:Название1,IDБазы:0d433934-8b88-4bcb-82a1-2e887d30e2d1
Имя сервера:localhost, ИмяБазы:basename2,Пользователь:nameofuser,НазваниеБазы:Название2,IDБазы:a4fa16d8-9f8a-46b9-9e8d-87cb872c343e
Имя сервера:localhost, ИмяБазы:baename3,Пользователь:nameofuser,НазваниеБазы:Название3,IDБазы:9324f288-c43e-4068-a4e7-e2e5f6e8de73
Выборка процессов 1С компьютера:servername
Идет проверка процесса 1С компьютера:servername пользователя:name1 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name2 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name3 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name3 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name4 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name5 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name6 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name7 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name8 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name9 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name10 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name9 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name8 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name7 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name6 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name5 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name4 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:name3 домена:servername
Идет проверка процесса 1С компьютера:servername пользователя:nameofuser домена:servername
Отбираем строки базы по параметрам: Имя сервера:localhost, ИмяБазы:basename2, Пользователь:nameofuser
Количество найденных Имя сервера:localhost ИмяБазы:basename2 Пользователь:nameofuser
Добираем строки базы по параметрам: Имя сервера:localhost ИмяБазы:basename2 Пользователь:nameofuser
Завершен процесс 1CV8 пользователя nameofuser
Командная строка процесса:"C:Program Files (x86)1cv88.3.6.2100in\1cv8.exe" DESIGNER /IBName"BASENAME2" /AppAutoCheckVersion /AppAutoCheckMode
ИмяПользователяWindows:nameofuser
Завершен процесс 1CV8 пользователя nameofuser
Командная строка процесса:"C:Program Files (x86)1cv88.3.6.2100in\1cv8.exe" DESIGNER /IBNameBASENAME2" /AppAutoCheckVersion /AppAutoCheckMode
ИмяПользователяWindows:nameofuser
Идет проверка процесса 1С компьютера:servername пользователя:nameofuser домена:servername
Отбираем строки базы по параметрам: Имя сервера:localhost, ИмяБазы:basename2, Пользователь:nameofuser
Количество найденных Имя сервера:localhost ИмяБазы:basename2 Пользователь:nameofuser
Добираем строки базы по параметрам: Имя сервера:localhost ИмяБазы:basename2 Пользователь:nameofuser
Завершен процесс 1CV8 пользователя nameofuser
Командная строка процесса:"C:Program Files (x86)1cv88.3.6.2100in1cv8.exe" ENTERPRISE /IBName"basename2" /N"nameofuser" /UseHwLicenses+ /Lru /VLru /DisableStartupMessages /DEBUG /DisplayPerformance /DisplayAllFunctions /EnableCheckModal /EnableCheckExtensionsAndAddInsSyncCalls /DEBUG /DEBUGGERURL"tcp://[::1]:1562" /O Normal
ИмяПользователяWindows:nameofuser
Создание bat-файла для перезапуска 1CV8 для пользователя nameofuser
Строка в bat-файл для перезапуска 1CV8 для пользователя "C:Program Files (x86)1cv88.3.6.2100in1cv8.exe" ENTERPRISE /S"localhostasename2" /AppAutoCheckVersion /AppAutoCheckMode
Предполагаемое имя bat-файла: C:Users
ameofuserAppDataLocal1C
un1cafterclearcache.bat
bat-файл: C:Users
ameofuserAppDataLocal1C
un1cafterclearcache.bat записан
Завершен процесс 1CV8 пользователя nameofuser
Командная строка процесса:"C:Program Files (x86)1cv88.3.6.2100in1cv8.exe" ENTERPRISE /IBName"basename2" /N"nameofuser" /UseHwLicenses+ /Lru /VLru /DisableStartupMessages /DEBUG /DisplayPerformance /DisplayAllFunctions /EnableCheckModal /EnableCheckExtensionsAndAddInsSyncCalls /DEBUG /DEBUGGERURL"tcp://[::1]:1562" /O Normal
ИмяПользователяWindows:nameofuser
Создание bat-файла для перезапуска 1CV8 для пользователя nameofuser
Строка в bat-файл для перезапуска 1CV8 для пользователя "C:Program Files (x86)1cv88.3.6.2100in1cv8.exe" ENTERPRISE /S"localhostasename2" /AppAutoCheckVersion /AppAutoCheckMode
Предполагаемое имя bat-файла: C:Users
ameofuserAppDataLocal1C
un1cafterclearcache.bat
bat-файл: C:Users
ameofuserAppDataLocal1C
un1cafterclearcache.bat записан
Этап 3: Удаление каталогов с кэшем:
Удален каталог с кэшем C:Users
ameofuserAppDataRoaming1C1cv82e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataLocal1C1cv82e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataRoaming1C1cv802e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataLocal1C1cv802e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataRoaming1C1cv812e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataLocal1C1cv812e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataRoaming1C1cv822e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataLocal1C1cv822e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataRoaming1C1cv832e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataLocal1C1cv832e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataRoaming1C1cv842e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataLocal1C1cv842e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataRoaming1C1cv8t2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataLocal1C1cv8t2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataRoaming1C1cv8Update2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:Users
ameofuserAppDataLocal1C1cv8Update2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Процедура завершена. Формируется письмо для отправки.
простите за невежество, а что такое «логин пароль базы» и «логин пароль кластера»?
а что делать если локальный пользователь?и так ли хорошо это, чистить ежедневно его? Какие минусы могут быть?
(1) В сервере 1С: Предприятия свои пользователи, там нужен пользователь с админ. правами (их может в принципе и не быть, тогда нужно указвать пустой логин и пустой пароль, и пользователь в 1С с админ. правами.
(2) Программа пока хорошо чистит только, если на одном сервере и база и сервер 1С:Предприятия. Для домена пока не тестирована, потому что негде. И по-любому пока нужны права администратора домена, иначе не получится, либо шара c$ должна быть доступна на всех компьютерах, из-под которых запускается 1С.
А что значит локальный пользователь?
Минусы — более долгий первый запуск 1С-базы жертвы у пользователей. Других проблем не знаю. Мы думаем сделать запуск 1 раз в неделю.
У нас есть одна серьезная проблема с кэшем — неправильные расчеты! О которых пользователь тебе не расскажет, пока эту проблему не найдет бухгалтерия или отдел сопровождения сделок. Соответсвенно большой поток негатива на то, что программисты виноваты в том, что программа работает неправильно.
У нас домена нет, все находится на одном компьютере — работают пользователи, SQL-база и сервер 1С-Предприятия.
(3) тогда так и пишите: логин и пароль администратора кластера / логин и пароль администратора базы
(4) Спасибо, подправлю в следующей версии.
Обновлена версия обработки, теперь 1.1. добавлен блок кода для вставки в процедуру «ПриНачалеРаботыСистемы()»
(3) «А что значит локальный пользователь?» это значит, что цепляется не через терминал на котором крутится SQL, а со своей машины, и кэш надо чистить там
Обновил версию обработки, теперь 1.11. Добавил повторный запуск 1с при индивидуальной чистке кэша через bat-файл.
Составил подробную инструкцию по внедрению.
Замечания и предложения — внимательно выслушиваются.
Кто скачивал обработку ранее, просьба прислать в личку вашу почту — вышлю новую версию обработки.
Обновил версию обработки, теперь 1.12.
Исправлены ошибки:
1) ТЕПЕРЬ корректно обрабатываются пользователи, у которых локальный каталог пользователя отличается от имени пользователя. Например пользователь a.ivanova имеет папку пользователя C:Usersa.petrova. РАНЬШЕ Кэш данных пользователей не очищался.
2) ТЕПЕРЬ выполнение программы продолжается, если не найден файл с базами. РАНЬШЕ Выполнение программы завершалось с ошибкой.
3) ТЕПЕРЬ несуществующие каталоги проверяются тихо без вывода в отчет. РАНЬШЕ Все каталоги были представлены, как удаленные.