Перенос данных между конфигурациями 1С — это процесс, который часто сопровождается техническими сложностями, особенно когда речь идет о типовых механизмах обмена через XML. Одной из наиболее распространенных и при этом «немых» ошибок является сбой в методе XMLЗначение. Пользователи видят сообщение вида: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1131)}: Ошибка при вызове метода контекста (XMLЗначение). Эта ошибка блокирует загрузку данных, при этом штатные средства логов часто не дают конкретики, на каком именно объекте произошел сбой.
В этой статье мы подробно разберем, почему возникает эта ошибка, как локализовать проблемный объект с помощью отладчика и какие данные в исходной базе (1С:Бухгалтерия) могут приводить к «падению» загрузки в 1С:ЗУП.
Метод XMLЗначение(Тип, Текст) используется платформой 1С для десериализации текстового представления данных из XML-файла в типизированное значение (например, в Число, Дата, Булево или Перечисление). Если в XML-файле в теге значения передается строка, которую невозможно привести к целевому типу, платформа генерирует исключение.
Проанализируем ситуацию: при переносе из БП 3.0 в ЗУП 3.1 правила обмена ожидают, что определенное поле (например, признак постановки на учет в ранние сроки беременности) должно иметь логический тип (Истина или Ложь). Однако, если в базе-источнике из-за программного сбоя или некорректного заполнения в это поле попал текст (например, «Не поставлена»), парсер XML не сможет преобразовать это в Булево, и процесс прервется.
Когда стандартное сообщение об ошибке не указывает на объект (сотрудника, документ или организацию), нам необходимо прибегнуть к трассировке кода. Рассмотрим, как это сделать в конфигурации 1С:ЗУП, куда загружаются данные.
УниверсальныйОбменДаннымиXML. Обычно она встроена в состав конфигурации или используется как внешняя. Если вы используете типовой помощник перехода, отлаживать нужно модуль объекта этой обработки.XMLЗначение). Нам нужно установить точку останова с условием или просто точку останова внутри блока Попытка...Исключение.Тип и Значение.Пример кода, на котором происходит сбой в модуле обработки:
// Фрагмент модуля обработки УниверсальныйОбменДаннымиXML
Попытка
Результат = XMLЗначение(ТипДанных, СтрокаXML);
Исключение
// Здесь происходит остановка, если данные некорректны
ЗаписатьЛогОшибки("Не удалось преобразовать: " + СтрокаXML);
КонецПопытки;
Проанализируем ситуацию: если переменная ТипДанных имеет значение Булево, а в СтрокаXML содержится «Не поставлена» вместо «0» или «false», мы нашли виновника.
Выяснив, какой именно реквизит вызывает сбой, мы должны вернуться в базу 1С:Бухгалтерия. Рассмотрим наиболее частый случай, выявленный на практике: некорректное заполнение данных о пособиях или кадровых сведениях.
Как показывает опыт, ошибка часто кроется в реквизите ПоставленаНаУчетВРанниеСрокиБеременности. В некоторых версиях правил или при ручном редактировании данных в это поле может записаться строковое значение вместо логического.
Алгоритм исправления:
Ложь (для тех, у кого оно заполнено неверно).Если база большая и найти ошибку «вслепую» трудно, разберем альтернативный метод загрузки через файлы. Это позволит исключить проблемные объекты из обмена и загрузить остальную часть данных успешно.
УниверсальныйОбменДаннымиXML вручную.настройки.xml (или аналогичный), который формируется при выгрузке. В нем можно вручную исключить конкретные файлы из списка загрузки, если вы выполняете перенос по частям.Рассмотрим другие ситуации, которые могут вызвать аналогичный сбой метода XMLЗначение:
#13#10). Хотя они не относятся напрямую к типу Булево, они могут «сломать» парсинг XML-структуры, если не были экранированы.XMLЗначение при попытке привести это к типу Дата выдаст ошибку. Проанализируем даты всех приказов на прием и увольнение перед переносом.Проанализируем версии конфигураций. Часто ошибка возникает из-за того, что правила обмена, встроенные в ЗУП, «отстают» от структуры метаданных БП 3.0 после обновления. Выясним, есть ли возможность использовать свежие правила:
tmplts). Там часто лежит файл ExchangeRules.xml.УниверсальныйОбменДаннымиXML вручную перед началом обмена. Это может решить проблему, если разработчики 1С уже внесли исправления в обработку типов данных.Подводя итог, можно сказать, что ошибка XMLЗначение — это всегда следствие несоответствия «ожидание-реальность» в данных. Тщательная проверка логических полей и дат в исходной базе 1С:Бухгалтерия в 90% случаев позволяет устранить проблему без изменения программного кода.