Как исправить ошибку проверки данных XDTO "Структура объекта ОплатаПлатежнымиКартамиПодарочныхСертификатов" при обмене УТ 11 и БП 3.0

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

Синхронизация данных между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 на основе универсального формата EnterpriseData — это мощный инструмент, который, однако, иногда может преподносить неприятные сюрпризы в виде ошибок проверки XDTO-пакетов. Одна из наиболее распространенных и труднодиагностируемых на первый взгляд ошибок возникает при выгрузке документа Отчет о розничных продажах.

В процессе выгрузки система возвращает ошибку следующего вида:

Ошибка проверки данных XDTO: Структура объекта '/ОплатаПлатежнымиКартамиПодарочныхСертификатов/Строка[1]' не соответствует типу... Не установлено значение одного из следующих свойств: НомерКарты.

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

---

Анализируем причину возникновения ошибки

Прежде всего, давайте разберемся с технической стороной вопроса. Формат обмена EnterpriseData жестко регламентирует структуру передаваемых XML-файлов с помощью XDTO-схем. В этих схемах для каждого типа документа описаны обязательные к заполнению реквизиты.

Для документа Отчет о розничных продажах (в XML-пакете он описывается как Документ_ОтчетОРозничныхПродажах_Отправка) существует ветка под названием ОплатаПлатежнымиКартамиПодарочныхСертификатов. По правилам схемы EnterpriseData версии 1.3 и выше, если в XML-структуру попадает хотя бы одна строка этой таблицы, для нее обязательно должны быть заполнены ключевые свойства:

  1. НомерКарты — строковое представление номера платежной карты (или его маски).
  2. Эквайрер — структура типа КлючевыеСвойстваКонтрагент. Для эквайрера обязательными являются базовые реквизиты контрагента (наименование, ИНН и т.д.).

Если при формировании XML-сообщения обработчик выгрузки создает эту ветку, но не находит в базе данных заполненных значений для номера карты или терминала эквайринга, метод платформы ОбъектXDTO.Проверить() аварийно завершает работу, блокируя выгрузку всего пакета обмена.

---

Почему табличные части кажутся пустыми, но выгрузка завершается сбоем?

Часто пользователи и администраторы заявляют: "Мы открыли документ, вкладки 'Оплата платежными картами' и 'Подарочные сертификаты' абсолютно пусты!". Выясним, почему так происходит:

---

Пошаговое руководство по устранению ошибки

Проанализируем ситуацию и выполним последовательность действий, гарантированно решающих эту проблему.

Шаг 1. Точная идентификация проблемного документа

Не полагайтесь на визуальное совпадение номеров. В ошибке всегда указан точный номер, дата и организация (например, БЛРБ-000122 от 30.12.2017 19:58:55). Убедитесь, что вы открыли именно тот документ, на который ругается система. Лучше всего найти его программно по уникальному идентификатору (GUID) или через функции технического специалиста.

Шаг 2. Проверка и очистка "фантомных" строк

Открыв нужный документ в режиме предприятия, перейдите на вкладку Оплата платежными картами. Выделите табличную часть и попробуйте нажать комбинацию клавиш Ctrl + A (Выделить все). Если выделились пустые строки, удалите их программно или стандартным интерактивным способом (правой кнопкой мыши — "Удалить").

Для надежности выполните следующий код в консоли кода или во внешней обработке для очистки пустых строк в документе:


// Получаем объект документа по ссылке
ДокументОбъект = СсылкаНаОтчет.ПолучитьОбъект();
Модифицирован = Ложь;

// Перебираем строки ТЧ оплаты платежными картами с конца
Индекс = ДокументОбъект.ОплатаПлатежнымиКартами.Количество() - 1;
Пока Индекс >= 0 Цикл
    СтрокаОплаты = ДокументОбъект.ОплатаПлатежнымиКартами[Индекс];
    
    // Если строка не содержит суммы и терминала, удаляем её
    Если СтрокаОплаты.Сумма = 0 И Не ЗначениеЗаполнено(СтрокаОплаты.ЭквайринговыйТерминал) Тогда
        ДокументОбъект.ОплатаПлатежнымиКартами.Удалить(СтрокаОплаты);
        Модифицирован = Истина;
    КонецЕсли;
    Индекс = Индекс - 1;
КонецЦикла;

// Если были изменения, записываем документ
Если Модифицирован Тогда
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
    Сообщить("Документ успешно очищен от фантомных строк и перезаписан!");
КонецЕсли;

Шаг 3. Заполнение реквизитов эквайринга

Если оплата картой в документе действительно присутствует, и строка не является "фантомной", обязательно проверьте заполнение следующих полей:

  1. В строке оплаты должен быть выбран корректный Эквайринговый терминал.
  2. Перейдите в карточку выбранного эквайрингового терминала и убедитесь, что в ней заполнен Договор эквайринга.
  3. В договоре эквайринга обязательно должен быть указан Банк-эквайрер (Контрагент). В карточке этого контрагента должны быть заполнены базовые реквизиты: ИНН, КПП и официальное наименование.
  4. В строке табличной части ТЧ документа должно быть заполнено поле Номер платежной карты (при отсутствии точного номера введите шаблонное значение, например, последние 4 цифры или маску *0000, так как схема XDTO требует непустую строку).

Шаг 4. Отладка механизма выгрузки

Если визуально всё заполнено, но ошибка сохраняется, воспользуемся отладчиком. Установим точку останова в общем модуле ОбменДаннымиXDTOСервер на строке 551 (или рядом, в зависимости от релиза конфигурации), где вызывается метод ОбъектXDTO.Проверить().

Рассмотрим порядок действий при отладке:

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

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

← На главную