Ошибка при установке значения xdto

При входе в базу 1с вы можете увидеть “Ошибка преобразования данных XDTO:

Начало Свойства: errorProcessingSettings

Форма: Элемент

Тип: {http://v8.1c.ru/8.2/managed-application/core}ErrorProcessingSettings по причине

Чаще всего ошибка возникает при определенном типе запуска: это либо через тонкий клиент, либо через линк42, случаи бывают разные. Через браузер такие базы запускаются без ошибок.

Есть простое решение данной проблемы.

Достаточно запустить базу доступным нам способом (где нет ошибки) включить Функции тех. специалиста (Меню — Настройки — Параметры — Режим технического специалиста)

В Функциях для технического специалиста ищем Управление настройками обработки ошибок (Стандартные)

Запускаем

Готово!

Уже более 10 000 компаний работают
в облачной 1С от 42Clouds

— Консультация по 1С Бесплатно!

— Поддержка 24/7 по техническим вопросам: в чате, по телефону, по почте

— Все типовые конфигурации онлайн, доступ через RDP, Remote App, Web

В данной статье я свел воедино все, что на данный момент знаю о механизме XDTO. Материал носит достаточно ознакомительный характер, и предназначен в первую очередь для начинающих разработчиков. Рассмотрены основные составные части механизма XDTO, примеры использования XDTO и базовые приемы работы.

Содержание

Аббревиатура  XDTO расшифровывается как XML Data Transfer Objects – и переводится как Объекты переноса данных XML. Это детище компании 1С, и нигде кроме экосистемы 1С данный механизм не используется. Предназначение XDTO – интеграция и обмен данными между 1С и другими системами в формате XML. Собственно, XDTO позволяет работать с xml в объектном стиле, “через точку”, не задумываясь об атрибутах, тегах, узлах и т.п.

Механизм XDTO включает в себя несколько объектов встроенного языка и объект конфигурации “XDTO-пакет” 

XSD схемы и пакеты XDTO. Пространства имен

Объект метаданных XDTO-пакет предназначен для описания системы типов и значений для взаимодействия с внешними системами или обработки xml-данных. Для гарантированного обеспечения уникальности типов между различными пакетами, в свойствах XDTO-пакета задается пространство имен. Исторически сложилось, что пространство имен выглядит как url-адрес, но на деле это всего лишь строка, которая может быть абсолютно любой. Важно, чтобы в пределах конфигурации пространства имен в пакетах XDTO были уникальны.

XML схемы описывают структуру XML-документа на языке XSD – XML Schema Definition Language.
Схемы XSD предназначены для решения следующих задач:

  • Перечисление элементов в документе XML и проверка наличия в документе только объявленных элементов.
  • Объявление и определение атрибутов, модифицирующих элементы документа.
  • Определение иерархических отношений между элементами – какой является родительским, а какой – дочерним.
  • Определение состояний и моделей содержания для элементов и атрибутов.
  • Задание типов данных.
  • Установка значений по умолчанию.
  • Поддержка использования пространств имен.

В свою очередь, XDTO пакеты помимо свойств, аналогичных свойствам XSD-схем, содержат еще ряд свойств, предназначенных для трансляции данных в объекты 1С и обратно. К этим свойствам относится, в частности свойство “Локальное имя”.

Стандартные пакеты XDTO

Даже если ни одного пакета XDTO в конфигураторе не создано, платформа будет предоставлять обширный список стандартных пакетов, описывающих все данные, предоставляемые платформой. Так, например, среди стандартных пакетов есть пакет для описания управляемого приложения, системы компоновки данных, двухфакторной аутентификации, и множество других. “Познакомиться” с ними можно, используя коллекцию глобальной фабрики XDTO “Пакеты”.

&НаСервере
Процедура ВывестиВсеПакетыНаСервере()
	Для Каждого Пакет Из ФабрикаXDTO.Пакеты Цикл
		Сообщить(Пакет.URIПространстваИмен);
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ВывестиВсеПакеты(Команда)
	ВывестиВсеПакетыНаСервере();
КонецПроцедуры

Создание, импорт и экспорт схем XSD

Пакеты XDTO можно экспортировать в XML-схемы в формате xsd, и наоборот – из xsd-файла можно импортировать пакет XDTO. Важно – не все схемы xsd успешно импортируются в пакеты XDTO, при том что сами схемы будут полностью валидны. Распространенная ошибка связана с отсутствием определения целевого пространства имен targetNamespace.
Кроме того, существует возможность выгрузить XML-схему данных конфигурации – в этом случае будет выгружена схема xml, соответствующая всем объектам конфигурации (кроме пакетов XDTO, созданных в дереве метаданных).
Также пакеты можно создавать средствами конфигуратора 1С, в специальном редакторе.

Редактор XDTO-пакета

На первом уровне иерархии могут располагаться следующие элементы пакета:

  • Директивы импорта – перечень директив импорта – в них указываются внешние пространства имен, которые используются в данном пакете. При работе с данным пакетом XDTO средствами встроенного языка данный перечень директив импорта будет доступен в виде объекта КоллекцияПакетовXDTO, содержащегося в свойстве Зависимости пакета XDTO. Важно! Если указать пространство имен, не определенное в данной конфигурации (т.е. отсутствующее как среди стандартных пакетов, так и среди пакетов, созданных в конфигураторе), сохранить конфигурацию будет нельзя, т.к. платформа выдаст сообщение об ошибке: “Ошибка проверки модели XDTO: xdto-package-3.3 пакет: test

    Импортируемый пакет типов ‘<тут имя пространства имен>’ не определен

  • Типы значений – перечень типов значений XDTO, которые содержит пакет XDTO.

  • Типы объектов – перечень типов объектов XDTO, которые содержит пакет XDTO

  • Свойства – перечень свойств пакета XDTO. Представляет собой объявления объектов/значений, которые могут являться корневыми элементами документов XML, принадлежащих URI пространству имен пакета XDTO.

Типы значений XDTO

Объект ТипЗначенияXDTO используется для описания типов простых значений, в которых не могут быть выделены отдельные составляющие. Примерами простых значений являются разнообразные строки, числа, даты и т. п. Ссылки на объекты также относятся к простым значениям. Для указания ссылки в качестве типа значения XDTO следует указать базовый тип AnyRef (http://v8.1c.ru/8.1/data/enterprise), а также задать свойство “Вариант” – “Атомарный”.

Теперь разберем поподробнее  свойства типа значений XDTO. Тип Значений XDTO соответствует типу symple type из схемы xml. Следовательно, и поля в редакторе пакета XDTO для типа значений во многом повторяют свойства symple type.

  • Имя – имя типа значения XDTO;

  • Базовый тип – базовый тип для данного типа значения XDTO. Базовые типы могут наследоваться от других типов значений XDTO, а самым верхним типом в иерархии наследования является тип anySimpleType

  • Вариант – вариант простого типа (атомарный тип, список, объединение).

  • Тип элемента – тип элемента списка в случае, когда тип значения XDTO определяется списком. При этом все фасеты и свойство Типы объединения должны быть пустыми;

  • Типы объединения – список типов, образующих объединение в случае, когда тип значения XDTO определяется объединением. Объединяться могут только типы значений XDTO. При этом все фасеты и свойство Тип Элемента должны быть пустыми;

  • Длина – фасет длины. Длина задается в единицах длины, которые зависят от типа значения. Для типа string и anyURI это будет количество символов в строке, а для двоичных данных (hexBinary и base64Binary) длина содержит количество байт.

  • Минимальная длина – фасет минимальной длины;

  • Максимальная длина – фасет максимальной длины;

  • Пробельные символы – фасет пробельных символов; позволяет описать ограничение – допустимы ли в строке любые пробельные символы, такие как неразрывный пробел, перенос строки, или табуляция;

  • Минимум, включающий границу – фасет минимума, включающего границу; Любое значение данного типа должно быть больше указанному значению;

  • Минимум, не включающий границу – фасет минимума, не включающего границу. Любое значение данного типа должно быть больше указанного значения;

  • Максимум, включающий границу – фасет максимума, включающего границу;

  • Максимум, не включающий границу – фасет максимума, не включающего границу;

  • Общее количество цифр – фасет общего количества цифр;

  • Количество цифр дробной части – фасет количества цифр дробной части.s

Фасеты – это набор значений, которые ограничивают множество допустимых значений по отношению к базовому типу. Соответственно, указывать их нужно только тогда, когда указан базовый тип. Список фасетов, которые можно указывать для того или иного типа, определяется по правилам XML Schema.

Типы объектов XDTO

В пакете XDTO тип объекта XDTO используется для описания типов сложных объектов, имеющих в составе набор свойств. Типы свойств таких объектов могут быть как типами значения XDTO, так и типами объектов XDTO. В частности, все прикладные объекты конфигурации, например, справочник “Номенклатура”, могут быть описаны как типы объектов XDTO.
Ввиду того, что типы объектов XDTO предназначены для описания самых различных структур данных, особое внимание следует уделить свойствам, а именно:

  • Открытый – признак, является ли тип объекта XDTO открытым. Данное свойство показывает, может ли экземпляр объекта XDTO содержать свойства, не определенные в его типе. Это соответствует реализации модели open content;

  • Абстрактный – признак, является ли тип объекта XDTO абстрактным; Абстрактные типы используются для реализации наследования и расширения дочерними типами;

  • Смешанный – показывает, имеет ли соответствующий объект XDTO смешанное содержание (mixed content в схеме XML). Если значение свойства Истина, то значение Последовательный обязательно равно Истина, так как смешанное содержание невозможно смоделировать без применения последовательности XDTO;

  • Упорядоченный – признак, является ли порядок следования элементов, представляющих значения свойств, строго соответствующим порядку следования свойств в типе объекта XDTO. Если Ложь, то на входе порядок следования элементов XML не контролируется, а на выходе определяется порядком следования свойств, если только свойство Последовательный не имеет значение Истина;

  • Последовательный – показывает, содержит ли экземпляр соответствующего объекта XDTO последовательность XDTO. Истина в тех случаях, когда порядок следования вложенных элементов XML не может однозначно определяться порядком следования свойств в типе или соответствующий объект XDTO имеет смешанное содержание. Последовательность XDTO позволяет задать в явном виде порядок следования элементов, как они будут представлены в документе XML. Для объектов типов, у которых свойство Ложь, порядок вложенных элементов соответствует порядку следования свойств.

Свойства XDTO

В редакторе пакета XDTO можно также настраивать свойства – как для всего пакета (т.н. корневые свойства), так и при описании типов объектов XDTO. Отдельно взятое свойство имеет следующие реквизиты:

  • Имя – имя свойства. Следует обеспечить уникальность имени свойства в пределах описания одного типа объекта XDTO.

  • Ссылка – ссылка на корневое определения свойств пакета

  • Тип – тип свойства. Может быть как типом значения XDTO, так и типом объекта XDTO;

  • Минимальное количество – минимальное количество значений свойства. Минимальное количество значений свойства может принимать значения <= 0;

  • Максимальное количество – свойство типа объекта XDTO может быть определено как содержащее одно или множество значений. Свойство считается содержащим одно значение, если Максимальное количество = 1. Для значений свойства > 1 считается, что свойство может принимать множество значений. Такое свойство в структуре объекта моделируется списком. Свойство Максимальное количество показывает максимальное количество значений свойства. Максимальное количество > 1 может быть задано только для свойств, представленных в виде элемента XML. Значение -1 соответствует unbounded в схеме XML, т.е. количество значений этого свойства может быть не ограниченным. Например, мы создаем свойство, описывающее табличную часть Товары. В этом случае мы можем указать максимальное количество -1, т.к. заранее не знаем, сколько строк будет в табличной части. Можно указать тип значения, соответствующий описанию содержимого одной строки ТЧ, либо создать описание типов (см. ниже)

  • Возможно пустое – показывает, может ли свойство принимать неопределенное значение. Истина может быть определено только для свойств с формой представления Элемент. Если Максимальное количество > 1, неопределенное значение является допустимым для элемента списка значений свойства;

  • Фиксированное – указывает, является ли значение свойства фиксированным. Истина – само фиксированное значение можно получить через свойство По умолчанию;

  • По умолчанию –  значение свойства по умолчанию. Тип значения по умолчанию может быть только типом значения XDTO. При этом, данное значение должно быть совместимо с типом свойства (быть того же типа, что и тип свойства или же унаследованного типа). При создании объекта XDTO свойство, если оно допускает единственное значение, принимает значение по умолчанию. Для свойств с множеством значений список значения пуст, независимо от того, определено или нет значение по умолчанию;

  • Форма – форма представления свойства в XML. Это может быть Атрибут, Элемент или Текст. Если формой представления является Атрибут или Текст, то значение свойства Максимальное количество не может быть больше 1. Если свойство принимает значение Текст, то значение свойства Минимальное количество также должно быть равным 1. У одного типа только одно свойство может иметь форму представления Текст, при этом все остальные свойства должны иметь форму представления Атрибут;

  • Локальное имя – локальное имя, используемое для представления свойства. Для свойств с формой представления Текст – пустая строка.

Определения типов XDTO

Рассмотрим пример создания типа объекта XDTO, описывающего справочник Номенклатуры с реквизитами Наименование, Единица измерения (Справочник “Единицы измерения”)и Статья затрат (справочник “Статьи затрат”). В случае, если нам было бы достаточно ссылки на соответствующие справочники, мы могли бы создать два типа значения XDTO, например  CatalogRef.ЕдиницыИзмерения и CatalogRef.СтатьиЗатрат.

Но предположим, мы хотим при выгрузке в XML получить не только ссылку, но и все содержимое, т.е. весь объект целиком. Сделать это можно двумя способами – создать отдельный тип объекта и указать его в качестве типа для свойства ЕдиницаИзмерения в объекте Номенклатура, либо создать описание типа непосредственно в свойстве. Описание типа может быть двух видов – для описания простых типов, и для описания комплексных типов. Отличить их можно по картинке-пиктограмме слева от текста “Определение типа”. Редактируются они таким же образом как самостоятельные типы объектов и типы значений. Выбор при этом может ввести в заблуждение (см. картинку)

Выбор типа для определения типа XDTO

Описание типа XDTO

Директивы импорта XDTO

В рамках создаваемого пакета XDTO (без использования директивы импорта) можно использовать:

  • типы, определенные только в данном пакете (использующие текущее пространство имен)
  • типы, стандартные для XML (пространство имен http://www.w3.org/2001/XMLSchema)

В случае, если нужно указать тип из другого пакета XDTO (из другого пространства имен) – необходимо его импортировать при помощи директивы импорта. Импортировать можно только существующие пакеты типов; кроме того, недопустимо делать циклические импорты – когда в импортируемом пакете есть директива импорта текущего пакета.

Фабрика XDTO и модель данных

Фабрика XDTO – это объект встроенного языка 1С, который позволяет создавать объекты XDTO нужного типа. Фабрика XDTO может создавать объекты только тех типов, которые входят в ее модель данных. Модель данных – это совокупность всех типов, которые можно записать в один XML документ. По сути, модель данных – это набор схем XML.

Существует единственная глобальная фабрика XDTO, доступная через свойство глобального контекста ФабрикаXDTO. Эта фабрика содержит в себе все встроенные пакеты XDTO, предоставляемые платформой; пакет “http://v8.1c.ru/8.1/data/enterprise/current-config”, описывающий метаданные текущей конфигурации; пакеты, созданные разработчиком в ветке Общие / XDTO-пакеты.

Кроме того, разработчик может средствами языка 1С создавать новые фабрики, включая в них только типы из нужных пакетов.

Простой пример создания документа XML

За основу возьмем пакет XDTO, рассмотренный выше, в разделе “Определения типов XDTO”. Для создания документа XML нам понадобится – создать нужные типы XDTO, далее на основе этих типов создать нужные объекты, и в завершение – сформировать XML средствами фабрики.

// Получим нужные типы данных XDTO
ТипТестНоменклатура = ФабрикаXDTO.Тип("http://www.sample-package.org", "Номенклатура");
ТипТестЕдИзм = ФабрикаXDTO.Тип("http://www.sample-package.org", "ЕдиницаИзмерения");
// Обратите внимание, здесь мы получаем тип из определения типа для свойства СтатьяЗатрат
ТипТестСтатья = ТипТестНоменклатура.Свойства.Получить("СтатьяЗатрат").Тип;

//Сперва создаем объекты, которые затем поместим в свойства номенклатуры
ЕдИзм = ФабрикаXDTO.Создать(ТипТестЕдИзм);
ЕдИзм.Коэффициент = 1;
ЕдИзм.Код = 123;
ЕдИзм.Наименование = "Кг";

СтатьяЗатрат = ФабрикаXDTO.Создать(ТипТестСтатья);
СтатьяЗатрат.Наименование = "Основная деятельность";
СтатьяЗатрат.СчетЗатрат = 26;

Ном = ФабрикаXDTO.Создать(ТипТестНоменклатура);
Ном.Наименование = "тестовая номенклатура";
//Помещаем в свойства соответствующие объекты XDTO
Ном.ЕдиницаИзмерения = ЕдИзм;
Ном.СтатьяЗатрат = СтатьяЗатрат;

//Сформируем XML документ
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(Запись, Ном);
ДанныеXML = Запись.Закрыть();

Сообщить(ДанныеXML);

Пример создания фабрики XDTO c нужной моделью данных

Для создания своей собственной фабрики XDTO все равно придется воспользоваться глобальной фабрикой. В простейшем случае фабрика создается так: создаем модель данных XDTO, затем создаем массив нужных нам пакетов, и далее на основании модели и массива пакетов создаем конструктором новую фабрику.

Модель = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/xdto","Model"));
СвояФабрика = Новый ФабрикаXDTO(Модель);

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

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

МассивПространствИмен = Новый Массив;
МассивПространствИмен.Добавить("http://www.sample-package.org");
ВтораяМодель = ФабрикаXDTO.ЭкспортМоделиXDTO(МассивПространствИмен);
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(Запись,ВтораяМодель,"Model","http://v8.1c.ru/8.1/xdto",,НазначениеТипаXML.Явное);
МодельXML = Запись.Закрыть();

В базе-приемнике прочитаем модель из XML документа, и создадим фабрику:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(МодельXML);
ОбъектModel = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
ВтораяФабрика = Новый ФабрикаXDTO(ОбъектModel);

В ней будет содержаться только один пакет, который мы указали при экспорте, и стандартный пакет “http://www.w3.org/2001/XMLSchema”. При этом не обязательно, чтобы в конфигурации-приемнике существовал данный пакет в дереве метаданных – все необходимое содержится в исходном XML документе, который мы прочитали.

Создание фабрики XDTO

Создание фабрики XDTO из схем XML

Схемы XML могут быть представлены в двух видах – в виде файлов XSD, либо в виде объекта НаборСхемXML. Сперва рассмотрим простой способ создания фабрики XDTO из набора схем.

МассивПространствИмен = Новый Массив;
МассивПространствИмен.Добавить("http://www.sample-package.org");
НаборСхем = ФабрикаXDTO.ЭкспортСхемыXML(МассивПространствИмен);
ТретьяФабрика = Новый ФабрикаXDTO(НаборСхем);

Часто при работе с XDTO разработчик получает от передающей стороны (например, веб-сервиса, внешнего приложения и др) готовый файл или несколько файлов с расширением .xsd. Но кроме того, можно написать выгрузку набора схем в набор xsd-файлов. За основу можно взять следующий код:

Для Счетчик = 0 по НаборСхем.Количество() - 1 Цикл
            Схема = НаборСхем.Получить(Счетчик);
            Схема.ОбновитьЭлементDOM();
            ЗаписьDOM = Новый ЗаписьDOM;
            ЗаписьXMLСтрока = Новый ЗаписьXML;
            ЗаписьXMLСтрока.УстановитьСтроку();
            ЗаписьXMLФайл = Новый ЗаписьXML;
            ЗаписьDOM.Записать(Схема.ДокументDOM, ЗаписьXMLСтрока);
            ЗаписьXMLФайл.ОткрытьФайл(ИмяФайла + "[" + Формат(Счетчик,"ЧЦ=10;ЧГ=0;ЧН=") + "].xsd");
            ЗаписьXMLФайл.ЗаписатьБезОбработки(ЗаписьXMLСтрока.Закрыть());
            ЗаписьXMLФайл.Закрыть();
КонецЦикла;

Вне зависимости от того, как были получены XSD схемы, для их чтения следует использовать метод СоздатьФабрикуXDTO.

Схемы = Новый Массив;
Схемы.Добавить("d:testtest1.xsd");
Схемы.Добавить("d:testtest2.xsd");
ЧетвертаяФабрика = СоздатьФабрикуXDTO(Схемы);

XDTO сериализация

На основе механизмов XDTO платформа предоставляет средства для быстрой сериализации прикладных объектов (например, справочник ссылка или справочник объект) и объектов языка (например, структура или таблица значений). Рассмотрим несколько примеров:

//Простая сериализация в XML. Подходит только для загрузки в идентичную конфигурацию
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	ЗаписатьXML(ЗаписьXML, Номенклатура.ПолучитьОбъект());
	ИтоговаяСтрока = ЗаписьXML.Закрыть();
	Сообщить(ИтоговаяСтрока);
	
	//Сериализация через глобальный сериализатор. В этом случае мы получаем пространства имен
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Номенклатура.ПолучитьОбъект(), НазначениеТипаXML.Явное);
	ИтоговаяСтрока = ЗаписьXML.Закрыть();
	Сообщить(ИтоговаяСтрока);
	
	//Десериализация через СериализаторXDTO
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ИтоговаяСтрока);
	ОбъектНоменклатура = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

SOAP сервисы и XDTO

Разработка своего веб-сервиса

Данная статья не претендует на полный обзор технологии веб-сервисов, их разработки и публикации. SOAP-сервисы будут рассмотрены в контексте использования механизма XDTO.

При разработке web-сервиса типы параметров и возвращаемых значений Web-сервисов описываются с помощью типов объектов и типов значений XDTO. Подготовим пакет типов специально для нашего примера. У нас будет один тип значения для указания кода статьи затрат, один тип для описания списка строк, и один тип для описания строки.

Пример XDTO для web-сервиса

Далее создадим Web-сервис. Укажем пространство имен (напомню, это вовсе не обязательно должно быть URL, строка может быть любой). Также укажем состав пакетов XDTO, типы из которых мы хотим использовать.

Создадим операцию с одним параметром – CostItem. Этот параметр отмечаем как входной, указываем тип значения. Также укажем тип возвращаемого значения. Обратите внимание – нам доступны только типы из тех пакетов XDTO, которые мы отметили, а также стандартные типы для XML:

Теперь осталось написать код для операции. Наш веб сервис будет получать остатки товаров запросом и формировать таблицу из трех колонок – Код, Наименование и Остаток. Т.к. мы делаем сервис, ориентированный на внешние системы, которые могут не поддерживать кириллицу, колонки назовем Code, Name и Quantity.

Функция goods(CostItem)
	
	ТипGoods = ФабрикаXDTO.Пакеты.Получить("http://www.sample-package.org").Получить("goods");
	ТипgoodsRow = ФабрикаXDTO.Пакеты.Получить("http://www.sample-package.org").Получить("goodsRow");
	Goods = ФабрикаXDTO.Создать(ТипGoods);
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	|	ОстаткиТоваровОстатки.Товар.Код КАК Code,
	|	ОстаткиТоваровОстатки.Товар.Наименование КАК Name,
	|	ОстаткиТоваровОстатки.КоличествоОстаток КАК Quantity
	|ИЗ
	|	РегистрНакопления.ОстаткиТоваров.Остатки(
	|			,
	|			ВЫБОР
	|				КОГДА &СтатьяЗатрат = НЕОПРЕДЕЛЕНО
	|					ТОГДА ИСТИНА
	|				ИНАЧЕ Товар.СтатьяЗатрат = &СтатьяЗатрат
	|			КОНЕЦ) КАК ОстаткиТоваровОстатки");
	
	НайденнаяСтатья = Справочники.СтатьиЗатрат.НайтиПоКоду("CostItem");
	Если НайденнаяСтатья = Справочники.СтатьиЗатрат.ПустаяСсылка() Тогда
		НайденнаяСтатья = Неопределено;
	КонецЕсли;
	Запрос.УстановитьПараметр("СтатьяЗатрат", НайденнаяСтатья);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		goodsRow = ФабрикаXDTO.Создать(ТипgoodsRow);
		ЗаполнитьЗначенияСвойств(goodsRow, Выборка);
		Goods.goodsRow.Добавить(goodsRow);
	КонецЦикла;
	
	Возврат Goods;
	
КонецФункции

Легко заметить, что код возвращает объект XDTO, а не готовый XML документ. В XML его преобразует сама платформа при возврате ответа web-сервиса. Т.е. по сути разработка операции для web-сервиса сводится к созданию и наполнению нужного объекта XDTO.

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

// Получим WSОпределение
WSОпределение			= Новый WSОпределения("http://localhost/xdto/ws/ws1.1cws?wsdl");
// Создадим WSПрокси - специальный объект для вызова веб-сервиса
// параметры конструктора можно посмотреть непосредственно в WSОпределение
// там будут и списки сервисов с пространствами имен и названием самого сервиса, а также
// имена точек подключения
WSПроксиGoods			= Новый WSПрокси(WSОпределение, "test", "ВыгрузкаНоменклатуры", "ВыгрузкаНоменклатурыSoap");

// вызовем операцию goods с параметром CostItem = "123" (это код элемента справочника Статьи затрат)
ТаблицаОстатков = WSПроксиGoods.goods("123");

// Обойдем коллекцию строк, которую мы получили от сервиса, и выведем остатки
Для Каждого СтрокаОстатка Из ТаблицаОстатков.goodsRow Цикл
	Сообщить(СтрШаблон("Код %1, Наименование %2, Остаток %3", СтрокаОстатка.Code, СтрокаОстатка.Name, СтрокаОстатка.Quantity));
КонецЦикла;

Использование внешних веб-сервисов через WS-ссылки

При работе с WS-ссылками, после загрузки WSDL схемы, в WS-ссылке становится доступной модель данных с теми пакетами, что содержатся в поставляемой схеме. Редактировать содержимое WS-ссылки нельзя, однако можно посмотреть структуру типов данных, доступных методов и их параметров.

Начнем с простого примера получения ответа от веб-сервиса. Сервис принимает на вход число, и конвертирует его в текст. Адрес WSDL схемы для создания WS-ссылки: https://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL

Использование WS-ссылки

Прокси = WSСсылки.Converter.СоздатьWSПрокси("http://www.dataaccess.com/webservicesserver/", "NumberConversion", "NumberConversionSoap");
Результат = Прокси.NumberToWords(12345);
Сообщить(Результат);

Теперь рассмотрим более сложный пример – получим курсы валют на дату, используя сервис ЦБР. Создадим WS-ссылку с адресом http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL
Как легко увидеть, и модель данных, и состав доступных операций у этого сервиса значительно больше:

Web-сервис ЦБР WS-ссылка

В качестве примера используем операцию GetCursOnDate. У этой операции всего один параметр “parameters”, с типом значения GetCursOnDate (http://web.cbr.ru/). В составе модели данных есть корневое свойство GetCursOnDate, а в составе типов значений XDTO есть тип GetCursOnDate, с единственным свойством On_date. Зная все вышеперечисленное, напишем код получения ответа от веб-сервиса

//Создаем прокси для обращения к внешнему веб-сервису,
// передаем в функцию URI пространства имен, имя сервиса, имя порта.
Прокси = WSСсылки.WSСсылкаЦБР.СоздатьWSПрокси("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");

//Получаем тип параметра, который передается в метод GetCursOnDate.
// Для этого получаем сперва пакет по имени URI, а затем тип по имени этого типа
ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://web.cbr.ru/").Получить("GetCursOnDate");

//Создаем параметр на основе типа и заполняем значение параметра On_Date.
WSПараметр  = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.On_Date= ТекущаяДата();

//Вызываем метод веб-сервиса, записываем результат в переменную КурсыВалют.
КурсыВалют = Прокси.GetCursOnDate(WSПараметр);

Мы получили XDTO-объект КурсыВалют. Чтобы дальше знать, как нам его обработать, обратимся к отладчику. Сама таблица с курсами валют “закопана” достаточно глубоко:
КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate. Пройдемся циклом по этому списку и выведем информацию о курсах валют:

Для Каждого Элемент Из КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate Цикл 
    Сообщить(СтрШаблон("Валюта %1; номинал %2; код %3; симв. код %4; курс %5",
		СокрЛП(Элемент.Vname) ,Элемент.Vnom, Элемент.Vcode, Элемент.VChCode, Элемент.Vcurs));
КонецЦикла;

Другие примеры использования XDTO

Помимо обменов данными в формате XML, а также использования в SOAP-сервисах, механизм XDTO имеет еще несколько интересных способов применения. Можно использовать сериализацию XDTO для изменения графических схем – тех самых, которые используются в бизнес-процессах. Графическая схема сериализуется в XDTO-объект со своим набором свойств, а дальше все в руках разработчика – можно добавлять элементы, менять описания, задавать связи, и т.д.

Аналогично можно программно управлять и многими другими объектами 1С, которые сериализуются в/из XDTO (об этом можно узнать из документации либо встроенной справки), например:

  • Диаграммы
  • Схемы компоновки данных
  • Хранилища значений

и другие

Просмотров 12.4к. Опубликовано 24 октября, 2018 Обновлено 24 октября, 2018

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

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

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

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

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

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

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

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

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

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

   Ilnazio

14.06.20 — 14:59

Доброго времени суток. Просьба не кидаться тухлыми помидорами, только учусь :) Т.к. учусь опишу задачу, вдруг совсем неправильно подхожу к ее решению.

Задача такая: необходимо открыть форму выбора справочника с отбором. Для этого получаю данные отбора из регистра запросом. С клиентской процедуры решил использовать функцию на сервере, которая вернет массив запроса. В последующем результат я обработаю уже на клиенте и открою форму с отбором.

В момент возвращения массива на клиентскую процедуру возникает ошибка, довольно длинная:

//НачалоОшибки

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘ret’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘Value’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.1/data/core}Value

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘СтрокаТаблицыЗначений’

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘ret’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘Value’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.1/data/core}Value

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘СтрокаТаблицыЗначений’

