Несоответствие типов xdto 1с

Несоответствие типов xdto 1с

Ошибка преобразования данных XDTO: Текст XML содержит недопустимый символ.

На самом деле ошибка преобразования XDTO является не какой-то определенной ошибкой, а является большим семейством ошибок возникающих при работе одного из базовых механизмов платформы 1С. Этот механизм обеспечивает передачу данных между различными подсистемами платформы, при этом данные из внутреннего представления одной подсистемы преобразуются в текстовый формат XML, передаются в другую подсистему, и там опять преобразуются во внутреннее представление. Ошибка преобразования XDTO говорит, что прямом или обратном преобразовании обнаружено какое-то несоответствие, из-за которого оно не может быть выполнено.

Частные причины ошибки

Существует очень много частных причин ошибки преобразования XDTO. Сведения доступные под кнопкой Подробно могут помочь в понимании частной причины, но далеко не всегда.

Прежде чем приступить к диагностике причины ошибки XDTO, следует выполнить стандартные профилактические операции над ИБ: очистить кэш, проверить состояния файла, выполнить тестирование ИБ.

Взаимодействие Клиента и Сервера

При запуске 1С в режиме Тонкий клиент взаимодействие клиента с ИБ происходит с использование преобразования XDTO, и если оно приводит к ошибке, то в тех случаях, когда это возможно, следует воспользоваться режим Толстый клиент.

Сырые и Неоригинальные решения

Если ошибка преобразования XDTO возникает в неоригинальной конфигурации или неоригинальной обработке, то возможно, причина в неоригинальном коде, который не был должным образом оттестирован. Это возможно и в оригинальных решения от 1С после установки сырых обновлений.

В этом случае необходимо отказаться от использования неоригинального или сырого решения и вернуться к предыдущему состоянию кода из архива.

Цель блога описать интересные и полезные примеры программирования в системе 1С:Предприятие 8.

Страницы

понедельник, 12 ноября 2012 г.

1С:Предприятие 8. Веб-сервисы. XDTO

Программист 1С, разрабатывая свой веб-сервис в большинстве случаев работает не с простыми типами, а с типами свой конфигурации, либо с типами данных другой информационной системы. Потому программист сталкивается с проблемой перевода одного типа данных в другой. Для решения этой проблемы в 1С существует механизм XDTO.

XDTO (XML Data Transfer Objects) это механизм позволяющий создавать модель данных и переводить ее в формат XML. Простыми словами, вы можете сделать модель документа поступления товаров и услуг через XDTO и выгрузить любой документ в XML файл, не работая с файлом напрямую.
Этот механизм применяется при обмене файлами XML и при работе с типами в веб-сервисах.
Давайте попробуем разобраться с XDTO. У нас уже есть конфигурация с веб-сервисом и веб операцией Plus2(). Пусть теперь эта операция будет возвращать сообщения о ошибках. Например, если входящий параметр функции меньше нуля, мы будем выдавать ошибку "Error", в остальных случаях будем выдавать "ОК". То есть теперь функция Plus2 будет возвращать структуру:

  1. Результат — число — результат выполнения сложения. 0 если есть ошибка;
  2. Ошибка — строка — "Ok" или "Передано отрицательное значение".

Для создания такой структуры мы будем использовать тип ОбъектXDTO, так как он может описать сложную структуру с несколькими реквизитами различных типов. Помимо ОбъектXDTO существует тип ЗначениеXDTO, но данный тип не позволяет описывать сложные структуры, потому использовать мы его не можем.

Для этого нам надо:

  1. Создать модель XDTO для нашей структуры;
  2. В модуле веб-сервиса создать ОбъектXDTO для для того что бы возвратить как результат функции.
Читайте также:  Дом ру подключение без роутера

На этом завершено создание пакета XDTO. Теперь можно приступить к написанию кода обработки ошибки и возврата результата веб-операции.

У нашего веб-сервиса WebService в свойство "Пакет XDTO" укажем только что созданный пакет. Иначе не сможем указать у веб-операции Plus2 тип "РезультатОперации".

