Как программно заполнить реквизиты новой формы справочника из обработки?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке прикладных решений на платформе 1С:Предприятие 8 часто возникает задача передать данные из одной формы (например, из формы обработки) в другую — в новую форму создаваемого справочника. Разберем по шагам, как правильно реализовать этот процесс, чтобы значения корректно отображались пользователю до момента записи объекта в базу данных.

Понимание архитектуры Данных формы

Прежде всего, важно понимать разницу между объектом базы данных СправочникОбъект и объектом формы ДанныеФормы. Серверные операции работают с объектами, которые хранят данные в оперативной памяти, тогда как управляемая форма отображает структуру ДанныеФормы. Чтобы изменения стали видны пользователю, необходимо правильно выполнить преобразование этих сущностей.

Шаг 1: Получение формы и инициализация данных

Для открытия формы используем метод ПолучитьФорму. Мы не будем создавать объект в базе сразу — наша цель подготовить форму к заполнению. Далее нам нужно получить структуру объекта формы, чтобы внести в неё необходимые значения.


&НаКлиенте
Процедура СоздатьГруппу(Команда)    
    // Подготавливаем структуру с данными для передачи
    ДанныеДляЗаполнения = Новый Структура("Наименование", Наименование);
    
    // Получаем форму справочника
    Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаГруппы");
    
    // Получаем объект формы (структуру ДанныеФормы)
    ДанныеФормы = Форма.Объект;
    
    // Вызываем серверную процедуру для заполнения
    ЗаполнитьДанныеФормыНаСервере(ДанныеФормы, ДанныеДляЗаполнения);
    
    // Переносим заполненные данные в форму
    КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
    
    // Открываем форму пользователю
    Форма.Открыть();
КонецПроцедуры

Шаг 2: Обработка данных на сервере

На стороне сервера мы работаем с объектной моделью. Здесь мы используем Справочники.Контрагенты.СоздатьГруппу(), заполняем нужные свойства и, что самое важное, применяем метод ЗначениеВДанныеФормы. Этот метод «связывает» заполненный объект с нашей структурой ДанныеФормы.


&НаСервере
Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы, СтруктураДанных)
    // Создаем объект в памяти сервера
    НоваяГруппа = Справочники.Контрагенты.СоздатьГруппу();
    
    // Заполняем свойства объекта
    ЗаполнитьЗначенияСвойств(НоваяГруппа, СтруктураДанных);
    
    // Преобразуем объект в структуру ДанныеФормы, которую поймет клиент
    ЗначениеВДанныеФормы(НоваяГруппа, ДанныеФормы);
КонецПроцедуры

Почему это важно?

Если пропустить вызов ЗначениеВДанныеФормы или КопироватьДанныеФормы, форма откроется пустой. Это происходит потому, что клиентская часть формы не «знает» о том, что происходило на сервере внутри временного объекта. Данные формы — это своего рода мост между сервером и интерфейсом пользователя.

Альтернативный способ: Использование параметров формы

Если задача заключается только в том, чтобы передать простые данные при открытии, можно воспользоваться параметром ЗначенияЗаполнения метода ОткрытьФорму. Платформа 1С автоматически попытается присвоить значения из этой структуры реквизитам нового элемента:


// Пример на клиенте
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", Новый Структура("Наименование", "Новая группа"));
ОткрытьФорму("Справочник.Контрагенты.ФормаГруппы", ПараметрыФормы);

Этот способ является более лаконичным, так как не требует написания сложного кода для ручного заполнения объектов формы, если совпадения имен реквизитов однозначны.

Заключение

Рекомендуем придерживаться следующего алгоритма:

  1. Подготовить данные в структуре на клиенте.
  2. Передать структуру на сервер для инициализации объекта справочника.
  3. Использовать ЗначениеВДанныеФормы для связки объекта с данными формы.
  4. Использовать КопироватьДанныеФормы для актуализации отображения.

Такой подход позволяет пользователю самостоятельно решить, нужно ли записывать данные в базу, так как форма открывается в стандартном режиме редактирования.

← На главную