Многие пользователи 1С:Бухгалтерия предприятия 3.0 и других современных конфигураций столкнулись с внезапной проблемой: при попытке загрузить накладную (ТОРГ-12) или счет-фактуру из файла XLS/XLSX система выдает критическую ошибку "Ошибка преобразования данных XDTO". Самое странное в этой ситуации то, что еще вчера те же самые файлы загружались без проблем, а конфигурация программы при этом не обновлялась. Разберем детально, почему это происходит и как восстановить работоспособность загрузки.
Проанализируем техническую сторону вопроса. Ошибка возникает в общем модуле КонвертацияЭДО при вызове метода СериализаторXDTO.ПрочитатьXML. Система пытается разобрать сформированный временный XML-файл, используя правила, которые хранятся внутри информационной базы. Рассмотрим фрагмент стека ошибки, который указывает на проблемное место:
Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, ТипЗначения);
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/core}Structure Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/core}Structure по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Value Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/core}Value Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}decimal
Выясним причину этой ошибки. Она кроется в механизме 1С, который предназначен для упрощения жизни пользователям — в автоматическом обновлении правил конвертации форматов. Программа при запуске или при выполнении операции загрузки обращается к внешнему ресурсу 1С (обычно это downloads.v8.1c.ru), чтобы скачать актуальные правила преобразования файлов (XSLT-схемы). 26 июня 2024 года компания 1С обновила файл document_params_v20.xsl, заменив в нем типы данных для числовых полей на xs:decimal. Это привело к тому, что при наличии в Excel пустых ячеек или ячеек с форматированием, которое парсер не мог однозначно преобразовать в число, возникал конфликт типов данных в XDTO-пакете.
Посмотрим, как программа взаимодействует с этими правилами. В системе существует РегистрСведений.ПравилаПреобразованияФорматов. Рассмотрим алгоритм, по которому работает система:
arbitrary.xml)..xsl и сохраняет его в ресурс ХранилищеЗначения регистра правил.Проблема заключалась в том, что обновленные правила оказались слишком строгими для данных, приходящих из Excel. Позже разработчики 1С признали ошибку и исправили правила на сервере, заменив тип xs:decimal на более лояльный xs:float, однако у пользователей уже закэшировались "плохие" правила.
Рассмотрим пошагово, как заставить программу перекачать исправленные правила с сервера 1С. Поскольку система не будет скачивать файл повторно, если дата в регистре совпадает с датой на сервере, нам нужно очистить кэш.
Способ 1: Очистка через стандартный интерфейс (для администратора)
Правила преобразования форматов.ДатаЗагрузкиОписанияФорматовКонвертации или храниться в скрытых настройках). Ее необходимо очистить (установить пустую дату).Способ 2: Использование программного кода
Если вы имеете доступ к консоли кода или внешней обработке, проанализируем следующий метод очистки, который гарантированно приведет к обновлению данных:
// Очистка регистра правил преобразования
НаборЗаписей = РегистрыСведений.ПравилаПреобразованияФорматов.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
// Очистка даты последнего обновления в константах или параметрах учета
// В БП 3.0 часто используется параметр в регистре или константе
// Пример для типовых БЭД:
ОбновлениеИнформационнойБазы.УстановитьПараметрВыполненияИнформационнойБазы("ДатаЗагрузкиОписанияФорматовКонвертации", '00010101');
После проведения очистки и попытки загрузки XLS-файла, загляните снова в РегистрСведений.ПравилаПреобразованияФорматов. Вы должны увидеть там записи с текущей датой или датой исправления от 1С (после 26.06.2024). В ресурсе записи будет лежать двоичный файл. Если выгрузить его и открыть в текстовом редакторе, мы сможем увидеть внутри определение типов:
Было (ошибочный вариант): <Value xsi:type="xs:decimal">
Стало (исправленный вариант): <Value xsi:type="xs:float">
Если после очистки регистра ошибка сохраняется, проанализируем дополнительные факторы:
.xls в .xlsx (Книга Excel) средствами самого Microsoft Excel. Это иногда помогает корректно интерпретировать типы данных в ячейках до того, как они попадут в 1С.Таким образом, мы выяснили, что проблема носила внешний характер и была вызвана обновлением инфраструктурных файлов на стороне вендора. Регулярная очистка кэша правил преобразования является эффективным методом решения подобных "внезапных" сбоев в работе подсистемы электронного взаимодействия.