Как настроить запуск внешней обработки по расписанию в файловой базе 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При автоматизации рутинных операций, таких как загрузка данных из CRM, обмен с сайтом или выгрузка отчетов, часто возникает необходимость запускать внешние обработки по заданному графику. В клиент-серверном варианте базы (SQL) эту роль берут на себя фоновые и регламентные задания, управляемые сервером 1С:Предприятия. Однако в файловом режиме серверный процесс отсутствует, поэтому платформа не может инициировать фоновые потоки без участия внешнего триггера или постоянно активного сеанса пользователя.

Разберем основные практические варианты организации периодического выполнения внешней обработки для файловой базы данных.

Способ 1. Запуск через командную строку платформы и Планировщик задач Windows

Рассмотрим наиболее популярный и надежный способ — запуск отдельного сеанса 1С в пакетном режиме с помощью Планировщика заданий Windows (Task Scheduler). Обработка запускается через ключ /Execute, выполняет необходимый алгоритм и автоматически закрывает сеанс.

Разберем по шагам реализацию этого сценария:

  1. Подготовка внешней обработки. Откроем обработку в конфигураторе и перейдем в модуль формы. В процедуре-обработчике события ПриОткрытии добавим проверку переданного параметра запуска и вызов основного алгоритма с последующим выходом из программы:
    
    Процедура ПриОткрытии()
        Если Найти(ПараметрЗапуска, "-exchange") > 0 Тогда
            Попытка
                ВыполнитьОбменПоПараметрам(ПараметрЗапуска);
            Исключение
                ЗаписьЖурналаРегистрации("АвтоматическийОбмен", 
                    УровеньЖурналаРегистрации.Ошибка,,, 
                    ОписаниеОшибки());
            КонецПопытки;
            
            ЗавершитьРаботуСистемы(Ложь);
        КонецЕсли;
    КонецПроцедуры
    

    Обратите внимание: основной код обязательно оборачиваем в конструкцию Попытка ... Исключение, чтобы любая непредвиденная ошибка фиксировалась в журнале регистрации и не вызывала зависания модального окна ошибки.

  2. Создание файла параметров запуска. Для удобства администрирования вынесем ключи командной строки в отдельный текстовый файл (например, params.txt):
    
    /F "D:\Bases\Trade" /N "РоботОбмена" /P "Pass123" /DisableStartupMessages /C "-exchange" /Execute "C:\Reglament\LoadCRM.epf" /UC "КодРазрешения" /Out "C:\Reglament\log.txt" -NoTruncate
    

    Разберем назначение используемых системных ключей платформы:

    1. /F — абсолютный путь к каталогу файловой базы данных.
    2. /N и /P — логин и пароль служебного пользователя с полными правами на выполнение операций.
    3. /DisableStartupMessages — подавление стартовых диалогов (например, сообщений о системных обновлениях).
    4. /C — передача пользовательской строки в системную переменную ПараметрЗапуска.
    5. /Execute — путь к запускаемой внешней обработке .epf.
    6. /UC — код разрешения для подключения к базе при установленной блокировке регламентных сеансов (актуально во время создания резервных копий).
    7. /Out и -NoTruncate — ведение системного лога работы платформы без перезаписи истории.
  3. Создание пакетного командного файла (.bat). Создадим файл start_job.bat, который вызывает исполняемый файл платформы:
    
    @echo off
    "C:\Program Files (x86)\1cv8\common\1cestart.exe" ENTERPRISE /@"C:\Reglament\params.txt"
    
  4. Настройка Планировщика задач (Task Scheduler). Создадим простую задачу в Windows, указав запуск нашего .bat файла по расписанию (например, каждые 15 минут).

    Важные параметры задачи:

    1. В свойствах задачи укажем опцию «Выполнять для всех пользователей» и сохраним учетные данные системной учетной записи.
    2. В параметрах выполнения активируем флаг «Останавливать задачу, выполняемую дольше...» (например, 30 минут) для защиты от зависания процесса.
    3. В правилах повторного запуска выберем «Не запускать новый экземпляр» (Do not start a new instance), чтобы предотвратить одновременное исполнение нескольких одинаковых заданий.

Способ 2. Запуск через скрипт COM-соединения (COMConnector)

Проанализируем альтернативный подход, который исключает создание графического окна (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.

Способ 3. Выделенный сеанс пользователя с обработчиком ожидания

Если требуется запускать внешнюю обработку внутри уже работающей базы данных через штатный механизм регламентных заданий конфигурации, поступим следующим образом:

  1. Создадим в базе специального служебного пользователя, например, РоботФайловый.
  2. Зарегистрируем внешнюю обработку в справочнике внешних обработок либо поместим код в общий модуль конфигурации.
  3. В модуле управляемого приложения или в обработчике начала работы системы подключим регулярный опрос менеджера регламентных заданий: ПодключитьОбработчикОжидания("ВыполнитьРегламентныеПроцедуры", 60);
  4. Сеанс служебного пользователя должен быть запущен на рабочем сервере непрерывно.

Сравним предложенные решения: запуск через командную строку (Способ 1) и COM-соединение (Способ 2) являются наиболее автономными, так как сеанс создается строго под задачу и закрывается сразу после выполнения, не расходуя ресурсы памяти в остальное время.

← На главную