Откроем свойства веб-операции Plus2 в поле "Тип возвращаемого значения" выберем тип "РезультатОперации" из пакета с пространства имен "http://codenotes-1c.blogspot.com" как на рисунке.

Этой строкой мы с помощью Фабрики XDTO в конфигурации создали ТипОбъектаXDTO, указав пространство имен пакета и имя типа.

Эта строка создает уже сам ОбъектXDTO, с которым можно уже будет работать привычным способом (обращение к реквизитам через точку). Далее мы перепишем код, добавив проверку на отрицательные значения, и код веб-операции будет выглядеть так:

Функция Plus2(Параметр)
ТипXDTOРезультатОперации = ФабрикаXDTO.Тип("http://codenotes-1c.blogspot.com", "РезультатОперации");
РезультатОперации = ФабрикаXDTO.Создать(ТипXDTOРезультатОперации);
Если Параметр
РезультатОперации.Результат = 0;
РезультатОперации.Ошибка = "Передано отрицательное значение";
Иначе
РезультатОперации.Результат = Параметр+2;
РезультатОперации.Ошибка = "Ok";
КонецЕсли;
Возврат РезультатОперации;
КонецФункции

О том как вызвать операцию веб-сервиса и просмотреть результат вы можете прочитать в статье 1С:Предприятие 8. Веб-сервисы. Публикация и тестирование

Вы видите что в результате сообщение веб-операции содержит два поля — Результат и Ошибка.
В данном примере описана работа с ОбъектомXDTO. Как я уже говорил, его отличие от ЗначениеXDTO в том, что ЗначениеXDTO не может описывать структурированные типы, вы не сможете, используя ЗначениеXDTO создать тип передающий какой либо документ или справочник. Но! ЗначениеXDTO имеет большие возможности по описанию ограничений примитивных типов и нашу задачу с проверкой на отрицательное значение параметра можно было решить более изящно. Если создать в пакете XDTO ТипЗначения "ПоложительноеЧисло" и указать его минимум,

то этот тип можно использовать как тип входного параметра:

Теперь при вызове веб-операции с отрицательным значением в ответ мы получим сообщение об ошибке:

soap:Sender

Неизвестная ошибка. Ошибка проверки данных XDTO:
Значение: ‘-2’ не соответствует простому типу: ПоложительноеЧисло
Несоответствие фасету MinInclusive = ‘0’
по причине:
Ошибка проверки данных XDTO:
Значение: ‘-2’ не соответствует простому типу: ПоложительноеЧисло
Несоответствие фасету MinInclusive = ‘0’

Таким образом используя описание ЗначенияXDTO мы можем указать ограничения к типам и не задумываться о программной обработке значений. Вы можете использовать ЗначениеXDTO в полях ОбъектаXDTO, тем самым можете создавать очень сложные структуры типов данных.

Статьи, обзоры, комментарии экспертов

Ошибка при установке значения атрибута контекста (iik): Несоответствие типов XDTO

polkin

Не могу выгрузить поскольку выкатывает ошибку превышения 3000 знаков.
Ставлю в ЗначенияСвойства максимум 5000 вместо -1, ошибка та же.
Где нужно изменить, чтобы выводило более 3000 знаков.

ДенисЧ

Где-то в районе ул.Селезнёвской, что в Москве…

polkin

Хотелось бы поближе однако….

tridog

(0) -1 — это отсутствие ограничения. Уверен, что ругаццо на значение именно этого свойства именно у этого объекта?

polkin

https://yadi.sk/i/99zryM5Gf72Z6
оно, больше нету.

polkin <ОбщийМодуль.ОбменССайтом.Модуль(6489)>: Ошибка при вызове метода контекста (Добавить) ЗначениеРеквизитаXDTO.Значение.Добавить(ПолучитьСтрокуЗаписиДляXML(Значение)); по причине:Несоответствие типов XDTO
по причине:
Ошибка проверки данных XDTO:

не соответствует простому типу: ЗначениеСвойства
Несоответствие фасету MaxLength = ‘3000’

Лодырь

Если меня не глючит с будуна, то у тебя ошибка в том, что превышена длина строки ЗначениеСвойства, а ты пытаешся задать количество элементов ЗначениеСвойства. Не там меняешь.

