ВНИМАНИЕ! Данная обработка в процессе своей работы закрывает все 1С для текущей ИБ без предупреждения!
Принцип работы:
- Закрывает соединения только текущей ИБ на кластере серверов;
- Отключает процессы Windows только текущей ИБ;
- Чистит кэши только нужной ИБ.
В модуле объекта обработки представлено 3 процедуры:
- Функция ДобавитьПрисоединенныеФайлыКСообщению(Объект, МассивСтруктур, СоглашениеЭД) Служит для информирования пользователей о результатах работы рег. задания;
- Процедура РегламентнаяЧисткаКэша(ЛогинКластера="", ПарольКластера="", ИмяПользователяWindows="", ИмяПользователя1С="") Экспорт Основная процедура, которая и представляет из себя регламентную чистку кэша. Ее нужно прописать в общем неглобальном модуле. И настроить регламентное задание на выполнение. Предположительно раз в неделю в ночь.
- Процедура ОчисткаКэшаСебе() Экспорт Данная процедура проверяет при старте системы необходимость очистки кэша для данного пользователя, основываясь на значении константы "ДатаОчисткиКэша". В случаем необходимости вызывает фоновым заданием РегламентнаяЧисткаКэша для конкретного пользователя.
Что необходимо сделать для начала работы?
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.
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) Заполняем параметры и сохраняем:
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|\Device\Harddisk0\Partition1 компьютера 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)\1cv8\8.3.6.2100\bin\\1cv8.exe" DESIGNER /IBName"BASENAME2" /AppAutoCheckVersion /AppAutoCheckMode
ИмяПользователяWindows:nameofuser
Завершен процесс 1CV8 пользователя nameofuser
Командная строка процесса:"C:\Program Files (x86)\1cv8\8.3.6.2100\bin\\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)\1cv8\8.3.6.2100\bin\1cv8.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)\1cv8\8.3.6.2100\bin\1cv8.exe" ENTERPRISE /S"localhost\basename2" /AppAutoCheckVersion /AppAutoCheckMode
Предполагаемое имя bat-файла: C:\Users\nameofuser\AppData\Local\1C\run1cafterclearcache.bat
bat-файл: C:\Users\nameofuser\AppData\Local\1C\run1cafterclearcache.bat записан
Завершен процесс 1CV8 пользователя nameofuser
Командная строка процесса:"C:\Program Files (x86)\1cv8\8.3.6.2100\bin\1cv8.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)\1cv8\8.3.6.2100\bin\1cv8.exe" ENTERPRISE /S"localhost\basename2" /AppAutoCheckVersion /AppAutoCheckMode
Предполагаемое имя bat-файла: C:\Users\nameofuser\AppData\Local\1C\run1cafterclearcache.bat
bat-файл: C:\Users\nameofuser\AppData\Local\1C\run1cafterclearcache.bat записан
Этап 3: Удаление каталогов с кэшем:
Удален каталог с кэшем C:\Users\nameofuser\AppData\Roaming\1C\1cv8\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Local\1C\1cv8\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Roaming\1C\1cv80\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Local\1C\1cv80\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Roaming\1C\1cv81\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Local\1C\1cv81\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Roaming\1C\1cv82\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Local\1C\1cv82\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Roaming\1C\1cv83\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Local\1C\1cv83\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Roaming\1C\1cv84\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Local\1C\1cv84\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Roaming\1C\1cv8t\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Local\1C\1cv8t\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Roaming\1C\1cv8Update\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Удален каталог с кэшем C:\Users\nameofuser\AppData\Local\1C\1cv8Update\2e0230ae-cc42-41a1-b0c1-ecb90f2ca95b
Процедура завершена. Формируется письмо для отправки.