Как правильно перенести значения Булево и заполнить константы при обмене из 1С 7.7 в 1С 8 через «Конвертацию данных 2»

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Перенос данных между устаревшей платформой «1С:Предприятие 7.7» и современной «1С:Предприятие 8» с использованием конфигурации «Конвертация данных 2.1» (КД 2) часто подкидывает разработчикам неочевидные проблемы. Одной из таких классических задач является перенос логических значений (Булево) и заполнение констант на стороне базы-приемника. Давайте подробно разберем, как решить эти проблемы, выясним причины типичных ошибок и рассмотрим рабочие примеры кода.

Особенности переноса логического типа (Булево) из 1С 7.7

Главная сложность при обмене заключается в том, что в платформе 1С:Предприятие 7.7 отсутствует встроенный тип данных Булево. Вместо него логические значения обычно хранятся в виде чисел (0 — Ложь, 1 — Истина), строк ("Да" / "Нет") или элементов специального перечисления.

Если в базе-приемнике реквизит имеет тип Булево, а в источнике (7.7) соответствующего реквизита нет (или его нужно заполнить программно), мы используем Правило Конвертации Свойства (ПКС). Разберем по шагам, как правильно передать значение:

  1. В правилах конвертации свойств (ПКС) для нужного реквизита оставьте поле «Источник» пустым.
  2. Убедитесь, что в поле «Приемник» выбран реквизит с типом Булево.
  3. В обработчике события ПередВыгрузкой для данного ПКС напишите код инициализации. Переменной Значение необходимо присваивать строго числовые параметры.

Рассмотрим пример кода для обработчика ПередВыгрузкой в ПКС:


// Для установки значения "Истина" в приемнике
Значение = 1;

// Для установки значения "Ложь" в приемнике
Значение = 0;

Важный нюанс: никогда не пытайтесь передавать текстовые строки вроде "Ложь", "false" или "Нет" напрямую в ПКС, если тип приемника — Булево. Это приведет к ошибке преобразования типов XML на стороне базы-приемника. В редких случаях интеграции через COM-соединения Истина в 7.7 может считываться как -1, но для стандартного xml-обмена всегда используйте 1 или 0.

Также можно настроить конвертацию перечислений. Если в 7.7 логика реализована через перечисление (например, со значениями "Да" и "Нет"), создайте ПКО для этого перечисления, сопоставив его со стандартным системным типом Булево в 1С 8.

Как быстро и правильно установить константы в 1С 8

Пытаться переносить константы как полноценные объекты через стандартные ПКО зачастую избыточно и неудобно. В КД 2 константы обрабатываются через специальный объект НаборКонстант. Если вам нужно просто гарантированно установить значение определенной константы на стороне приемника (в 1С 8), лучше всего воспользоваться глобальными обработчиками правил обмена.

Для этого отлично подходит обработчик событий «После загрузки данных». Он выполняется на стороне 1С 8 один раз в самом конце импорта, когда все основные объекты уже загружены в базу. Проанализируем пример кода для этого обработчика:


// Установка значения константы напрямую на стороне приемника
Константы.ИмяВашейКонстанты.Установить(Ложь); // или Истина

Использование этого метода полностью избавляет вас от необходимости настраивать правила выгрузки данных (ПВД) и ПКС для констант на стороне источника (7.7).

Почему изменения в обработчиках не применяются на стороне 1С 8?

Часто начинающие специалисты сталкиваются с ситуацией: код в обработчике ПриЗагрузке или ПослеЗагрузки написан, правила сохранены, но при импорте ничего не происходит. Выясним основные причины этой проблемы:

  1. Не обновлены обработчики выгрузки для 1С 7.7. В отличие от 1С 8, где обработчики могут выполняться динамически из XML-файла, для 1С 7.7 все алгоритмы выгрузки компилируются непосредственно в модуль обработки выгрузки (обычно это V77Exp.ert). При любом изменении правил в КД 2 вам необходимо заново сгенерировать модуль обработки выгрузки и обновить файл обработчиков (или встроить его в саму обработку 7.7).
  2. Использование встроенных правил обмена. Если обмен выполняется через типовые планы обмена в 1С 8, система часто берет правила загрузки из макета конфигурации или ранее зарегистрированного в справочнике XML-файла. Ваши изменения во внешнем файле правил проигнорируются до тех пор, пока вы принудительно не обновите правила обмена в настройках узла синхронизации в пользовательском режиме.
  3. Отсутствие режима отладки. Для тестирования обработчиков «на лету» рекомендуется запускать обработку УниверсальныйОбменДаннымиXML в специальном режиме отладки, предварительно сгенерировав модуль отладки обработчиков загрузки.

Как получить имя загружаемого файла обмена в обработчиках

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

Во всех обработчиках загрузки на стороне 1С 8 доступен контекст выполнения обработки УниверсальныйОбменДаннымиXML. Получить имя файла можно напрямую через реквизит:


ИмяФайла = ИмяФайлаОбмена; 
// или с явным указанием контекста:
ИмяФайла = ЭтотОбъект.ИмяФайлаОбмена;

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

Параметры.Вставить("ИмяФайлаИмпорта", ИмяФайлаОбмена);

После этого в любом ПКО или ПКС вы сможете легко обратиться к имени файла через сохраненный параметр:

ИмяФайла = Параметры.ИмяФайлаИмпорта;

Применяя данные подходы, вы сможете гибко управлять процессом конвертации, избежите затыков при передаче логических типов и обеспечите корректную настройку параметров информационной базы-приемника.

← На главную