Как исправить ошибку XDTO «Отсутствует обязательное свойство ВалютаЦены» при выгрузке складов из 1С:ERP в 1С:Бухгалтерию?

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

При настройке регулярной синхронизации между конфигурациями 1С:ERP Управление предприятием и 1С:Бухгалтерия предприятия 3.0 включение опции «Выгружать аналитику по складам» может приводить к аварийному прерыванию обмена. При формировании пакета данных EnterpriseData система выдает ошибку проверки XDTO следующего содержания:

Структура объекта '/ТипЦенРозничнойТорговли' не соответствует типу: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.17}КлючевыеСвойстваТипЦен Проверка свойства 'ВалютаЦены': отсутствует обязательное свойство.

Разберем детально, почему возникает эта коллизия, где скрыты проблемные реквизиты в карточке склада и какими способами можно восстановить корректный обмен данными.

Анализ причин сбоя валидации XDTO

Выясним причину возникновения ошибки в механизмах сериализации данных. При обмене через формат EnterpriseData правила выгрузки опираются на строгие XML-схемы (XSD). В этих схемах действуют следующие правила:

  1. Для объекта Склад сам элемент ТипЦенРозничнойТорговли не является строго обязательным (параметр minOccurs="0"). Если реквизит в базе пустой, тег просто не формируется, и валидация проходит успешно.
  2. Если же в карточке склада ссылка на вид цены заполнена, сериализатор формирует составной узел типа КлючевыеСвойстваТипЦен. Внутри этого типа свойство ВалютаЦены является строго обязательным (параметр minOccurs="1").
  3. В конфигурации 1С:ERP справочник ВидыЦен позволяет создавать расчетные или динамические цены без явного указания валюты (например, когда цена рассчитывается по формулам от базовых значений). Если такой вид цены назначен складу, сериализатор пытается выгрузить ссылку на валюту, получает пустое значение и падает с ошибкой несоответствия схеме XDTO.

Ситуация осложняется тем, что для оптовых складов реквизит Розничный вид цены (или учетный вид цены) программно скрывается на форме. Пользователь не видит это поле в интерфейсе, однако значение в табличной части базы данных сохраняется (например, если склад ранее имел розничный тип или создавался программно).

Способ 1. Указание валюты в справочнике «Виды цен»

Рассмотрим самый быстрый способ устранения проблемы, если привязанный вид цены действительно используется в хозяйственной деятельности предприятия:

  1. Перейдем в раздел CRM и маркетинг (или Продажи) — Настройки и справочники — Виды цен.
  2. Найдем в списке позицию, которая фигурирует в настройках проблемных складов как учетная или розничная.
  3. Откроем карточку вида цены и заполним реквизит Валюта цены (например, выберем валюту регламентированного учета).
  4. Запишем элемент справочника и повторим сеанс синхронизации данных.

Способ 2. Очистка реквизита на форме карточки склада

Если склад является оптовым, розничные цены для него в бухгалтерской программе не требуются. Чтобы очистить скрытое значение вручную, выполним следующие шаги:

  1. Откроем карточку нужного элемента в справочнике Склады (места хранения).
  2. Нажмем кнопку Еще в правом верхнем углу формы и выберем пункт Изменить форму.
  3. В дереве элементов формы найдем скрытое поле (обычно РозничныйВидЦены или УчетныйВидЦены), установим для него флаг видимости и нажмем ОК.
  4. Очистим появившееся поле на форме, после чего запишем изменения.
  5. В качестве альтернативного варианта без правки формы можно временно переключить переключатель Тип склада в значение Розничный магазин, очистить ставшее видимым поле с видом цены, вернуть тип склада обратно в Оптовый склад и нажать Записать и закрыть.

Способ 3. Массовая очистка через «Групповое изменение реквизитов»

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

  1. Перейдем в раздел НСИ и администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  2. В поле выбора объекта укажем справочник Склады (места хранения).
  3. По кнопке отбора добавим условие: ТипСклада Равно Оптовый склад.
  4. В списке доступных реквизитов найдем строку Розничный вид цены (или реквизит учетной цены), установим напротив него флаг и оставим поле значения пустым.
  5. Нажмем кнопку Изменить реквизиты. После очистки реквизита узел ТипЦенРозничнойТорговли перестанет формироваться при экспорте, и ошибка XDTO полностью исчезнет.

Способ 4. Программная корректировка правил выгрузки EnterpriseData

Если специфика учета требует сохранения вида цены без валюты, но выгружать его в бухгалтерию не нужно, решим проблему доработкой через расширение конфигурации. Переопределим логику заполнения свойства склада перед выгрузкой в общем модуле менеджера обмена:


Если Склад.ТипСклада = Перечисления.ТипыСкладов.ОптовыйСклад 
   Или (ЗначениеЗаполнено(Склад.РозничныйВидЦены) И Не ЗначениеЗаполнено(Склад.РозничныйВидЦены.ВалютаЦены)) Тогда
    СвойствоТипЦен = Неопределено;
КонецЕсли;

Таким образом, присвоение значения Неопределено исключает проблемную ветку из XML-файла обмена, соблюдая целостность контракта XDTO-пакета.

← На главную