Как исправить ошибки с Валютой и Контрагентами при выгрузке данных по Универсальному обмену (EnterpriseData)

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

При работе с механизмом Синхронизации данных через универсальный формат (EnterpriseData) в конфигурациях на базе 1С:ERP или Комплексная автоматизация (КА) 2.4 часто возникают ошибки валидации XDTO. Эти ошибки проявляются в Журнале регистрации сообщениями вида: Структура объекта не соответствует типу или Отсутствует обязательное свойство. Ситуация осложняется тем, что в самой базе 1С данные могут выглядеть корректно заполненными, но механизм обмена все равно отказывается их принимать. В этой статье мы подробно разберем причины возникновения таких ошибок и методику их устранения.

Разбор ошибки: Отсутствие обязательного свойства «Код» у Валюты

Рассмотрим ситуацию, когда при выгрузке данных, связанных с денежными средствами или банковскими счетами, возникает ошибка: Структура объекта '/ВалютаДенежныхСредств' не соответствует типу... Проверка свойства 'Код': Отсутствует обязательное свойство. На первый взгляд это кажется странным, так как в справочнике Валюты код (например, «643» для рубля) заполнен.

Проанализируем причину. В формате EnterpriseData (особенно версии 1.5 и выше) для типа КлючевыеСвойстваВалюта обязательным является не внутренний код справочника 1С, а цифровой код валюты по Общероссийскому классификатору валют (ОКВ). Если карточка валюты была создана вручную без привязки к классификатору или если в ней повреждены параметры прописи, XDTO-пакет не может извлечь код для формирования XML-структуры.

Для решения этой проблемы выполним следующие действия:

  1. Откроем справочник Валюты и найдем элемент, на который ругается система (например, Рубль).
  2. Проверим наличие связи с классификатором. Самый надежный способ — нажать кнопку «Подобрать из классификатора» и выбрать нужную валюту повторно. Это обновит внутренние идентификаторы и параметры прописи.
  3. Проверим, нет ли в базе дублей валют. Часто бывает, что в договоре выбрана одна валюта «руб.», а в банковском счете — другая, у которой не заполнен цифровой код ISO.
  4. Убедимся, что реквизит ПараметрыПрописи заполнен корректно, так как некоторые версии правил обмена обращаются к ним для получения метаданных.

Ошибка валидации: Не установлено значение свойства «Контрагент» в Договорах

Другой распространенный случай — ошибка в объекте ДоговорыКонтрагентов: Не установлено значение одного из следующих свойств: Контрагент. При этом пользователь видит, что в 1С контрагент в договоре указан. Почему же механизм обмена его «не видит»?

Выясним причину. В формате EnterpriseData объект «Договор» содержит в себе структуру КлючевыеСвойства, куда входят ключевые свойства Контрагента (ИНН, КПП, Наименование, Юридическое/Физическое лицо). Если при формировании выгрузки система не может собрать «ключевые свойства» владельца договора, она оставляет поле Контрагент пустым в XDTO-объекте. Это происходит в следующих случаях:

Рассмотрим, как это исправить. Необходимо проверить карточку контрагента, указанного в «проблемном» договоре. Убедимся, что заполнены все обязательные для обмена поля: ИНН, Наименование и Вид контрагента. Если данные заполнены, попробуйте перевыбрать контрагента в договоре и переписать объект.

Методика глубокой отладки через «Выгрузку загрузку EnterpriseData»

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

Рассмотрим алгоритм отладки по шагам:

  1. Запустим 1С:Предприятие в режиме Отладки.
  2. Откроем обработку Выгрузка загрузка EnterpriseData.
  3. Настроим параметры обмена: выберем тот же План обмена и ту же Версию формата, которые используются в вашей синхронизации (например, 1.5).
  4. В списке объектов выберем конкретный проблемный договор или банковский счет.
  5. Включим флажок «Останавливаться по ошибке» или установим точку останова в общем модуле ОбменДаннымиXDTOСервер в методе Проверить().

Типовой код, в котором происходит сбой, выглядит так:


// В общем модуле ОбменДаннымиXDTOСервер
Попытка
    ОбъектXDTO.Проверить();
Исключение
    Инфо = ИнформацияОбОшибке();
    // Здесь мы можем проинспектировать переменную ОбъектXDTO
    ЗаписатьЛогОшибки(ПодробноеОписаниеОшибки(Инфо));
КонецПопытки;

Когда выполнение программы остановится на точке останова, мы сможем исследовать содержимое переменной ОбъектXDTO. Развернем структуру объекта и посмотрим, какие свойства заполнены, а какие — нет. Если в узле /КлючевыеСвойства/ВалютаВзаиморасчетов отсутствует поле Код, значит, проблема именно в данных справочника Валюты.

Особенности выгрузки Банковских счетов

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

Иногда в старых версиях конфигураций Комплексная автоматизация или Управление торговлей банковские счета могли создаваться программно без явного указания валюты (подразумевалось, что валюта счета определяется по умолчанию). Однако для универсального обмена это недопустимо. Если вы столкнулись с ошибкой в банковском счете, проверьте реквизит Валюта непосредственно в базе данных через «Консоль запросов» или «Редактирование реквизитов», так как на форме он может подставляться автоматически, а в самой таблице базы данных быть пустым (NULL или пустая ссылка).

Итоги и рекомендации

Подводя итог, проанализируем основные контрольные точки для успешной выгрузки без ошибок XDTO:

1. Актуальность классификаторов. Убедимся, что все используемые валюты загружены из актуального классификатора ОКВ. Это гарантирует наличие правильных цифровых и буквенных кодов ISO, которые требует формат EnterpriseData.
2. Чистота данных контрагентов. Договоры не будут выгружаться, если у их владельцев (контрагентов) отсутствуют ИНН или некорректно указан юридический статус. Рекомендуем использовать сервис «1С:Контрагент» для автоматического заполнения реквизитов.
3. Соответствие версий формата. Если одна база (например, Бухгалтерия) обновлена до последней версии, а КА — нет, может возникнуть ситуация, когда одна сторона требует свойства, которые другая еще не умеет выгружать. Всегда проверяйте совместимость версий формата EnterpriseData (1.5, 1.6, 1.10 и т.д.) в настройках синхронизации.
4. Перерегистрация объектов. Иногда после исправления данных в справочниках ошибка сохраняется, так как в «Таблице регистрации изменений» завис старый образ объекта. Попробуйте удалить регистрацию для проблемного объекта и добавить её заново через обработку «Регистрация изменений для обмена».

Соблюдение этих правил и использование методики отладки через XDTO-валидатор позволит быстро локализовать и устранить ошибки обмена, обеспечивая корректную передачу данных между вашими конфигурациями.

← На главную