Теперь рассмотрим второй случай, когда данные заполнения устанавливаются программно.
Например, выполняется метод встроенного языка ОткрытьФорму(). Как говорилось выше, при программном открытии формы есть возможность задать значения параметров формы. Для решения нашей задачи предназначен параметр расширения формы ЗначенияЗаполнения.
Примечание
Пример можно посмотреть в демонстрационной базе «Начальное заполнение», глобальная команда Открыть форму.
Например, мы хотим открыть форму и сразу же указать, что реквизит Поставщик должен быть заполнен некоторой конкретной ссылкой.
Для этого создадим серверную функцию, которая вернет эту самую ссылку на поставщика (листинг 3.37).
Листинг 3.37. Серверная функция, возвращающая ссылку на поставщика
&НаСервере
Функция ПолучитьПоставщикаНаСервере()
Возврат Справочники.Поставщики.НайтиПоКоду("000000001");
КонецФункции
А затем в клиентском обработчике команды Открыть форму создадим структуру, содержащую отбор по поставщику (ЭлементыОтбора), и передадим ее в параметр формы ЗначенияЗаполнения (листинг 3.38).
Листинг 3.38. Установка значения заполнения при открытии формы
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СсылкаНаПоставщика = ПолучитьПоставщикаНаСервере();
ЭлементыОтбора = Новый Структура("Поставщик", СсылкаНаПоставщика);
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЭлементыОтбора);
ОткрытьФорму("Документ.Накладная.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры
В результате выполнения такой команды будет открыта форма новой накладной, в которой поставщик будет заполнен значением Поставщик 1 (рис. 3.45).

Рис. 3.45. Результат программной установки значения заполнения
В ситуации, когда новый объект полностью создается и записывается без участия пользователя, можно использовать метод объекта Заполнить(), чтобы смоделировать создание объекта по тем правилам и алгоритмам, которые используются при интерактивном создании.
Примечание
Пример можно посмотреть в демонстрационной базе «Начальное заполнение», глобальная команда Заполнить.
Например, находясь на сервере, можно создать новый объект накладной и затем вызвать у него метод Заполнить(). В этот метод передать значения, необходимые для начального заполнения, например поставщика.
При интерактивном создании накладной расширение формы автоматически устанавливает дату нового документа. В программном создании накладной форма не участвует, поэтому в структуре данных заполнения нужно передать еще и значение для поля Дата, иначе записать такую накладную не удастся. А для того чтобы платформа обработала его автоматически, в конфигураторе у стандартного реквизита накладной Дата нужно установить свойство Заполнять из данных заполнения (листинг 3.39).
Листинг 3.39. Использование метода «Заполнить()»
&НаСервере
Процедура СоздатьИЗаписатьОбъектНаСервере()
СсылкаНаПоставщика = Справочники.Поставщики.НайтиПоКоду("000000002");
ЭлементыОтбора = Новый Структура("Поставщик, Дата", СсылкаНаПоставщика, ТекущаяДата());
ОбъектНакладной = Документы.Накладная.СоздатьДокумент();
ОбъектНакладной.Заполнить(ЭлементыОтбора);
ОбъектНакладной.Записать();
КонецПроцедуры
В результате выполнения команды Заполнить (из которой вызывается процедура СоздатьИЗаписатьОбъектНаСервере()) будет создана и записана новая накладная с текущей датой и поставщиком Поставщик 2. Значение для реквизита Склад будет взято из его свойства Значение заполнения (рис. 3.46).

Рис. 3.46. Результат использования метода «Заполнить()»
Следует заметить, что для стандартных реквизитов Родитель, Владелец и для ведущих измерений регистров сведений платформа автоматически в конфигураторе устанавливает свойство Заполнять из данных заполнения. Для остальных стандартных реквизитов, как в нашем случае для даты, нужно это свойство устанавливать самостоятельно, если планируется использовать возможность их автоматического заполнения.