Заполнение xdto ошибка установки значения свойства correspacc

В данной статье я свел воедино все, что на данный момент знаю о механизме 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 (об этом можно узнать из документации либо встроенной справки), например:

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

и другие

Здравствуйте.

помогите разобраться

Выполнение операции: Заполнение XDTO.

Ошибка установки значения свойства «Name»!

{ОбщийМодуль.ЭлектронныеДокументыВнутренний.Модуль(15686)}: Ошибка при вызове метода контекста (Установить)

                               ОбъектXDTO.Установить(ИмяСвойства, Значение);

по причине:

Несоответствие типов XDTO

по причине:

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

Значение: ‘ExpInvoiceAndPrimaryAccountingDocumentCustomer’ не соответствует простому типу:

Значение не соответствует значениям фасета перечисления

вот это значение в фасет передается в стоковом типе. что не так не пойму.

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

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

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

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

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

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

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

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

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

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

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

Описание ошибки:
База была выгружена из ирхива .dt. База файловая, конфигурация 1С: Бухгалтерия предприятия, редакция 3.0. При работе в конфигураторе и при запуска конфигуратора ошибок не возникает. Ошибка проявляет себя только при попытке запуска в режиме 1С: Предприятие. Даже не выводится форма для авторизации пользователя, как возникает ошибка. Релиз платформы 1С: Предприятие — 8.3.12.89.

Нажатие на изображении увеличит его
1С 8, как устранить, убрать, исправить ошибку, при запуске базы, Ошибка преобразования данных XDTO, НачалоСвойства: errorProcessingSettings, messageTemplates, category

Ошибка в некотором роде редкая, но не настолько, чтобы остаться неизвестной. Короткое обсуждение на форуме dev.mista.ru, содержащее ссылку на описание в каталоге ошибок (потребуется авторизация для сайта ИТС) продукта технологической платформы позволило точно определить проблему — неподходящий релиз платформы. Как указано — использовался релиз платформы 8.3.18.1289.

Нажатие на изображении увеличит его
ошибка при запуске базы 1С 8, Ошибка преобразования данных XDTO, форма, элемент тип: http://v8.1c.ru/8.2/managed-application/core

Таким образом оказалось, что необходимо установить более высокую минорную версию релиза 8.3.18 — 8.3.18.13.63 или позднее. Так же ошибка может возникать для более ранних релизов версий 8.3.17 (до 17.2127), 8.3.19 (до релиза 19.1150), а так же для 8.3.20 (ранее релиза 20.1363).

Обновление релиза платформы 1С:предприятие на релиз 8.3.18.1563 на рабочем месте, где возникла ошибка, исправило ситуацию и база была запущена в ошибок.

Тема: 1c & XDTO

1c & XDTO

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

: Ошибка формирования объекта XDTO: Тип свойства <Таблица>. Имя свойства: <Товары>.

: Ошибка формирования объекта XDTO: Тип свойства <ОбычноеСвойство>. Имя свойства: <ДоляСтоимости>.

: Ошибка при вызове метода контекста (Создать)
ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство .Тип, ЗначениеСвойства);
по причине:
Ошибка проверки данных XDTO:
Значение: ‘244.22’ не соответствует простому типу: int
Несоответствие фасету FractionDigits = ‘0’
ВызватьИсключение ТекстОшибки;
ВызватьИсключение ТекстОшибки;

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

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

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

  • Просмотр профиля
  • Сообщения форума
  • Личное сообщение

Re: 1c & XDTO

Сообщение от Kuken

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

: Ошибка формирования объекта XDTO: Тип свойства <Таблица>. Имя свойства: <Товары>.

: Ошибка формирования объекта XDTO: Тип свойства <ОбычноеСвойство>. Имя свойства: <ДоляСтоимости>.

: Ошибка при вызове метода контекста (Создать)
ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство .Тип, ЗначениеСвойства);
по причине:
Ошибка проверки данных XDTO:
Значение: ‘244.22’ не соответствует простому типу: int
Несоответствие фасету FractionDigits = ‘0’
ВызватьИсключение ТекстОшибки;
ВызватьИсключение ТекстОшибки;

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

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

