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