Почему в 1С перестали загружаться накладные из Excel и как исправить ошибку преобразования XDTO?

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

Многие пользователи 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-пакете.

Механизм работы правил преобразования

Посмотрим, как программа взаимодействует с этими правилами. В системе существует РегистрСведений.ПравилаПреобразованияФорматов. Рассмотрим алгоритм, по которому работает система:

  1. При попытке загрузки документа из файла программа обращается к интернет-ресурсу и скачивает описание текущих версий правил (файл arbitrary.xml).
  2. Система сравнивает дату обновления в этом файле с датой, записанной в регистре сведений базы.
  3. Если дата на сервере новее, программа скачивает новый файл .xsl и сохраняет его в ресурс ХранилищеЗначения регистра правил.
  4. При парсинге Excel-файла сначала создается промежуточный XML, который затем трансформируется по этим правилам.

Проблема заключалась в том, что обновленные правила оказались слишком строгими для данных, приходящих из Excel. Позже разработчики 1С признали ошибку и исправили правила на сервере, заменив тип xs:decimal на более лояльный xs:float, однако у пользователей уже закэшировались "плохие" правила.

Решение проблемы: Принудительное обновление правил

Рассмотрим пошагово, как заставить программу перекачать исправленные правила с сервера 1С. Поскольку система не будет скачивать файл повторно, если дата в регистре совпадает с датой на сервере, нам нужно очистить кэш.

Способ 1: Очистка через стандартный интерфейс (для администратора)

  1. Перейдем в раздел Функции для технического специалиста (ранее назывался "Все функции").
  2. Найдем Регистр сведений под названием Правила преобразования форматов.
  3. Выделим все записи в этом регистре и удалим их. Это безопасно, так как система восстановит их автоматически при следующей загрузке.
  4. Дополнительно найдем Константы. Нам нужна константа с именем, отвечающим за дату загрузки описания форматов (в разных версиях БЭД она может называться ДатаЗагрузкиОписанияФорматовКонвертации или храниться в скрытых настройках). Ее необходимо очистить (установить пустую дату).
  5. Перезапустим сеанс 1С и попробуем загрузить файл снова.

Способ 2: Использование программного кода

Если вы имеете доступ к консоли кода или внешней обработке, проанализируем следующий метод очистки, который гарантированно приведет к обновлению данных:


// Очистка регистра правил преобразования
НаборЗаписей = РегистрыСведений.ПравилаПреобразованияФорматов.СоздатьНаборЗаписей();
НаборЗаписей.Записать();

// Очистка даты последнего обновления в константах или параметрах учета
// В БП 3.0 часто используется параметр в регистре или константе
// Пример для типовых БЭД:
ОбновлениеИнформационнойБазы.УстановитьПараметрВыполненияИнформационнойБазы("ДатаЗагрузкиОписанияФорматовКонвертации", '00010101');

Как проверить, что правила обновились?

После проведения очистки и попытки загрузки XLS-файла, загляните снова в РегистрСведений.ПравилаПреобразованияФорматов. Вы должны увидеть там записи с текущей датой или датой исправления от 1С (после 26.06.2024). В ресурсе записи будет лежать двоичный файл. Если выгрузить его и открыть в текстовом редакторе, мы сможем увидеть внутри определение типов:

Было (ошибочный вариант): <Value xsi:type="xs:decimal">

Стало (исправленный вариант): <Value xsi:type="xs:float">

Дополнительные рекомендации

Если после очистки регистра ошибка сохраняется, проанализируем дополнительные факторы:

Таким образом, мы выяснили, что проблема носила внешний характер и была вызвана обновлением инфраструктурных файлов на стороне вендора. Регулярная очистка кэша правил преобразования является эффективным методом решения подобных "внезапных" сбоев в работе подсистемы электронного взаимодействия.

← На главную