Как конвертировать перечисление из 1С 7.7 в несколько булевых полей в УТ 11

Программист 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

В этой статье мы подробно разберем, как реализовать такую логику с помощью программного инструмента "Конвертация данных 2.0", проанализируем нюансы работы с типами в версии 7.7 и рассмотрим архитектурные особенности справочников в УТ 11.

Постановка задачи

В исходной базе 7.7 у контрагента есть перечисление ПризнакКонтрагента со значениями:

В целевой базе УТ 11 (или любой другой на платформе 8.3) эти признаки хранятся в виде отдельных булевых полей (флажков). Нам необходимо настроить правила так, чтобы при значении "ПокупательПоставщик" в приемнике устанавливались сразу две галочки: Клиент = Истина и Поставщик = Истина.

Способ 1: Использование «Входящих данных» в ПКО

Этот метод считается наиболее структурированным, так как вся логика сопоставления описывается в одном месте — в правиле конвертации объекта (ПКО). Давайте разберем по шагам, как это реализовать.

Во-первых, выберем ПКО для справочника Контрагенты (или Партнеры, что более актуально для УТ 11). Перейдем в событие "Перед выгрузкой" и напишем код, который подготовит структуру данных для наших флажков.

Важно: поскольку источником является 1С 7.7, вместо привычных Истина и Ложь мы обязаны использовать числовые значения 1 и 0.


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

// Инициализируем значения по умолчанию
ВходящиеДанные.Установить("Клиент", 0);
ВходящиеДанные.Установить("Поставщик", 0);
ВходящиеДанные.Установить("ПрочиеОтношения", 0);

// Проверяем условия на основе перечисления источника
Если (Источник.ПризнакКонтрагента = Перечисление.ПризнакКонтрагента.Покупатель) 
    ИЛИ (Источник.ПризнакКонтрагента = Перечисление.ПризнакКонтрагента.ПокупательПоставщик) Тогда
    ВходящиеДанные.Установить("Клиент", 1);
КонецЕсли;

Если (Источник.ПризнакКонтрагента = Перечисление.ПризнакКонтрагента.Поставщик) 
    ИЛИ (Источник.ПризнакКонтрагента = Перечисление.ПризнакКонтрагента.ПокупательПоставщик) Тогда
    ВходящиеДанные.Установить("Поставщик", 1);
КонецЕсли;

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

Способ 2: Прямая настройка ПКС (упрощенный вариант)

Если вы не хотите перегружать ПКО лишним кодом, можно прописать логику непосредственно в каждом ПКС. Рассмотрим этот вариант подробнее. Нам потребуется создать ПКС для каждого булевого поля в приемнике.

  1. Создаем ПКС для свойства Клиент.
  2. Поле Источник оставляем пустым.
  3. В обработчике "Перед выгрузкой" самого свойства пишем краткое условие:

Если (Источник.ПризнакКонтрагента = Перечисление.ПризнакКонтрагента.Покупатель) 
    ИЛИ (Источник.ПризнакКонтрагента = Перечисление.ПризнакКонтрагента.ПокупательПоставщик) Тогда
    Значение = 1;
Иначе
    Значение = 0;
КонецЕсли;

Аналогично создаем ПКС для Поставщик, меняя условия проверки перечисления. Этот способ кажется проще, но помните: если логика станет сложной (например, потребуется анализировать обороты по счетам 60 и 62), лучше вернуться к первому способу или использовать Алгоритмы.

Технические нюансы платформы 1С 7.7

Многие разработчики допускают ошибку, пытаясь присвоить переменной Значение результат логического выражения напрямую, например: Значение = (Источник.ПризнакКонтрагента = ...). В среде 7.7 это может отработать некорректно при передаче в КД 2.0.

Рекомендация: всегда используйте явное присвоение 1 или 0. Это гарантирует, что при загрузке в 1С 8.3 тип будет интерпретирован как Булево. Также в настройках ПКС на вкладке "Параметры" полезно явно указать тип приемника: Булево.

Архитектурные особенности УТ 11: Партнеры и Контрагенты

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

Флаги Клиент и Поставщик в УТ 11 принадлежат именно справочнику Партнеры. Если вы настраиваете перенос в справочник Контрагенты, убедитесь, что эти флаги синхронизированы. Если в системе включена опция "Независимо вести партнеров и контрагентов", то установка флага у контрагента может не повлиять на партнера автоматически. Проанализируем это перед началом выгрузки.

Также обратите внимание на реквизит ПрочиеОтношения. В УТ 11 объект может не записаться, если у него не установлен ни один из признаков (ни клиент, ни поставщик, ни прочее). Проанализируем ситуацию: если в 7.7 ПризнакКонтрагента не заполнен, обязательно установите ПрочиеОтношения = 1.


// Пример обработки "Прочих отношений"
Если ПустоеЗначение(Источник.ПризнакКонтрагента) = 1 Тогда
    Значение = 1; // Устанавливаем "Прочие отношения"
Иначе
    Значение = 0;
КонецЕсли;

Использование алгоритмов для оптимизации

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

Подводя итог, можно сказать, что выбор метода зависит от сложности ваших данных. Для простых условий достаточно ПКС с явным указанием Значение = 1, а для комплексных переносов лучше использовать ВходящиеДанные или Алгоритмы.

← На главную