Ошибка проверки данных XDTO: Несоответствие фасету MaxLength = ’80‘

Выяснил, что у меня на сайте у ВСЕХ предложений коды длинные в виде 5484bff7-6844-465c-a084-6b5193002387#5484bff7-6844-465c-a084-6b5194003943
То есть Код_товара#Код_предложения.
А взялись они у меня на сайте из-за того, что сейчас (пока мы не используем 1С) каталог ведется в сторонней самописной базе и экспортируется из нее на сайт в формате cml (по стандартному битриксовскому протоколу). И в этом исходном cml код именно такой — составной, иначе при импорте не произойдет связки предложения с товаром.
После полного импорта этого каталога впустую 1С с помощью помощника эти коды в неизменном виде попали в 1С.
Теперь при экспорте из 1С слева к коду еще раз добавляется код товара, и получается цепочка из 3 кодов.

Выходит, на каком-то этапе что-то работает нелогично:
Либо неверно реализован протокол импорта в битрикс из cml (и Битрикс при импорте cml должен отсекать код товара и класть в предложение только код предложения)
Либо помощник импорта в 1С должен был при импорте предложения в 1С отсекать код товара
Либо при выгрузке из 1С в битрикс к коду предложения не должен дописываться код товара
Мне кажется правильным вариант номер 2.
Вот только теперь не знаю, как массово отсечь код товара в 1С в уже имеющейся базе. Руками не реально. Ждать новой версии помощника импорта, видимо, долго.
Помогите, пожалуйста.

Цитата
Владимир Щукин пишет:
Вот только теперь не знаю, как массово отсечь код товара в 1С в уже имеющейся базе. Руками не реально. Ждать новой версии помощника импорта, видимо, долго.

Обработка которая отсекает — пишется за 5 минут на коленке.
Все идентификаторы пришедшие с сайта хранятся в поле Б_Идентификатор.

Выбираем все идентификаторы отрезаем в каждом идентификаторе текст до «#» включительно и записываем на место.

Задачка для начинающего уровня программиста 1С )))

Цитата
Василий Мазурок пишет:
Задачка для начинающего уровня программиста 1С )

В мастере загрузки с сайта в функции ОбработатьЗначениеЭлемента есть такой кусок:

Что-то мне подсказывает, что в последней строке должно быть «=ПраваяЧасть;».

Цитата
Владимир Щукин пишет:
Выяснил, что у меня на сайте у ВСЕХ предложений коды длинные в виде 5484bff7-6844-465c-a084-6b5193002387#5484bff7-6844-465c-a084-6b5194003943
То есть Код_товара#Код_предложения.

Не знаю пока, даст ли правка кода что-то, решил попробовать повторный импорт.
Запустил помощник импорта с сайта с исправлением в коде и из любопытства перехватил файлы cml, идущие от Битрикса в 1С.
Оказыватеся, уже в cml от Битрикса в ИД торговых предложений светятся 3(!) кода:
Код_товара#Код_товара#Код_предложения.
Что получится в результате, будет ясно утром. Но тут явно что-то странное происходит.
Когда я скармливаю битриксу свой cml, в котором ИД предложения в виде Код_товара#Код_предложения, он так и созраняет в инфоблок код из 2 частей.
Зато отдача того же предложения идет уже из 3 частей Код_товара#Код_товара#Код_предложения.
Получается, гипотетически, на каждом круге ид прирастает слева на еще один код товара.

Битрикс у меня обновленный, без правок ядра, лицензионный и т.п. Интересно, это у всех так же?

В общем за ночь измененный помощник отработал, все загрузилось. У характеристик теперь код 1С такой, как должен — содержит только код предложения.
А вот экспорт из 1С теперь не работает. Падает с ошибкой «Недостаточно памяти». Хотя выгружаю всего один маленький раздел каталога, штук 100 товаров. И выгружаю не на сайт, а в файлы.
На машине 2 Гб памяти. Процесс долгое время потребляет около 800 Мб, но за секунду до ошибки потребление резко взлетает, диспетчер задач фиксирует пик в до 1470 Мб.
В логе обмена последняя строка
«Начало выгрузки пакета 1 каталога: Основной каталог товаров»

