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