На крупных базах процесс синхронизации узлов РИБ занимает достаточно
длительное время. База в этот момент подвисает и заставляет себя ждать.
Поэтому делаем фоновое выполнение обмена с использованием планировщика
заданий Windows.
Реализуется посредством параметра запуска \C
Нужен cmd-файл следующего содержания:
К слову сказать программный обмен данными для узла осуществляется в общем модуле ОбменДаннымиСервер в функции ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы().
Далее в планировщике заданий создаем новую задачу. Запуск осуществляется с правами системы, тем самым запускается фоновый процесс без интерфейса!
На вкладке Триггеры задайте расписание, а на вкладке Действия укажите запуск cmd-файла
Теперь в фоне по расписанию будет открываться 1С Предприятие, запускаться внешняя обработка, в которой выполняться обмен данными одного узла РИБ с главным.
Реализуется посредством параметра запуска \C
Нужен cmd-файл следующего содержания:
@ECHO OFFДалее в МодулеУправлямогоПриложения, в процедуре ПриНачалеРаботыСистемы() нужно проверять параметр запуска и в зависимости от него выполнять функцию обмена.
chcp 866
"C:\Program Files (x86)\1cv8\8.3.6.2299\bin\1cv8.exe" enterprise /F e:\1cWorks\ДомСумок /N Администратор /P Boss21 /C"АвтоОбменУзлаРИБ"
Если СокрЛП(ПараметрЗапуска)="" Тогда //параметра нет ничего не делаемСледует иметь в виду, что этот модуль выполняется на клиенте. Поэтому что бы запустить серверную процедуру, ее следует разместить в отельном общем модуле. Поставить галочку Сервер и Вызов Сервера, после чего можно вызывать эту процедуру обычным способом ОбщийМодуль1.Процедура()
ИначеЕсли ПараметрЗапуска = "АвтоОбменУзлаРИБ" тогда
Попытка
ОбщийМодуль1.ВыболнитьОбменУзлаРИБ();
Исключение
Стр="Не удалось выполнить автообмен РИБ ";
Сообщить(Стр+ОписаниеОшибки());
КонецПопытки;
ЗавершитьРаботуСистемы();
КонецЕсли;
&НаСервере
Процедура ВыболнитьОбменУзлаРИБ()
//нужно обновить РИБ по подразделению, который не главный
// Считаем, что узлов два: главный и не главный
Выборка = ПланыОбмена.СОтборами.Выбрать();
Пока выборка.Следующий() цикл
Если не выборка.ЭтотУзел тогда
ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(,выборка.Ссылка,Истина,Истина);
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
К слову сказать программный обмен данными для узла осуществляется в общем модуле ОбменДаннымиСервер в функции ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы().
Далее в планировщике заданий создаем новую задачу. Запуск осуществляется с правами системы, тем самым запускается фоновый процесс без интерфейса!
На вкладке Триггеры задайте расписание, а на вкладке Действия укажите запуск cmd-файла
Теперь в фоне по расписанию будет открываться 1С Предприятие, запускаться внешняя обработка, в которой выполняться обмен данными одного узла РИБ с главным.
Если не нужно срывать процесс, то запускайте cmd-файл с правами обычного пользователя.
В таком случае можно обойтись параметром /Execute и указать файл внешней обработки.
@ECHO OFFВнешняя обработка, у которой в момент создания будет осуществляться процедура обмена.
chcp 866
"C:\Program Files (x86)\1cv8\8.3.6.2299\bin\1cv8.exe" enterprise /F e:\ПутьКБазе /N Администратор /P Пароль /Execute e:\Путь\ФайлОбработки.epf
&НаСервере
Процедура ПриОткрытии(Отказ)
ВыболнитьОбменУзлаРИБ();
КонецПроцедуры
Комментариев нет:
Отправить комментарий