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