Как перевести функционал обработки из управляемой формы в регламентное задание

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

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

Проблема разграничения контекста: Форма против Объекта

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

Автор темы столкнулся с проблемой: при выгрузке конфигурации в файлы XML реквизиты формы не переносятся в объект автоматически. Это происходит потому, что в структуре XML 1С описание формы (файл Form.xml) и описание самого объекта (файл ManagerModule.bsl или Object.xml) находятся в разных пространствах имен. Реквизиты формы — это временные данные сеанса визуализации, а реквизиты объекта — это типизированная структура данных в метаданных.

Шаг 1. Автоматизация переноса большого количества реквизитов

Если у вас 30–40 реквизитов, ручное создание каждого из них в конфигураторе действительно утомляет. Рассмотрим способы ускорения этого процесса:

  1. Использование Enterprise Development Tools (EDT): Если вы используете современную среду разработки EDT, вы можете открыть XML-описание формы и XML-описание обработки одновременно. Структура описания свойств в EDT более гибкая, и массовое копирование узлов метаданных там проходит успешнее, чем в классическом Конфигураторе.
  2. Правка XML-файлов конфигурации: Выгрузите обработку в файлы. Откройте Form.xml, найдите секцию <Attributes>. Вам нужно преобразовать эти записи в формат, понятный для основного файла обработки (обычно это Processing.mdo или аналогичный файл в выгрузке). Хотя теги различаются, типы данных и имена совпадают. С помощью текстового редактора с поддержкой регулярных выражений (например, VS Code) можно быстро переформатировать список реквизитов формы в список реквизитов объекта.
  3. Программное создание через «Инструменты разработчика»: Существуют внешние обработки (например, от автора Tormozit), которые позволяют через буфер обмена метаданными копировать свойства между разными объектами. Это самый быстрый способ «в один клик» перекинуть состав реквизитов.

Шаг 2. Перенос кода и адаптация логики

Проанализируем ситуацию, когда код «зашит» в модуле формы. Нам нужно переместить его в Модуль объекта. Рассмотрим пример трансформации кода.

Было в модуле формы:


&НаСервере
Процедура ВыполнитьОбменНаСервере()
    // Обращаемся напрямую к реквизитам формы
    ПутьКФайлу = Объект.КаталогВыгрузки + "\data.xml";
    Для Каждого Строка Из Объект.ТаблицаДанных Цикл
        // Какая-то логика
    КонецЦикла;
КонецПроцедуры

Должно стать в модуле объекта:


Процедура ВыполнитьОбмен() Экспорт
    // Теперь ПутьКФайлу и ТаблицаДанных - это реквизиты самого объекта (обработки)
    Файл = Новый Файл(КаталогВыгрузки + "\data.xml");
    Если Не Файл.Существует() Тогда
        ЗаписьЖурналаРегистрации("ОбменДанными", УровеньЖурналаРегистрации.Ошибка, , , "Файл не найден");
        Возврат;
    КонецЕсли;
    
    Для Каждого Строка Из ТаблицаДанных Цикл
        // Логика обмена
    КонецЦикла;
КонецПроцедуры

Важные изменения, которые мы должны внести:

Шаг 3. Организация хранения настроек

Поскольку регламентное задание работает автономно, оно должно откуда-то брать значения тех самых 40 реквизитов. Рассмотрим два варианта решения этой задачи:

Вариант А. Использование регистра сведений (рекомендуемый)

Создадим регистр сведений НастройкиНашихОбменов. В нем будем хранить настройки в разрезе узлов обмена или просто одной строкой. Перед запуском логики в регламентном задании обработка будет считывать данные из регистра и заполнять свои реквизиты.


// В модуле регламентного задания
Процедура ЗапуститьОбменПоРасписанию() Экспорт
    ОбработкаОбъект = Обработки.НашОбменДанными.Создать();
    
    // Заполняем реквизиты из настроек в базе
    Настройки = РегистрыСведений.НастройкиНашихОбменов.ПолучитьПоследние();
    ЗаполнитьЗначенияСвойств(ОбработкаОбъект, Настройки);
    
    ОбработкаОбъект.ВыполнитьОбмен();
КонецПроцедуры

Вариант Б. Передача через структуру (подход из сообщения №13)

Если вы не хотите создавать 40 реквизитов в объекте, вы можете оставить логику в модуле объекта, но сделать процедуру, принимающую структуру параметров. Разберем этот пример подробнее. Проанализируем, как это упрощает жизнь: вам не нужно менять метаданные, достаточно передать «мешок» с данными.

В модуле объекта пишем универсальный метод:


Процедура ВыполнитьОбменСПараметрами(СтруктураНастроек) Экспорт
    // Вместо Реквизит1 используем СтруктураНастроек.Реквизит1
    ИмяСервера = СтруктураНастроек.Сервер;
    Логин = СтруктураНастроек.Пользователь;
    // ... и так далее
КонецПроцедуры

В этом случае в регламентном задании вы просто формируете структуру (например, восстанавливая её из сохраненных настроек пользователя через ЗначениеИзСтрокиВнутр или JSON) и передаете в обработку.

Шаг 4. Настройка регламентного задания

После того как код подготовлен, нам нужно создать объект РегламентноеЗадание в дереве метаданных:

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

Важный нюанс: если ваша обработка использует COM-объекты или внешние компоненты, убедитесь, что они установлены на сервере 1С:Предприятие, а не только на вашем рабочем компьютере. Также проверьте права доступа пользователя, под которым работает служба 1С, к файловым путям, если обмен идет через файловую систему.

Таким образом, переход к регламентному заданию — это не просто копирование кода, а архитектурное отделение данных (настроек) от алгоритма их обработки. Использование инструментов автоматизации XML или программная передача параметров через структуры позволяют избежать «тупой» работы и сосредоточиться на качестве самого алгоритма обмена.

← На главную