Что-то руки постепенно опускаются.

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

Но если это 1 пакет, от дело в свойствах.

Свойств 430 штук. Но они все нужные. Причем в выгружаемой группе используются не более 10 из них, и стоит галочка «выгружать только используемые». Но это сейчас, для экономии времени. А вот когда будет выгружаться весь каталог.
Я повнимательней посмотрел номенклатуру и выяснил, что вчера, когда делал новый импорт с сайта, в виде номенклатуры поствил характеристики «Общие для вида номенклатуры». Сегодня поставил, как раньше — индивидуальные для номенклатуры (не помню, как они точно называются), сейчас идет импорт, посмотрю, поможет ли.

Но вообще все как-то странно в мире 1С/Битрикс.
Моя самописная прога, которая генерит cml полного каталога из моей базы (размер конечных файлов 30Мб), потребляет не более 100 Мб памяти, и еще 190 Мб потребляет MS SQL Server, затрачивая на это 32 секунды.
Импорт этих файлов Битриксом занимает 50-70 минут, и ему с трудом хватает 512 Мб памяти (иногда падал, пока лимит не подняли).
Импорт того же каталога из битрикса в 1С занимает уже 5,5 часов, потребляет 1 гиг и иногда валится по нехватке памяти.
Экспорт 1/30 этого каталога из 1С в cml файлы требует минимум 7 минут на то, чтобы сожрать 1,5 гиг и упасть.
Нда. Что-то в консерватории неладное творится.

Интересно, если поставить 64-битную платформу, 1С будет использовать всю доступную память, по-прежнему только 1,5 гига?

1С тут не причем ))) думается мне — все дело в не оптимальных алгоритмах и чрезмерно использовании таблиц размещенных в памяти.

Причиной тому разработка обмена и тестирование на очень маленьких базах данных — где все эти подводные камни просто не всплывают!

Цитата
Владимир Щукин пишет:
Я повнимательней посмотрел номенклатуру и выяснил, что вчера, когда делал новый импорт с сайта, в виде номенклатуры поствил характеристики «Общие для вида номенклатуры». Сегодня поставил, как раньше — индивидуальные для номенклатуры (не помню, как они точно называются), сейчас идет импорт, посмотрю, поможет ли.

Да, из за этого и проблема.

Цитата
Владимир Щукин пишет:
Но вообще все как-то странно в мире 1С/Битрикс.
Моя самописная прога, которая генерит cml полного каталога из моей базы (размер конечных файлов 30Мб), потребляет не более 100 Мб памяти, и еще 190 Мб потребляет MS SQL Server, затрачивая на это 32 секунды.
Импорт этих файлов Битриксом занимает 50-70 минут, и ему с трудом хватает 512 Мб памяти (иногда падал, пока лимит не подняли).
Импорт того же каталога из битрикса в 1С занимает уже 5,5 часов, потребляет 1 гиг и иногда валится по нехватке памяти.

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

И да, самописная прога всегда(если написана не коряво) будет работать быстрее типового решения, т.к. там много что не учитывается.

Цитата
Василий Мазурок пишет:
думается мне — все дело в не оптимальных алгоритмах и чрезмерно использовании таблиц размещенных в памяти.

Ну предложите что нить пооптимальнее. Я посмотрю, может и заоптимизирую.

Цитата
Василий Мазурок пишет:
Причиной тому разработка обмена и тестирование на очень маленьких базах данных — где все эти подводные камни просто не всплывают!
Цитата
Александр Денисюк пишет:
Сказки.

Вы напрасно так резко.
Я никого не обвиняю ни в чем, но, столкнувшись с этим совсем недавно, действительно порой впадаю в ступор от «эффективности» использования ресурсов.