//Конецошибки

Сам код:

&НаСервере

Функция Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод)

    Запрос = Новый Запрос;

    Запрос.Текст =

    «ВЫБРАТЬ

    |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура КАК Номенклатура,

    |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция КАК АлкогольнаяПродукция

    |ИЗ

    |    РегистрСведений.алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры КАК алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры

    |

    |СГРУППИРОВАТЬ ПО

    |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура,

    |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция»;

        
    Запрос.УстановитьПараметр(«Наименование», СтрокаСАлкПрод);

    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

    
    ПараметрыОтбора = Новый Структура();

    ПараметрыОтбора.Вставить(«АлкогольнаяПродукция»,СтрокаСАлкПрод);

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

    
    Возврат(НайденныеСтроки);    

КонецФункции

&НаКлиенте

Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    НайденныеСтроки = «ы»;

    
    ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;

    СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция;

    СтандартаяОбработка = ложь;

    
    Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);

    
    ПараметрыОтбораФормы = Новый Структура();

    Для каждого стр из НайденныеСтроки Цикл

        Значение = стр.Номенклатура;

        ПараметрыОтбораФормы.Вставить(«Номенклатура»,Значение);

    КонецЦикла;

    
    ПараметрыОтбораФормы = ПолучитьИзВременногоХранилища(АдресХранилища);

    Форма = ПолучитьФорму(«Справочник.Номенклатура.ФормаВыбора»,ПараметрыОтбораФормы);

    Форма.Открыть();    

