Как найти объект, на котором происходит ошибка при обмене XML между 1С 7.7 и 8.3

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Перенос данных между различными версиями платформы 1С (особенно переход с легендарной 7.7 на современную 8.3) — это процесс, который редко проходит без технических сложностей. Одной из самых изматывающих проблем является ситуация, когда выгрузка из базы-источника завершается успешно, а загрузка в базу-приемник «падает» с неинформативным сообщением об ошибке. В этой статье мы разберем по шагам, как локализовать проблемный объект в XML-файле и исправить ошибки в правилах обмена.

Выясняем причину: почему возникают ошибки при загрузке

Прежде чем приступать к отладке, проанализируем ситуацию. В большинстве случаев ошибка Поле объекта не обнаружено при загрузке через УниверсальныйОбменДаннымиXML означает, что в правилах обмена (ПКО или ПКС) указан реквизит, которого физически нет в текущем релизе конфигурации-приемника. Рассмотрим типичный пример: в современных версиях «1С:Бухгалтерия предприятия 3.0» многие реквизиты СтавкаНДС были переименованы в УдалитьСтавкаНДС в связи с переходом на новые механизмы учета ставок. Если ваши правила обмена обращаются к старому имени, система выдаст ошибку именно в момент попытки записи значения в это поле.

Метод 1. Использование отладки с остановкой по ошибке

Этот метод считается одним из самых быстрых и эффективных для опытных разработчиков. Рассмотрим подробнее, как его настроить:

  1. Запустим базу-приемник в режиме Конфигуратор.
  2. Включим режим отладки и откроем меню Отладка — Остановка по ошибке.
  3. В появившемся окне установим флаг Останавливаться по ошибке.
  4. Чтобы не останавливаться на каждой системной ошибке (которых в типовых конфигурациях может быть много), добавим условие в поле «Имя ошибки содержит». Впишем туда сокращения объектов правил обмена: ПКО, ПКС, ПВД.

Теперь при запуске загрузки в режиме «Предприятие», как только система наткнется на некорректное правило, отладчик «выбросит» вас в модуль обработки УниверсальныйОбменДаннымиXML на строку, где происходит динамическое выполнение кода. Проанализировав стек вызовов и значения переменных, мы сможем увидеть, какой именно объект загружается в данный момент.

Метод 2. Модификация кода обработки загрузки

Если стандартная остановка по ошибке не дает полной картины, мы можем прибегнуть к «хирургическому» вмешательству в код обработки. Рассмотрим пример изменения модуля обработки УниверсальныйОбменДаннымиXML (или встроенной обработки в конфигурации):

Найдем строку, где происходит непосредственное присвоение значения реквизиту (в типовых версиях это часто район строки 8420). Перед выполнением подозрительной операции добавим код вывода информации:


// Вставляем отладочную информацию
Попытка
    // Здесь оригинальный код загрузки реквизита
    Объект[ИмяРеквизита] = Значение;
Исключение
    Сообщить("Ошибка при загрузке объекта: " + Объект);
    Сообщить("Реквизит: " + ИмяРеквизита);
    Сообщить("Значение: " + Значение);
    ВызватьИсключение; // Повторный вызов, чтобы прервать процесс
КонецПопытки;

Этот нехитрый прием позволит нам мгновенно увидеть в окне сообщений, на какой «Номенклатуре» или «Документе» споткнулся обмен.

Метод 3. Генерация внешней обработки отладки

Проанализируем более профессиональный подход, встроенный в саму обработку «Универсальный обмен данными XML». На вкладке Настройка отладки можно включить режим отладки обработчиков. Рассмотрим, что это дает:

  1. Система предложит вам создать файл внешней обработки.
  2. В этот файл будут выгружены все алгоритмы из ваших правил обмена (код из «Перед загрузкой», «При загрузке» и т.д.).
  3. Вы подключаете эту обработку в настройках обмена, и теперь можете ставить точки останова прямо в коде правил обмена, как в обычном модуле 1С.

Это исключает необходимость копаться в огромном модуле самого «Универсального обмена», так как вы будете работать только с кодом ваших ПКО (Правил конвертации объектов).

Метод 4. Поиск объекта в XML через временные файлы

Если вы не хотите менять код, выясним причину через лог-файлы. При загрузке 1С часто пишет протокол во временный каталог пользователя. Обычно это путь: ...\AppData\Local\Temp. Ищите файлы с маской v8_*.txt.

Разберем, как интерпретировать содержимое такого файла:

Проблема реквизита «СтавкаНДС» и её решение

Как отмечалось в обсуждении, одной из самых частых причин падения обмена при переходе на БП 3.0 является именно ставка НДС. Выясним, как это исправить в конфигурации Конвертация данных 2.1:

  1. Выгрузите актуальные метаданные вашей базы 8.3 с помощью обработки MD83exp.epf.
  2. Загрузите их в «Конвертацию данных».
  3. Откройте ваши правила обмена и обновите описание метаданных приемника.
  4. Проверьте ПКС для всех документов, где есть НДС. Если поле СтавкаНДС подсвечено красным — значит, оно удалено. Замените его на актуальное или пропишите алгоритм заполнения в обработчике ПередЗагрузкой.

Особенности работы с Планами обмена

Рассмотрим важный нюанс: если обмен идет не через файл, а через Планы обмена (фоновая синхронизация), то диагностика усложняется. В этом случае используется обработка КонвертацияОбъектовИнформационныхБаз. Здесь сообщения об ошибках могут не выводиться на экран, а записываться в Журнал регистрации. Проанализируем журнал регистрации в базе-приемнике, отфильтровав события по категории «Обмен данными». Если информации недостаточно, используйте метод с остановкой по ошибке в конфигураторе, как описано в Методе 1 — это работает и для фоновых заданий, если в настройках отладки включено Отладка фоновых заданий — Искать автоматически.

Итоги и рекомендации

Мы разобрали несколько способов поиска «битого» объекта. Подытожим последовательность действий:

  1. Сначала проверьте Журнал регистрации и временные файлы в Temp.
  2. Если объект не найден, запустите отладку с остановкой по строке ПКО.
  3. Обязательно проверьте актуальность правил обмена относительно релиза конфигурации-приемника.
  4. Помните, что универсальный обмен — это надежный инструмент, и в 99% случаев проблема кроется в несоответствии имен реквизитов в правилах и в базе данных.

Использование этих методов сэкономит вам часы ручного перебора документов и позволит быстро восстановить работоспособность обмена между системами.

← На главную