Перенос данных из устаревших систем на платформе 1С:Предприятие 7.7 в современные конфигурации на базе 1С:Предприятие 8.3 — задача, полная нюансов. Часто программисты сталкиваются с ситуацией, когда правила в конфигурации «Конвертация данных» (КД 2.0) настроены верно, сопоставление свойств выполнено, но при выгрузке в итоговом XML-файле вместо ожидаемых значений номенклатуры или серий мы видим пустые теги. Проанализируем, почему так происходит и как добиться корректного заполнения данных.
Главное отличие процесса выгрузки из «семерки» от аналогичного процесса в «восьмерке» заключается в механизме исполнения правил. В 1С 8 обработка УниверсальныйОбменДаннымиXML динамически считывает алгоритмы прямо из файла XML с правилами. В 1С 7.7 архитектура иная: обработка выгрузки (обычно это V77Exp.ert) содержит внутри себя огромный текстовый блок — Модуль выгрузки.
Этот модуль генерируется в конфигурации «Конвертация данных» в момент сохранения правил. Рассмотрим ситуацию: вы добавили новое свойство в ПКС (Правила Конвертации Свойств), нажали «Сохранить правила», получили XML-файл и запустили выгрузку в 7.7. Но данные не появились. Это произошло потому, что обработка выгрузки в 7.7 ничего не знает о ваших изменениях, пока вы не обновите программный код внутри неё. Выясним, как это сделать правильно.
Существует два основных способа обновления модуля выгрузки:
V77Exp.ert в конфигураторе 1С 7.7.#ЗагрузитьИзФайла: Это гораздо более удобный способ, который позволяет избежать постоянного захода в конфигуратор. В модуле обработки V77Exp.ert один раз прописывается путь к внешнему текстовому файлу, который КД генерирует автоматически при сохранении правил.Проанализируем пример использования этой директивы. В коде модуля обработки выгрузки это выглядит примерно так:
// В штатном месте модуля обработки V77Exp.ert
#ЗагрузитьИзФайла "C:\Transfer\RulesModule.txt"
Теперь каждый раз, когда вы сохраняете правила в КД, обновляется и текстовый файл с кодом, и обработка 7.7 подхватывает изменения «на лету».
Пусто в XML-файлеЕсли после обновления модуля выгрузки данные всё равно не попадают в файл, а тег выглядит как <Свойство Тип="..." Имя="..."> <Пусто/> </Свойство>, значит, обработка нашла правило, но не смогла вычислить значение источника. Разберем возможные причины:
ПередВыгрузкой, убедитесь, что переменная Значение определена корректно.Посмотрим на пример кода в обработчике ПКС ПередВыгрузкой для номенклатуры, если нам нужно программно определить значение:
// Пример для 1С 7.7 в Конвертации данных
Если Источник.Вид() = "Материалы" Тогда
Значение = Источник.ТекущийЭлемент();
Иначе
Значение = ""; // Это приведет к тегу Пусто
КонецЕсли;
Особое внимание уделим медикаментам и сериям, как в рассматриваемом кейсе для Казахстана (БГП РК). В 1С 8 серии чаще всего являются справочником, подчиненным номенклатуре. В 1С 7.7 структура может быть иной.
Рассмотрим по шагам, как настроить выгрузку серий, чтобы они не были пустыми:
Владелец (в 8-ке) обязательно укажите правило конвертации для номенклатуры. Если владелец не будет передан или не будет найден, серия не загрузится, даже если её наименование есть в файле.ЭтоГруппа, Наименование и Артикул (или Код). Для серий — Наименование и Владелец. Без установленных полей поиска объект в базе-приемнике не будет создан или сопоставлен.Для ускорения процесса разработки и отладки правил в среде 1С 7.7 полезно использовать компоненту turbomd.dll. Она позволяет обновлять конфигурацию и модули обработок без необходимости монопольного доступа и постоянного перезапуска программы пользователями. Это критически важно, когда вы тестируете выгрузку на «живой» базе с большим объемом документов за 2019 год, как в нашем примере.
Документы перемещения медикаментов часто требуют заполнения специфических реквизитов, таких как счета учета (например, 1310 или 1350 в казахстанском учете). В 1С 7.7 эти данные могут отсутствовать в явном виде в табличной части. Чтобы документ в 1С 8 не просто загрузился, но и смог провестись, рекомендуем:
ПриЗагрузке на стороне 1С 8, который будет заполнять счета учета исходя из вида номенклатуры или склада.Резюмируем: если вы видите пустые значения в XML, первым делом проверьте, обновлен ли текст модуля в обработке V77Exp.ert. Вторым шагом проверьте актуальность загруженных метаданных и наличие установленных полей поиска в правилах объектов. Использование директивы #ЗагрузитьИзФайла сделает вашу работу значительно эффективнее, сократив время на рутинные операции в конфигураторе.