КонецПроцедуры

ну ругайтесь, пожалуйста. облазил сколько смог перед тем как зарегаться тут

   Ilnazio

1 — 14.06.20 — 15:02

Да еще и код не выделился..

&НаСервере
Функция Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура КАК Номенклатура,
    |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция КАК АлкогольнаяПродукция
    |ИЗ
    |    РегистрСведений.алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры КАК алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры
    |
    |СГРУППИРОВАТЬ ПО
    |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура,
    |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция";
        
    Запрос.УстановитьПараметр("Наименование", СтрокаСАлкПрод);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    ПараметрыОтбора = Новый Структура();
    ПараметрыОтбора.Вставить("АлкогольнаяПродукция",СтрокаСАлкПрод);
    НайденныеСтроки = РезультатЗапроса.НайтиСтроки(ПараметрыОтбора);
    
    Возврат(НайденныеСтроки);    
КонецФункции

&НаКлиенте
Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    НайденныеСтроки = "ы";
    
    ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
    СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция;
    СтандартаяОбработка = ложь;
    
    Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);
    
    ПараметрыОтбораФормы = Новый Структура();
    Для каждого стр из НайденныеСтроки Цикл
        Значение = стр.Номенклатура;
        ПараметрыОтбораФормы.Вставить("Номенклатура",Значение);
    КонецЦикла;
    
    ПараметрыОтбораФормы = ПолучитьИзВременногоХранилища(АдресХранилища);
    Форма = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",ПараметрыОтбораФормы);
    Форма.Открыть();    
