Инструкция как устранить ошибку преобразования данных XDTO
При входе в базу 1с вы можете увидеть “Ошибка преобразования данных XDTO:
Начало Свойства: errorProcessingSettings
Чаще всего ошибка возникает при определенном типе запуска: это либо через тонкий клиент, либо через линк42, случаи бывают разные. Через браузер такие базы запускаются без ошибок.
Есть простое решение данной проблемы.
Достаточно запустить базу доступным нам способом (где нет ошибки) включить Функции тех. специалиста (Меню — Настройки — Параметры — Режим технического специалиста)
В Функциях для технического специалиста ищем Управление настройками обработки ошибок (Стандартные)
Ошибка преобразования данных XDTO в версиях 8.3.22.1603 и 8.3.21.1508 платформы «1C:Предприятие»
В редких случаях у пользователей версий платформы 8.3.22.1603 или 8.3.21.1508 может проявляться ошибка преобразования данных XDTO при использовании функций преобразования строки в число с плавающей точкой в операциях XDTO.
Ошибка исправлена в версиях платформы 8.3.22.1672/8.3.21.1607 и выше.
Пользователям, у которых появилась такая проблема, предлагаем обновиться на указанные версии платформы.
Версии платформы 8.3.22.1603 и 8.3.21.1508 больше недоступны для скачивания на сайте releases.1с.ru.
Фирма «1С» приносит извинения, а также просит партнеров донести эту информацию до пользователей, у которых проявилась проблема, и помочь им заменить версию платформы.
Ошибка Несоответствие типов XDTO
Текст Функции
// Позволяет дополнить/изменить контент электронного документа
// перед его отправкой.
//
// Параметры
// Параметры — Структура — Содержит коллекцию, переданных параметров:
// * ТипКонтента — Строка — идентификатор типа контента (см. ТипыКонтента());
// * Content — Структура — Протоконтент исходящего документа;
// * ДокументСсылка — ЛюбаяСсылка — Ссылка на документ информационной базы, по которому собирается протоконтент;
// * DocumentType — Строка — (Устарел) Позволяет определить тип протоструктуры.
// Параметр сохранен для обратной совместимости с ПМ версии 1.4 или ниже.
// Рекомендуется вместо него ориентироваться на ТипКонтента.
//
// Возвращаемое значение:
// Структура — Протоконтент электронного документа.
//
Функция ПодготовитьЭлектронныйДокумент(Параметры)
Если ТипЗнч(Параметры) = Тип("Структура") Тогда
Документ1С = Параметры.Результат.Документ1С;
ШтрихкодыУпаковок = Документ1С.ШтрихкодыУпаковок;
Протоконтент = Параметры.Результат.Content;
КоллекцияСтрок = Протоконтент.Table.Items;
ProtoФабрикаXDTO = ProtoФабрикаXDTO();
ТипЗначенияXDTO_String255 = ProtoФабрикаXDTO.Тип("http://diadoc.kontur.ru/dll_types", "String255");
Если Параметры.ВидДокументаРазвернутый.ID = "ID_УПД_ДОП" Тогда
Для Сч = 1 По КоллекцияСтрок.Количество() — 1 Цикл
Индекс = Сч — 1;
Элемент = КоллекцияСтрок[Индекс];
НомСредИдентТов = ШтрихкодыУпаковок[Индекс].ЗначениеШтрихкода; // лучше добавить поле НоменклатураСсылка в ТЧ "ШтрихкодыУпаковок" чем опиратся на индекс в строках !
СписокXDTO = Элемент.ItemIdentificationNumbers;
ВладеющееСвойствоТипИмя = СписокXDTO.ВладеющееСвойство.Тип.Имя;
// тип создаваемого ОбъектаXDTO — ItemIdentificationNumber
// Свойства:
// PackageIds: Коллекция Cтрок (1-255) — уникальный идентификатор вторичной (потребительской)/третичной (заводской, транспортной) упаковки [НомУпак].
// Обязателен при отсутствии [КИЗ] и [ИдентТрансУпак]
// TransPackageId: Строка (1-255) — уникальный идентификатор транспортной упаковки [ИдентТрансУпак]. Обязателен при отсутствии [КИЗ] и [НомУпак]
// Units: Коллекция Cтрок (1-255) — контрольный идентификационный знак [КИЗ]. Обязателен при отсутствии [ИдентТрансУпак] и [НомУпак]
ProtoОбъектXDTO = НовыйProtoОбъектXDTO(ВладеющееСвойствоТипИмя);
СписокXDTO_Units = ProtoОбъектXDTO.Units;
ЗначениеXDTO = ProtoФабрикаXDTO.Создать(ТипЗначенияXDTO_String255, НомСредИдентТов);
Работа с XDTO в 1С 8.3
Гарантируем стабильный обмен без ошибок между программами 1С. Гарантии фиксируем в договоре.
Одним из самых популярных форматов данных, используемых практически в любой компании, является XML (расширяемый язык разметки). Разработчики 1С создали специальный объект XDTO для удобства своих клиентов и простого взаимодействия с файлами XML, поэтому программисту 1С важно работать с этими объектами платформы, так как обмен данными через XML встречается постоянно.
Преимущества механизма XDTO
Этот функционал создавался как удобный инструмент обмена данными между конфигурациями и другими приложениями. Также этот механизм используют для работы с web-сервисами и для обработки произвольных данных. Большое преимущество XDTO перед другими способами – в нем есть возможность обращаться к файлу XML, как к объекту 1С. То есть все реквизиты можно будет получить, описывая структуру через точку, не задумываясь о скобках, тегах и атрибутах.
Взаимодействие с файлами XML происходит по заранее установленным правилам, описанным в объекте структуры конфигурации – XDTO – пакеты в 1С 8.3. Суть этих элементов структуры в том, что они представляют собой схемы, по которым будут распознаваться данные из XML-файлов. В типовых конфигурациях уже присутствуют подобные объекты, но при работе с конкретными файлами понадобятся другие схемы.
Существует два способа добавить XDTO-пакет в конфигурацию:
-
Собственноручно создать. Этот вариант подойдет при самостоятельной работе с XML определенного формата. Зная, какие данные будут подаваться на вход для импорта с использованием XDTO, можно заранее создать в конфигурации нужный объект. Этот вариант хорош, если обмен данными налажен и никаких изменений не планируется;
Рис.1 XDTO пакеты
Чтобы загрузить данные из присланной нам схемы, необходимо в режиме конфигуратор открыть раздел «Общие» и «XDTO-пакеты». Через контекстное меню выбрать пункт «Импорт XML-схемы…», выбрать файл и подтвердить пространство имен, взятое из файла. После этого необходимо обновить конфигурацию, и предварительные настройки сделаны.
Но на самом деле в последнем случае нам необязательно создавать XDTO-пакеты в конфигурации 1С 8.3. Существует возможность только использовать XSD-схему, присланную нам из отдельного файла, не внося изменения в структуру базы 1С. Для этого нужно воспользоваться кодом, объясняющим платформе 1С, какой тип объекта с какими параметрами будет загружаться.
Это происходит следующими командами:
Экспорт и импорт файла
После того как мы разобрались с принципами использования пакетов XDTO, нужно посмотреть на механику работы с файлами XML. Лучше всего это будет видно на простом примере, чтобы понять основы. Добавим новый элемент в раздел XDTO-пакетов и настроим его следующим образом:
- Заполняем URI-пространство имен в свойствах XDTO пакета. Среди разработчиков 1С принято заполнять этот реквизит адресом страницы, заполненной описанием тех данных, с которыми происходит работа. Это помогает в работе, но не всегда возможно. В иных случаях заполняют произвольным текстом;
- Задаем тип объекта и его свойства, используя контекстное меню. Задаем имя этих параметров и для свойств определяем тип, выбирая его из предложенных платформой.
Рис.2 Параметры пакета
Следующим этапом будет написание процедуры для создания файла XML по описанной выше схеме. Код достаточно прост, поскольку создан XDTO-пакет, а у элемента всего 2 свойства – «Наименование» и «Артикул». Обращаться к конкретной схеме позволяет объект платформы «ФабрикаXDTO». Сама процедура состоит из:
- Определение схемы будущей XML;
- Заполнение свойств номенклатуры;
- Создание нового XML файла.
Чтение XML-файлов с помощью конкретной фабрики XDTO по уже созданному в конфигурации пакету ничуть не сложнее. Алгоритм похож по структуре и отличается только операциями взаимодействия с XML-файлами. В данном случае нам нужно воспользоваться объектом платформы «ЧтениеXML» и прочитать содержимое в переменную. На выходе у нее будет тип «ОбъектXDTO», и вы сможете обращаться ко всем ее свойствам через точку.
Теперь попробуем прочитать файл, схемы которого нет в нашей конфигурации. Для этого экспортируем XDTO-пакет в файл формата xsd и удалим схему из конфигурации. После этого нам придется объяснить платформе, откуда ей брать схему читаемой XML-кодом, продемонстрированным ранее. Однако в простейших случаях 1С самостоятельно может распознать все свойства.
Рис.3 Экспорт XDTO-пакета
Лучше все-таки не рассчитывать на понятливость платформы 1С, а использовать точную схему XML. Многие специалисты используют сторонний софт для их создания, но для этого необходим достаточно большой опыт и уровень подготовки. Работа с пакетами XDTO требует внимания и соблюдения точного соответствия файлов заданной схеме, чтобы минимизировать возможные ошибки.
Исправление ошибок
Одной из достаточно распространенных ошибок, связанных с работой с XDTO-пакетами, является «Ошибка преобразования данных XDTO». Ее суть заключается в том, что платформа не может разобрать данный ей XML-файл по заданной схеме. При получении подобной ошибки при импорте данных, необходимо проверить формат файлов – возможно, присутствуют незакрытые теги.
Зачастую проблема с ошибками преобразования данных возникает и по другим причинам:
- Ошибки в обновлении платформы или конфигурации;
- Обмен между базами разных версий;
- Недочеты в алгоритме приема данных;
- Проблемы с временной памятью конкретного компьютера.
Чтобы исправить эту ошибку, сначала почистите кэш или удалите, а также заново добавьте информационную базу в список баз. Затем внимательно проверьте файл XML – вдруг случайно сделали ошибку в его тексте, проверьте соответствие структуры пакету XDTO. Если ошибка появилась после обновления, сделайте тестирование и исправление ИБ, сохранив перед этим резервную копию базы. Если проблема не уйдет, вернитесь на предыдущую версию и подождите, пока разработчики 1С не разберутся с этой проблемой.
Рис.4 Ошибка преобразования данных
Еще одна проблема, часто мучающая программистов 1С, работающих с XDTO, – ошибка проверки данных. Если при импорте вы видите подобный текст, то с высокой долей вероятности источник проблемы в несоответствии файла нужной схеме. Но проблема может быть не на вашей стороне, а в базе, из которой выгружали XML. Чтобы исправить эту оплошность, придется внимательно изучить всю последовательность действий и найти, после чего файл перестал соответствовать ожиданиям.
Рис.5 Ошибка проверки данных
Более сложная для анализа проблема, если при обмене информацией 1С выдает ошибку о несоответствии типов XDTO. В этом случае придется проверять все данные, находить ошибки и их причины. В некоторых случаях ошибки могут быть в коде, иногда – в данных информационной базы. Чтобы это понять, необходимо иметь доступ к базам причастным к обмену и четко понимать всю суть происходящего экспорта и импорта.
Рис.6 Несоответствие типов XDTO
На первый взгляд работа с XDTO достаточно сложна, поэтому на первое время рекомендуется добавлять XDTO-пакеты в 1С для большего порядка и учета. Конечно, все нюансы изучить сразу невозможно, но в процессе работы вы будете продолжать учиться. Но с уверенной теоретической базой намного удобнее начинать разбираться в этом вопросе.