А цифры все реальные на 100%. Вы думаете, зачем я то одну опцию включаю, то другую? Просто надеюсь нащупать вариант, который будет быстрее. Неужели Вам меня не жалко — какие-то 3500 товаров импортируются полдня? Представляете, сколько дней такии темпами понадобится, чтобы все отладить? А сколько (десятков) раз процесс выпадал посередине то с ошибкой, то молча? Это какие нервы иметь надо! А Вы говорите «сказки».

Цитата
Владимир Щукин пишет:
Я повнимательней посмотрел номенклатуру и выяснил, что вчера, когда делал новый импорт с сайта, в виде номенклатуры поствил характеристики «Общие для вида номенклатуры». Сегодня поставил, как раньше — индивидуальные для номенклатуры (не помню, как они точно называются), сейчас идет импорт, посмотрю, поможет ли.

А почему из-за этого проблема? Зачем тогда вообще эта опция? Там даже указано «рекомендуется» выбирать общие характеристики. Тогда надо в инструкции к модулю крупно написать «Перед импортом каталога с сайта удостоверьтесь, что включена опция индивидуальных характеристик» или что-то такое.

Цитата
Александр Денисюк пишет:
Модуль обмена битрикс не виноват, что вы не оптимально храните данные.

А как их оптимально хранить? Я бы с удовольствием, но как? В битриксе у товаров есть свойства. Там и храню. Товаров 30 видов, у всех разные свойства, всего 430 штук свойств. Как их по-другому хранить, чтобы обмен быстрее шел? Какие еще варианты? Я искренне прошу рекомендаций, но пока не вижу.
А насчет «виноват-не виноват» — еще раз, чтобы не было конфликта — я не гворю, что виноват модуль, я высказывался об 1С и Битриксе вообще. Понятное дело, гибкость архитектуры и все такое. Но не такой же ценой. Везде в описании Битрикса красной линией идет «родная» интеграция с 1С. Я, честно, очень сильно на это расчитывал, когда выбирал движок магазина. А сейчас выходит, что две недели бьюсь, я только обмен товарами наладить не получается (это я еще зазаказы не брался). И это на моих мизерных 3500 товарах. Что же делать тем, у кого 10000?

Буду на днях пытаться на xeone и ssd пробовать, глядишь, может шустрее ворочаться будет.

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

Цитата
Владимир Щукин пишет:
А почему из-за этого проблема? Зачем тогда вообще эта опция? Там даже указано «рекомендуется» выбирать общие характеристики. Тогда надо в инструкции к модулю крупно написать «Перед импортом каталога с сайта удостоверьтесь, что включена опция индивидуальных характеристик» или что-то такое.

Опишу поподробнее, почему возникает ошибка нехватка памяти из за неправильного хранения свойств:
В УТ 11 свойства могут задаваться как индивидуально для товара, так и для вида номенклатуры:
Условия: свойств 450, 1000 товаров, в каждом товаре в среднем по 10 свойств.
1) Индивидуальные свойства:
Каждый товар будет хранить по 10 свойств. Из 1С для каждого товара будет выгружаться 10 свойств(выгружать только заполненные свойства нельзя. т.к. пропадут данные о свойствах товара, да и не понятно, нужно ли свойство очищать). Значения свойств будут искаться по 10 свойствам.
2) Общий для вида номенклатуры:
Я предполагаю, что все 450 свойства хранятся в одном виде номенклатуры(т.к. скорее всего использовали обработку экспорта из сайта). В этом случае для каждого товара будут выгружаться 450 свойств. Значения свойств будут искаться по 450 свойствам.

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

Где будет работать шустрее — я думаю понятно.

Цитата
Владимир Щукин пишет:
Спасибо за ответы, теперь понятно.
Я в будущем (когда с простыми вещами более-менее разберусь) планирую все товары раскидать по видам номенклатуры (аналогично категориям в битриксе) и в каждом виде номенклатуры оставить только тот набор свойств, которые касаются этого вида. Это, к сожалению, вручную делать придется, т.к. помощник импорта весь сайт валит в один вид номенклатуры, и в него же все свойства.