Читайте также:  Каким образом можно запустить или открыть объект
polkin Лодырь

(7) Ну либо принципиально сменить тип на строковый вместо предопределенного ЗначениеСвойства, либо смотреть (1)

polkin

(8) Сменить нет возможности… а (1) вообще на грани фантастики….

Лодырь

(9) почему нет возможности? На вашей стороне вы вполне можете все менять. Да и в любом случае, даже если бы вы достигли своей цели и выгрузили 5к символов вместо 3к, то вам пришлось бы менять схему на принимающей стороне. следовательно на принимающей стороне вы тоже можете все менять. Так в чем загвоздка?

polkin

(10) В том, что принимающая сторона 5к символов загружает.
А я выгрузить не могу.

Тут еще один момент обнаружился….

Описание в товаре выгружает сколько хочешь, а Описание в группе выгружает только 250 знаков….

Уже всю голову сломал, где это проставляется…

polkin

Ну где эти знатоки? Как вывести в XDTO больше знаков?

Лодырь

(12) Тебе уже все рассказали. Так как ты придумал сам себе некие ограничения — ну мучайся теперь.

Otvertka352

У тебя там нет описанного ТипаЗначения?
Насколько я помню, ограничения можно выставить именно в созданных ТипахЗначений.

polkin

(14) Спасибо большое. Помогло очень.
В Типы значений меняется. Установил 5000 знаков.

(15) Обращай внимание, где в свойствах зеленые галки слева — то свойство используется. )

polkin ОписаниеГруппы получаю полностьюhttps://yadi.sk/i/OUmEoz2efC9b6
ГруппаXDTO.Описание уже обрезает до 250 знаков.
https://yadi.sk/i/VSwpss6IfC9iq

Вот сам пакет ГруппаXDTO
https://yadi.sk/i/T1O2CEdLfCA3o

Вот его тип, где 5000 знаков
https://yadi.sk/i/yUw-xAqPfCA8a

Где засада?

Мыш (17)
Функция ФорматНаименованияДляXDTO(Наименование) Возврат Лев(Наименование, 250); КонецФункции ЗЫ: лень в функцию заглянуть? ) polkin

(18) Спасибо, помогло.
ЗЫ: не лень, знаний не хватает….

TurboConf 5 — расширение возможностей Конфигуратора 1С

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

v8: Ошибка проверки модели XDTO.

Я Stim213 открыл для изменения типовую(заполненную демку) УТ 11.0.6.9. Добавит реквизит в один док. Обновляю.

Ошибка проверки данных XDTO : Структура объекта не соответствует типу

Пишет:
Ошибка проверки модели XDTO: xdto-facet-4.1 тип: ИдентификаторГлобальныйТип пакет: CommerceML
Значение фасета ‘collapse’ не соответствует требуемому: ‘whitespace’ Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: Каталог пакет: CommerceML Тип ‘ИдентификаторГлобальныйТип’ свойства ‘Ид’ не определен Ошибка проверки модели XDTO: xdto-facet-4.1 тип: АдресТип пакет: CommerceML Значение фасета ‘collapse’ не соответствует требуемому: ‘whitespace’ Ошибка проверки модели XDTO: xdto-objectType-3.2.1 (определение анонимного типа) свойство: АдресноеПоле тип: Адрес пакет: CommerceML Тип ‘АдресТип’ свойства ‘Тип’ не определен Ошибка проверки модели XDTO: xdto-facet-4.1 тип: ПолТип пакет: CommerceML Значение фасета ‘collapse’ не соответствует требуемому: ‘whitespace’ Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: РеквизитыФизЛица пакет: CommerceML Тип ‘ПолТип’ свойства ‘Пол’ не определен Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: Контрагент пакет: CommerceML Тип ‘РеквизитыФизЛица’ свойства ‘РеквизитыФизЛица’ не определен и еще 5 страниц. Что это?? оО

Поручик

Какой у тебя релиз платформы?

Stim213

8.2.13, сорри, забыл

Поручик

Попробуйте новый бесплатный сервис для быстрого анализа кода типовых конфигураций 1c-api.com

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.

Читайте также:  Как подключить флешку к телевизору dexp

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

