Как передать параметры в регламентное задание при запуске внешней обработки БСП?

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

При интеграции внешних обработок в конфигурации на базе «Библиотеки стандартных подсистем» (БСП), таких как «1С:Документооборот», «1С:ERP» или «1С:Управление торговлей», часто возникает задача их запуска по расписанию с определенными входными данными (например, с указанием учетной записи электронной почты, организации или каталога выгрузки).

Штатный механизм регламентных заданий БСП накладывает жесткое ограничение: общее регламентное задание ЗапускДополнительныхОбработок передает в процедуру выполнения строго фиксированный массив платформенных параметров — ссылку на элемент справочника дополнительных обработок и строковый идентификатор команды. Передать произвольный параметр напрямую через интерфейс настройки расписания невозможно. Разберем штатные и надежные способы решения этой задачи без изменения конфигурации.

Способ 1. Использование формы настройки и штатного реквизита «ХранилищеНастроек»

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

В справочнике ДополнительныеОтчетыИОбработки разработчиками БСП уже предусмотрен типовой реквизит ХранилищеНастроек с типом ХранилищеЗначения. Разберем по шагам реализацию этого механизма:

  1. Регистрация команд обработки. В функции СведенияОВнешнейОбработке() модуля объекта регистрируем две команды: одну с типом ОткрытиеФормы (для интерактивной настройки параметров пользователем), вторую — с типом ВызовСерверногоМетода (для выполнения по расписанию).
  2. Сохранение параметров из формы. При открытии формы настройки БСП автоматически передает параметр Параметры.ДополнительнаяОбработкаСсылка. В форме настраиваются нужные реквизиты, а по кнопке сохранения параметры упаковываются в структуру и записываются в справочник:
    
    &НаСервере
    Процедура СохранитьНастройкиНаСервере()
        ПараметрыОбработки = Новый Структура;
        ПараметрыОбработки.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись);
    
        ОбъектСправочника = Параметры.ДополнительнаяОбработкаСсылка.ПолучитьОбъект();
        ОбъектСправочника.ХранилищеНастроек = Новый ХранилищеЗначения(ПараметрыОбработки);
        ОбъектСправочника.Записать();
    КонецПроцедуры
    
    В актуальных версиях БСП для работы с настройками можно также использовать программный интерфейс общего модуля: ДополнительныеОтчетыИОбработки.СохранитьНастройки(...).
  3. Чтение настроек в регламентном задании. При выполнении фонового вызова в процедуре ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) ссылка на элемент справочника доступна через свойство ПараметрыВыполнения.ДополнительнаяОбработкаСсылка. Извлекаем ранее сохраненные данные:
    
    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
        Если ИдентификаторКоманды = "ОбработатьПочту" Тогда
            СсылкаНаОбработку = ПараметрыВыполнения.ДополнительнаяОбработкаСсылка;
            Хранилище = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОбработку, "ХранилищеНастроек");
            
            Если Хранилище <> Неопределено Тогда
                Настройки = Хранилище.Получить();
                Если ТипЗнч(Настройки) = Тип("Структура") Тогда
                    УчетнаяЗапись = Настройки.УчетнаяЗапись;
                    // Логика обработки писем
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецПроцедуры
    

Способ 2. Хранение настроек через системное «ХранилищеОбщихНастроек»

Нередко разработчики используют платформенный механизм ХранилищеОбщихНастроек, однако здесь часто возникает ошибка: интерактивно сохраненные администратором настройки не видны при регламентном выполнении.

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

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


// Сохранение настроек для общего доступа
УстановитьПривилегированныйРежим(Истина);
ХранилищеОбщихНастроек.Сохранить("ВнешняяОбработка_ЗагрузкаПочты", "Параметры", СтруктураНастроек, , "");

// Чтение настроек в фоновом задании
УстановитьПривилегированныйРежим(Истина);
Настройки = ХранилищеОбщихНастроек.Загрузить("ВнешняяОбработка_ЗагрузкаПочты", "Параметры", , "");

Способ 3. Использование подсистемы «Дополнительные сведения» (без программирования форм)

Если нет желания разрабатывать форму настройки внутри внешней обработки, можно задействовать типовую подсистему БСП «Свойства». Справочник ДополнительныеОтчетыИОбработки включен в эту подсистему во всех типовых решениях.

  1. В режиме «1С:Предприятие» переходим в раздел администрирования дополнительных реквизитов и сведений.
  2. Для справочника дополнительных обработок создаем новое дополнительное сведение с типом СправочникСсылка.УчетныеЗаписиЭлектроннойПочты.
  3. В карточке подключенной внешней обработки заполняем созданное сведение нужным ящиком.
  4. В процедуре ВыполнитьКоманду считываем значение через стандартный вызов:
    
    ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(
        ПараметрыВыполнения.ДополнительнаяОбработкаСсылка, 
        ПланВидовХарактеристикСсылка
    );
    

Способ 4. Разделение по идентификаторам команд

Если список параметров заранее известен и невелик (например, два или три конкретных почтовых ящика), можно зарегистрировать в функции СведенияОВнешнейОбработке() отдельные команды на каждый вариант (ЗагрузкаЯщик1, ЗагрузкаЯщик2).

Для каждой серверной команды БСП сформирует отдельное регламентное задание с собственным расписанием, а выбор рабочей учетной записи будет производиться ветвлением по параметру ИдентификаторКоманды прямо в процедуре ВыполнитьКоманду.

← На главную