КонецПроцедуры

   H A D G E H O G s

2 — 14.06.20 — 15:17

Передача Таблицы значений между сервером и клиентом недоступна

   Ilnazio

3 — 14.06.20 — 15:18

(2) НайденныеСтроки — массив, в отладке смотрел. Читал что вроде его передавать можно

   Cthulhu

4 — 14.06.20 — 15:19

Отсутствует отображение для типа ‘СтрокаТаблицыЗначений’

— значения типа ‘СтрокаТаблицыЗначений’, ‘ТаблицаЗначений’ — НЕ сериализуются! (и согласно мануалу и реализации —  не существуют в клиенте, хотя в принципе можно и извратиться создать и использовать их — но это лирика не по теме)

   Cthulhu

5 — 14.06.20 — 15:20

(3): значит в массиве есть значение такого типа… а как ты хотел — для передачи коллекции значений сериализутся все элементы коллекции

   Ilnazio

6 — 14.06.20 — 15:27

(5) Действительно в массиве хранятся значения типа «СтрокаТаблицыЗначений». Какой выход из ситуации? как можно вернуть инфу на клиент?

   H A D G E H O G s

7 — 14.06.20 — 15:57

(6) Преобразуй в Структуру

   Ilnazio

8 — 14.06.20 — 17:16

