Можно ли обратиться к форме объекта и вызвать её методы в Конвертации данных 2.1?

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

При разработке правил обмена в Конвертации данных 2.1 (КД 2.1) часто возникает необходимость заполнить реквизиты объекта-приемника, которые в обычной пользовательской работе подставляются автоматически при выборе других полей в форме. Начинающие разработчики пытаются вызвать экспортные процедуры формы (например, обработчик перевыбора вида операции) непосредственно при загрузке документа. Рассмотрим, почему такой подход не работает и как правильно решить задачу автозаполнения счетов учета и других реквизитов.

Причины недоступности формы при обмене данными

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

  1. Отсутствие пользовательского контекста и элементов UI: Объект Форма и интерактивные события (такие как ПриИзменении или ПриОткрытии) физически отсутствуют. Попытка вызвать ПолучитьФорму() или обратиться к процедурам модуля формы вызовет ошибку времени выполнения.
  2. Режим загрузки данных: При записи загружаемых объектов платформа автоматически устанавливает флаг Объект.ОбменДанными.Загрузка = Истина. Этот флаг отключает большинство стандартных проверок и алгоритмов автозаполнения, предусмотренных в модуле объекта и подписках на события.

Таким образом, логика, зашитая в форму документа (например, обработчики типа ВидОперацииПриИзмененииСервер(Форма)), при автоматическом переносе данных выполняться не будет.

Корректные способы заполнения реквизитов на стороне приемника

Рассмотрим проверенные практические варианты решения задачи, когда в источнике отсутствуют нужные счета учета (60.01, 60.02, 51) или иные реквизиты, но их необходимо подставить в приемнике по виду операции.

1. Вызов серверных процедур в обработчике «После загрузки»

В обработчике правил конвертации объектов (ПКО) «После загрузки» доступна переменная Объект. Вместо обращения к форме мы можем вызвать процедуры из общих модулей конфигурации-приемника, передав в них объект документа.

Пример вызова серверного метода перерасчета счетов учета в обработчике «После загрузки»:


// Вызываем серверную процедуру общего модуля приемника для подстановки счетов
ЗаполнениеДокументовСервер.ЗаполнитьСчетаУчетаУправленческий(Объект);

2. Чтение данных из регистров сведений

В большинстве типовых конфигураций счета учета расчетов с контрагентами подтягиваются из специальных регистров (например, СчетаУчетаРасчетовСКонтрагентами). В обработчике «После загрузки» можно напрямую запросить нужные значения из регистра и присвоить их реквизитам документа:


ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Организация", Объект.Организация);
ПараметрыОтбора.Вставить("Контрагент", Объект.Контрагент);

СчетаУчета = РегистрыСведений.СчетаУчетаРасчетовСКонтрагентами.ПолучитьПоследнее(Объект.Дата, ПараметрыОтбора);

Объект.СчетУчетаРасчетовСПоставщиком = СчетаУчета.СчетУчетаРасчетовСПоставщиком;
Объект.СчетУчетаРасчетовПоАвансам = СчетаУчетаРасчетовПоАвансам;

3. Временное снятие флага «Загрузка» для отработки модуля объекта

Если вся необходимая логика заполнения написана в событии ОбработкаЗаполнения или в модуле объекта, можно временно отключить режим загрузки, вызвать заполнение и затем записать документ:


// Временно сбрасываем режим загрузки
Объект.ОбменДанными.Загрузка = Ложь;

// Вызываем стандартный механизм заполнения объекта
Объект.Заполнить(Объект.ВидОперации);

// Возвращаем режим загрузки перед записью (если требуется)
Объект.ОбменДанными.Загрузка = Истина;

4. Подстановка значений через алгоритмы в ПКС

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

Резюме

Использовать контекст формы в правилах обмена Конвертации данных 2.1 нельзя. Любые махинации с реквизитами необходимо выполнять исключительно на уровне сервера через обращение к реквизитам объекта Объект в обработчиках ПКО или алгоритмах КД.

← На главную