Поставлено задание в некоторых документах добавить возможность вводить на основании другие типы документов.
Не хотелось залезать в недра добавления документов на основании, и решил обработку основания реализовать в обработке.
Обработку можно запускать как внешнюю, так и встроить в конфигурацию.
Для подключения обработки в конфигурацию я сделал:
- Добавил в конфигурацию обработку ВвестиНаОсновании.epf
- Вызов обработки повесил на Кнопку, которую я поместил в списке нужного мне документа в Элемент панели – Действие – На основании
- А в обработчике нажатия кнопки уже вызвал обработку
Процедура ДействияФормыВводНаОсновании(Кнопка)
Если ЭлементыФормы.Список.ТекущаяСтрока <> Неопределено Тогда
ВвестиНаОсновании = Обработки.ВвестиНаОсновании.Создать();
Форма = ВвестиНаОсновании.ПолучитьФорму("Форма");
ВвестиНаОсновании.Источник = ЭлементыФормы.Список.ТекущаяСтрока;
Форма.Открыть();
КонецЕсли;
КонецПроцедуры
Для работы с обработкой, если она открывается как внешняя обработка, запускаем обработку в Источнике выбираем тип документа, потом сам документ, которые будет основание, а в Приемнике нужно выбрать только тип документа, который создается на основании источника и нажать Выполнить. После этого будет открыт документ, который создался на основании где можно уже непосредственно проводить его.
В коде банальщина.
Сначала через ЗаполнитьЗначенияСвойств() мы заполняем реквизиты документа, а потом через метаданные обходим каждую табличную часть Источника и проверяем есть ли она в Приемнике, если есть, обходим строки табличной части Источника и добавляем через ЗаполнитьЗначенияСвойств() в документ Приемник аналогичную строку Источника.
Соответственно, заполняются только те реквизиты объекта и табличных частей, которые присутствуют в Источнике и Приемнике.