Почему ФабрикаXDTO не находит тип "АдресРФ" в 1С:Бухгалтерии 3.0 после обновления?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При выполнении XML-выгрузки данных контактной информации в 1С:Бухгалтерии предприятия 3.0 разработчики могут столкнуться с ситуацией, когда адреса перестают восприниматься как российские. Ошибка возникает из-за того, что выражение ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ") возвращает значение Неопределено (которое при проверке условия приводится к Ложь). Проанализируем причину возникновения этой проблемы и разберем варианты её решения.

Причина возникновения ошибки

Выясним, почему глобальная фабрика XDTO перестает возвращать тип АдресРФ. Начиная с версий 1С:Бухгалтерии 3.0 (в частности, с релиза 3.0.52.35), в конфигурации произошли существенные изменения в подсистеме работы с адресной информацией:

  1. Изменение состава XDTO-пакетов: В рамках обновления Библиотеки Стандартных Подсистем (БСП) разработчики типового решения обновили и переработали структуры хранения и передачи адресных сведений. Из дерева метаданных конфигурации (ветка «Общие — XDTO-пакеты») были удалены или переименованы устаревшие пакеты, содержавшие тип АдресРФ.
  2. Переход на новые форматы (JSON / ФИАС / ГАР): В современных релизах 1С хранение и обработка контактной информации последовательно переводились с XML/XDTO-схем на формат JSON и обновленные структуры классификаторов. По этой причине устаревшие типы XDTO выводятся из состава конфигурации.
  3. Особенности работы метода ФабрикаXDTO.Тип(): Объект ФабрикаXDTO формируется платформой динамически при запуске сеанса на основании зарегистрированных в метаданных XDTO-пакетов. Если тип отсутствует в метаданных, метод Тип() возвращает Неопределено.

Способы решения проблемы

Рассмотри основные варианты исправления ситуации в зависимости от архитектуры вашей выгрузки и требований к XML-формату.

Вариант 1. Переход на типовой API подсистемы контактной информации

Если выгрузка адресов формируется из программного кода, не следует жестко завязываться на конкретные XDTO-типы. Рекомендуется использовать методы общих модулей БСП (например, УправлениеКонтактнойИнформациейСлужебный или РаботаСАдресами), которые разбирают контактную информацию в актуальном формате и возвращают готовые структуры данных.

Вариант 2. Динамическая загрузка внешней XSD-схемы

Если формат XML-выгрузки строго регламентирован внешней системой, а соответствующий XDTO-пакет был удален из конфигурации, создадим локальную фабрику XDTO из файла схемы (XSD) с помощью функции СоздатьФабрикуXDTO():


// Создаем локальную фабрику XDTO из внешнего файла схемы
ПутьКСхеме = "C:\Schemas\AddressSchema.xsd";
ЧтениеСхемы = Новый ЧтениеXML;
ЧтениеСхемы.ОткрытьФайл(ПутьКСхеме);

ЛокальнаяФабрика = СоздатьФабрикуXDTO(ЧтениеСхемы);
ЧтениеСхемы.Закрыть();

// Получаем нужный тип из локальной фабрики
ТипАдрес = ЛокальнаяФабрика.Тип(ПространствоИмен, "АдресРФ");
Если ТипАдрес <> Неопределено Тогда
    ОбъектАдрес = ЛокальнаяФабрика.Создать(ТипАдрес);
КонецЕсли;

Вариант 3. Использование прямого формирования XML через ЗаписьXML

Если создавать и вести XDTO-схемы нет необходимости, проанализируем вариант прямого формирования элементов с помощью объекта ЗаписьXML. Это позволит сформировать узлы и атрибуты адреса без обращения к объектам глобальной фабрики XDTO:


ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Export\Data.xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();

ЗаписьXML.ЗаписатьНачалоЭлемента("АдресРФ");
ЗаписьXML.ЗаписатьАтрибут("Регион", КодРегиона);
ЗаписьXML.ЗаписатьАтрибут("Город", НазваниеГорода);
// Дополнительные атрибуты адреса...
ЗаписьXML.ЗаписатьКонецЭлемента();

ЗаписьXML.Закрыть();

Таким образом, при обновлении 1С:Бухгалтерии необходимо своевременно переводить механизмы обмена на актуальные API БСП или использовать локальное создание фабрик XDTO для поддержки внешних форматов.

← На главную