Синхронизация данных между 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 через универсальный формат (EnterpriseData) — это мощный инструмент, который, однако, часто дает сбои после обновления конфигураций. Проанализируем наиболее распространенные ошибки, связанные с отсутствием полей объектов и нарушением структуры XDTO, и разберем по шагам методы их устранения.
Часто после обновления одной из баз возникает ошибка вида: Поле объекта не обнаружено (УчетВыручкиВОперационнойКассе). Выясним причину: это происходит из-за того, что одна конфигурация уже использует более свежую версию формата EnterpriseData (например, 1.8), где появился новый реквизит, а другая база (еще не обновленная или имеющая старые правила) об этом реквизите "не знает".
Рассмотрим пути решения:
Разберем ситуацию, когда в журнале регистрации появляется сообщение: Ошибка проверки данных XDTO: Структура объекта '/Товары/Строка[1]' не соответствует типу... Не установлено значение одного из следующих свойств: ДанныеНоменклатуры. Это означает, что обязательный узел в XML-файле обмена пуст, хотя схема требует его заполнения.
Проанализируем основные причины этой проблемы на уровне данных:
ВидыЗапасов. Если в документе была изменена номенклатура, а виды запасов не пересчитались, возникает "битая" ссылка.ДанныеНоменклатуры не сможет сформироваться корректно.Если мы выяснили, что проблема в пустой аналитике номенклатуры (как описано в решении одного из пользователей), выполним следующие действия:
Для исправления воспользуемся встроенным механизмом 1С. В конфигурациях на базе УТ 11/ERP существует специальная обработка. Найдем её через «Функции для технического специалиста» (ранее «Все функции»), введя в поиске «Исправление ошибок в данных по видам запасов».
Посмотрим на алгоритм работы с обработкой:
Иногда ошибка кроется в самих правилах обмена (ПКО), которые некорректно обрабатывают хозяйственные операции. Рассмотрим пример, как можно скорректировать выгрузку документа СборкаТоваров через расширение, внеся изменения в обработчик ПриОтправкеДанных.
Проанализируем пример кода, который исправляет неверное обращение к результату запроса:
// В расширении для процедуры ПКО_Документ_СборкаТоваров_ПриОтправкеДанных
Если ДанныеИБ.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СборкаТоваров Тогда
// Если операция - сборка, используем первый индекс таблицы товаров
НомерТаблТовары = 1;
Иначе
// Для разборки - второй
НомерТаблТовары = 2;
КонецЕсли;
// Важно убедиться, что РезультатЗапроса содержит нужные данные
Если РезультатЗапроса.Количество() >= НомерТаблТовары Тогда
ДанныеXDTO.Вставить("Товары", РезультатЗапроса[НомерТаблТовары].Выгрузить());
КонецЕсли;
Использование ДанныеXDTO.Вставить требует, чтобы структура передаваемой таблицы значений (ТЗ) полностью соответствовала именам свойств в XDTO-пакете. Если колонка будет называться Товар вместо Номенклатура, валидация XDTO не пройдет.
При написании собственных правил в КД 3.0 программисты часто сталкиваются с тем, что прямая выгрузка табличной части из ДанныеИБ (объекта документа) приводит к ошибкам. Выясним, почему выгрузка через запрос работает стабильнее.
Когда мы выгружаем данные запросом, мы можем явно типизировать колонки и гарантировать наличие всех необходимых полей для XDTO. Рассмотрим правильный подход в обработчике:
Процедура ПКО_Документ_ПеремещениеТоваров_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Т.Номенклатура КАК Номенклатура,
| Т.Количество КАК Количество,
| Т.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения
|ИЗ
| Документ.ПеремещениеТоваров.Товары КАК Т
|ГДЕ
| Т.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДанныеИБ.Ссылка);
ТЗТовары = Запрос.Выполнить().Выгрузить();
// Передаем подготовленную таблицу в структуру XDTO
ДанныеXDTO.Вставить("Товары", ТЗТовары);
КонецПроцедуры;
Этот метод позволяет избежать передачи "сырых" данных объекта, в которых могут быть пустые или неопределенные значения, вызывающие сбой ОбъектXDTO.Проверить().
Если вышеуказанные способы не помогают, выполним следующие действия:
ТИИ (Тестирование и исправление) для базы УТ. Особое внимание уделите пункту «Проверка логической целостности» и «Пересчет итогов».Строка[N]) и перепроведите его. Это принудительно обновит записи в регистрах сведений и накопления, участвующих в обмене.Таким образом, большинство ошибок обмена через универсальный формат решаются либо приведением данных в порядок (регистр ВидыЗапасов), либо точечной корректировкой правил выгрузки, если типовые механизмы не справляются с конкретной хозяйственной операцией.