(7) Преобразовал в структуру в функции на сервере, до вызова функции в процедуре объявил Переменную ПараметрыОтбораФормы, иначе ругался. В момент возвращения в процедуру значения ПараметрыОтбораФормы = неопределенно становится. По идее структуру можно же с сервера на клиент возвращать?

ПараметрыОтбораФормы = Новый Структура();
    Для каждого стр из НайденныеСтроки Цикл
        Значение = стр.Номенклатура;
        ПараметрыОтбораФормы.Вставить("Номенклатура",Значение);
    КонецЦикла;

    
    Возврат(ПараметрыОтбораФормы);    
КонецФункции

&НаКлиенте
Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Перем ПараметрыОтбораФормы; 
    
    ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
    СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция;
    СтандартаяОбработка = ложь;
    
    Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);

   RomaH

9 — 15.06.20 — 06:45

(8)

Перем ПараметрыОтбораФормы;

вот это тебя подвело

зачем оно тебе?

   ДенисЧ

10 — 15.06.20 — 06:48

«ПараметрыОтбораФормы = Новый Структура();

    Для каждого стр из НайденныеСтроки Цикл

        Значение = стр.Номенклатура;

        ПараметрыОтбораФормы.Вставить(«Номенклатура»,Значение);

    КонецЦикла;

»

Извините, а сегодня точно не пятница, а понедельник?

   Kashey

11 — 15.06.20 — 09:54

(0) Можете расписать подробнее, что хотите реализовать? Есть мнение, что Ваш подход неверный в корне.

   Ilnazio

12 — 15.06.20 — 11:13

(10) воскресенье + неопытный я)) Дай совет дай зеленому, пожалуйста

   Ilnazio

13 — 15.06.20 — 11:13

(9) Перем поставил из-за того что он ругается. ошибка: Переменная не определена (ПараметрыОтбораФормы)

   ДенисЧ

14 — 15.06.20 — 11:21

(12) Покрасься

Надеюсь, ты понимаешь, что каждое Вставить в структуру перезаписывает существующее значение?

   Ilnazio

15 — 15.06.20 — 11:21

(11) В ТЧ обработке устанавливается соответствие между (АП) алкогольной продукцией(пришла из егаиса) и номенклатурой в 1С. В случае когда одной АП соответствует несколько позиции номенклатуры 1С нужно открыть форму выбора справочника номенклатура с предложенным списком вариантов на основе регистра сведений. В регистре сведений прописывается связка всех соответствии АП-номенклатура.

В табличной части где нужно выбрать номенклатуру я получил АП, далее по этому АП нашел все связки запросом и получил массив (НайденныеСтроки).

Чтобы открыть форму с отбором вроде как нужно иметь структуру с одной колонкой — нашими параметрами отбора.

На данный момент столкнулся с несколькими проблемами:

1) не могу вернуть хоть какую-то инфу серверной функцией.

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

   Ilnazio

16 — 15.06.20 — 11:22

(14) Да, это понимаю) в отладке сразу обратил внимание. Простого человеческого добавить нету же(

   ДенисЧ

17 — 15.06.20 — 11:23

(16) Куда добавить? Структура — она по определению — с уникальными ключами…

   D_E_S_131

18 — 15.06.20 — 11:27

1. Ищи в запросе сразу по строке «АлкогольнаяПродукция» нужную Номенклатуру.

2. Найденные значения выгружай в массив и этот массив уже возвращай на клиента.

3. На открываемую форму так же передавай свой массив в отдельный параметр.

4. В открываемой форме в ПриСозданииНаСервере сделай установку отбора на основании переданного параметра формы.

   Ilnazio

19 — 15.06.20 — 11:41

(17) Тогда вопрос на засыпку: Есть одномерный массив с 2-3 элементами. Как можно его превратить в структуру?)

   D_E_S_131

20 — 15.06.20 — 11:42

(19) Зачем тебе что-то во что-то превращать вообще?

   dezss

21 — 15.06.20 — 11:46

(0)

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

   МассивСтрок = ОбщегоНазначения.ТаблицаЗначенийВМассив(НайденныеСтроки);

   dezss

22 — 15.06.20 — 11:47

(21) + это написать вместо

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

Ну и возвращать МассивСтрок;

   Kashey

23 — 15.06.20 — 12:05

(15) По запросу — параметр «Наименование» запроса устанавливаете, а в запросе не фильтруете по нему. Выбираются все записи регистра сведений. Ещё не увидел куда результат функции возвращается на клиенте. Из результата запроса  формируете структуру с нужной номенклатурой и возвращаете на клиент. На клиенте полученую структуру помещаете в параметры отбора формы перед её открытием. Должно всё получиться.

   Ilnazio

24 — 15.06.20 — 12:24

(22) Спасибо большое, учту

   Ilnazio

25 — 15.06.20 — 12:26

(23) Спасибо. Да с запросом косяк был, переделал. Не понял немного вас:»Ещё не увидел куда результат функции возвращается на клиенте» А как нужно отобразить куда результат функции возвращается?

   Ilnazio

26 — 15.06.20 — 12:29

(20) При открытии формы необходима структура в качестве параметра отбора. А я получаю по сути массив… Или как-то можно массивом отвертеться?

В сп:

<Параметры> (необязательный)

Тип: Структура.

   Kashey

27 — 15.06.20 — 12:38

(25)  вызываете функцию, её результат нужно поместить в переменную, иначе нужно использовать процедуру. Как-то так:

НайденныеСтроки = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);

А НайденныеСтроки потом уже обрабатывать как требуется.

   Ilnazio

28 — 15.06.20 — 12:51

(27) Понял, спасибо огромное Вам! Можете, пожалуйста, посмотреть (26) сообщение, может сходу идея появится какая-нибудь…

   Kashey

29 — 15.06.20 — 13:18

(28)Поместить список номенклатуры в список значений СЗ. Передать его как параметр отбора в форму выбора.

СтрСписок = Новый Структура(«Ссылка», СЗ);

ПараметрыФормы = Новый Структура(«Отбор», СтрСЗ);

    ОткрытьФорму(«Справочник.Номенклатура.ФормаВыбора», ПараметрыФормы);

   Kashey

30 — 15.06.20 — 13:24

Либо установить отбор в запросе динамического списка в форме выбора и передавать список номенклатуры в неё. При создании на сервере заполнять параметр запроса динамического списка.

   Ilnazio

31 — 15.06.20 — 13:59

(30) Спасибо большое за советы, дошел до финала — открытие формы. Не разобрался моментом как из массива получить структуру.

МассивОтбора = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);    ОткрытьФорму("Справочник.алкВидыАкциза.ФормаВыбора",МассивОтбора);

Бьет ошибку несоответствие типов. передается массив, ожидает увидеть структуру.

   Ilnazio

32 — 15.06.20 — 13:59

