Перенос данных между устаревшей платформой «1С:Предприятие 7.7» и современной «1С:Предприятие 8» с использованием конфигурации «Конвертация данных 2.1» (КД 2) часто подкидывает разработчикам неочевидные проблемы. Одной из таких классических задач является перенос логических значений (Булево) и заполнение констант на стороне базы-приемника. Давайте подробно разберем, как решить эти проблемы, выясним причины типичных ошибок и рассмотрим рабочие примеры кода.
Главная сложность при обмене заключается в том, что в платформе 1С:Предприятие 7.7 отсутствует встроенный тип данных Булево. Вместо него логические значения обычно хранятся в виде чисел (0 — Ложь, 1 — Истина), строк ("Да" / "Нет") или элементов специального перечисления.
Если в базе-приемнике реквизит имеет тип Булево, а в источнике (7.7) соответствующего реквизита нет (или его нужно заполнить программно), мы используем Правило Конвертации Свойства (ПКС). Разберем по шагам, как правильно передать значение:
Булево.ПередВыгрузкой для данного ПКС напишите код инициализации. Переменной Значение необходимо присваивать строго числовые параметры.Рассмотрим пример кода для обработчика ПередВыгрузкой в ПКС:
// Для установки значения "Истина" в приемнике
Значение = 1;
// Для установки значения "Ложь" в приемнике
Значение = 0;
Важный нюанс: никогда не пытайтесь передавать текстовые строки вроде "Ложь", "false" или "Нет" напрямую в ПКС, если тип приемника — Булево. Это приведет к ошибке преобразования типов XML на стороне базы-приемника. В редких случаях интеграции через COM-соединения Истина в 7.7 может считываться как -1, но для стандартного xml-обмена всегда используйте 1 или 0.
Также можно настроить конвертацию перечислений. Если в 7.7 логика реализована через перечисление (например, со значениями "Да" и "Нет"), создайте ПКО для этого перечисления, сопоставив его со стандартным системным типом Булево в 1С 8.
Пытаться переносить константы как полноценные объекты через стандартные ПКО зачастую избыточно и неудобно. В КД 2 константы обрабатываются через специальный объект НаборКонстант. Если вам нужно просто гарантированно установить значение определенной константы на стороне приемника (в 1С 8), лучше всего воспользоваться глобальными обработчиками правил обмена.
Для этого отлично подходит обработчик событий «После загрузки данных». Он выполняется на стороне 1С 8 один раз в самом конце импорта, когда все основные объекты уже загружены в базу. Проанализируем пример кода для этого обработчика:
// Установка значения константы напрямую на стороне приемника
Константы.ИмяВашейКонстанты.Установить(Ложь); // или Истина
Использование этого метода полностью избавляет вас от необходимости настраивать правила выгрузки данных (ПВД) и ПКС для констант на стороне источника (7.7).
Часто начинающие специалисты сталкиваются с ситуацией: код в обработчике ПриЗагрузке или ПослеЗагрузки написан, правила сохранены, но при импорте ничего не происходит. Выясним основные причины этой проблемы:
V77Exp.ert). При любом изменении правил в КД 2 вам необходимо заново сгенерировать модуль обработки выгрузки и обновить файл обработчиков (или встроить его в саму обработку 7.7).
УниверсальныйОбменДаннымиXML в специальном режиме отладки, предварительно сгенерировав модуль отладки обработчиков загрузки.
Иногда при загрузке данных требуется узнать имя файла, из которого производится импорт (например, для ведения логов, анализа источника или принятия решений по заполнению реквизитов). Проанализируем, как получить доступ к этой информации:
Во всех обработчиках загрузки на стороне 1С 8 доступен контекст выполнения обработки УниверсальныйОбменДаннымиXML. Получить имя файла можно напрямую через реквизит:
ИмяФайла = ИмяФайлаОбмена;
// или с явным указанием контекста:
ИмяФайла = ЭтотОбъект.ИмяФайлаОбмена;
Если вам нужно использовать имя файла в ПКО или ПКС, лучшей практикой будет сохранить его в глобальные параметры в самом начале загрузки. Для этого в обработчике конвертации «Перед загрузкой данных» пропишите следующий код:
Параметры.Вставить("ИмяФайлаИмпорта", ИмяФайлаОбмена);
После этого в любом ПКО или ПКС вы сможете легко обратиться к имени файла через сохраненный параметр:
ИмяФайла = Параметры.ИмяФайлаИмпорта;
Применяя данные подходы, вы сможете гибко управлять процессом конвертации, избежите затыков при передаче логических типов и обеспечите корректную настройку параметров информационной базы-приемника.