Как правильно настроить запуск внешней обработки по расписанию в 1С:Управление торговлей 11

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

При работе с современными конфигурациями на базе Библиотеки стандартных подсистем (БСП), такими как Управление торговлей 11.4, ERP или Комплексная автоматизация, часто возникает задача автоматизации процессов. Одним из наиболее эффективных способов является использование механизма дополнительных отчетов и обработок, которые можно запускать по расписанию без изменения основной конфигурации. Рассмотрим подробно, как правильно подготовить такую обработку, где разместить код и как отладить выполнение, если «ничего не происходит».

Где должен располагаться программный код?

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

Следовательно, процедура ВыполнитьКоманду должна располагаться исключительно в Модуле объекта внешней обработки и обязательно иметь признак Экспорт. Если вы напишете код в модуле формы, система просто не «увидит» его при фоновом вызове, и задание завершится без выполнения полезных действий.

Подготовка функции СведенияОВнешнейОбработке

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


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

Обратите внимание на тип использования команды: ВызовСерверногоМетода. Только этот тип позволяет системе БСП создать регламентное задание для конкретной команды вашей обработки. Если указать ОткрытиеФормы, настроить расписание в интерфейсе будет невозможно.

Реализация процедуры ВыполнитьКоманду

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


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

Здесь ИдентификаторКоманды — это строковое значение, которое мы указали при регистрации. Параметр ПараметрыВыполненияКоманды является структурой, в которую система передает контекст выполнения (например, ссылку на элемент справочника ДополнительныеОтчетыИОбработки).

Особенности отладки: почему Сообщить() не работает

Рассмотрим ситуацию: вы добавили в код метод Сообщить("Обработка запущена"), настроили расписание, журнал регистрации показывает успешное завершение, но вы не видите никакого сообщения. Это происходит потому, что регламентное задание выполняется в фоновом сеансе на сервере 1С. У фонового сеанса нет активного окна пользователя, поэтому все методы Сообщить уходят в пустоту.

Проанализируем способы проверки работы кода в фоновом режиме:

  1. Журнал регистрации: Это самый надежный способ. Используйте метод ЗаписьЖурналаРегистрации, чтобы фиксировать этапы выполнения.
  2. Запись в файл: Можно записывать лог выполнения в текстовый файл на диске сервера.
  3. Отладка фоновых заданий: В конфигураторе необходимо включить автоматическое подключение к фоновым заданиям через меню "Отладка" -> "Настройка".

Пример использования журнала регистрации для проверки:


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

Интерактивная настройка в 1С

После того как файл обработки готов, проделаем следующие шаги в интерфейсе программы:

  1. Перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки.
  2. Откроем список Дополнительные отчеты и обработки и нажмем "Добавить из файла".
  3. После загрузки в списке команд появится ваша команда. В колонке "Расписание" будет стоять ссылка "Не установлено".
  4. Нажмем на эту ссылку и настроим время запуска (например, каждый день в 01:00).
  5. Важно: В карточке настройки укажите пользователя, под которым будет запускаться задание. У этого пользователя должны быть достаточные права для выполнения действий, предусмотренных кодом обработки.

Безопасный режим и профили безопасности

При регистрации обработки мы указывали БезопасныйРежим = Ложь. Это необходимо, если ваша обработка должна обращаться к файловой системе, внешним сайтам через HTTPСоединение или использовать COM-объекты. Однако помните, что в облачных сервисах или базах с жесткой политикой безопасности администратор может принудительно включить безопасный режим в карточке обработки. В этом случае код, требующий привилегий, вызовет ошибку доступа. Рекомендуется проверять этот флаг в интерфейсе, если обработка «молча» завершается без записи в журнал.

Соблюдение этих правил позволит вам создавать надежные инструменты автоматизации, которые будут стабильно работать в фоновом режиме, не отвлекая пользователей от повседневных задач.

← На главную