(18) Тоже спасибо сказал все по делу, но все-таки для открытия формы необходима структура. Массив передаю — выдает ошибку несоответствие типов(

   Ilnazio

33 — 15.06.20 — 14:00

(29) Вроде тут описали схему без мудреных для меня на данный момент динамических списков. Можете, пожалуйста, подробнее рассказать?

   Ilnazio

34 — 15.06.20 — 14:10

https://makrus.ru/chastye-voprosy-po-1s/kak-otkryt-formu-vybora-s-opredelennym-otborom-v-1s-82.html

Вот здесь хороший пример есть для обычных форм. Второй кусок кода демонстрирует проверку при отборе ВидСравнение.Всписке. То что нужно, но для УФ надо такое же(

   Kashey

35 — 15.06.20 — 14:16

(30) Если вариант из (29) — ваша функция должна вернуть список значений (не массив), который вы и поместите в структуру для передачи в форму подбора.

   Ilnazio

36 — 15.06.20 — 14:30

(35) У вас в коде или ошибка или я пробка.. я, конечно, склоняюсь ко второму варианту, но уточню:

СтрСписок = Новый Структура("Ссылка", СЗ);
ПараметрыФормы = Новый Структура("Отбор", СтрСЗ);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы);

По коду:

СЗ — список значений. СтрСписок — теперь структура из нашего массива. ПараметрыФормы — новая структура из какого-то СтрСЗ? я связь потерял

   Ilnazio

37 — 15.06.20 — 14:30

(36) СтрСписок — теперь структура из нашего *СпискаЗначений*, опечатку допустил

   Kashey

38 — 15.06.20 — 14:35

(37) Да, ошибка. СтрСЗ = СтрСписок

   D_E_S_131

39 — 15.06.20 — 14:36

(32) А какой тип у параметра формы поставил? Произвольный?

   D_E_S_131

40 — 15.06.20 — 14:48

Хотя как рекомендовано в (29) сделать более правильно и изящнее.

   craxx

41 — 15.06.20 — 14:54

(0) Индексы строк передавай, а не сами строки

ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока

   Ilnazio

42 — 15.06.20 — 14:56

(38) (40) (41) Сделал как в 29, все отрабатывает, но уходит в типовой код и открывает совсем другую форму.

&НаКлиенте
Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
    СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция;
    СтандартаяОбработка = ложь;
    
    СЗ = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);
    
    
    СтрСписок = Новый Структура("Ссылка", СЗ);
    ПараметрыФормы = Новый Структура("Отбор", СтрСписок);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы);
    
КонецПроцедуры

Видимо не достаточно что стоит стандартная обработка = ложь

   Ilnazio

43 — 15.06.20 — 14:58

(42) Причем открывает две формы, типовую что должна открыться и то что я вызываю, только то что я вызвал уходит в типовой код и в коде я отловил момент когда моя форма подменяется другой. По итогу открываются две формы, обе не мои)

   Kashey

44 — 15.06.20 — 15:03

(43) СтандартаяОбработка = ложь;

   D_E_S_131

45 — 15.06.20 — 15:03

(43) А что у тебя здесь — «Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод)»?

   Kashey

46 — 15.06.20 — 15:04

(43) Внимательно прочтите имя переменной

   Ilnazio

47 — 15.06.20 — 15:12

(45) Функция которая вернула СписокЗначений

&НаСервере
Функция Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура.Наименование КАК НоменклатураНаименование
        |ИЗ
        |    РегистрСведений.алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры КАК алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры
        |ГДЕ
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция.Ссылка = &Наименование
        |
        |СГРУППИРОВАТЬ ПО
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура.Наименование";
    
    Запрос.УстановитьПараметр("Наименование", СтрокаСАлкПрод);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    СЗ = Новый СписокЗначений();
    Для Каждого стр из РезультатЗапроса Цикл
        СЗ.Добавить(стр.НоменклатураНаименование);
    КонецЦикла;
    Возврат(СЗ);    
КонецФункции
   D_E_S_131

48 — 15.06.20 — 15:18

«…и в коде я отловил момент когда моя форма подменяется другой.» — этот код ПриОткрытии формы выбора срабатывает?

   Kashey

49 — 15.06.20 — 15:19

(47) Зачем наименование выбираете в запросе? Ссылка нужна. А в секции ГДЕ как раз наименование нужно, похоже, а не ссылка ))

   Ilnazio

50 — 15.06.20 — 15:20

(46) Да, моя невнимательность была. Теперь же форма открывается одна — моя. Точнее пытается открыться, но в процессе заменяется типовой формой другой, то есть проходит в типовую процедуру сразу же после выполнения команды открытьформу.

Заметил что как только выхожу из своей процедуры стандартная обработка автоматом проставляется «Истина»! сцуко…

Попадает в следующую процедуру:

Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    
    Если ВидФормы = "ФормаОбъекта" Тогда    
        Если Параметры.Свойство("ЗначениеКопирования") Тогда
            ОбъектКопирования = Параметры.ЗначениеКопирования;
            Если Не ОбъектКопирования.ЭтоГруппа Тогда
                СтандартнаяОбработка = Ложь;
                Параметры = Новый Структура("ЗначениеКопирования", ОбъектКопирования);
                ВыбраннаяФорма = "ФормаЭлемента";
            КонецЕсли;
        ИначеЕсли Параметры.Свойство("РежимВыбора") Тогда
            Если Параметры.РежимВыбора
                И (Не Параметры.Свойство("ЭтоГруппа")
                     Или Не Параметры.ЭтоГруппа) Тогда
                СтандартнаяОбработка = Ложь;
                ВыбраннаяФорма = "ФормаЭлемента";
            КонецЕсли;
        КонецЕсли;
    ИначеЕсли ВидФормы = "ФормаВыбора" Тогда
        ВыборГруппИЭлементов = Неопределено;
        Если Параметры.Свойство("ВыборГруппИЭлементов",ВыборГруппИЭлементов) Тогда
            Если ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда
                СтандартнаяОбработка = Ложь;
                ВыбраннаяФорма = "ФормаВыбораГруппИЭлементов";
            КонецЕсли;
        Иначе
            СтандартнаяОбработка = Ложь;
            ВыбраннаяФорма = "ФормаВыбораГруппИЭлементов";
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Вот тут замена идет

ИначеЕсли ВидФормы = "ФормаВыбора" Тогда
        ВыборГруппИЭлементов = Неопределено;
        Если Параметры.Свойство("ВыборГруппИЭлементов",ВыборГруппИЭлементов) Тогда
            Если ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда
                СтандартнаяОбработка = Ложь;
                ВыбраннаяФорма = "ФормаВыбораГруппИЭлементов";
            КонецЕсли;
        Иначе
            СтандартнаяОбработка = Ложь;
            ВыбраннаяФорма = "ФормаВыбораГруппИЭлементов";
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

   Ilnazio

51 — 15.06.20 — 15:21

(49) там все работает)) ну я посмотрю что вы имеете в виду)

   D_E_S_131

52 — 15.06.20 — 15:25

Открывай через «ОткрытьФорму(«Справочник.Номенклатура.Формы.ФормаВыбора», ПараметрыФормы)», если она не заработает в режиме выбора, то придется через ПолучитьФорму() сделать и установить ей режим выбора, закрытие при выборе и т.п.

   Cthulhu

53 — 15.06.20 — 15:33

   Cthulhu

54 — 15.06.20 — 15:34

(53) — готовый код тз в структуру

   Kashey

55 — 15.06.20 — 15:45

(51) А форму выбора самостоятельно добавляли? Если да, то нужно указать в первом параметре ОткрытьФорму() её имя.

   Ilnazio

56 — 15.06.20 — 15:56

(52) Отрабатывает нормально, спасибо. Но форма выбора открывается пустой, без списка номенклатуры. Также стандартнаяобработка после выхода из моей процедуры меняется на Истину.

   Ilnazio

57 — 15.06.20 — 16:07

(55) Открываю самостоятельно, имя прописываю.

Если прописываю Справочник.Номенклатура.ФормаВыбора — моя форма заменяется другой.

Если же Справочник.Номенклатура.Форма.ФормаВыбора, то открывается нужная форма, но пустая

&НаКлиенте
Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
    СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция;
    
    СтандартнаяОбработка = Ложь;
    
    СЗ = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);
    
    СтрСписок = Новый Структура("Ссылка", СЗ);
    ПараметрыФормы = Новый Структура("Отбор", СтрСписок);
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", ПараметрыФормы);
    
КонецПроцедуры

   D_E_S_131

58 — 15.06.20 — 16:10

«Но форма выбора открывается пустой, без списка номенклатуры» — смотреть отладчиком какие данные (и каких типов) получились в СЗ.

«Также стандартнаяобработка после выхода из моей процедуры меняется на Истину.» — в смысле «после выхода»? Куда вышло? Может в том месте уже свой параметр СтандартнаяОбработка?

   Kashey

59 — 15.06.20 — 16:10

(57) См. 49, нужна ссылка

   Ilnazio

60 — 15.06.20 — 17:17

(59) Действительно — проблема в ссылке была. Задача решена, всем огромное спасибо. Рабочий код прилагается

&НаСервере
Функция Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура КАК Номенклатура
        |ИЗ
        |    РегистрСведений.алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры КАК алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры
        |ГДЕ
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция.Ссылка = &Наименование
        |
        |СГРУППИРОВАТЬ ПО
        |    алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура";
    
    Запрос.УстановитьПараметр("Наименование", СтрокаСАлкПрод);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    СЗ = Новый СписокЗначений();
    Для Каждого стр из РезультатЗапроса Цикл
        СЗ.Добавить(стр.Номенклатура);
    КонецЦикла;
    Возврат(СЗ);    
КонецФункции

