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

В нижней части какие объекты могут создаваться на основании текущего:

В нашем примере на основании документа Приход товара можно создать документ Оплата.
Теперь в пользовательском режиме в форме документа и в форме списка появится подменю Создать на основании, в котором будут созданы команды ввода на основании для всех объектов, которые создаются на основании текущего объекта:

После нажатия на кнопку «Оплата» будет открыта форма нового документа Оплата:

При этом хотелось бы, чтобы реквизиты документа оплаты автоматически заполнялись из документа прихода товара. Процедура, которая вызывается при вводе на основании называется ОбработкаЗаполнения и находится в модуле объекта.
ОбработкаЗаполнения
Обработчик ОбработкаЗаполнения нужно создавать у того объекта, который создается на основании. В нашем примере это будет документ Оплата. В параметре ДанныеЗаполнения передается ссылка на объект-основание. Алгоритм заполнения нужно реализовать самим:
1 2 3 4 5 6 7 8 9 |
//модуль объекта Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) //проверяем тип ДанныеЗаполнения Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПриходТовара") Тогда //заполняем реквизиты Контрагент = ДанныеЗаполнения.Поставщик; Сумма = ДанныеЗаполнения.Сумма; КонецЕсли; КонецПроцедуры |
При этом сначала нужно проверить тип параметра ДанныеЗаполнения, потому что один объект может вводиться на основании разных типов объектов. А также ОбработкаЗаполнения вызывается при интерактивном создании нового объекта. В этом случае параметр ДанныеЗаполнения равен Неопределено или структуре со значениями отбора, который был установлен в форме списка.
Теперь при создании документа Оплата на основании документа Приход товара реквизиты Контрагент и Сумма будут автоматически заполняться из документа Приход товара.
Ввод на основании программно
Обработку заполнения можно вызывать при программном создании объекта. Для этого нужно вызвать метод Заполнить и передать параметром ссылку на основание:
1 2 3 4 5 6 7 8 9 |
Дата = ТекущаяДатаСеанса(); СсылкаНаПриход = Документы.ПриходТовара.НайтиПоНомеру("000000001", Дата); //создаем новый документ НоваяОплата = Документы.Оплата.СоздатьДокумент(); НоваяОплата.Дата = Дата; //вызываем метод Заполнить, параметром передает ссылку на основание НоваяОплата.Заполнить(СсылкаНаПриход); НоваяОплата.Записать(); |
В момент вызова метода Заполнить у документа Оплата будет вызван обработчик ОбработкаЗаполнения и параметром будет передана ссылка на документ Приход товара.