При работе со списками документов или справочников часто возникает задача: пользователь устанавливает отбор в динамическом списке (например, по конкретной организации или контрагенту), нажимает кнопку «Создать», и в открывшейся форме нового объекта соответствующие реквизиты должны заполниться автоматически. Разберем по шагам, как настроить такое поведение средствами платформы 1С и какие альтернативные программные варианты существуют.
В большинстве случаев писать программный код не требуется — платформа 1С:Предприятие умеет передавать значения отбора во ввод нового объекта автоматически. Для этого используется встроенное свойство реквизита метаданных.
Рассмотрим порядок настройки этого механизма:
Организация или Контрагент).Истина.Теперь при создании нового объекта из формы списка, в которой включен отбор по данному полю, платформа автоматически подставит значение из отбора в реквизит создаваемого объекта.
Проанализируем ситуации, при которых стандартное заполнение может не сработать:
Использование = Истина). Если флажок отбора в пользовательских настройках снят, значение передано не будет.Договор.Владелец), платформа не сможет сопоставить его с реквизитом Организация без дополнительного кода.Если стандартного механизма недостаточно (например, при использовании вида сравнения «В списке» или при отборе по составным полям), разберем программные способы решения задачи.
1. Передача структуры через параметр «ЗначенияЗаполнения»
При открытии формы нового объекта из кода можно сформировать структуру со значениями и передать её в параметрах открытия формы:
ПараметрыОткрытия = Новый Структура;
ЗначенияЗаполнения = Новый Структура;
ЗначенияЗаполнения.Вставить("Организация", ВыбраннаяОрганизация);
ЗначенияЗаполнения.Вставить("Контрагент", ВыбранныйКонтрагент);
ПараметрыОткрытия.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыОткрытия);
2. Программный разбор отбора динамического списка
Если необходимо перехватить стандартную команду создания и извлечь значения из компоновщика настроек списка, проанализируем элементы отбора следующим образом:
Для Каждого Элемент Из Список.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") И Элемент.Использование Тогда
Если Строка(Элемент.ЛевоеЗначение) = "Организация" И Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда
ЗначениеОрганизации = Элемент.ПравоеЗначение;
КонецЕсли;
КонецЕсли;
КонецЦикл;
3. Обработка в модуле объекта
В модуле создаваемого объекта можно переопределить процедуру ОбработкаЗаполнения. В параметр ДанныеЗаполнения передается структура, сформированная платформой на основе отборов динамического списка:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("Организация") Тогда
ЭтотОбъект.Организация = ДанныеЗаполнения.Организация;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Помните: если внутри процедуры ОбработкаЗаполнения установить значение СтандартнаяОбработка = Ложь, то автоматическое заполнение реквизитов платформой будет полностью отключено, и все необходимые значения разработчик должен будет присвоить вручную.