&НаКлиенте
Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
    СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция;
    
    СтандартнаяОбработка = Ложь;
    
    СЗ = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод);
    
    СтрСписок = Новый Структура("Ссылка", СЗ);
    ПараметрыФормы = Новый Структура("Отбор", СтрСписок);
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", ПараметрыФормы);
КонецПроцедуры
   Ilnazio

61 — 15.06.20 — 17:17

(59) Сколько в сфере 1с работаете если не секрет?)

   D_E_S_131

62 — 15.06.20 — 17:25

(60) Еще в условии «ГДЕ» ссылку сравниваешь с чем, опять со строкой?

   Ilnazio

63 — 15.06.20 — 17:28

(62) Нет, там ссылка приходит.

   Ilnazio

64 — 15.06.20 — 17:29

(59) (62) Короч нифига не все)) отбор произведен, но номенклатура не выбирается из списка.. сцуко, рано обрадовался

   D_E_S_131

65 — 15.06.20 — 17:57

(64) см. второй вариант в (52). :)

   Kashey

66 — 15.06.20 — 18:02

(64) В открываемой форме элемент формы Список — в свойствах режим выбора стоит?

   Ilnazio

67 — 16.06.20 — 09:55

(66) Не очень понял где смотреть. Форму которую открываю — типовая. Есть подозрения что не задана форма владельца и значение тупо не возвращается, может быть такое?

   Ilnazio

68 — 16.06.20 — 10:33

(66) Проблему решил, передал владельцем элемент откуда вызывалась процедура, значение возвращает. Но если же объясните что вы имели в виду будет полезно для общего развития.

Для будущих поколений: дополнил строчку открытия формы

ОткрытьФорму(«Справочник.Номенклатура.Форма.ФормаВыбора», ПараметрыФормы,Элемент);

   D_E_S_131

69 — 16.06.20 — 10:39

«Есть подозрения что не задана форма владельца…» — это не подозрение, а факт судя по вашему коду. Еще так же полезно настроить режим открытия окна формы (последний параметр метода ОткрытьФорму()).

   Ilnazio

70 — 16.06.20 — 10:53

(69) Спасибо) Чем он помогает?

   D_E_S_131

71 — 16.06.20 — 11:13

(70) Ну если использовать режим БлокироватьОкноВладельца, то выбор элемента будет более естественным.

   Ilnazio

72 — 16.06.20 — 11:34

(71) Понял, протестирую

   Kashey

73 — 16.06.20 — 11:44

(66) Если коротко — есть форма списка, есть форма выбора. Поведение отличается, хотел уточнить что используете именно форму выбора. Для общего развития рекомендую изучить работу с управляемыми формами, там очень много нюансов. Нахрапом не возьмёшь, нужно именно понимание.

  

Ilnazio

74 — 17.06.20 — 11:59

(73) Понял, изучу. спасибо большое) Есть какие-либо источники которые с уверенностью можете посоветовать?

Перейти к контенту

  • Документ Электронный акт выполненных работ
  • Бухгалтерия 8 для Казахстана, ред 3.0

Вопрос:

В нашей базе настроена работа с электронными актами выполненных работ посредством прямой отправки в ИС ЭСФ. Ранее электронные документы отправлялись без ошибок. 

При отправке документов с 03 февраля 2023 года выходит сообщение с таким текстом «Ошибка при установке значения атрибута контекста (awpType): Несоответствие типов XDTO:  Ошибка проверки данных XDTO…».

Ответ:

В ночь на 3 февраля 2023 года на портале ИС ЭСФ было выполнено обновление системы в части работы модуля Акты выполненных работ. С полным описанием изменений можно ознакомиться в следующих материалах:

  • Обновление ИС ЭСФ 3 февраля 2023 года (меняется механизм работы с АВР)
  • Что изменилось по АВР с 3 февраля 2023 года (в ИС ЭСФ и 1С)
  • Выпущен патч для релиза БК 3.0.46.1 (ЭАВР по версии 2  + механизм исправления)

Одно из важных изменений в работе с ЭАВР на портале ИС ЭСФ – это внедрение новой версии (электронного шаблона) самого документа Электронный Акт выполненных работ (оказанных услуг), которая разработана в соответствии с утвержденной формой Р-1.

В связи с этим разработчиками 1С уже 3 февраля 2023 года был выпущен патч к релизу 3.0.46.1 конфигурации «1С:Бухгалтерия 8 для Казахстана», редакции 3.0., который позволяет создавать в учетной системе электронный АВР соответствующий всем изменениям на портале ИС ЭСФ.

При этом обратите внимание, что если до обновления (патч к релизу 3.0.46.1) в вашей учетной уже были созданы документы Электронный акт выполненных работ, то для их отправки на портал ИС ЭСФ после 3 февраля 2023 года требуется заполнить новые реквизиты, которые появились в новой версии акта.

При попытке отправить из 1С электронные акты, созданные по «старой» версии система выдает информационное сообщение об ошибке со следующим текстом «Ошибка при установке значения атрибута контекста (awpType): Несоответствие типов XDTO:  Ошибка проверки данных XDTO…».

Для успешной отправки ЭАВР на портал ИС ЭСФ в учетной системе необходимо перезаполнить электронные документы в соответствии с новой версией, отправить без перезаполнения созданные ЭАВР до обновления нельзя – система ИС ЭСФ их не примет (не соответствует версия документа).

Данная ошибка возникает по причине того, что в обновленной версии акта выполненных работ появился новый реквизит Тип документа ЭАВР, заполнение которого является обязательным условием для регистрации документа в ИС ЭСФ. В связи с добавлением функционала по исправлению электронных актов, начиная с 3 февраля, ЭАВР могут быть следующих типов: Первичный или Исправленный.

В созданных до обновления учетной системы ЭАВР поле Тип документа ЭАВР не заполнено и для успешной отправки таких документов требуется выполнить их перезаполнение по кнопке АвтозаполнениеПерезаполнить по документу основанию.

При перезаполнении в документе Электронный акт выполненных работ (после установки патча) автоматически установится значение Первичный в поле Тип документа АВР и  документ готов для регистрации в ИС ЭСФ в соответствии с новой версией ЭАВР.

Документы Электронный акт выполненных работ, созданные в 1С после обновления конфигурации посредством патча к релизу 3.0.46.1, корректно формируются и отправляются в ИС ЭСФ после 3 февраля 2023 года.

  • 1501

Комментировать материалы сайта могут зарегистрированные пользователи.

