Перенос данных между различными версиями платформы 1С (особенно переход с легендарной 7.7 на современную 8.3) — это процесс, который редко проходит без технических сложностей. Одной из самых изматывающих проблем является ситуация, когда выгрузка из базы-источника завершается успешно, а загрузка в базу-приемник «падает» с неинформативным сообщением об ошибке. В этой статье мы разберем по шагам, как локализовать проблемный объект в XML-файле и исправить ошибки в правилах обмена.
Прежде чем приступать к отладке, проанализируем ситуацию. В большинстве случаев ошибка Поле объекта не обнаружено при загрузке через УниверсальныйОбменДаннымиXML означает, что в правилах обмена (ПКО или ПКС) указан реквизит, которого физически нет в текущем релизе конфигурации-приемника. Рассмотрим типичный пример: в современных версиях «1С:Бухгалтерия предприятия 3.0» многие реквизиты СтавкаНДС были переименованы в УдалитьСтавкаНДС в связи с переходом на новые механизмы учета ставок. Если ваши правила обмена обращаются к старому имени, система выдаст ошибку именно в момент попытки записи значения в это поле.
Этот метод считается одним из самых быстрых и эффективных для опытных разработчиков. Рассмотрим подробнее, как его настроить:
ПКО, ПКС, ПВД.Теперь при запуске загрузки в режиме «Предприятие», как только система наткнется на некорректное правило, отладчик «выбросит» вас в модуль обработки УниверсальныйОбменДаннымиXML на строку, где происходит динамическое выполнение кода. Проанализировав стек вызовов и значения переменных, мы сможем увидеть, какой именно объект загружается в данный момент.
Если стандартная остановка по ошибке не дает полной картины, мы можем прибегнуть к «хирургическому» вмешательству в код обработки. Рассмотрим пример изменения модуля обработки УниверсальныйОбменДаннымиXML (или встроенной обработки в конфигурации):
Найдем строку, где происходит непосредственное присвоение значения реквизиту (в типовых версиях это часто район строки 8420). Перед выполнением подозрительной операции добавим код вывода информации:
// Вставляем отладочную информацию
Попытка
// Здесь оригинальный код загрузки реквизита
Объект[ИмяРеквизита] = Значение;
Исключение
Сообщить("Ошибка при загрузке объекта: " + Объект);
Сообщить("Реквизит: " + ИмяРеквизита);
Сообщить("Значение: " + Значение);
ВызватьИсключение; // Повторный вызов, чтобы прервать процесс
КонецПопытки;
Этот нехитрый прием позволит нам мгновенно увидеть в окне сообщений, на какой «Номенклатуре» или «Документе» споткнулся обмен.
Проанализируем более профессиональный подход, встроенный в саму обработку «Универсальный обмен данными XML». На вкладке Настройка отладки можно включить режим отладки обработчиков. Рассмотрим, что это дает:
Это исключает необходимость копаться в огромном модуле самого «Универсального обмена», так как вы будете работать только с кодом ваших ПКО (Правил конвертации объектов).
Если вы не хотите менять код, выясним причину через лог-файлы. При загрузке 1С часто пишет протокол во временный каталог пользователя. Обычно это путь: ...\AppData\Local\Temp. Ищите файлы с маской v8_*.txt.
Разберем, как интерпретировать содержимое такого файла:
Поле объекта не обнаружено (СтавкаНДС)).Как отмечалось в обсуждении, одной из самых частых причин падения обмена при переходе на БП 3.0 является именно ставка НДС. Выясним, как это исправить в конфигурации Конвертация данных 2.1:
MD83exp.epf.СтавкаНДС подсвечено красным — значит, оно удалено. Замените его на актуальное или пропишите алгоритм заполнения в обработчике ПередЗагрузкой.Рассмотрим важный нюанс: если обмен идет не через файл, а через Планы обмена (фоновая синхронизация), то диагностика усложняется. В этом случае используется обработка КонвертацияОбъектовИнформационныхБаз. Здесь сообщения об ошибках могут не выводиться на экран, а записываться в Журнал регистрации. Проанализируем журнал регистрации в базе-приемнике, отфильтровав события по категории «Обмен данными». Если информации недостаточно, используйте метод с остановкой по ошибке в конфигураторе, как описано в Методе 1 — это работает и для фоновых заданий, если в настройках отладки включено Отладка фоновых заданий — Искать автоматически.
Мы разобрали несколько способов поиска «битого» объекта. Подытожим последовательность действий:
Temp.ПКО.Использование этих методов сэкономит вам часы ручного перебора документов и позволит быстро восстановить работоспособность обмена между системами.