1с не хочет обмениваться с сайтом!

8.1 XDTO проблема при создании ЗначениеXDTO

Я DS_SD Подскажите, пожалуйста, что делаю не так…
При сериализации справочника возникает проблема с реквизитами, которые имеют тип перечисления и не заполнены

ОбъектXDTO.Проверка() выдает следующее:

Структура объекта не соответствует типу: CatalogObject.ТипыЦенНоменклатуры
Проверка свойства ‘СпособРасчетаЦены’:
форма: Элемент имя: СпособРасчетаЦены
тип: EnumRef.СпособыРасчетаЦены
Отсутствует обязательное свойство Присваиваю значение свойству так:

ОбъектXDTO.СпособРасчетаЦены = Фабрика.Создать(ТипЗначенияXDTO, Спр.СпособРасчетаЦены); ТипЗначенияXDTO содержит тип EnumRef.СпособыРасчетаЦены

regniws

ну, видимо потому что в схеме, данные поля обязательны для заполнения.

DS_SD

Если ты о свойстве "Возможно пустое". пробовал, менял — все одно и тоже.

Кстати, функция возвращает такую ошибку:

<(1)>: Ошибка при вызове метода контекста (Создать): Ошибка проверки данных XDTO:
Значение: » не соответствует простому типу: EnumRef.СпособыРасчетаЦены
Значение не соответствует значениям фасета перечисления

regniws

выгрузи пакет xdto в xsd схему и посмотри на нее глазками в разделе, где проверяются твои перечисления. Может на что тебя натолкнет.

Может глукануло и просто список доступных значений полей не соответствует тому, что есть в базе.

DS_SD Вот так объявляется перечисление:
Вот так справочник: …


мысли уже кончились… regniws

хм.. ну, думаю, что ты у себя проверил, что всего два значения у тебя перечисления в конфигураторе!?

Кстати, в xsd твоем не сказано. что name="СпособРасчетаЦены" необязательно для заполнения.

DS_SD 1) да, эта часть конфы идентична.
2) просто, поскольку это роли не сыграло, вернул взад… еще раз проверил, появилась строка :
толку от нее не увидел regniws хм.. а я знаю..
короче, нужно посмотреть, как сериализуется пустое значение перечисления.

nilable = true, говорит, что его вообще можно не заполнять, но
пустое значение и отсутствие значения — это разные вещи :))) например, если сериализуется в "", то это не nilable = true, и к тому же по рестрикшенам xsd это тоже не допустимо попробуй в xsd Руками поправить или во что оно там сериализуется.

regniws

а, ну и потом xsd загрузить обратно

DS_SD

))) Кошмар. Получилось! Спасибо тебе большое!
А если не ручками, а в конфигураторе, мышкой, такое получится?

regniws

не знаю :)) никогда не работал с xdto :))))

regniws да, и хотелось бы, так сказать, мужской комплемент &#128578; зачетный вопрос, инетерсно было разобраться :))) DS_SD

Похоже нет. Ничего подобного там не нашел… Ну 1С… :)) Ну такое то надо предусмотреть (при экспорте XML-схемы).
Ладно, теперь буду по аналогии мучать составные типы! Спасибо!

regniws DS_SD

11 Спасибо ) надеюсь, ветка кому-н. еще пригодиться

Наведи порядок в своей работе используя конфигурацию 1C "Управление IT-отделом 8"

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.

Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Ссылка на основную публикацию
Не работает обтекание текстом в ворде
Обтекание рисунка текстом. Мы с вами уже многому научились. Как создать диаграмму в Word, Как создать красивую рамку в Word,...
Не выгружаются картинки из 1с в битрикс
Недавно к нам поступил запрос от клиента, который не доволен работой типового обмена, потому что при удалении картинки из 1С,...
Не отправляются голосовые сообщения в вайбере
Иногда вам срочно требуется выйти на связь с определенным человеком, но по какой-то причине сделать вы этого не можете. Такое...
Не слышно входящий звонок на айфоне
Если на iPhone пропал звук, в большинстве случаев пользователь способен самостоятельно устранить неполадку — главное, правильно выявить причину. Сегодня мы...
Adblock detector