При выполнении обмена данными между конфигурациями (особенно при переходе со старых версий, таких как 1С:Бухгалтерия 7.7, на современные 1С:Бухгалтерия 3.0) пользователи и разработчики часто сталкиваются с критической остановкой процесса. Ошибка фиксируется в модуле обработки УниверсальныйОбменДаннымиXML и сопровождается сообщением: «Ошибка преобразования данных XML». Эта проблема указывает на то, что программный механизм не может интерпретировать строковое значение из файла обмена и привести его к нужному типу данных 1С.
Рассмотрим детально, как локализовать место возникновения ошибки, проанализировать причины и устранить их. Мы пройдем путь от настройки отладчика до редактирования правил конвертации и очистки данных в базе-источнике.
Первое, что необходимо сделать — это заставить систему остановиться именно в тот момент, когда происходит сбой. Поскольку ошибка возникает внутри платформенных механизмов при вызове метода XMLЗначение, нам поможет стандартный функционал конфигуратора.
Разберем последовательность действий для активации отладки:
F5) и повторите выгрузку/загрузку данных, которая приводила к сбою.Когда система «вылетит», конфигуратор автоматически откроет модуль УниверсальныйОбменДаннымиXML на строке:
Возврат XMLЗначение(Тип, СокрП(СтрЗначение));
Проанализируем ситуацию в этой точке. Теперь мы можем точно увидеть, какие именно данные вызвали конфликт. Выделите переменную СтрЗначение, нажмите Shift + F9. Вы увидите текстовую строку, которую 1С пытается преобразовать. Затем проделайте то же самое с переменной Тип, чтобы понять, какой тип данных ожидается (например, Дата, Число или Булево).
Выясним основные причины, по которым метод XMLЗначение может выдавать ошибку. На основе практики и сообщений с форумов можно выделить несколько критических сценариев.
Это самая распространенная причина. В формате XML дата должна иметь строго определенный вид: YYYY-MM-DDThh:mm:ss. Если в базе-источнике (например, в 7.7) дата была введена некорректно или программно записана в странном формате, в файл обмена может попасть строка вида 2000-00-00T00:00:00 или просто 01.01.01.
Проанализируем пример: если СтрЗначение содержит 2000-00-00, преобразование в тип Дата выдаст ошибку, так как нулевого месяца и нулевого дня не существует. Для исправления ситуации необходимо найти объект в исходной базе с такой датой и исправить её на корректную (например, 01.01.2000).
Иногда строка выглядит абсолютно нормальной, но загрузка всё равно прерывается. Это часто связано с наличием так называемых «непечатных» управляющих символов ASCII (коды от 0 до 31). В 1С 7.7 такие символы часто попадали в наименования или комментарии при копировании текста из сторонних программ или почты.
Стандарт XML 1.0 запрещает большинство этих символов. Чтобы проверить эту версию, попробуйте открыть XML-файл обмена в текстовом редакторе Notepad++ и включите отображение всех символов. Если вы увидите блоки типа SOH, NUL или SUB, значит, дело в них. Их нужно удалить из справочников или документов в базе-источнике перед выгрузкой.
Рассмотрим ситуацию, когда в правилах обмена (ПКС — Поля Конвертации Свойств) допущена логическая ошибка. Например, в приемнике поле имеет тип Булево, а из источника передается текстовое описание «Да» или «Нет» вместо стандартных «1»/«0» или «true»/«false».
Метод XMLЗначение не сможет автоматически превратить русское слово «Да» в логическую истину. В этом случае необходимо проверить обработчики в Конвертации данных и убедиться, что передается правильный тип.
При передаче чисел 1С ожидает в качестве десятичного разделителя точку. Если из-за региональных настроек сервера или особенностей формирования текстового файла в строку попала запятая или пробел в качестве разделителя разрядов (например, 1 250,50), функция преобразования упадет.
Чтобы понять, какой именно документ или элемент справочника «виноват» в ошибке, когда отладчик остановился на строке Возврат XMLЗначение..., посмотрите вверх по стеку вызовов. В дереве вызовов можно найти процедуры, которые отвечают за чтение текущего узла. Там обычно доступны переменные, содержащие идентификатор или имя метаданных обрабатываемого объекта.
Посмотрим на пример отладки: если мы видим, что ошибка происходит при обработке типа Число, а в СтрЗначение передается пустая строка, проверьте в правилах конвертации, не стоит ли для этого поля признак обязательного заполнения или нет ли ошибок в обработчике «Перед загрузкой».
Для предотвращения подобных ошибок в будущем рекомендуем придерживаться следующих правил:
Таким образом, ошибка преобразования XML — это сигнал о том, что строковые данные в файле обмена нарушают ожидания типизации платформы 1С. Использование отладчика и внимательный анализ переменных Тип и СтрЗначение позволяют решить проблему в кратчайшие сроки.