прочитал ветку и не понял что-где править нужно?
Сделал «Экспорт с БУСа» средствами модуля в 1с.УНФ, после пытаюсь сделать обмен товарами и вылетает ошибка топикстартера. превышен MaxLength.

До экспорта на чистый БУС выгружались товары с 1с без проблем этим же модулем, все работало. Но требуется периодически загружать новую номенклатуру с БУСа, так как контент-менеджер удаленно наполняет сайт контентом, добавляет товары с картинками. с БУСа в 1с экспорт прошел без проблем, а после экспорта выгрузка товаров на сайт падает на этапе «Выгрузка предложений в ХМЛ». настройки обмена выгрузки товаров не менялись.

Что делать? Знаний по обмену ХМЛ файлами нет, где правятся загрузки-выгрузки тоже не знаю(

З.Ы.: При попытке выгрузки первое падение идет на предложениях — отключил выгрузку предложений, упал обмен на ценах — отключил цены, упал на обмене остатков- отключил остатки, далее все прошло успешно. собственно после экспорта теперь обмен работает без предложений, остатков и цен. как все вернуть обратно?! =(

Цитата
Александр Денисюк написал:
Проверьте коды битрикс у загруженных предложений. Скорее всего он у вас хранит в себе связку ид товара# ид предложения.А должен хранить только ид предложения.

Да, так и есть. Только вот последующие эксперименты привели в полному замусориванию базы в 1с. Дело в том, что изначально на пустой БУС выгружались товары с 1с. Далее добавили товар в БУСе, и сделали Экспорт в 1С. После экспорта появились двойные внешние коды (плюс какие-то пустые характеристики и реквизиты в свойствах) и теперь, даже удалив их через «Редактирование кодов битрикса» при обмене двойные коды остаются. Причем при экспорте по насоздавались характеристики товара в 1с, даже у тех товаров, у которых не включена галочка «использовать характеристики». Так что туда-сюда (экспорт-импорт) обмен совсем не дружит друг с другом. Попытавшись почистить все лишнее (созданное при экспорте) ручками столкнулся с проблемой, что некоторые данные привязаны только к обмену и как это вычистить не понятно, даже удалив обмен (через который происходила выгрузка) остались лишние хвосты непонятных свойств и характеристик. что теперь делать даже не знаю. База, с которой работала выгрузка испорчена по сути(

Обнаруженные нюансы:
1. Экспорт не понимает разные номенклатурные группы и то, что свойства у каждой группы могут быть свои, а не только общие — как итог — при экспорте все свойства сваливаются в одну кучу в Основную номенклатурную группу (для товаров как-то в разброс заменяется номенклатурная группа на Основную, хотя была выставлена другая, не понял почему). Причем, изначально при экспорте были выгружены такие поля как Реквизиты, Характеристика, Базовая единица, Штрихкод, Артикул и т.п. а в обратную сторону при экспорте это все залилось как Общие Свойства Основной номенклатурной группы.
2. При выборке выгружаемых свойств и указании их не выгружать — все равно выгружаются все свойства. Тестировал на читом БУСе. Вываливаются все равно все свойства в каталог и в предложения, хотя в выборке было указано «не выгружать в товары» «не выгружать в предложения»
3. Двойной код появляется как раз у товаров, которые в 1С были с характеристиками. То есть, если товар был без характеристик, то ему создалась характеристика вида «Товар(Характеристика)» при экспорте и задвоился внешний код при последующем импорте. Причем, если повторить процедуру Экспорт-Импорт, то характеристики опять создаются вида «Товар(Характеристика(Характиристика))» и т.д.

В редких случаях у пользователей версий платформы 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С» приносит извинения, а также просит партнеров донести эту информацию до пользователей, у которых проявилась проблема, и помочь им заменить версию платформы.

Понравилась статья? Поделить с друзьями:
  • Запоздалый ручей найди и исправь ошибки в лесу
  • Заплачены пятьсот один рубль ошибка
  • Запишите словосочетания исправив ошибки звериный след низкие места
  • Запишите слова с орфографическими ошибками правильно
  • Запишите проверочные слова луг ошибка