При автоматизации рутинных операций, таких как загрузка данных из CRM, обмен с сайтом или выгрузка отчетов, часто возникает необходимость запускать внешние обработки по заданному графику. В клиент-серверном варианте базы (SQL) эту роль берут на себя фоновые и регламентные задания, управляемые сервером 1С:Предприятия. Однако в файловом режиме серверный процесс отсутствует, поэтому платформа не может инициировать фоновые потоки без участия внешнего триггера или постоянно активного сеанса пользователя.
Разберем основные практические варианты организации периодического выполнения внешней обработки для файловой базы данных.
Рассмотрим наиболее популярный и надежный способ — запуск отдельного сеанса 1С в пакетном режиме с помощью Планировщика заданий Windows (Task Scheduler). Обработка запускается через ключ /Execute, выполняет необходимый алгоритм и автоматически закрывает сеанс.
Разберем по шагам реализацию этого сценария:
ПриОткрытии добавим проверку переданного параметра запуска и вызов основного алгоритма с последующим выходом из программы:
Процедура ПриОткрытии()
Если Найти(ПараметрЗапуска, "-exchange") > 0 Тогда
Попытка
ВыполнитьОбменПоПараметрам(ПараметрЗапуска);
Исключение
ЗаписьЖурналаРегистрации("АвтоматическийОбмен",
УровеньЖурналаРегистрации.Ошибка,,,
ОписаниеОшибки());
КонецПопытки;
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
Обратите внимание: основной код обязательно оборачиваем в конструкцию Попытка ... Исключение, чтобы любая непредвиденная ошибка фиксировалась в журнале регистрации и не вызывала зависания модального окна ошибки.
params.txt):
/F "D:\Bases\Trade" /N "РоботОбмена" /P "Pass123" /DisableStartupMessages /C "-exchange" /Execute "C:\Reglament\LoadCRM.epf" /UC "КодРазрешения" /Out "C:\Reglament\log.txt" -NoTruncate
Разберем назначение используемых системных ключей платформы:
/F — абсолютный путь к каталогу файловой базы данных./N и /P — логин и пароль служебного пользователя с полными правами на выполнение операций./DisableStartupMessages — подавление стартовых диалогов (например, сообщений о системных обновлениях)./C — передача пользовательской строки в системную переменную ПараметрЗапуска./Execute — путь к запускаемой внешней обработке .epf./UC — код разрешения для подключения к базе при установленной блокировке регламентных сеансов (актуально во время создания резервных копий)./Out и -NoTruncate — ведение системного лога работы платформы без перезаписи истории.start_job.bat, который вызывает исполняемый файл платформы:
@echo off
"C:\Program Files (x86)\1cv8\common\1cestart.exe" ENTERPRISE /@"C:\Reglament\params.txt"
.bat файла по расписанию (например, каждые 15 минут).Важные параметры задачи:
Проанализируем альтернативный подход, который исключает создание графического окна (GUI) клиента 1С. Выполнение логики через COM-объект позволяет экономить оперативную память сервера и гарантирует защиту от нештатного открытия интерактивных форм.
Для этого в модуле объекта внешней обработки создаем экспортную процедуру, которая не обращается к элементам интерфейса:
// В модуле объекта внешней обработки LoadCRM.epf
Процедура ВыполнитьЗагрузку() Экспорт
// Алгоритм загрузки данных из CRM
КонецПроцедуры
Далее создаем исполняемый VBS-скрипт (например, run_com.vbs):
Dim v8, connection, extProcessor
Set v8 = CreateObject("V83.COMConnector")
Set connection = v8.Connect("File=""D:\Bases\Trade"";Usr=""РоботОбмена"";Pwd=""Pass123"";")
Set extProcessor = connection.ВнешниеОбработки.Создать("C:\Reglament\LoadCRM.epf")
extProcessor.ВыполнитьЗагрузку()
Set extProcessor = Nothing
Set connection = Nothing
Set v8 = Nothing
Данный скрипт также помещается в Планировщик заданий Windows. Обратите внимание: при работе на 64-разрядной операционной системе для 32-битного COM-коннектора запуск скрипта необходимо выполнять через интерпретатор C:\Windows\SysWOW64\cscript.exe.
Если требуется запускать внешнюю обработку внутри уже работающей базы данных через штатный механизм регламентных заданий конфигурации, поступим следующим образом:
РоботФайловый.
ПодключитьОбработчикОжидания("ВыполнитьРегламентныеПроцедуры", 60);
Сравним предложенные решения: запуск через командную строку (Способ 1) и COM-соединение (Способ 2) являются наиболее автономными, так как сеанс создается строго под задачу и закрывается сразу после выполнения, не расходуя ресурсы памяти в остальное время.