Как программно создать и заполнить документ в типовых конфигурациях 1С на управляемых формах

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

При переходе с обычных форм на управляемое приложение разработчики часто сталкиваются с изменением архитектуры типовых конфигураций. В обычных формах логика заполнения и пересчета данных часто находилась непосредственно в модуле объекта документа или в модуле формы. В управляемых формах работа интерактивного интерфейса строится вокруг типов ДанныеФормыСтруктура и ДанныеФормыКоллекция, а процедуры формы работают в контексте &НаКлиенте и не принимают объект ДокументОбъект напрямую.

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

Архитектурные особенности управляемого приложения

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

  1. Модули менеджера объектов: тяжелые расчеты, заполнение табличных частей и служебные алгоритмы размещаются в модуле менеджера соответствующего документа (например, Документы.НачислениеЗарплаты.МодульМенеджера).
  2. Специализированные общие модули: глобальная расчетная логика и алгоритмы заполнения выносятся в серверные общие модули.
  3. Тонкий модуль формы: код в модуле формы выполняет только роль оболочки для сбора параметров с формы, вызова серверных процедур и обновления клиентских данных.

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

Разберем по шагам практические методы работы с документами на сервере.

1. Использование метода Заполнить() и события ОбработкаЗаполнения

Штатный механизм платформы 1С требует инициализации документа через метод Заполнить(). В качестве параметра передается структура с необходимыми данными, которая затем обрабатывается в событии ОбработкаЗаполнения модуля объекта.

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


ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Организация", СсылкаНаОрганизацию);
ПараметрыЗаполнения.Вставить("Подразделение", СсылкаНаПодразделение);
ПараметрыЗаполнения.Вставить("ПериодРегистрации", НачалоМесяца(ТекущаяДата()));

НовыйДокумент = Документы.Премирование.СоздатьДокумент();
НовыйДокумент.Заполнить(ПараметрыЗаполнения);
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);

2. Вызов экспортных процедур модуля менеджера и общих модулей

Если стандартного заполнения недостаточно и требуется пересчет табличных частей (например, в сложных конфигурациях вроде ЗУП или ERP), необходимо обращаться к экспортным функциям модуля менеджера. Процедуры в модуле менеджера принимают либо сам ДокументОбъект, либо структуру с его параметрами.

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


НовыйДокумент = Документы.НачислениеЗарплаты.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = СсылкаОрганизация;

// Вызов экспортного метода модуля менеджера для расчета и заполнения
Документы.НачислениеЗарплаты.ЗаполнитьДокумент(НовыйДокумент);

НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);

3. Преобразование данных формы в объект на сервере

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

  1. ДанныеФормыВЗначение() — преобразует ДанныеФормыСтруктура в экземпляр ДокументОбъект для выполнения серверных операций и расчетов.
  2. ЗначениеВДанныеФормы() — переносит измененный объект обратно в структурированные данные формы для отображения пользователю.

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


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

4. Использование механизмов БСП (Библиотеки Стандартных Подсистем)

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


ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Основание", СсылкаНаОснование);

ДокументОбъект = Документы.ЗаказПокупателя.СоздатьДокумент();
ЗаполнениеОбъектов.ЗаполнитьДокумент(ДокументОбъект, ПараметрыЗаполнения);
ДокументОбъект.Записать();

Резюме

При программной работе с документами в управляемых формах нет необходимости вызывать код формы или программно открывать её экранные экземпляры. Вся расчетная и заполнительная логика находится в модулях менеджеров и общих модулях, которые принимают `ДокументОбъект` или передаваемые структуры данных.

← На главную