При настройке синхронизации данных между конфигурациями 1С (например, между «Розницей» и «Бухгалтерией предприятия» или «Управлением торговлей») пользователи часто сталкиваются с критической ошибкой при выгрузке документов ВыемкаДенежныхСредствИзКассыККМ или ВнесениеДенежныхСредствВКассуККМ. Ошибка фиксируется в журнале регистрации и прерывает процесс обмена. Система сообщает о нарушении структуры XDTO-пакета: «Не установлено значение одного из следующих свойств: НомерКассовойСмены».
Рассмотрим природу этой проблемы, проанализируем причины ее возникновения и разберем пошаговые алгоритмы решения, основываясь на практическом опыте специалистов и особенностях формата EnterpriseData.
Для начала выясним причину возникновения сообщения. Ошибка Ошибка проверки данных XDTO: Структура объекта '/КлючевыеСвойства' не соответствует типу возникает на этапе валидации данных перед их отправкой или при приеме. В современных версиях формата EnterpriseData (1.5 и выше) поле НомерКассовойСмены в блоке ключевых свойств объекта КассаККМ является обязательным для идентификации.
Проблема заключается в том, что в самих документах выемки или внесения в конфигурации-источнике (например, в «Рознице 2.3») реквизит НомерКассовойСмены может отсутствовать как физическое поле в табличной части или шапке. Алгоритм выгрузки (менеджер обмена) пытается вычислить этот номер программно, обращаясь к связанному документу КассоваяСмена. Если связь разорвана или данные в сменах некорректны, формируется пустой узел XDTO, что и вызывает ошибку проверки.
Проанализируем ситуацию, когда документы «Выемка» или «Внесение» создаются в моменты, которые программа не может однозначно сопоставить с открытой сменой. Часто это происходит из-за того, что пользователи не закрывают смены вовремя или время начала смены в системе установлено позже, чем время проведения первого финансового документа.
Рассмотрим алгоритм исправления данных:
КассовыеСмены и найдем те, которые соответствуют дате проблемного обмена.Дата и НачалоКассовойСмены. Если документ выемки был создан в 20:00, а смена формально открыта в 21:00, менеджер обмена не сможет найти номер смены для этого документа.КассоваяСмена установим время начала смены на более раннее (например, на 00:00:01 нужного дня).Такой подход позволяет системе корректно отработать запрос в менеджере обмена и получить номер смены для заполнения XDTO-пакета.
Выясним причину, связанную с обновлением торгового оборудования. Часто ошибка проявляется после перехода с одной версии драйвера на другую (например, с 8-й версии драйвера Атол на 10-ю). В этот переходный период настройки РМК (рабочего места кассира) могут измениться, и старые документы, созданные под старым драйвером, начинают конфликтовать с новыми правилами выгрузки.
Если ошибка возникла именно после манипуляций с оборудованием, попробуем следующий метод:
Если административные меры не помогают, необходимо вмешаться в логику формирования XML-пакета. В менеджере обмена (или в расширении для него) нужно найти ПКО (правила конвертации объектов) для документа выемки или внесения. Наша задача — принудительно заполнить свойство НомерКассовойСмены, если оно оказалось пустым.
Посмотрим на пример кода, который можно внедрить в обработчик ПриОтправкеДанных или непосредственно в алгоритм формирования ключевых свойств в менеджере обмена:
// Пример логики заполнения номера смены, если он не определен
Если Не ЗначениеЗаполнено(СтруктураОбъектаXDTO.КлючевыеСвойства.КассаККМ.НомерКассовойСмены) Тогда
// Если номер не найден, подставляем "0" или "1" для прохождения валидации
СтруктураОбъектаXDTO.КлючевыеСвойства.КассаККМ.НомерКассовойСмены = "0";
КонецЕсли;
Важно помнить, что НомерКассовойСмены — это реквизит именно формата обмена, а не метаданных документа. Если принимающая сторона (например, «Бухгалтерия предприятия») не использует этот номер для жесткой привязки к учетным данным, подстановка «0» является безопасным и быстрым решением.
Иногда ошибка вызвана одним конкретным «битым» документом, который зацикливает обмен. Проанализируем ситуацию через монитор синхронизации данных:
Выемка денежных средств из кассы ККМ.После этого запустим обмен повторно. Если синхронизация завершилась без ошибок, значит, проблема была локализована в одном объекте. Его можно перепровести или создать заново, следя за тем, чтобы он был привязан к корректно открытой кассовой смене.
Разберем еще несколько нюансов, которые могут помочь:
Подводя итог, можно сказать, что ошибка «Не установлено значение одного из следующих свойств: НомерКассовойСмены» — это типичный конфликт между жесткими требованиями XDTO-схемы и неполнотой данных в информационной базе. Использование вышеописанных методов позволяет устранить проблему без радикального изменения типовой конфигурации.