При обновлении конфигураций, особенно таких динамичных, как 1С:Управление торговлей 11, пользователи часто сталкиваются с тем, что отлаженные процессы синхронизации начинают давать сбои. Типичный пример — ошибка при вызове метода Проверить() в общем модуле ОбменДаннымиXDTOСервер. Рассмотрим подробнее, почему это происходит и как мы можем исправить ситуацию самостоятельно.
Разберем текст ошибки, который мы видим в журнале регистрации. Сообщение указывает на то, что структура объекта Упаковка не соответствует типу КлючевыеСвойстваУпаковка из пространства имен EnterpriseData 1.6. Проблема заключается в том, что в XML-пакете, который формирует 1С для передачи в бухгалтерию, создается узел упаковки, но обязательный реквизит Наименование или ЕдиницаИзмерения внутри него оказывается пустым или неопределенным.
Проанализируем ситуацию: в новых релизах (начиная с 11.4.7.114 и выше) правила обмена через формат EnterpriseData стали гораздо строже относиться к типам данных. Если в документе (например, в «Заказе поставщику») реквизит Упаковка заполнен значением Неопределено или содержит «битую ссылку», XDTO-валидатор воспринимает это как попытку передать объект, который не заполнен до конца. В идеале, если упаковки не используются, поле должно содержать СправочникСсылка.УпаковкиЕдиницыИзмерения.ПустаяСсылка. Разберем по шагам, как локализовать и устранить этот дефект.
Поскольку ошибка возникает при выполнении фонового задания обмена, обычная точка останова может не сработать. Выясним причину, настроив отладку фоновых заданий:
Когда отладчик «поймает» ошибку в модуле ОбменДаннымиXDTOСервер, проанализируем содержимое переменной ОбъектXDTO. Нам нужно добраться до коллекции Товары и найти ту строку, на которой спотыкается система. Посмотрим на выражение:
ОбъектXDTO.Товары.Строка[1].ДанныеНоменклатуры.Упаковка.ЕдиницаИзмерения
Если мы видим там Неопределено, значит, в самой базе данных 1С в табличной части документа записан мусор или некорректный тип данных, который визуально в интерфейсе может выглядеть как пустое поле.
Иногда корень проблемы лежит в справочнике УпаковкиЕдиницыИзмерения. Даже если вы не используете упаковки, система может обращаться к ним. Рассмотрим, как проверить чистоту данных в справочнике:
Упаковки и единицы измерения.Важный момент: Если вы обнаружили записи, где реквизиты не заполнены, попробуйте перевыбрать их вручную. Как показывает практика, простая перезапись элемента справочника (нажать Enter в поле, чтобы установилась пустая ссылка вместо Null) часто решает проблему валидации XDTO.
Если документов много, исправлять каждый вручную невозможно. Мы можем воспользоваться обработкой или написать небольшой код для очистки «фантомных» упаковок. Рассмотрим пример кода, который обходит табличную часть Товары в документе и гарантированно очищает поле упаковки, если оно заполнено неверно:
// Пример кода для исправления документов "Заказ поставщику"
Выборка = Документы.ЗаказПоставщику.Выбрать(ДатаНачала, ДатаОкончания);
Пока Выборка.Следующий() Цикл
ОбъектДок = Выборка.ПолучитьОбъект();
Модифицирован = Ложно;
Для Каждого СтрокаТЧ Из ОбъектДок.Товары Цикл
// Проверяем, если значение не является ссылкой или это битая ссылка
Если ТипЗнч(СтрокаТЧ.Упаковка) <> Тип("СправочникСсылка.УпаковкиЕдиницыИзмерения")
Или СтрокаТЧ.Упаковка = Неопределено Тогда
СтрокаТЧ.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
Модифицирован = Истина;
КонецЕсли;
КонецЦикла;
Если Модифицирован Тогда
ОбъектДок.Записать(РежимЗаписиДокумента.Запись);
Сообщить("Исправлен документ: " + ОбъектДок.Ссылка);
КонецЕсли;
КонецЦикла;
В некоторых случаях, как отмечают специалисты на форумах, помогает даже присвоение пустой строки "", так как платформа 1С при записи сама приводит это к пустой ссылке нужного типа, очищая скрытые некорректные значения.
Если вы не хотите писать код, воспользуемся стандартной обработкой «Групповое изменение реквизитов»:
Заказ поставщику (или другой проблемный документ).Товары.Упаковка.Проанализировав ситуацию, мы выяснили, что ошибка синхронизации — это следствие несоответствия данных в базе новым правилам валидации XDTO. Основные рекомендации по предотвращению подобных проблем в будущем:
Неопределено.После проведения очистки данных обязательно выполните ТиИ (Тестирование и исправление) с проверкой ссылочной целостности, чтобы исключить наличие объектов, ссылающихся на несуществующие записи в справочнике упаковок.