При выполнении XML-выгрузки данных контактной информации в 1С:Бухгалтерии предприятия 3.0 разработчики могут столкнуться с ситуацией, когда адреса перестают восприниматься как российские. Ошибка возникает из-за того, что выражение ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ") возвращает значение Неопределено (которое при проверке условия приводится к Ложь). Проанализируем причину возникновения этой проблемы и разберем варианты её решения.
Выясним, почему глобальная фабрика XDTO перестает возвращать тип АдресРФ. Начиная с версий 1С:Бухгалтерии 3.0 (в частности, с релиза 3.0.52.35), в конфигурации произошли существенные изменения в подсистеме работы с адресной информацией:
АдресРФ.ФабрикаXDTO.Тип(): Объект ФабрикаXDTO формируется платформой динамически при запуске сеанса на основании зарегистрированных в метаданных XDTO-пакетов. Если тип отсутствует в метаданных, метод Тип() возвращает Неопределено.Рассмотри основные варианты исправления ситуации в зависимости от архитектуры вашей выгрузки и требований к XML-формату.
Если выгрузка адресов формируется из программного кода, не следует жестко завязываться на конкретные XDTO-типы. Рекомендуется использовать методы общих модулей БСП (например, УправлениеКонтактнойИнформациейСлужебный или РаботаСАдресами), которые разбирают контактную информацию в актуальном формате и возвращают готовые структуры данных.
Если формат XML-выгрузки строго регламентирован внешней системой, а соответствующий XDTO-пакет был удален из конфигурации, создадим локальную фабрику XDTO из файла схемы (XSD) с помощью функции СоздатьФабрикуXDTO():
// Создаем локальную фабрику XDTO из внешнего файла схемы
ПутьКСхеме = "C:\Schemas\AddressSchema.xsd";
ЧтениеСхемы = Новый ЧтениеXML;
ЧтениеСхемы.ОткрытьФайл(ПутьКСхеме);
ЛокальнаяФабрика = СоздатьФабрикуXDTO(ЧтениеСхемы);
ЧтениеСхемы.Закрыть();
// Получаем нужный тип из локальной фабрики
ТипАдрес = ЛокальнаяФабрика.Тип(ПространствоИмен, "АдресРФ");
Если ТипАдрес <> Неопределено Тогда
ОбъектАдрес = ЛокальнаяФабрика.Создать(ТипАдрес);
КонецЕсли;
Если создавать и вести XDTO-схемы нет необходимости, проанализируем вариант прямого формирования элементов с помощью объекта ЗаписьXML. Это позволит сформировать узлы и атрибуты адреса без обращения к объектам глобальной фабрики XDTO:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Export\Data.xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("АдресРФ");
ЗаписьXML.ЗаписатьАтрибут("Регион", КодРегиона);
ЗаписьXML.ЗаписатьАтрибут("Город", НазваниеГорода);
// Дополнительные атрибуты адреса...
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
Таким образом, при обновлении 1С:Бухгалтерии необходимо своевременно переводить механизмы обмена на актуальные API БСП или использовать локальное создание фабрик XDTO для поддержки внешних форматов.