При настройке переноса данных из базы «1С:Предприятие 7.7» в современную конфигурацию на платформе «1С:Предприятие 8» с помощью конфигурации «Конвертация данных 2.0» разработчики часто сталкиваются с нестандартным поведением: обработка выгрузки отрабатывает без видимых фатальных ошибок, однако в результирующем файле XML все свойства объектов содержат тег <Пусто/>, даже если в информационной базе реквизиты гарантированно заполнены.
Разберем детально механизм возникновения этой проблемы, проанализируем устройство обработки выгрузки V77Exp.ert и рассмотрим способы устранения ошибки.
Проанализируем, как внешняя обработка V77Exp.ert считывает данные из информационной базы 1С 7.7. Алгоритмы выгрузки активно используют функции платформы ТипЗначенияСтр() и Вид() для валидации и сериализации реквизитов.
Код обработки жестко завязан на русскоязычные литералы типов. Логика ожидает, что функция ТипЗначенияСтр() вернет одно из стандартных русских значений:
"Справочник""Документ""Перечисление""Строка""Число""Дата"Если в свойствах конфигурации 1С 7.7 в качестве основного языка установлен английский (English), то функция ТипЗначенияСтр() возвращает англоязычные строки: "Reference", "Document", "String", "Number", "Date". В результате стандартные условия проверок вида Если ТипЗначенияСтр(Объект) = "Справочник" не срабатывают, алгоритм пропускает чтение реального значения реквизита и записывает в XML-файл тег <Пусто/>.
Это самый быстрый и надежный способ исправления ситуации, если структура конфигурации открыта для редактирования в конфигураторе.
Выполним следующие шаги:
V77Exp.ert.После смены языка встроенная функция ТипЗначенияСтр(Объект) начнет корректно возвращать русские наименования типов, и реквизиты будут заполняться реальными данными.
Бывают ситуации, когда менять метаданные в рабочей базе 7.7 нельзя (например, конфигурация типовая, мультиязычная или база находится на строгом регламентном обслуживании). В таком случае скорректируем саму внешнюю обработку выгрузки.
Откроем модуль обработки V77Exp.ert и найдем процедуры определения типов реквизитов (например, глПолучитьЗначениеСвойства или глЗаписатьСвойство). Дополним проверки типов англоязычными эквивалентами:
ТипСтр = ТипЗначенияСтр(Значение);
Если (ТипСтр = "Справочник") Или (ТипСтр = "Reference") Тогда
// Обработка справочника
ИначеЕсли (ТипСтр = "Строка") Или (ТипСтр = "String") Тогда
// Обработка строки
ИначеЕсли (ТипСтр = "Число") Или (ТипСтр = "Number") Тогда
// Обработка числа
ИначеЕсли (ТипСтр = "Дата") Или (ТипСтр = "Date") Тогда
// Обработка даты
ИначеЕсли (ТипСтр = "Документ") Или (ТипСтр = "Document") Тогда
// Обработка документа
КонецЕсли;
Рассмотрим сопутствующую проблему: почему при ручном переопределении свойства в обработчике «Перед выгрузкой» (например, Значение = "тест";) реквизит может полностью исчезать из XML-файла.
Такое поведение связано с настройками Правила конвертации свойства (ПКС) в «Конвертации данных 2.0»:
Значение, необходимо очистить поле «Источник» в настройках ПКС и обязательно явно указать «Тип приемника» (например, Строка).Кроме того, не забывайте важную специфику 1С 7.7: в отличие от «восьмерки», где код обработчиков передается внутри файла правил динамически, в 1С 7.7 обработчики компилируются в отдельный модуль. При любых изменениях логики в КД 2.0 необходимо выгрузить модуль правил и заново вставить его текст в модуль внешней обработки V77Exp.ert перед повторным запуском экспорта.