При использовании стандартной обработки «Универсальный обмен данными в формате XML» (особенно при переносе данных из «Управление торговлей 10.3» в «Бухгалтерию предприятия 3.0») пользователи часто сталкиваются с парадоксальной ситуацией: счетчик объектов при выгрузке и загрузке показывает положительный результат, но сами документы в списках конфигурации-приемника отсутствуют. Также бывают случаи, когда документы загружаются не полностью (например, без аналитики или статей затрат), и только после третьего или четвертого повторения процедуры данные «доезжают» до базы. Рассмотрим подробно причины этого явления и разберем алгоритм диагностики.
Первое, на что мы должны обратить внимание — это ловушка интерпретации лога загрузки. Проанализируем ситуацию: обработка сообщает, что выгружено и загружено 144 объекта. Это совершенно не означает, что в базе должно появиться 144 документа Требование-Накладная. В число этих объектов входят:
Номенклатура, Склады, Контрагенты, СтатьиЗатрат).Если в файле выгрузки содержатся ссылки на новые элементы справочников, система сначала создает их. Если по какой-то причине документ не прошел проверку (например, не заполнился обязательный реквизит), он не будет записан, но справочники останутся в базе. При повторной загрузке система уже имеет готовые ссылки, что облегчает создание документа. Выясним, почему это происходит поэтапно.
Одной из главных причин, по которой документы могут появляться «со второй попытки», является нарушение логики в правилах обмена (КД 2.0). Рассмотрим ситуацию: документ загружается в базу-приемник. В процессе загрузки срабатывают обработчики событий, такие как ПриЗагрузке или ПередЗаписью. Если в этих обработчиках прописана логика, требующая наличия определенных данных (например, установленных счетов учета для конкретной номенклатуры), а эти данные еще не прогружены из файла, документ может записаться с ошибкой или не записаться вовсе.
Проанализируем пример со статьей затрат. Если при первой загрузке статья затрат была создана как объект, но ссылка в документе на нее не успела «привязаться» из-за порядка следования объектов в XML-файле, документ останется пустым. При повторном запуске обмена ссылка на статью уже существует в базе-приемнике, и механизм поиска объектов по идентификатору (GUID) успешно сопоставляет данные. Именно поэтому на 10-й раз данные могут «подтянуться» — к этому моменту вся необходимая ссылочная масса уже накоплена в базе.
Часто проблема носит чисто визуальный характер. Рассмотрим, почему при загрузке на сервере документы видны сразу, а на локальном ПК — нет. В платформе 1С существует несколько уровней кэширования:
Если вы загрузили данные и не видите их, попробуйте выполнить команду «Обновить» (клавиши Shift + F5) или полностью перезайти в программу. Если после перезахода документы появились, значит, проблема была в обновлении интерфейса.
Вместо того чтобы гадать, почему документы не появились, проанализируем Журнал регистрации в базе-приемнике. Это самый надежный способ диагностики. Нам необходимо выполнить следующие шаги:
Данные.Запись.Зачастую там можно обнаружить записи типа: «Объект не записан, так как не заполнено поле Статья затрат». Это происходит потому, что при загрузке через универсальную обработку по умолчанию может быть выключен режим ОбменДанными.Загрузка = Истина, и система начинает проверять документ по всем правилам бизнес-логики конфигурации «Бухгалтерия предприятия».
Разберем важную настройку в обработке «Универсальный обмен данными». В окне загрузки есть флаг «Использовать режим обмена данными для объектов». Рассмотрим, на что он влияет:
ОбменДанными.Загрузка устанавливается в значение Истина. Это отключает большинство встроенных проверок конфигурации (подписки на события, проверки заполнения, запреты изменения). Документ записывается «как есть» из файла.Рекомендация: Всегда проверяйте, чтобы этот флаг был включен, если ваша задача — просто перенести данные без выполнения сложных бизнес-проверок в момент загрузки.
Если вы являетесь разработчиком правил обмена, проверьте код в событии ПослеЗагрузки для ПВД или ПКО. Иногда там встречаются конструкции, которые пытаются провести документ сразу после записи:
Если Объект.Проведен Тогда
Попытка
Объект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Документ не проведен: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Если в документе не хватает данных для проведения, он может не только не провесться, но и (в зависимости от настроек транзакции) откатить свою запись. Выясним причину через отладку: используйте параметр РежимОтладки в обработке обмена, чтобы пошагово проследить за процессом записи каждого из 144 объектов.
Чтобы решить проблему «исчезающих» документов, выполните следующие действия:
ОбменДанными.Загрузка = Истина.Помните, что универсальный обмен XML — это не просто копирование файлов, а сложный процесс десериализации объектов, сильно зависящий от логики конфигурации-приемника.