Как настроить запуск внешней обработки по расписанию в 1С:ЗУП 3.1?

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

При автоматизации задач в 1С:Зарплата и управление персоналом (ЗУП) 3.1 разработчики часто сталкиваются с необходимостью запуска внешней обработки без участия пользователя — например, для ночной выгрузки данных или формирования отчетов. Попытка реализовать это "в лоб" через создание нового регламентного задания в конфигураторе часто приводит к ошибкам компиляции и непониманию принципов работы серверного кода.

В этой статье мы подробно разберем, почему стандартный подход с директивами &НаКлиенте не работает в регламентных заданиях, и рассмотрим наиболее правильный способ решения задачи с использованием Библиотеки стандартных подсистем (БСП).

Почему нельзя просто вызвать внешнюю обработку из регламентного задания?

Проанализируем типичную ситуацию: программист создает общий модуль, пишет в нем процедуру с директивой &НаКлиенте и пытается использовать методы вроде ПоместитьФайл() или ОткрытьФорму(). Система выдает ошибки, так как регламентные задания всегда выполняются на стороне сервера в фоновом сеансе.

Разберем основные причины неудач:

  1. Отсутствие клиентского контекста: В фоновом задании нет "экрана", нет пользователя и нет сеанса клиента. Любые попытки вызвать диалоговые окна, формы или интерактивные методы (Предупреждение(), Вопрос()) приведут к аварийному завершению задания.
  2. Ограничения методов: Метод ПоместитьФайл() является клиентским. На сервере для работы с файлами используются другие механизмы, а внешние обработки подключаются иначе.
  3. Проблема путей: Если вы указываете путь типа D:\MyFolder\File.epf, сервер будет искать этот файл на своем локальном диске, а не на компьютере разработчика.

Решение №1: Использование стандартного механизма дополнительных обработок (БСП)

В современных конфигурациях (ЗУП 3.1, УТ 11, ERP) уже заложен мощный механизм для решения этой задачи без изменения конфигурации. Это подсистема "Дополнительные отчеты и обработки". Рассмотрим, как адаптировать вашу обработку для работы по расписанию.

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


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Наименование = "Автоматическая выгрузка данных";
    ПараметрыРегистрации.БезопасныйРежим = Ложь; // Если нужны права на запись файлов или сеть
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Запустить выгрузку";
    НоваяКоманда.Идентификатор = "ВыгрузкаДанных";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Ложь;
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Во-вторых, реализуем саму логику в процедуре ВыполнитьКоманду(), которая должна находиться в том же модуле объекта. Выясним важный момент: если раньше ваш код был написан в модуле формы (в обработчиках нажатия кнопок), его нужно полностью перенести в модуль объекта.


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    
    Если ИдентификаторКоманды = "ВыгрузкаДанных" Тогда
        ВыполнитьОсновнуюЛогику();
    КонецЕсли;
    
КонецПроцедуры

Процедура ВыполнитьОсновнуюЛогику()
    // Здесь пишем код, который раньше был в кнопках формы.
    // Помним: только серверные методы!
    ЗаписьЖурналаРегистрации("РегламентнаяВыгрузка", УровеньЖурналаРегистрации.Информационный, , , "Задание начато.");
    // Ваш код...
КонецПроцедуры

После подготовки файла его нужно зарегистрировать в программе: Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки. Там появится возможность настроить расписание прямо в интерфейсе, не заходя в конфигуратор.

Решение №2: Программное подключение обработки (для тех, кто хочет знать всё)

Если по каким-то причинам использование БСП невозможно (например, вы создаете уникальный механизм), разберем, как программно подключить .epf файл на стороне сервера. Проанализируем правильную последовательность действий в общем модуле.

Важно помнить: общий модуль должен иметь установленный флаг "Сервер" и не иметь флага "Клиент", если речь идет о чистом регламентном задании. Рассмотрим пример кода:


Процедура ВыполнитьЗаданиеПоРасписанию() Экспорт
    
    ПутьКФайлу = "C:\Exchange\ServiceTask.epf"; // Путь на СЕРВЕРЕ
    
    // Подключаем внешнюю обработку
    ИмяОбработки = ВнешниеОбработки.Подключить(ПутьКФайлу, Ложь);
    
    // Создаем объект обработки
    ОбъектОбработки = ВнешниеОбработки.Создать(ИмяОбработки);
    
    // Вызываем экспортный метод из МОДУЛЯ ОБЪЕКТА обработки
    ОбъектОбработки.ЗапуститьПроцесс();
    
КонецПроцедуры

Обратите внимание на метод ВнешниеОбработки.Подключить(). Вторым параметром передается флаг безопасного режима. Если ваша обработка должна обращаться к файловой системе сервера или COM-объектам, этот флаг должен быть Ложь, а в профилях безопасности сервера 1С должны быть даны соответствующие разрешения.

Типичные ошибки и как их избежать

Разберем ситуацию, когда обработка запускается, но ничего не происходит или возникает ошибка доступа. Посмотрим на список проверок:

Отладка фонового задания

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

  1. Запустите сервер 1С в режиме отладки (параметр -debug).
  2. В Конфигураторе перейдите в меню Отладка — Подключение...
  3. Нажмите кнопку Автоматическое подключение и установите флажок Фоновые задания.
  4. Установите точку останова в модуле объекта вашей обработки.

Теперь, когда регламентное задание запустится по расписанию (или вы запустите его принудительно через консоль заданий), выполнение остановится на вашей точке останова.

Таким образом, мы выяснили, что наиболее эффективным и безопасным способом запуска внешних обработок в ЗУП 3.1 является интеграция через механизмы БСП. Это позволяет избежать правок конфигурации, упрощает обновление системы и предоставляет пользователю удобный интерфейс управления расписанием.

← На главную