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