При настройке регулярной синхронизации между конфигурациями 1С:ERP Управление предприятием и 1С:Бухгалтерия предприятия 3.0 включение опции «Выгружать аналитику по складам» может приводить к аварийному прерыванию обмена. При формировании пакета данных EnterpriseData система выдает ошибку проверки XDTO следующего содержания:
Структура объекта '/ТипЦенРозничнойТорговли' не соответствует типу: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.17}КлючевыеСвойстваТипЦен Проверка свойства 'ВалютаЦены': отсутствует обязательное свойство.
Разберем детально, почему возникает эта коллизия, где скрыты проблемные реквизиты в карточке склада и какими способами можно восстановить корректный обмен данными.
Выясним причину возникновения ошибки в механизмах сериализации данных. При обмене через формат EnterpriseData правила выгрузки опираются на строгие XML-схемы (XSD). В этих схемах действуют следующие правила:
Склад сам элемент ТипЦенРозничнойТорговли не является строго обязательным (параметр minOccurs="0"). Если реквизит в базе пустой, тег просто не формируется, и валидация проходит успешно.КлючевыеСвойстваТипЦен. Внутри этого типа свойство ВалютаЦены является строго обязательным (параметр minOccurs="1").ВидыЦен позволяет создавать расчетные или динамические цены без явного указания валюты (например, когда цена рассчитывается по формулам от базовых значений). Если такой вид цены назначен складу, сериализатор пытается выгрузить ссылку на валюту, получает пустое значение и падает с ошибкой несоответствия схеме XDTO.Ситуация осложняется тем, что для оптовых складов реквизит Розничный вид цены (или учетный вид цены) программно скрывается на форме. Пользователь не видит это поле в интерфейсе, однако значение в табличной части базы данных сохраняется (например, если склад ранее имел розничный тип или создавался программно).
Рассмотрим самый быстрый способ устранения проблемы, если привязанный вид цены действительно используется в хозяйственной деятельности предприятия:
Если склад является оптовым, розничные цены для него в бухгалтерской программе не требуются. Чтобы очистить скрытое значение вручную, выполним следующие шаги:
Склады (места хранения).РозничныйВидЦены или УчетныйВидЦены), установим для него флаг видимости и нажмем ОК.Если складов в базе много, проанализируем групповой способ решения задачи. Воспользуемся стандартным административным инструментом:
Склады (места хранения).ТипСклада Равно Оптовый склад.Розничный вид цены (или реквизит учетной цены), установим напротив него флаг и оставим поле значения пустым.ТипЦенРозничнойТорговли перестанет формироваться при экспорте, и ошибка XDTO полностью исчезнет.Если специфика учета требует сохранения вида цены без валюты, но выгружать его в бухгалтерию не нужно, решим проблему доработкой через расширение конфигурации. Переопределим логику заполнения свойства склада перед выгрузкой в общем модуле менеджера обмена:
Если Склад.ТипСклада = Перечисления.ТипыСкладов.ОптовыйСклад
Или (ЗначениеЗаполнено(Склад.РозничныйВидЦены) И Не ЗначениеЗаполнено(Склад.РозничныйВидЦены.ВалютаЦены)) Тогда
СвойствоТипЦен = Неопределено;
КонецЕсли;
Таким образом, присвоение значения Неопределено исключает проблемную ветку из XML-файла обмена, соблюдая целостность контракта XDTO-пакета.