Как передать данные из модуля формы в модуль объекта в 1С?

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

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

Способ 1: Прямая передача через параметры метода

Это самый простой, прозрачный и часто используемый способ. Суть метода заключается в создании экспортной процедуры в модуле объекта, которая принимает необходимые данные в качестве аргумента.

Для реализации этого метода выполним следующие шаги:

  1. В модуле объекта создадим процедуру с ключевым словом Экспорт.
  2. В модуле формы получим объект с помощью функции РеквизитФормыВЗначение("Объект").
  3. Вызовем созданную процедуру, передав ей значение реквизита формы.

Рассмотрим пример кода:

Модуль объекта:


Процедура ВыполнитьМоюОбработку(ДатаДляФильтра) Экспорт
    // Здесь выполняем запрос, используя переданную дату
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Дата >= &ДатаДляФильтра";
    Запрос.УстановитьПараметр("ДатаДляФильтра", ДатаДляФильтра);
    // ... дальнейшая логика
КонецПроцедуры

Модуль формы:


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

Способ 2: Использование коллекции ДополнительныеСвойства

Если вам необходимо передать данные в стандартные события объекта, такие как ПередЗаписью или ПриЗаписи, где нельзя менять сигнатуру метода (список параметров), используйте свойство ДополнительныеСвойства.

Это специальный «карман» внутри объекта, доступный во всех его методах на сервере. Разберем реализацию по шагам:

  1. В модуле формы в обработчике ПередЗаписьюНаСервере поместим нужные данные в ДополнительныеСвойства объекта.
  2. В модуле объекта, внутри процедуры ПередЗаписью или ПриЗаписи, прочитаем эти данные из коллекции.

Пример реализации:

Модуль формы:


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

Модуль объекта:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ДополнительныеСвойства.Свойство("НеобходимаяНачДата") Тогда
        НачДата = ДополнительныеСвойства.НеобходимаяНачДата;
        // Используем полученную дату в логике объекта
    КонецЕсли;
КонецПроцедуры

Способ 3: Использование реквизитов объекта

Если данные, которые вводит пользователь, должны сохраняться в базе данных и быть доступны объекту в любой момент его жизненного цикла, самым правильным решением будет создание полноценного реквизита у самого объекта (например, у обработки).

Когда реквизит добавлен в структуру объекта, он автоматически становится доступен в коде модуля объекта после того, как данные формы будут переданы в объект (например, через РеквизитФормыВЗначение). Вам не нужно передавать их дополнительно, достаточно обратиться к нему через контекст ЭтотОбъект или напрямую по имени.

Рекомендации по выбору метода

При выборе подхода руководствуйтесь следующими правилами:

Помните, что при работе в 1С:Управляемые формы крайне важно разделять клиентский и серверный контексты. Выполняйте тяжелые вычисления и запросы только на сервере, используя методы &НаСервере, чтобы не перегружать клиентское приложение.

← На главную