Как передать дополнительные параметры в процедуру ОбработкаЗаполнения при вводе на основании в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке расширений для типовых конфигураций на управляемых формах разработчики часто сталкиваются с задачей передачи специфических данных из одного документа в другой при вводе на основании. Стандартный механизм ОбработкаЗаполнения в типовых решениях зачастую ожидает получить только ссылку на документ-основание, игнорируя или «обрезая» дополнительные параметры, переданные через структуру в ОткрытьФорму. Рассмотрим, как эффективно решить эту задачу, не нарушая работу типовой логики.

Решение 1: Использование ХранилищаОбщихНастроек

Если вам необходимо передать сложные данные, которые не помещаются в стандартные механизмы заполнения, отличным решением будет использование ХранилищеОбщихНастроек. Этот метод позволяет сохранить данные перед открытием формы и считать их в расширении после того, как документ будет создан.

Шаг 1. Сохранение данных на клиенте:


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

Шаг 2. Чтение данных в расширении:


&После("ОбработкаЗаполнения")
Процедура Расш1_ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    КлючОбъекта = "ДополнительныеПараметрыЗаполнения";
    КлючНастройки = Строка(ДанныеЗаполнения.УникальныйИдентификатор);
    ДополнительныеПараметры = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастройки);
    
    Если ДополнительныеПараметры <> Неопределено Тогда
        // Выполняем дозаполнение объекта
        ЭтотОбъект.ПараметрБ = ДополнительныеПараметры.ПараметрБ;
        // Обязательно удаляем настройки после использования
        ХранилищеОбщихНастроек.Удалить(КлючОбъекта, КлючНастройки, ИмяПользователя());
    КонецЕсли;
КонецПроцедуры

Решение 2: Использование ДополнительныеСвойства в расширении

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

Проанализируем стратегию действий:

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

Решение 3: Анализ параметров в ПриСозданииНаСервере

Если данные, которые вы передаете, влияют только на отображение или первичную инициализацию реквизитов формы, не обязательно пытаться «пропихнуть» их в ОбработкаЗаполнения модуля объекта. Поступим проще:

В модуле формы нового документа создадим обработчик ПриСозданииНаСервереПосле:


&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("ПараметрБ") Тогда
        Объект.ПараметрБ = Параметры.ПараметрБ;
    КонецЕсли;
КонецПроцедуры

Этот метод является наиболее «чистым» с точки зрения архитектуры, так как он не вмешивается в процесс заполнения документа данными основания и не создает конфликтов с типовым кодом 1С.

Важные рекомендации при реализации

При работе с этими механизмами придерживайтесь следующих правил:

Используя представленные подходы, вы сможете гибко управлять процессом ввода на основании, сохраняя при этом работоспособность типовой логики вашей конфигурации 1С.

← На главную