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