Почему при выгрузке из 1С 7.7 в 1С 8 через КД 2.0 все свойства выгружаются со значением Пусто?

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

При настройке переноса данных из базы «1С:Предприятие 7.7» в современную конфигурацию на платформе «1С:Предприятие 8» с помощью конфигурации «Конвертация данных 2.0» разработчики часто сталкиваются с нестандартным поведением: обработка выгрузки отрабатывает без видимых фатальных ошибок, однако в результирующем файле XML все свойства объектов содержат тег <Пусто/>, даже если в информационной базе реквизиты гарантированно заполнены.

Разберем детально механизм возникновения этой проблемы, проанализируем устройство обработки выгрузки V77Exp.ert и рассмотрим способы устранения ошибки.

Причина проблемы: определение типов и язык метаданных

Проанализируем, как внешняя обработка V77Exp.ert считывает данные из информационной базы 1С 7.7. Алгоритмы выгрузки активно используют функции платформы ТипЗначенияСтр() и Вид() для валидации и сериализации реквизитов.

Код обработки жестко завязан на русскоязычные литералы типов. Логика ожидает, что функция ТипЗначенияСтр() вернет одно из стандартных русских значений:

  1. "Справочник"
  2. "Документ"
  3. "Перечисление"
  4. "Строка"
  5. "Число"
  6. "Дата"

Если в свойствах конфигурации 1С 7.7 в качестве основного языка установлен английский (English), то функция ТипЗначенияСтр() возвращает англоязычные строки: "Reference", "Document", "String", "Number", "Date". В результате стандартные условия проверок вида Если ТипЗначенияСтр(Объект) = "Справочник" не срабатывают, алгоритм пропускает чтение реального значения реквизита и записывает в XML-файл тег <Пусто/>.

Решение 1. Изменение основного языка конфигурации 1С 7.7

Это самый быстрый и надежный способ исправления ситуации, если структура конфигурации открыта для редактирования в конфигураторе.

Выполним следующие шаги:

  1. Откроем информационную базу 1С 7.7 в режиме Конфигуратор.
  2. В главном меню откроем дерево метаданных (Конфигурация — Открыть конфигурацию).
  3. Откроем свойства корневого элемента дерева (Свойства конфигурации).
  4. На вкладке Общие найдем реквизит Основной язык и переключим его значение на Русский (Russian).
  5. Сохраним изменения в конфигурации.
  6. Повторим процедуру выгрузки через обработку V77Exp.ert.

После смены языка встроенная функция ТипЗначенияСтр(Объект) начнет корректно возвращать русские наименования типов, и реквизиты будут заполняться реальными данными.

Решение 2. Адаптация кода обработки V77Exp.ert (без изменения конфигурации)

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

Откроем модуль обработки V77Exp.ert и найдем процедуры определения типов реквизитов (например, глПолучитьЗначениеСвойства или глЗаписатьСвойство). Дополним проверки типов англоязычными эквивалентами:


ТипСтр = ТипЗначенияСтр(Значение);

Если (ТипСтр = "Справочник") Или (ТипСтр = "Reference") Тогда
    // Обработка справочника
ИначеЕсли (ТипСтр = "Строка") Или (ТипСтр = "String") Тогда
    // Обработка строки
ИначеЕсли (ТипСтр = "Число") Или (ТипСтр = "Number") Тогда
    // Обработка числа
ИначеЕсли (ТипСтр = "Дата") Или (ТипСтр = "Date") Тогда
    // Обработка даты
ИначеЕсли (ТипСтр = "Документ") Или (ТипСтр = "Document") Тогда
    // Обработка документа
КонецЕсли;

Особенности переопределения значения в обработчиках ПКС

Рассмотрим сопутствующую проблему: почему при ручном переопределении свойства в обработчике «Перед выгрузкой» (например, Значение = "тест";) реквизит может полностью исчезать из XML-файла.

Такое поведение связано с настройками Правила конвертации свойства (ПКС) в «Конвертации данных 2.0»:

  1. Если в ПКС заполнено поле «Источник», алгоритм выгрузки пытается прочитать значение реквизита из исходного объекта 1С 7.7 и сопоставить его тип. При конфликте типов или невозможности прочитать реквизит значение сбрасывается.
  2. Если вычисляется произвольное расчетное значение через переменную Значение, необходимо очистить поле «Источник» в настройках ПКС и обязательно явно указать «Тип приемника» (например, Строка).

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

← На главную