Как установить статическое значение перечисления при переносе данных в КД 2.0?

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

При настройке обмена данными между конфигурациями (например, при переходе с УТ 10.3 на УТ 11) часто возникает задача: заполнить реквизит объекта в базе-приемнике конкретным значением, которого нет в источнике. Особенно часто это касается перечислений. Разберем ситуацию, когда реквизиту ТипКассы нужно всегда присваивать значение ФискальныйРегистратор, даже если в исходной базе этой информации нет или она имеет другой формат.

Проанализируем основные способы реализации этой задачи в среде Конвертация данных 2.0, выясним причины возможных ошибок и определим наиболее эффективный метод решения.

Способ 1. Использование поля «Значение» в настройках ПКС

Самый простой и очевидный способ — указать текстовый идентификатор значения перечисления непосредственно в настройках Правила Конвертации Свойства (ПКС). Посмотрим, как это работает правильно.

В ПКС для реквизита ТипКассы мы должны оставить поле Источник пустым. В колонке Значение необходимо вписать имя (идентификатор) значения перечисления так, как оно задано в конфигураторе базы-приемника. Важно понимать: 1С ищет совпадение по внутреннему имени метаданных.

Важные нюансы этого метода:

  1. Отсутствие ПКО: Если вы вручную прописали строковое значение в поле «Значение», для этого ПКС не нужно указывать Правило Конвертации Объектов (ПКО). КД сама сопоставит строку с элементом перечисления.
  2. Синхронизация метаданных: Убедитесь, что в базу КД загружено актуальное описание конфигурации-приемника. Если имя значения в коде программы — ФискальныйРегистратор, а в КД оно не загружено или называется иначе, значение не заполнится.

Способ 2. Использование обработчика «Перед выгрузкой» и переменной «Выражение»

Если простая подстановка строки не срабатывает, или требуется программная логика, мы используем параметр Выражение. Это одна из самых мощных возможностей КД 2.0, позволяющая передать код, который будет выполнен на стороне приемника в момент загрузки.

Разберем типичную ошибку начинающих разработчиков. Попытка написать код в ПКС следующим образом приведет к ошибке компиляции:


// ОШИБОЧНЫЙ КОД
Значение = Выражение("Перечисления.ТипыКассККМ.ФискальныйРегистратор");

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


// ПРАВИЛЬНЫЙ КОД
// Источник в ПКС должен быть пустым
Выражение = "Перечисления.ТипыКассККМ.ФискальныйРегистратор";

В данном случае в файл обмена будет записана строка кода. При загрузке в УТ 11 система выполнит этот скрипт и получит прямую ссылку на нужный элемент перечисления. Это гарантирует точность, так как мы обращаемся к метаданным приемника напрямую.

Почему значение может не заполняться? Проверка настроек поиска

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

  1. Флаг «Поиск»: Если в ПКС для реквизита ТипКассы стоит галочка «Поиск», КД будет использовать это значение для идентификации объекта в базе. Если в приемнике уже есть касса, но с другим типом, поиск не даст результатов, и система может создать дубль или пропустить обновление.
  2. Флаг «Не замещать существующие объекты в приемнике»: Это критически важная настройка. Если в базе-приемнике объект уже найден (например, по коду или наименованию), и в ПКО стоит этот флаг, то никакие изменения в реквизиты внесены не будут. Реквизит ТипКассы останется таким, каким он был до загрузки.
  3. Обработчики в самой конфигурации: В современных версиях УТ 11 логика заполнения может быть жестко прописана в процедурах ПередЗаписью или ПриУстановкеНовогоКода самого объекта. Если значение перетирается после загрузки, это можно проверить, написав отладочный код в обработчике «После загрузки» в ПКО.

Альтернативный вариант: Обработчик «После загрузки»

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


// Устанавливаем значение напрямую в загруженный объект
Объект.ТипКассы = Перечисления.ТипыКассККМ.ФискальныйРегистратор;
// Записывать здесь объект не нужно, КД сделает это сама после завершения обработчика

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

Резюме для успешной настройки

Рассмотрим краткий алгоритм действий для надежной фиксации значения перечисления:

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

← На главную