Вход с помощью STSL

  1. 09.09.2020, 07:23

    #1

    Kuken вне форума


    Гость форума


    Exclamation 1c & XDTO

    День добрый форумчане.
    вот такая ошибка появилась при обмене выгрузка из УНФ (перепиленная в край) в БП по универсалу:
    Событие: Отправка.
    ПОД: Справочник_СпецификацииНоm енклатуры_Отправка.
    ПКО: Справочник_СпецификацииНоm енклатуры_Отправка.
    Объект: Справочник объект: Спецификации, Печать с логотипом Диаметр печати: 40,Оснастка: Переклейка на оснастку заказчика, (e1cib/data/Справочник.Спецификации?ref= 95cfd89d672c49b011eae6d66d90fca8).

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(835)}: Ошибка формирования объекта XDTO: Тип свойства <Таблица>. Имя свойства: <Товары>.

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(835)}: Ошибка формирования объекта XDTO: Тип свойства <ОбычноеСвойство>. Имя свойства: <ДоляСтоимости>.

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(756)}: Ошибка при вызове метода контекста (Создать)
    ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство .Тип, ЗначениеСвойства);
    по причине:
    Ошибка проверки данных XDTO:
    Значение: ‘244.22’ не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}int
    Несоответствие фасету FractionDigits = ‘0’
    ВызватьИсключение ТекстОшибки;
    ВызватьИсключение ТекстОшибки;

    Я понимаю что мне ошибка говорит что ДЛИННА ДРОБНОЙ ЧАСТИ должна быть равна 0, а у мена нет.
    Я не могу понять где поправить этот FRACTIONDIGITS

    все ссылки XDTO на данную хрень выглядят так <xs:element name=»ДоляСтоимости» type=»xs:decimal»/>

    у меня в объектах XDTO нет ни одного объекта (я не нашел) который ссылаеться на http://www.w3.org/2001/XMLSchema
    может я не правильно ищу может не там.
    вот в чем проблема то.

    Последний раз редактировалось Kuken; 09.09.2020 в 07:55.


  2. 09.09.2020, 09:27

    #2

    Konor18 вне форума


    Модератор

    Аватар для Konor18


    По умолчанию Re: 1c & XDTO

    Цитата Сообщение от Kuken
    Посмотреть сообщение

    День добрый форумчане.
    вот такая ошибка появилась при обмене выгрузка из УНФ (перепиленная в край) в БП по универсалу:
    Событие: Отправка.
    ПОД: Справочник_СпецификацииНоm енклатуры_Отправка.
    ПКО: Справочник_СпецификацииНоm енклатуры_Отправка.
    Объект: Справочник объект: Спецификации, Печать с логотипом Диаметр печати: 40,Оснастка: Переклейка на оснастку заказчика, (e1cib/data/Справочник.Спецификации?ref= 95cfd89d672c49b011eae6d66d90fca8).

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(835)}: Ошибка формирования объекта XDTO: Тип свойства <Таблица>. Имя свойства: <Товары>.

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(835)}: Ошибка формирования объекта XDTO: Тип свойства <ОбычноеСвойство>. Имя свойства: <ДоляСтоимости>.

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(756)}: Ошибка при вызове метода контекста (Создать)
    ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство .Тип, ЗначениеСвойства);
    по причине:
    Ошибка проверки данных XDTO:
    Значение: ‘244.22’ не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}int
    Несоответствие фасету FractionDigits = ‘0’
    ВызватьИсключение ТекстОшибки;
    ВызватьИсключение ТекстОшибки;

    Я понимаю что мне ошибка говорит что ДЛИННА ДРОБНОЙ ЧАСТИ должна быть равна 0, а у мена нет.
    Я не могу понять где поправить этот FRACTIONDIGITS

    все ссылки XDTO на данную хрень выглядят так <xs:element name=»ДоляСтоимости» type=»xs:decimal»/>

    у меня в объектах XDTO нет ни одного объекта (я не нашел) который ссылаеться на http://www.w3.org/2001/XMLSchema
    может я не правильно ищу может не там.
    вот в чем проблема то.

    Можно изменить формат универсального пакета, но проще изменить правила выгрузки, перед выгрузкой сделать преобразование (округление) у нужному типу, если это не критично для точности.


  3. 09.09.2020, 09:30

    #3

    Kuken вне форума


    Гость форума


    По умолчанию Re: 1c & XDTO

    в том то все и дело что кретично, этот параметр учитывается в ЗП людей.
    Я понимаю что можно поставить FractionDigits = ‘2’, но я не знаю где это сделать.


  4. 09.09.2020, 10:27

    #4

    Konor18 вне форума


    Модератор

    Аватар для Konor18


    По умолчанию Re: 1c & XDTO

    Цитата Сообщение от Kuken
    Посмотреть сообщение

    в том то все и дело что кретично, этот параметр учитывается в ЗП людей.
    Я понимаю что можно поставить FractionDigits = ‘2’, но я не знаю где это сделать.

    если точность критически важна — тогда меняйте в пакете — ветка общие — xdto-объекты — пакет называется EnterpriseData (используемую версию вроде можно посмотреть в настройках обмена)
    там где-то в настройках можно поменять тип и свойства объектов, где искать ваше свойство не знаю


  5. Пользователь сказал cпасибо:


  6. 09.09.2020, 10:33

    #5

    Kuken вне форума


    Гость форума


    По умолчанию Re: 1c & XDTO


  7. 09.09.2020, 11:33

    #6

    Kuken вне форума


    Гость форума


    По умолчанию Re: 1c & XDTO

    <xs:element name=»ДоляСтоимости» type=»xs:decimal»/> — тут поменял int на decimal
    <xs:any namespace=»##any» processContents=»lax» minOccurs=»0″ maxOccurs=»unbounded»/>


  8. 10.09.2020, 07:43

    #7

    Kuken вне форума


    Гость форума


    По умолчанию Re: 1c & XDTO

    эм… народ. а теперь для тупых вопрос.
    выгрузил XDTO из 1с поправил….
    а как назад загрузить???


  9. 10.09.2020, 12:40

    #8

    Konor18 вне форума


    Модератор

    Аватар для Konor18


    По умолчанию Re: 1c & XDTO

    Цитата Сообщение от Kuken
    Посмотреть сообщение

    эм… народ. а теперь для тупых вопрос.
    выгрузил XDTO из 1с поправил….
    а как назад загрузить???

    поставить курсор на корневой элемент «xdto_пакеты», нажать правую кнопку мыши и появиться пункт «импорт схемы»


  10. Пользователь сказал cпасибо:


  11. 11.09.2020, 06:51

    #9

    Kuken вне форума


    Гость форума


    По умолчанию Re: 1c & XDTO

    вообщем не помогло.
    вот полная ошибка в очередной раз.
    Событие: Отправка.
    ПОД: Справочник_СпецификацииНо� �енклатуры_Отправка.
    ПКО: Справочник_СпецификацииНо� �енклатуры_Отправка.
    Объект: Справочник объект: Спецификации, Печать простая по желанию закачика Оснастка: 4642 Р4 оснастка для печати диаметром 42мм, (e1cib/data/Справочник.Спецификации?ref= 95dfd89d672c49b011eaf36ec5fba3c3).

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(835)}: Ошибка формирования объекта XDTO: Тип свойства <Таблица>. Имя свойства: <Товары>.

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(835)}: Ошибка формирования объекта XDTO: Тип свойства <ОбычноеСвойство>. Имя свойства: <ДоляСтоимости>.

    {ОбщийМодуль.ОбменДаннымиXD TOСервер.Модуль(756)}: Ошибка при вызове метода контекста (Создать)
    ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство .Тип, ЗначениеСвойства);
    по причине:
    Ошибка проверки данных XDTO:
    Значение: ‘21.77’ не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}int
    Несоответствие фасету FractionDigits = ‘0’
    ВызватьИсключение ТекстОшибки;
    ВызватьИсключение ТекстОшибки;
    это вся схема XDTO
    https://yadi.sk/d/5pip-5btETZoHw
    EnterpriseData1.3.7
    https://yadi.sk/d/rt0-q0aASDcOUA
    EnterpiseData1.6.1
    https://yadi.sk/d/24NcK—YGSgPgg

    Последний раз редактировалось Kuken; 11.09.2020 в 08:02.


Похожие темы

  1. Ответов: 0

    Последнее сообщение: 13.07.2018, 15:59

  2. Ответов: 1

    Последнее сообщение: 28.03.2018, 17:23

Социальные закладки

Социальные закладки


Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
  • BB коды Вкл.
  • Смайлы Вкл.
  • [IMG] код Вкл.
  • [VIDEO] код Вкл.
  • HTML код Выкл.

Правила форума

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Сергей Интяшев

Дата регистрации: 29.01.2019
Сообщений: 1

Добрый день всем. При создании электронного документа выдает такую ошибку.

1С:Предприятие 8.3 (8.3.12.1685)
Бухгалтерия предприятия, редакция 3.0 (3.0.67.43)
Режим : Серверный, PostgreSQL

Не удается создать электронный документ, выдает ошибку: «Выполнение операции: Заполнение XDTO.
Ошибка установки значения свойства «НалСт».
Подробности см. в журнале регистрации.»

Сообщения из журнала регистрации:

Выполнение операции: Заполнение XDTO.
Ошибка установки значения свойства «НалСт».
{ОбщийМодуль.ОбменСКонтрагентамиВнутренний.Модуль(10673)}: Ошибка при вызове метода контекста (Установить)
            ОбъектXDTO.Установить(ИмяСвойства, Значение);
по причине:
Несоответствие типов XDTO
по причине:
Ошибка проверки данных XDTO:
Значение: ‘20%’ не соответствует простому типу:
Значение не соответствует значениям фасета перечисления

————————————————————————————-

Выполнение операции: Формирование ЭД.
{ОбщийМодуль.ОбменСКонтрагентамиВнутренний.Модуль(8390)}: Выполнение операции: Заполнение XDTO.
Ошибка установки значения свойства «НалСт».
                  ВызватьИсключение ЭлектронноеВзаимодействиеСлужебный.СоединитьОшибки(Ошибки);

Помогите пожалуйста, может кто сталкивался с данной проблемой

Ленар Ленарович

Дата регистрации: 15.03.2019
Сообщений: 1

Нужно обновить 1С до определенного релиза. Для «Бухгалтерия предприятия», редакция 3.0 необходимо обновиться до релиза 3.0.67.67

Показывать по
10
20
40
сообщений

Понравилась статья? Поделить с друзьями:
  • Ошибка при установке драйвера на видеокарту nvidia
  • Ошибка при установке защищенного соединения что делать
  • Ошибка при установке драйвера юсб
  • Ошибка при установке драйвера на видеокарту amd
  • Ошибка при установке защищенного соединения mozilla