Ошибка в атрибуте тип тега здание

Содержание:

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

2.       Ошибка при получении значения атрибута контекста

Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.  

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

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

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

2.    Ошибка при получении значения атрибута контекста

Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.

При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).  

Специалист компании «Кодерлайн»

Александр Суворов

Из 1с 8.2 подключаюсь к 1С 7.7 в которой необходимо создать элемент справочника и элемент подчиненного ему справочника.

При передаче значения реквизиту с типом Перечисления вылетает ошибка:

{ОбщийМодуль.РаботаСДокументами.Модуль(152)}: Ошибка при установке значения атрибута контекста (вид)

                               _адреса.вид = почтовый;

по причине:

Неизвестная ошибка

В чем может быть загвоздка?. Вот собственно сам код:

       глV7 = Новый COMОбъект («V77.Application»);

       Каталог=»/d\1Сbase1″;

       Открыта = глV7.Initialize(глV7.RMTrade, Каталог+» /NАвто», «»);

       
       Если Открыта = 0 Тогда

           Сообщить(«Ошибка открытия информационной базы»);

       Иначе

           
           _контрагенты=глV7.CreateObject(«Справочник.Покупатели»);

           _контрагенты.ВыбратьЭлементы();

           
           _страны=глV7.CreateObject(«Справочник.Страны»);

           _страны.ВыбратьЭлементы();

           
           _адреса=глV7.CreateObject(«Справочник.Адрес»);

           //    _адреса.ВыбратьЭлементы();

           
           
           чек = 0;

           пока _контрагенты.ПолучитьЭлемент()=1 цикл            

               док=_контрагенты.ТекущийЭлемент();

               Если Не СсылкаКлиент.ЭтоГруппа Тогда

                   //    Если док.родитель.код <> «» Тогда

                   Если СокрЛП(док.код) = СокрЛП(СсылкаКлиент.Код) Тогда

                       сообщить(«найден «+док.код);

                       чек = 1;

                       Прервать;

                   КонецЕсли;

                   //    КонецЕсли;                

               Иначе

                   Если док.родитель.код = «» Тогда    

                       Если СокрЛП(док.код) = СокрЛП(СсылкаКлиент.Код) Тогда

                           чек = 1;

                           Прервать;

                       КонецЕсли;

                   КонецЕсли;    

               КонецЕсли;                                            

           КонецЦикла;

           
           Если чек = 0 Тогда

               Если Не СсылкаКлиент.ЭтоГруппа Тогда

                   Клиент77 = глV7.CreateObject(«Справочник.Покупатели»);

                   Клиент77.Новый();

                   Клиент77.Код = СокрЛП(СсылкаКлиент.Код);

                   Клиент77.Наименование = СокрЛП(СсылкаКлиент.Наименование);

                   Клиент77.нип = СокрЛП(СсылкаКлиент.УНП);

                   Клиент77.регон = СокрЛП(СсылкаКлиент.Регон);

                   Клиент77.крс = СокрЛП(СсылкаКлиент.НКРС);

                   Клиент77.Power = СокрЛП(СсылкаКлиент.Power);

                   
                   СчСтрана = 0;

                   пока _страны.ПолучитьЭлемент()=1 цикл            

                       Страна77=_страны.ТекущийЭлемент();

                       Если СокрЛП(Страна77.наименование) = СокрЛП(СсылкаКлиент.Странарегистрации.Наименование) Тогда

                           Клиент77.страна = Страна77;

                           СчСтрана = 1;

                           Прервать;

                       КонецЕсли;

                   КонецЦикла;

                   Если СчСтрана = 0 и СсылкаКлиент.Странарегистрации.Наименование <> «» Тогда

                       Страна77 = глV7.CreateObject(«Справочник.Страны»);

                       Страна77.Новый();

                       Страна77.Код = СсылкаКлиент.Странарегистрации.ТекстКод;

                       Страна77.Наименование = СсылкаКлиент.Странарегистрации.Наименование;

                       Страна77.Записать();

                       Клиент77.страна = Страна77;

                   КонецЕсли;    

                   
                   Клиент77.Записать();

                   
                   //Ставим флаг ПереданВ1С77 в истину, чтоб больше автоматически не передавать этого клиента

                   Клиент82 = СсылкаКлиент.ПолучитьОбъект();

                   Клиент82.ПереданВ1С77 = Истина;

                   Клиент82.Записать();

                   
                   Сообщить(«Записан клиент «+Клиент77.код + » «+Клиент77.наименование);

                   
                   Для Каждого Стр Из Клиент82.Адреса Цикл

                       
                       _адреса=глV7.CreateObject(«Справочник.Адрес»);        

                           
                       _адреса.ИспользоватьВладельца(Клиент77);

                       _адреса.Новый();

                       _адреса.Наименование = Стр.Адрес;

                       _адреса.доп = Стр.Адрес;

                       Если Стр.ВидАдреса = Перечисления.ВидыАдресов.Почтовый Тогда

                                                           
                       _адреса.вид = глv7.Перечисление.ВидАдреса.почтовый;

                       ИначеЕсли Стр.ВидАдреса = Перечисления.ВидыАдресов.Юридический Тогда

                           _адреса.вид = глv7.Перечисление.ВидАдреса.юридический;

                       ИначеЕсли Стр.ВидАдреса = Перечисления.ВидыАдресов.электронный Тогда

                           _адреса.вид = глv7.Перечисление.ВидАдреса.электронный;

                       КонецЕсли;

                       _адреса.Записать();

                       
                   КонецЦикла;

                   
                   
               Иначе    

                   
               КонецЕсли;

           КонецЕсли;    

           
       КонецЕсли;

Содержание:

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

2.       Ошибка при получении значения атрибута контекста

Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.  

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

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

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

2.    Ошибка при получении значения атрибута контекста

Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.

При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).  

Специалист компании «Кодерлайн»

Александр Суворов

Из 1с 8.2 подключаюсь к 1С 7.7 в которой необходимо создать элемент справочника и элемент подчиненного ему справочника.

При передаче значения реквизиту с типом Перечисления вылетает ошибка:

{ОбщийМодуль.РаботаСДокументами.Модуль(152)}: Ошибка при установке значения атрибута контекста (вид)

                               _адреса.вид = почтовый;

по причине:

Неизвестная ошибка

В чем может быть загвоздка?. Вот собственно сам код:

       глV7 = Новый COMОбъект («V77.Application»);

       Каталог=»/d1Сbase1″;

       Открыта = глV7.Initialize(глV7.RMTrade, Каталог+» /NАвто», «»);

       

       Если Открыта = 0 Тогда

           Сообщить(«Ошибка открытия информационной базы»);

       Иначе

           

           _контрагенты=глV7.CreateObject(«Справочник.Покупатели»);

           _контрагенты.ВыбратьЭлементы();

           

           _страны=глV7.CreateObject(«Справочник.Страны»);

           _страны.ВыбратьЭлементы();

           

           _адреса=глV7.CreateObject(«Справочник.Адрес»);

           //    _адреса.ВыбратьЭлементы();

           

           
           чек = 0;

           пока _контрагенты.ПолучитьЭлемент()=1 цикл            

               док=_контрагенты.ТекущийЭлемент();

               Если Не СсылкаКлиент.ЭтоГруппа Тогда

                   //    Если док.родитель.код <> «» Тогда

                   Если СокрЛП(док.код) = СокрЛП(СсылкаКлиент.Код) Тогда

                       сообщить(«найден «+док.код);

                       чек = 1;

                       Прервать;

                   КонецЕсли;

                   //    КонецЕсли;                

               Иначе

                   Если док.родитель.код = «» Тогда    

                       Если СокрЛП(док.код) = СокрЛП(СсылкаКлиент.Код) Тогда

                           чек = 1;

                           Прервать;

                       КонецЕсли;

                   КонецЕсли;    

               КонецЕсли;                                            

           КонецЦикла;

           

           Если чек = 0 Тогда

               Если Не СсылкаКлиент.ЭтоГруппа Тогда

                   Клиент77 = глV7.CreateObject(«Справочник.Покупатели»);

                   Клиент77.Новый();

                   Клиент77.Код = СокрЛП(СсылкаКлиент.Код);

                   Клиент77.Наименование = СокрЛП(СсылкаКлиент.Наименование);

                   Клиент77.нип = СокрЛП(СсылкаКлиент.УНП);

                   Клиент77.регон = СокрЛП(СсылкаКлиент.Регон);

                   Клиент77.крс = СокрЛП(СсылкаКлиент.НКРС);

                   Клиент77.Power = СокрЛП(СсылкаКлиент.Power);

                   

                   СчСтрана = 0;

                   пока _страны.ПолучитьЭлемент()=1 цикл            

                       Страна77=_страны.ТекущийЭлемент();

                       Если СокрЛП(Страна77.наименование) = СокрЛП(СсылкаКлиент.Странарегистрации.Наименование) Тогда

                           Клиент77.страна = Страна77;

                           СчСтрана = 1;

                           Прервать;

                       КонецЕсли;

                   КонецЦикла;

                   Если СчСтрана = 0 и СсылкаКлиент.Странарегистрации.Наименование <> «» Тогда

                       Страна77 = глV7.CreateObject(«Справочник.Страны»);

                       Страна77.Новый();

                       Страна77.Код = СсылкаКлиент.Странарегистрации.ТекстКод;

                       Страна77.Наименование = СсылкаКлиент.Странарегистрации.Наименование;

                       Страна77.Записать();

                       Клиент77.страна = Страна77;

                   КонецЕсли;    

                   
                   Клиент77.Записать();

                   

                   //Ставим флаг ПереданВ1С77 в истину, чтоб больше автоматически не передавать этого клиента

                   Клиент82 = СсылкаКлиент.ПолучитьОбъект();

                   Клиент82.ПереданВ1С77 = Истина;

                   Клиент82.Записать();

                   
                   Сообщить(«Записан клиент «+Клиент77.код + » «+Клиент77.наименование);

                   
                   Для Каждого Стр Из Клиент82.Адреса Цикл

                       
                       _адреса=глV7.CreateObject(«Справочник.Адрес»);        

                           
                       _адреса.ИспользоватьВладельца(Клиент77);

                       _адреса.Новый();

                       _адреса.Наименование = Стр.Адрес;

                       _адреса.доп = Стр.Адрес;

                       Если Стр.ВидАдреса = Перечисления.ВидыАдресов.Почтовый Тогда

                                                           

                       _адреса.вид = глv7.Перечисление.ВидАдреса.почтовый;

                       ИначеЕсли Стр.ВидАдреса = Перечисления.ВидыАдресов.Юридический Тогда

                           _адреса.вид = глv7.Перечисление.ВидАдреса.юридический;

                       ИначеЕсли Стр.ВидАдреса = Перечисления.ВидыАдресов.электронный Тогда

                           _адреса.вид = глv7.Перечисление.ВидАдреса.электронный;

                       КонецЕсли;

                       _адреса.Записать();

                       
                   КонецЦикла;

                   
               Иначе    

           
       КонецЕсли;

Как исправить ошибку Недопустимое значение параметра (параметр номер ‘2’) при использовании метода ЗначениеВРеквизитФормы

О нюансах работы в 1С с ЗначениеВРеквизитФормы и ошибке Недопустимое значение параметра (параметр номер ‘2’).

ЗначениеВРеквизитФормы выполняется на сервере. Разработчики платформы автоматизировали процесс передачи данных на клиент — вручную на клиенте присваивать значение полю не нужно.

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

Если что-то не так — получите ошибку Недопустимое значение параметра (параметр номер ‘2’).

Чтобы исправить ошибку «Недопустимое значение параметра (параметр номер ‘2’)» нужно проверить:

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

2. Количество и имена колонок в результате запроса должны совпадать с количеством и именами в табличном поле на форме.

3. Имя реквизита на форме должно совпадать с именем указанном в методе ЗначениеВРеквизитФормы и иметь тип Строка. Рекомендую копировать текст и вставлять в места где он должен совпадать.

Если ошибка сохраняется — перепроверьте все пункты в отладчике.

Чтобы научиться работать с методом ЗначениеВРеквизитФормы нужен определенный опыт. Со временем вы обязательно научитесь пользоваться им без ошибок.

Источник

Обработка ошибок, возникающих при обмене данными в распределенной информационной базе

Общие ошибки, возникающие при работе с XML

Сообщение обмена данными является документом XML, поэтому имеет смысл описать возможные ошибки, которые могут возникнуть во время чтения/записи сообщений обмена данными при использовании средств чтения/записи данных XML, предоставляемых платформой «1С:Предприятие 8». При работе с данными в формате XML может возникать множество различных ситуаций, однако в данной статье будут рассмотрены только те, которые так или иначе имеют отношение к обмену данными в рамках распределенной информационной базы.

Значение URI пространства имен должно соответствовать рекомендации Namespaces in XML (см. http://www.w3.org/TR/REC-xml-names)

Производится попытка записи в XML значения, для типа которого не определена процедура записи в XML. Или производится попытка чтения из XML значения неизвестного типа или типа, для которого не определена процедура чтения из XML.

Ситуации, возникающие при обмене данными в рамках распределенной информационной базы

Источник

Ошибка при установке отбора

Есть форма справочника. На ней табличное поле с типом РегистрСведенийНаборЗаписей. Открывается при подборе в документ.

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

Форма = Справочники.Исполнители.ПолучитьФормуВыбора(,ЭлементыФормы.ТЧасть);
Форма.РежимВыбора = Истина;
Форма.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
Форма.Отбор.Ссылка.Значение = СписокИсполнителей;
Форма.Отбор.Ссылка.Использование = Истина;
Форма.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;

Форма.ТЧ_СубИсполнитель.Отбор.СубИсполнитель.ВидСравнения = ВидСравнения.ВСписке;
Форма.ТЧ_СубИсполнитель.Отбор.СубИсполнитель.Значение = СписокСубИсполнителей;
Форма.ТЧ_СубИсполнитель.Отбор.СубИсполнитель.Использование = Истина;

При установке второго отбора дает ошибку:

<Документ.ОказаниеУслуг.Форма.ФормаДокумента.Форма(537)>: Ошибка при установке значения атрибута контекста (ВидСравнения)
Форма.ТЧ_СубИсполнитель.Отбор.СубИсполнитель.ВидСравнения = ВидСравнения.ВСписке;
по причине:
Недопустимый тип сравнения

Источник

Ошибка SDBL в 1С

Возникновение ошибки SDBL

Ошибка SDBL возникает, когда происходит обновление конфигурации 1С:Предприятие или сохранение перемен. Также сообщение об ошибке может возникать при работе с обменами данных:

Недопустимый тип значения context как исправить

Рис. Сообщения 1С об ошибке SDBL

Также к данным сообщениям часто есть одна или несколько приписок:

Обратите внимание: есть вероятность, что при ошибке будут другие сообщения, не указанные выше!

Устранение ошибки SDBL в 1С

Устранить ошибку SDBL можно одним из способов, которые описаны ниже.

1. Сделать перезагрузку на сервере с приложениями для 1С 8.3. Далее может помочь, если включить и выключить все сервисы SQL и агентами SQL. Для этого потребуется зайти на сервер, выбрать «Агент сервера 1С» и при помощи контекстного меню приостановить работу. По аналогии сделаем с «Агентом SQL» и «SQL Server» для сервера SQL. Затем следует снова подключить их, но в обратной последовательности.

2. Выгрузить базу с данными в некоторый файл, который будет иметь расширение DT, а затем выгрузить её назад – в ту же базу с информацией. Аналогично будет исполняться для режима конфигуратора при помощи вкладки меню «Администрирование» – посредством использования команд «Загрузить информационную базу…» и «Выгрузить информационную базу…».

3. Можно попробовать очистить КЭШ внутри сервера и внутри компьютера пользователя в месте, где была обнаружена ошибка. Для этого потребуется закрыть 1С, далее совершить поиск по папкам, которые будут иметь имя вида «bd5c8ea4-b65f-4c23-a9c8-2dccfb0b15fa» внутри папки с названием «Application Data», после их нахождения производим удаления данных папок.

4. Также можно обновить платформу на более современную версию (с главного портала – ИТС). Для выполнения данного действия скачиваем с ИТС новую платформу 1С 8.3 и устанавливаем ее на компьютерах клиентов и на сервере.

5. Рассмотрим еще один вариант – использование механизма «Тестирование и исправление информационных баз», который находится внутри конфигуратора. В необходимой базе переходим по пути: «Администрирование → Тестирование и исправление информационных баз», а далее запускаем процесс.

6. Совершим загрузку внутри копии, которая является резервной, если она была создана в недавнем времени. Замечание: обязательно часто делать резервные копии до любого важного действия с ИБ. Копии делаются посредством SQL MS или конфигуратора, при этом происходит выгрузка файла в формат dt.

Если ни один из вышеперечисленных способов не устранил ошибку SDBL, следует произвести очистку таблиц _ConfigChngR_ExtProps и _ConfigChngR. Однако для этого потребуется знания принципов работы MSSQL.

Источник

Несоответствие типов в 1С 8.3

Ошибка Несоответствие типов в 1С 8.3 связана с передачей параметров в командах и запросах 1С.

Несоответствие типов в 1С 8.3

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

Недопустимый тип значения context как исправить

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

Получите понятные самоучители 2021 по 1С бесплатно:

Рассмотрим причины ее возникновения и исправление на конкретном примере.

Ошибка в таблице запроса

При чтении цен номенклатуры по регистру сведений Цены номенклатуры из внешнего отчета появляется ошибка Неоднозначное поле «ТипЦен.Номенклатура».

Недопустимый тип значения context как исправить

В окне сообщений уже указано место возникновения ошибки: Параметр номер «1» в строке Регистр сведений.ЦеныНоменклатуры.СрезПоследних(&&ТипЦен,) КАК ЦеныНоменклатурыСрезПоследних.

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

Недопустимый тип значения context как исправить

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Недопустимый тип значения context как исправить Недопустимый тип значения context как исправить

Из описания видно, что команда СрезПоследних имеет 2 параметра:

Если параметр Период не указывается, место в команде остается пустым, а через запятую указывается параметр отбора, в нашем случае: ТипЦен. Исправленная команда выглядит следующим образом: СрезПоследних(, ТипЦен = &ТипЦен ).

Недопустимый тип значения context как исправить

После исправления команды запустите отчет в 1С по кнопке Главное меню — Файл — Открыть :

Недопустимый тип значения context как исправить

Теперь отчет формируется правильно!

Недопустимый тип значения context как исправить

Исправление ошибки в команде 1С

При поиске ссылок на контрагента в отчете 1С появляется ошибка Несоответствие типов (параметр номер 2) :

Недопустимый тип значения context как исправить

Недопустимый тип значения context как исправить

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Недопустимый тип значения context как исправитьНедопустимый тип значения context как исправить

Из описания идно, что команда НайтиПоСсылкам имеет 4 параметра:

Недопустимый тип значения context как исправить

После исправления команды запустите внешний отчет в 1С по кнопке Главное меню — Файл — Открыть :

Недопустимый тип значения context как исправить

Теперь команда поиска ссылок на контрагента отрабатывает правильно.

Недопустимый тип значения context как исправить

См. также:

Если Вы еще не подписаны:

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

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Карточка публикации

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Вы можете задать еще вопросов

Доступ к форме «Задать вопрос» возможен только при оформлении полной подписки на БухЭксперт8

Нажимая кнопку «Задать вопрос», я соглашаюсь с
регламентом БухЭксперт8.ру >>

Спасибо. получила много полезной информации, материал представлен понятно и профессионально

Источник

Adblock
detector

Сообщение об ошибке Описание ошибки
Возможные пути исправления ошибки
Не установлен MS XML Core Services 4.0 На компьютере не установлен Microsoft XML Core Services 4.0, используемый «1С:Предприятием 8» для работы с XML
Установить Microsoft XML Core Services 4.0. При установке «1С:Предприятия 8» Microsoft XML Core Services 4.0 устанавливается автоматически
Ошибка разбора XML Ошибка, возникающая при синтаксическом анализе данных XML в процессе чтения.
Все ошибки, определенные в SAX2, трансформируются в данную ошибку, генерируемую платформой «1С:Предприятие 8»
Проверить правильность оформления и синтаксис данных XML (см. http://www.w3.org/TR/REC-xml).
Ошибочный порядок записи XML Методы записи содержимого документа XML вызываются в неправильном порядке. Например, запись атрибута вызывается после записи текста элемента.
Выявить и исправить места некорректного порядка вызова методов
Текст XML содержит недопустимые символы Записываемый текст XML содержит недопустимые символы.
Текст XML должен соответствовать требованиям, изложенным в главе 2.2 рекомендации XML (см. http://www.w3.org/TR/REC-xml#charsets)
Недопустимое имя XML Записываемое имя XML содержит недопустимые символы.
Имя XML должно соответствовать требованиям, изложенным в главе 2.3 рекомендации XML (см. http://www.w3.org/TR/REC-xml#NT-Name)
Пустое значение URI допустимо только для пространства имен по умолчанию Производится попытка записать соответствие пространства имен, в котором URI пространства имен, представленному пустой строкой, соответствует непустой префикс.

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

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

и другие

16.1. Механизм XDTO

16.1.1. Общая информация

Механизм XDTO является универсальным способом представления данных для взаимодействия с различными внешними источниками данных и программными системами.
Аббревиатура XDTO обозначает XML Data Transfer Objects.
Механизм XDTO позволяет создать модель представления данных (модель типов и значений), которая, с одной стороны, обеспечивает возможность просто и естественно манипулировать данными в среде системы «1С:Предприятие», а с другой стороны, хорошо приспособлена для прозрачного преобразования данных в другие форматы, главным образом XML.

Рис. 1. Общая схема XDTO

Можно выделить несколько задач, для решения которых используется механизм XDTO:

  •  обмен данными между конфигурациями системы «1С:Предприятие» с разными схемами данных;
  •  обмен данными на основе схем XML, не привязанных к той или иной конфигурации (например, обмен с информационными системами, построенными не на основе системы «1С:Предприятие»);
  •  организация работы с Web-сервисами. Механизм XDTO позволяет описывать типы параметров и возвращаемых значений Web-сервисов, а также манипулировать передаваемыми и возвращаемыми данными.

Механизм XDTO обладает следующими ключевыми свойствами:

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

В настоящее время обмен данными с различными программными платформами и системами реализуется с использованием XML: XML-документы служат для представления данных, а схема XML используется для описания форматов и структур данных. Механизм XDTO позволяет создавать требуемые для обмена схемы XML и формировать XML-документы, удовлетворяющие этим схемам.
В то же время использование механизма XDTO позволяет выполнять эти действия в привычной, для большинства разработчиков системы «1С:Предприятие», манере.
Разработчик имеет дело с типами и объектами данных, объекты данных содержат свойства, свойствам присваиваются значения и т. д. При манипулировании данными с помощью XDTO разработчик максимально изолирован от подробностей, связанных с тем, как эти данные представлены в XML. Конечно, совсем избавиться от этих подробностей невозможно, но важно, что они проявляются только там, где это действительно нужно.

16.1.2. Фабрика XDTO

16.1.2.1. Общая информация

Ключевым понятием механизма XDTO является фабрика XDTO. Фабрика XDTO содержит описание всех типов, с которыми оперирует некоторая система. В частности, для любой конфигурации системы «1С:Предприятие» существует глобальная фабрика XDTO, которая описывает все типы,используемые в конфигурации, в терминах XDTO (эта фабрика XDTO доступна через свойство глобального контекста ФабрикаXDTO).
Все описания типов, которые содержит фабрика XDTO, сгруппированы в один или несколько пакетов XDTO. Если проводить аналогию между XDTO и XML, то можно сказать, что пакет XDTO соответствует схеме XML. Таким образом, фабрика XDTO может соответствовать нескольким схемам XML.
Фабрика XDTO является полностью самодостаточной. То есть любой из типов, зарегистрированных в фабрике XDTO, может ссылаться только на типы из той же самой фабрики XDTO.
В общем случае фабрика XDTO создается единовременно на основании описаний всех типов, которые должны быть зарегистрированы в фабрике. Для создания фабрики XDTO средствами встроенного языка используется конструктор объекта ФабрикаXDTO, которому передается набор схем XML, содержащийся в объекте НаборСхемXML. Сценарий, при котором типы XDTO добавляются в фабрику по одному или группами, не
поддерживается.
В отличие от произвольной фабрики XDTO, которую может создать разработчик, глобальная фабрика XDTO создается системой автоматически, при создании новой информационной базы, и допускает добавление типов XDTO по одному или группами. Для этого используются средства визуального конструирования, позволяющие добавлять пакеты XDTO в ветку дерева метаданных Общие – XDTO-пакеты. Все пакеты,
содержащиеся в глобальной фабрике XDTO, можно разделить на три вида:

    •  Один пакет XDTO, содержащий описание типов платформы. Этот пакет является одинаковым для всех конфигураций системы «1С:Предприятие».
    •  Один пакет XDTO, содержащий описание типов конфигурации, созданных в результате редактирования метаданных (создания и изменения свойств справочников, документов и пр.)
    •  Один или несколько пакетов XDTO, описанных непосредственно в дереве объектов конфигурации, в ветке Общие – XDTO-пакеты.

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

  • 16.1.2.2. Получение фабрики XDTO из файла-схемы XSD

  • Ниже приведен пример создания фабрики XDTO на основе схемы XML, содержащейся в файле XML. Так как механизм XDTO представляет собой абстракцию, построенную «над» XML, то для получения схемы XML из файла XML необходимо последовательно «пройти» несколько уровней работы с данными XML:
    ● сначала низкоуровневое чтение/запись файлов XML;
  • ● затем объектную модель XML, из которой уже может быть получен объект  строенного языка СхемаXML, содержащий данные схемы XML
  • Рис. 2. Создание фабрики XDTO

    Пример:// Создать фабрику XDTO на основе схемы XML,  содержащейся в файле XML
    // Создать объект чтения XML по умолчанию
    ЧтениеXML = Новый ЧтениеXML;
    // Открыть файл XML
    ЧтениеXML.ОткрытьФайл(“с:tempmy_sсhema.xsd”);
    // Создать построитель документа DOM по умолчанию
    ПостроительDOM = Новый ПостроительDOM;
    // Прочитать файл XML в документ DOM
    ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
    // Создать построитель схемы XML по умолчанию
    ПостроительСхемыXML = Новый ПостроительСхемXML;
    // Получить схему XML из документа DOM
    СхемаXML = ПостроительСхемыXML.СоздатьСхемуXML(ДокументDOM);
    // Создать набор схем XML по умолчанию
    НаборСхемXML = Новый НаборСхемXML;
    // Добавить схему XML в набор схем XML
    НаборСхемXML.Добавить(СхемаXML);
    // Создать фабрику XDTO на основе набора схем XML
    НоваяФабрикаXDTO = Новый ФабрикаXDTO(НаборСхемXML

  • В приведенном примере сначала создается объект ЧтениеXML и открывается файл XML, расположенный на диске. После этого с помощью построителя документа DOM создается объект ДокументDOM, содержащий данные файла XML. Затем с помощью построителя схемы XML на основедокумента DOM создается новый объект СхемаXML, содержащий данные схемы XML. В заключение создается пустой набор схем XML, в который добавляется имеющаяся схема XML, и на основании этого набора создается фабрика XDTO.
  • 16.1.2.3. Получение фабрики XDTO из нескольких источников

  • В некоторых случаях может потребоваться создать фабрику на основании нескольких схем, некоторые из которых могут поставляться в виде файлов, а некоторые необходимо «унаследовать» от других фабрик XDTO (включая глобальную фабрику).Схемы = Новый Массив;
    Схемы.Добавить(“с:tempsсhema 1.xsd”);
    Схемы.Добавить(“с:tempsсhema 2.xsd”);
    Пакеты = Новый Массив;
    Пакеты.Добавить(ФабрикаXDTO.Пакеты.Получить(“URI пакета 1”));
    Пакеты.Добавить(ФабрикаXDTO.Пакеты.Получить(“URI пакета 2”));
    МояФабрика = СоздатьФабрикуXDTO(Схемы, Пакеты);
    В данном примере выполняется формирование фабрики XDTO на основании 4 источников:

● Схемы XML, которая расположена в файле с:tempsсhema 1.xsd.
● Схемы XML, которая расположена в файле с:tempsсhema 2.xsd.
● Схемы пакета 1 текущей конфигурации.
● Схемы пакета 2 текущей конфигурации.

  • В общем случае, необязательно, чтобы пакеты получались из глобальной фабрики XDTO. Это может быть произвольная фабрика.
  • 16.1.3. Типы данных XDTO

  • 16.1.3.1. Общая информация

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

  • Тип значения XDTO в соответствии с правилами для simple type из схемы XML может определяться тремя способами:
  • ● ограничением, когда задается базовый тип (свойство БазовыйТип) и набор ограничений на множество возможных значений (свойствоФасеты);
    ● объединением, когда тип получается в результате объединения нескольких типов значений (объединяемые типы перечисляются в свойстве ТипыЧленовОбъединения);
    ● списком, когда значение представляет собой список значений (тип значения элементов, составляющих список значений, задается в свойстве ТипЭлементаСписка).
  • Помимо свойств Имя и URIПространстваИмен тип значения XDTO содержит следующие свойства:
  • БазовыйТип – базовый тип для данного типа значения XDTO. Базовые типы могут наследоваться, но только от других типов значений XDTO.
    Допустимое множество значений унаследованного типа представляет собой подмножество возможных значений базового типа. Верхним уровнем в иерархии простых типов является предопределенный тип anySimpleType из пространства имен
    http://www.w3.org/2001/XMLSchema. Все типы значений прямо или опосредованно унаследованы от этого типа. Типы, образованные объединением или списком, всегда непосредственно унаследованы от anySimpleType.
    Фасеты – список фасетов, ограничивающих множество допустимых значений по отношению к базовому типу. Список фасетов задается только для типов значений XDTO, определенных ограничением базового типа. Каждый отдельный фасет представляет собой пару: имя фасета и значение. Определен список имен допустимых фасетов. Причем не любой из допустимых фасетов может быть применен к любому типу.
    Список фасетов и применимость их к тому или иному типу определяются по правилам XML Schema (http://www.w3.org/TR/xmlschema-2/).
    ТипыЧленовОбъединения – список типов, образующих объединение. Объединяться могут только типы значений XDTO. Если тип образован объединением, то список ТипыЧленовОбъединения содержит по крайней мере один тип. При этом список Фасеты должен быть пустым, а свойство ТипЭлементаСписка должно возвращать неопределенное значение.
    ТипЭлементаСписка – в случае, когда тип значения XDTO определяется списком, данное свойство показывает тип элемента списка. При этом списки Фасеты и ТипыЧленовОбъединения должны быть пустыми.
    ● Список имен допустимых фасетов (определяется системным перечислением ВидФасетаXDTO):
    Длина – фасет длины. Содержит количество единиц длины, причем единица длины имеет различный смысл для различных типов. Для типов string и anyURI длина содержит количество символов. Для типов hexBinary и base64Binary длина содержит количество байт двоичных данных. Для типов, определяемых списком, длина содержит количество элементов списка.
    МаксВключающее – фасет максимума, включающего границу. Ограничивает пространство значений данного типа максимальным значением. Любое значение данного типа меньше либо равно указанному значению.
    МаксДлина – фасет максимальной длины. Содержит максимальное количество единиц длины, причем единица длины имеет различный смысл для различных типов. Для типа string максимальная длина содержит максимальное количество символов. Для типов hexBinary и base64Binary максимальная длина содержит максимальное количество байт двоичных данных. Для типов, определяемых списком,
    максимальная длина содержит максимальное количество элементов списка.
    МаксИсключающее – фасет максимума, не включающего границу. Ограничивает пространство значений данного типа максимальным значением. Любое значение данного типа меньше указанного значения.
    МинВключающее – фасет минимума, включающего границу. Ограничивает пространство значений данного типа минимальным значением.
    Любое значение данного типа больше либо равно указанному значению.
    МинДлина – фасет минимальной длины. Содержит минимальное количество единиц длины, причем единица длины имеет различный смысл для различных типов. Для типа string минимальная длина содержит минимальное количество символов. Для типов hexBinary и base64Binary минимальная длина содержит минимальное количество байт двоичных данных. Для типов, определяемых списком, минимальная длина содержит минимальное количество элементов списка.
    МинИсключающее – фасет минимума, не включающего границу. Ограничивает пространство значений данного типа минимальным значением. Любое значение данного типа больше указанного значения.
    Образец – фасет образца. Содержит регулярное выражение, определяющее пространство значений данного типа.
    Перечисление – фасет перечисления. Определяет набор допустимых значений данного типа.
    ПробельныеСимволы – фасет пробельных символов. Может принимать одно из трех значений:
    Сохранять – строка может содержать любые пробельные символы.
    Заменять – строка не должна содержать #x9 (табуляция), #xA (перевод строки) и #xD (возврат каретки). Если они существуют, то должны быть заменены символом #x20 (пробел).
    Сворачивать – дополнительно к требованиям, указанным для значения replace, строка не должна содержать парных символов #x20 (пробел), а также лидирующих и завершающих символов #x20 (пробел).
    РазрядовВсего – фасет общего количества цифр. Содержит общее количество разрядов числа (целая часть плюс дробная часть).
    РазрядовДробнойЧасти – фасет количества цифр дробной части. Содержит количество разрядов дробной части числа.
    Инфраструктура XDTO определяет набор предопределенных типов значений XDTO. Этот набор совпадает с набором примитивных типов, определенных в XML Schema Part 2: Datatypes. Предопределенные типы образуют иерархию в соответствии с XML Schema Part 2: Datatypes.
    Имена типов совпадают с именами типов XML Schema и принадлежат URI пространства имен – http://www.w3.org/2001/XMLSchema.
    Предопределенные типы являются автоматически зарегистрированными в любой фабрике XDTO.
  • 16.1.3.3. Тип объекта XDTO

  • Помимо свойств Имя и URIПространстваИмен тип объекта XDTO содержит следующие свойства:
    БазовыйТип – базовый тип для данного типа. Это может быть только тип объекта XDTO. Базовым в иерархии типов объектов XDTO является предопределенный тип anyType из пространства имен http://www.w3.org/2001/XMLSchema. Все типы объектов XDTO прямо или опосредованно унаследованы от этого типа.
    Открытый – признак того, является ли тип объекта XDTO открытым. Данное свойство показывает, может ли экземпляр объекта XDTO содержать дополнительные свойства, не определенные в его типе, то есть реализует модель open content. Соответствует появлению в XML-схеме для данного типа описаний: <anyAttribute>, <any>.
    Абстрактный – признак того, является ли тип объекта XDTO абстрактным. Соответствует появлению в схеме для данного элемента атрибута
    abstract=”true”.
    Упорядоченный – признак того, является ли порядок следования элементов, представляющих значения свойств, строго соответствующим порядку следования свойств в типе объекта XDTO. Если задана модель контента xsd:all, то порядок следования элементов XML может быть произвольным. При этом допустимым является порядок, соответствующий порядку следования свойств в типе. То есть если свойство
    Упорядоченный имеет значение Ложь, то на входе порядок следования элементов XML не контролируется, а на выходе определяется порядком следования свойств, если только признак Последовательный не имеет значение Истина.
    Последовательный – это свойство показывает, содержит ли экземпляр соответствующего объекта XDTO последовательность XDTO. Данный признак равен значению Истина в тех случаях, когда порядок следования вложенных элементов XML не может однозначно определяться порядком следования свойств в типе (например, в схеме XML контент задан как <sequence … maxOccurs=10 … >) или для соответствующего
    типа XML в схеме определен атрибут mixed=”true“. Последовательность XDTO позволяет задать в явном виде порядок следования элементов, как они будут представлены в документе XML. Для объектов типов, у которых свойство Последовательный установлено в значение Ложь, порядок следования вложенных элементов соответствует порядку следования свойств.
    Смешанный – свойство показывает, определен ли в схеме XML для данного типа mixed content. Если значение свойства Смешанный равно Истина, то значение Последовательный обязательно равно Истина, так как mixed content невозможно смоделировать без применения последовательности XDTO.
    Свойства – список свойств, определенных для данного типа объекта XDTO. Каждое из свойств представляется в виде экземпляра объектаСвойствоXDTO. Список содержит полный список свойств, в том числе свойства, определенные в базовом типе.
    Существует предопределенный тип объекта XDTO с именем anyType и URI пространства имен http://www.w3.org/2001/XMLSchema. Данный тип
    является базовым для любого типа объекта XDTO, но у него нет базового типа. Он является открытым, не абстрактным, подразумевает наличие последовательности и имеет пустой список свойств.
    Данный тип объекта XDTO соответствует типу anyType, определенному в XML Schema Part 2: Datatypes.
  • 16.1.3.4. Свойство XDTO

  • Отдельно взятое свойство отдельного типа объекта XDTO описывается с помощью экземпляра объекта СвойствоXDTO. Это означает, что один и тот же экземпляр объекта СвойствоXDTO не может быть использован для описания свойств в различных типах объектов XDTO и двух различных свойств одного типа объекта XDTO.
    Объект СвойствоXDTO содержит следующие свойства:
    Имя – имя свойства. В пределах одного типа объекта XDTO имена свойств должны быть уникальными.  При формировании модели данных XDTO на основе схемы XSD, имена свойств XDTO образуются на основании имен атрибутов и элементов, описанных в схеме. Построение модели типа выполняется последовательно: сначала формируется список свойств на основе атрибутов, затем – на основе элементов, в порядке объявления в схеме. При этом имя приводится в соответствие с правилами именования, принятыми во встроенном языке. Символы, допустимые в имени XML (например: “.”, “-«’), но недопустимые с точки зрения имени для встроенного языка – заменяются на символ “_”. В случае дублирования имени атрибута и элемента, дубликату назначается имя, расширенное числовым суффиксом (начиная от 1).
    Тип – тип свойства. Может быть как экземпляром объекта ТипЗначенияXDTO, так и экземпляром объекта ТипОбъектаXDTO.
    ВерхняяГраница – свойство типа объекта XDTO может быть определено как содержащее одно или множество значений. Свойство считается содержащим одно значение, если равно 1. Если же свойство ВерхняяГраница больше 1, то считается, что оно может содержать множество значений. Такое свойство в структуре объекта моделируется как список (не путать со списком в описании типа значения XDTO). Свойство ВерхняяГраница показывает максимальное количество значений свойства. Значение больше 1 может быть задано только для свойств, представляемых в виде элемента XML. Свойство ВерхняяГраница соответствует атрибуту xsd:maxOccurs в XML Schema. Значение -1 соответствует unbounded.
    НижняяГраница – минимальное количество значений свойства. Минимальное количество значений свойства может принимать значения меньше или равно 0. Естественно, значение НижняяГраница должно быть меньше или равно значению ВерхняяГраница (если, конечно,ВерхняяГраница не равно -1);
    ВозможноПустое – показывает, может ли свойство принимать неопределенное значение. Неопределенное значение свойства представляется в XML в виде элемента следующего вида: <elem xsi:nil=”true” />. Таким образом, свойство ВозможноПустое, равное Истина, может быть определено только для свойств с формой представления Элемент. Свойство ВозможноПустое соответствует атрибуту xsd:nillable в XML
    Schema. Если значение свойства ВерхняяГраница больше 1, неопределенное значение является допустимым для элемента списка значений свойства.
    ЗначениеПоУмолчанию – значение свойства по умолчанию. Значением свойства по умолчанию может быть только ЗначениеXDTO. При этом данное значение должно быть того же типа, что и тип свойства или же унаследованного типа. При создании объекта XDTO свойство, если оно допускает единственное значение, принимает значение по умолчанию (метод Установлено() объекта XDTO возвращает значение Ложь для
    этого свойства). Для свойств с множеством значений список значений изначально пуст, независимо от того, определено или нет значение по  умолчанию.
    Фиксированное – указывает, является ли значение свойства фиксированным. Если установлено в значение Истина, то само фиксированное  значение можно получить через свойство ЗначениеПоУмолчанию.
    Форма – форма представления свойства в XML. Это может быть Текст, Элемент или Атрибут. Если формой представления является Атрибут или Текст, то значение свойства ВерхняяГраница не может быть больше 1. Если свойство принимает значение Текст, то значение свойства НижняяГраница также должно быть равным 1. У одного типа только одно свойство может иметь форму представления Текст, при этом остальные свойства должны иметь форму представления Атрибут.
    ЛокальноеИмя – локальное имя атрибута или элемента, используемого для представления свойства. Для свойств с формой представления Текст – пустая строка.
    URIПространстваИмен – URI пространства имен для атрибута или элемента, используемого для представления свойства. Пустая строка, если пространство имен отсутствует.
  • 16.1.4. Экземпляры данных XDTO

  • Экземпляры данных XDTO могут являться значениями XDTO (ЗначениеXDTO) или объектами XDTO (ОбъектXDTO).
  • 16.1.4.1. Значение XDTO

  • Значение XDTO представляет собой простое неделимое значение, в котором не могут быть выделены отдельные составляющие. Примерами простых значений являются разнообразные строки, числа, даты и т. п. Экземпляры простых значений являются немутабельными.
    Новое значение XDTO может быть создано с помощью метода Создать() фабрики XDTO:
  •  на основе типа значения XDTO и значения;
  •  на основе типа значения XDTO и лексического представления значения.
  • Ниже приведены примеры создания значения XDTO.
    Пример:ГлобальнаяФабрикаXDTO = ФабрикаXDTO;
    // Создать значение XDTO из ссылки
    СсылкаНаЭлементСправочника = Справочники.Номенклатура. НайтиПоКоду(“0000001”);
    ТипЗначенияXDTOСоздаваемогоЗначения = ГлобальнаяФабрикаXDTO.Тип(“urn:schemas-v8-1c-ru:config-data”, “CatalogRef.Номенклатура”);
    НовоеЗначениеXDTO = ГлобальнаяФабрикаXDTO.Создать(ТипЗначенияXDTOСоздаваемогоЗначения, СсылкаНаЭлементСправочника);
    // Создать значение XDTO из лексического представления значения
    ТипЗначенияXDTOСоздаваемогоЗначения = ГлобальнаяФабрикаXDTO.Тип(“http://www.w3.org/2001/XMLSchema”, “dateTime”);
    НовоеЗначениеXDTO = ГлобальнаяФабрикаXDTO.Создать(ТипЗначенияXDTOСоздаваемогоЗначения, “2006-04-20T12:00:30”);
    Новое значение XDTO может быть получено также путем чтения файла XML.
    Пример:ГлобальнаяФабрикаXDTO = ФабрикаXDTO;,
    // Прочитать данные значения XDTO из файла XML
    НовоеЧтениеXML = Новый ЧтениеXML;
    НовоеЧтениеXML.ОткрытьФайл(“D:/Exchange.xml”);

    НовоеЗначениеXDTO = ГлобальнаяФабрикаXDTO. ПрочитатьXML(НовоеЧтениеXML);Значение XDTO может быть записано в файл XML.
  • ГлобальнаяФабрикаXDTO = ФабрикаXDTO;
    // Записать данные значения XDTO в файл XML
    НоваяЗаписьXML = Новый ЗаписьXML;
    НоваяЗаписьXML.ОткрытьФайл(“D:/Exchange.xml”);

    ГлобальнаяФабрикаXDTO.ЗаписатьXML(НоваяЗаписьXML, НовоеЗначениеXDTO);
  • 16.1.4.2. Объект XDTO

  • В противовес простому значению состояние объекта XDTO представляется как совокупность значений его свойств. Экземпляры объекта XDTO являются мутабельными, то есть во время жизни объекта XDTO его состояние может быть изменено путем изменения значений отдельных его свойств. В качестве значений свойств могут фигурировать любые экземпляры данных XDTO, как значение XDTO, так и объект XDTO. Когда значением свойства является объект XDTO, говорят, что значением свойства является ссылка на объект.
    Новый объект XDTO может быть создан с помощью метода Создать() фабрики XDTO, на основе типа объекта XDTO. После этого следует присвоить соответствующие значения свойствам объекта XDTO. Ниже приведен пример создания объекта XDTO и заполнения его свойств.
    Пример:ГлобальнаяФабрикаXDTO = ФабрикаXDTO;
    // Создать “пустой” объект XDTO
    ТипОбъектаXDTOСоздаваемогоОбъекта = ГлобальнаяФабрикаXDTO.Тип(“http://www.1c.ru/demos/products”, “Номенклатура”);
    НовыйОбъектХDTO = ГлобальнаяФабрикаXDTO.Создать(ТипОбъектаXDTOСоздаваемогоОбъекта);
    // Заполнить значения свойств объекта XDTO
    ОбъектСправочника = СсылкаНаЭлементСправочника.ПолучитьОбъект();
    НовыйОбъектХDTO.Наименование = ОбъектСправочника.Наименование;
    НовыйОбъектХDTO.ПолноеНаименование = ОбъектСправочника.ПолноеНаименование;
    НовыйОбъектХDTO.ЗакупочнаяЦена = ОбъектСправочника.ЗакупочнаяЦена;
    НовыйОбъектХDTO.ШтрихКод = ОбъектСправочника.ШтрихКод;
  • Так же как и значение XDTO, данные объекта XDTO могут быть прочитаны из файла XML или записаны в файл XML.
  • Пример:ГлобальнаяФабрикаXDTO = ФабрикаXDTO;,
    // Прочитать данные объекта XDTO из файла XML
    НовоеЧтениеXML = Новый ЧтениеXML;
    НовоеЧтениеXML.ОткрытьФайл(“D:/Exchange.xml”);

    НовыйОбъектXDTO = ГлобальнаяФабрикаXDTO.ПрочитатьXML(НовоеЧтениеXML);

    // Записать данные объекта XDTO в файл XML
    НоваяЗаписьXML = Новый ЗаписьXML;
    НоваяЗаписьXML.ОткрытьФайл(“D:/Exchange.xml”);

    ГлобальнаяФабрикаXDTO.ЗаписатьXML(НоваяЗаписьXML,НовыйОбъектХDTO);
  • При чтении нетипизированных данных, считываемый элемент, в случае наличия атрибутов или дочерних элементов, считывается в ОбъектXDTO типа xsd:anyType. Данный тип является открытым типом со смешанным содержимым, поэтому текст в элементе интерпретируется не как значение свойства __content, а как текст и помещается в последовательность объекта.
    Например, если выполняет чтение элемента вида <element attr=”attr_value”>element value</element>, то текст element value можно получить следующим образом ОбъектXDTO.Последовательность().ПолучитьТекст(0).
    Объект ОбъектXDTO содержит следующие методы:
    Тип() – возвращает тип данного объекта XDTO (ТипОбъектаXDTO);
    Установить(<Выражение>), Установить(<Свойство>, <Значение>) – позволяет установить значение свойства;
    Выражение – выражение на XPath, указывающее свойство;
    Свойство – имя свойства;
    Значение – устанавливаемое значение свойства.
    Если Выражение задано неправильно или Значение не может быть присвоено свойству (например, тип несовместим с типом свойства), то вызывается исключение. Если свойству присваивается неопределенное значение, а свойство ВозможноПустое равно Ложь, то выдается исключение. Если свойству присваивается ссылка на объект XDTO и ссылка на этот объект XDTO уже является значением какого-либо другого
    свойства, то данная ссылка перестает быть значением этого другого свойства.
    Цепочки ссылок на объекты XDTO, содержащиеся в свойствах объектов, не могут образовывать циклов. Поэтому при присваивании ссылки на объект XDTO, вызывающий образование цикла, вызывается исключение. Если свойство допускает множество значений, то для него применение метода Установить() недопустимо и приводит к вызову исключения. При присваивании значения свойству производится проверка на
    допустимость присваивания данного типа значения свойству. Значение может быть присвоено в том случае, если его тип совпадает с типом свойства, является унаследованным от типа свойства или является одним из типов, входящих в объединение. При присваивании, если формой представления значения свойства в XML является Текст или Атрибут, производится приведение значения к типу свойства. Если формой представления является Элемент, значение присваивается как есть.
  • Получить(<Свойство>), Получить(<Выражение>) – получение значения свойства:
    Свойство – имя свойства.
    Выражение – выражение на XPath, указывающее свойство. Для свойств с                               множеством значений данный метод возвращает список значений свойства –                       СписокXDTO. Все операции модификации значений свойства должны                                  выполняться через этот список.
    Сбросить(<Свойство>), Сбросить (<Выражение>) – сброс значения свойства:
    Свойство – имя свойства.
    Выражение – выражение на XPath, указывающее свойство. Действие метода                       Сбросить() для различных свойств различно. Для свойств, допускающих множество          значений (ВерхняяГраница > 1), выполнение метода Сбросить() приводит к очистке             списка значений.
    Установлено() – проверяет, установлено ли значение свойства. Непосредственно после создания объекта у всех свойств результатом
    выполнения метода Установлено() будет значение Ложь.
    Последовательность() – возвращает объект-последовательность (ПоследовательностьXDTO), принадлежащий данному объекту XDTO. С
    помощью последовательности XDTO также можно модифицировать состояние объекта. Данный метод возвращает последовательность XDTO
    только в том случае, если у типа объекта установлено свойство Последовательный.
    Проверить() – данный метод позволяет проверить правильность заполнения значений свойств объекта XDTO. При проверке проверяются также объекты, ссылки на которые являются значениями свойств. Предметом проверки является соответствие количества значений свойств свойствам НижняяГраница и ВерхняяГраница, правильность следования значений свойств в последовательности XDTO, если свойство
    Упорядоченный имеет значение Истина. Проверка прекращается при нахождении первой же ошибки. При этом выдается исключение.
  • 16.1.4.3. Последовательность XDTO

  • С помощью объекта ПоследовательностьXDTO моделируется порядок следования элементов и фрагментов текста, как они выглядят в XML- представлении объекта. Последовательность состоит из пар «свойство – значение». В качестве свойств могут выступать только свойства с формой представления Элемент, так как порядок следования атрибутов не важен. Свойство в паре «свойство – значение» может также иметь неопределенное значение. В этом случае считается, что данный элемент последовательности представляет фрагмент текста. Появление элементов последовательности, представляющих фрагменты текста, допустимо только для объектов типов, у которых значение свойства Смешанный равно Истина.
    При формировании содержимого объекта XDTO с помощью присваивания значений свойствам порядок присваивания отражается в последовательности XDTO.
    Последовательность XDTO содержит следующие методы:
    Количество() – возвращает число элементов последовательности.
    ПолучитьСвойство(<Индекс>) – возвращает свойство, которому соответствует значение, находящееся по индексу Индекс. Если Индекс находится за границами допустимых значений, выдается исключение. Метод может вернуть неопределенное значение, если элементу последовательности соответствует фрагмент текста из смешанного содержания (текст и элементы).
    ПолучитьЗначение(<Индекс>) – возвращает значение, находящееся по индексу Индекс. Если Индекс находится за границами допустимых значений, выдается исключение.
    УстановитьЗначение(<Индекс>, <Элемент>) – устанавливает значение Элемент по индексу Индекс. Индекс должен иметь значение в диапазоне допустимых индексов. Элемент должен иметь допустимое значение для свойства, для которого он устанавливается, или для текста.
    Добавить(<Свойство>, <Элемент>) – добавляет пару «свойство – значение» к последовательности. Значение должно быть допустимым для свойства.
    Добавить(<Текст>) – добавляет фрагмент текста к последовательности. Если у типа объекта свойство Смешанный имеет значение Ложь, то выдается исключение.
    Вставить(<Индекс>, <Свойство>, <Элемент>) – вставляет пару «свойство – значение» в позицию Индекс последовательности. Индекс должен иметь значение внутри диапазона индексов. Элемент в позиции Индекс и все элементы с большими значениями индекса сдвигаются вправо на одну позицию.
    Вставить(<Индекс>, <Текст>) – вставляет текст Текст в позицию Индекс последовательности. Индекс должен иметь значение внутриn  диапазона индексов. Элемент в позиции Индекс и все элементы с большими значениями индекса сдвигаются вправо на одну позицию.
    Удалить(<Индекс>) – удаляет элемент последовательности в позиции Индекс. Индекс должен иметь значение внутри диапазона допустимых.
  • 16.1.4.4. Список XDTO

  • С помощью объекта СписокXDTO моделируется список значений для свойств с множественными значениями (ВерхняяГраница > 1). Список представляет собой упорядоченный набор объектов, которые могут являться как значениями XDTO, так и объектами XDTO. Среди них могут иметь место неопределенные значения, если свойство ВозможноПустое имеет значение Истина. Но понятие «установленности» для элемента списка не определено.
    Объект СписокXDTO содержит следующие методы:
    Количество() – возвращает размер списка.
    Получить(<Индекс>) – получает значение, находящееся по индексу Индекс. Индекс должен находиться в диапазоне допустимых. В
    противном случае выдается исключение.
    ● Установить(<Индекс>, <Элемент>) – устанавливает значение Элемент в позицию Индекс. Устанавливаемое значение замещает ранее присутствовавшее значение. Индекс должен находиться в диапазоне допустимых, а Элемент должен быть допустимым для свойства. В противном случае выдается исключение.
    Добавить(<Элемент>) – добавляет значение в хвост списка. Элемент должен быть допустимым для свойства. В противном случае выдается исключение.
    Вставить(<Индекс>, <Элемент>) – внесение значения Элемент в позицию Индекс. Индекс должен находиться в диапазоне допустимых, а Элемент должен быть допустимым для свойства. В противном случае выдается исключение. Значение в позиции Индекс и значения с большими позициями сдвигаются вправо на одну позицию.
    Удалить(<Индекс>) – удаление значения в позиции Индекс. Индекс должен находиться в диапазоне допустимых. Значения с большими позициями сдвигаются на освободившееся место.
  • 16.1.4.5. XРath

  • Для навигации по дереву объектов могут использоваться выражения на XPath. Строго говоря, это не совсем XPath, а скорее несколько модифицированное подмножество XPath.
    Основной конструкцией данного языка является путь к значению, который состоит из отдельных шагов. Шаги в пути отделяются друг от друга символами “/” (слеш). В качестве шага пути выступает имя свойства или предопределенные конструкции “.” (точка) и “..” (две точки).
    Выражение приведенного ниже вида обозначает свойство с именем ИмяСвойства текущего объекта, а именно объекта, у которого вызвали метод Получить() или Установить().
  • ИмяСвойства
    Выражение приведенного ниже вида означает, что у текущего объекта получено значение свойства ИмяСвойства1, а у объекта, ссылка на который является значением свойства ИмяСвойства1, получено свойство ИмяСвойства2.
  • ИмяСвойства1/ИмяСвойства2
    Соответственно, шаг, обозначенный как точка, означает текущий объект, а две точки – объект-владелец текущего.
    Если путь поиска начинается с символа слеш, то это означает поиск от корня дерева объектов. Если какое-либо свойство в пути не найдено, то это вызывает исключение. Если в пути встречается свойство с множественным значением, то результатом является весь список значений данного свойства.
    Например, если в пути, приведенном ниже, свойство Список имеет множественное значение, то результат данного выражения – это список (
    СписокXDTO) значений данного свойства.Свойство/Список
    Для того чтобы получить отдельное значение из этого списка, нужно через точку от имени свойства указать 0-базированный индекс значения в списке, как это показано ниже.Свойство/Список.0
    Индекс должен быть задан как целое число, находящееся в пределах диапазона допустимых индексов. В противном случае будет вызвано исключение.
    Можно получить отдельное значение из списка с использованием 1-базированного индекса. Для этого применяется конструкция следующего вида:Свойство/Список[1]
    Индекс может принимать значения от 1 до числа элементов в списке.
    Имеется также возможность поиска в списке (только для объектов). Выражение для поиска выглядит следующим образом:Свойство/Список[ИмяСвойства=’СтрокаПоиска’]
  • Здесь Список – это свойство с множественным значением. Значением списка являются объекты, у которых имеется свойство с именем ИмяСвойства. Результатом будет первый объект в списке, значение свойства Свойство которого равно строковому значению ‘СтрокаПоиска’. Если ни одного объекта не найдено, то результатом является неопределенное значение. Свойство ИмяСвойства также может присутствовать не у всех объектов в списке. А может и не присутствовать ни у кого. Значение, с которым сравнивается значение свойства, может быть задано в виде числа, логического значения (True или False) или строкового литерала.Свойство/Список[ИмяСвойства!=’СтрокаПоиска’]
    Приведенное выше выражение аналогично предыдущему примеру, за исключением того, что результатом будет первый объект в списке, значение свойства ИмяСвойства которого не равно строковому значению ‘СтрокаПоиска’.
    Ниже приведено определение описываемого подмножества XPath.
    <Путь>[/]

  • <Список шагов>
  • <Список шагов>

  • <Шаг> [/<Список шагов>] |
    <Шаг>

  • <Имя свойства> [<Уточнение>] | .. | . |
    <Имя свойства>


  • [<Буква> | _]<Остаток имени
    <Остаток имени>

  • {<Буква> | <Цифра> | _} <Остаток имени> |
  • <Уточнение>

  • .<0-базированный индекс> |
    [<Имя свойства>=<Значение>] |[<Имя свойства>!=<Значение>] |

  • [<1-базированный индекс>]
    <0-базированный индекс>

  • <Целое без знака>
    <1-базированный индекс>

  • <Целое без знака>
    <Целое без знака>


  • <Цифра> <Цифры>
    <Цифра>

0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<Цифры>


<Цифра> <Цифры> |
<Значение>


<Число> | <Строка> | <Булево>

  • <Число>

  • [+|-]<Целое без знака>[.<Целое без знака>]
    <Строка>

  • “<Символы>” | ‘<Символы>’
    <Булево>

  • true | false
  • ПРИМЕЧАНИЕ. В строке с ограничителями «”» среди символов не может встречаться «”». Аналогично в строке с разделителями «’» не может встречаться символ «’».
    При сравнении значения свойства со значением, заданным в виде литерала, значение, заданное в виде литерала, приводится к типу свойства по правилам приведения, после чего производится сравнение.
  • 16.1.5. XML-сериализация на основе XDTO

  • Значения типов конфигураций системы «1С:Предприятие» могут быть сериализованы непосредственно в(из) файл(а) XML на основе XDTO.
    Для этого используется объект СериализаторXDTO, который может быть получен с помощью конструктора на основе существующей фабрики XDTO. Работа с объектом СериализаторXDTO аналогична работе с глобальными процедурами и функциями работы с XML.
    Например, сериализация ссылки на справочник Номенклатура в файл XML может быть выполнена с помощью программного кода.
    Пример:
  • // Получить ссылку на элемент справочника Номенклатура
    СсылкаНаЭлементСправочника = Справочники.Номенклатура.НайтиПоКоду(“0000001”);
    // Создать сериализатор XDTO для глобальной фабрики XDTO
    НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    // Создать объект записи XML и открыть файл
    НоваяЗаписьXML = Новый ЗаписьXML;
    НоваяЗаписьXML.ОткрытьФайл(“D:/Exchange.xml”);
    // …
    // Cериализовать ссылку в XML
    НовыйСериализаторXDTO.ЗаписатьXML(НоваяЗаписьXML, СсылкаНаЭлементСправочника, НазначениеТипаXML.Явное);
  • Ниже приведен пример сериализации ссылки на справочник Номенклатура из файла XML.
    Пример:// Создать сериализатор XDTO для глобальной фабрики XDTO
    НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    // Прочитать данные объекта XDTO из файла XML
    НовоеЧтениеXML = Новый ЧтениеXML;
    НовоеЧтениеXML.ОткрытьФайл(“D:/Exchange.xml”);

    // Сериализовать ссылку из XML
    НоваяСсылкаНаСправочник = НовыйСериализаторXDTO.ПрочитатьXML(НовоеЧтениеXML);
  • 16.1.6. Рекомендации по оформлению схем XML

  • Преобразование НаборСхемXMLФабрикаXDTOНаборСхемXML в общем случае не дает на выходе набор схем XML, эквивалентный исходному.
    Однако следование набору рекомендаций по оформлению схем XML позволит добиться эквивалентности выходного набора схем исходному, а именно:
    ● для преобразования НаборСхемXML ” ФабрикаXDTO ” НаборСхемXML будет соблюдаться эквивалентность выходного набора схем исходному;
    ● успешная проверка правильности заполнения свойств объекта ОбъектXDTO (метод Проверить()) гарантирует, что представление объекта в XML будет соответствовать схеме XML;
    ● обеспечивается максимальная гибкость и отсутствие искажений при использовании полиморфизма.
    Схема XML, полученная на основе фабрики XDTO, для типов которой не переопределялись значения по умолчанию параметров, ответственных
    за XML-представление данных, безусловно, соответствует приведенным рекомендациям.
    В общем, приведенный далее список рекомендаций представляет собой набор правил, позволяющий добиться наилучших результатов с различных точек зрения.
    Схема XML не должна содержать анонимных типов
    Недопустимы конструкции следующего вида:<element name=”Person”>
    <complexType>
    <sequence>
    <element name=”FirstName” type=”string” />
    <element name=”FamilyName” type=”string” />
    </sequence>
    </complexType>
    </element>
  • Этот фрагмент нужно оформить следующим образом:<element name=”Person” type=”tns:PersonType”>
    <complexType name=”PersonType”>
    <sequence>
    <element name=”FirstName” type=”string” />
    <element name=”FamilyName” type=”string” />
    </sequence>
    </complexType>
    </element>
  • Для контента сложных типов следует использовать только модель sequence
  • Для моделирования контента у сложных типов (complexType) следует использовать только единственный блок sequence без переопределения значений по умолчанию атрибутов minOccurs и maxOccurs.<complexType name=”PersonType”>
    <sequence>
    <element name=”FirstName” type=”string” />
    <element name=”FamilyName” type=”string” />
    </sequence>
    </complexType>
  • Модель all не нарушает тождественность исходной и результирующей схемы при преобразовании НаборСхемXML ” ФабрикаXDTO ” НаборСхемXML,
    однако имеет ряд ограничений. В частности, значение атрибута maxOccurs для элементов в модели all не может быть больше 1.
    Модель choice нарушает эквивалентность исходной и результирующей схем и не позволяет с помощью метода Проверить() проверить соответствие заполнения данных объекта схеме XML.
    По тем же причинам не следует использовать в рамках одного сложного типа комбинацию из нескольких моделей контента или же определять для sequence значения атрибутов minOccurs и maxOccurs, отличные от значений по умолчанию.
  • Желательно свойства объектов представлять в XML в виде элементов
  • Представление свойств как атрибутов XML не влияет на эквивалентность исходной и результирующей схем. Однако имеется ряд ограничений:
    ● В атрибуте не может быть представлено значение объектного типа – только типов-значений.
    ● В атрибуте не могут быть представлены свойства с множественными значениями.
    ● В случае полиморфных типов у свойства, представленного как атрибут XML, может происходить искажение типа значения. А именно: при присваивании значения свойству тип значения приводится точно к типу свойства, так как только для значения свойства в элементе XML можно указать атрибут xsi:type, который позволяет точно указать тип значения свойства.
    Как следствие не нужно использовать simpleContent для complexType, так как эта модель для хранения значений подразумевает использование свойств атрибутов и текста включающего элемента XML.
    Не рекомендуется использовать одинаковые имена для объявления атрибута и элемента.
    Не следует использовать модель mixed content
    Применение в схеме XML конструкции приведенного ниже вида означает, что в элементе XML, соответствующем описываемому типу, текст может быть перемешан с элементами XML.<complexType name=”FormLetter” mixed=”true”>
    </complexType>
    Для поддержки такого информационного содержимого у соответствующего объекта ТипОбъектаXDTO значения свойств Последовательный и Смешанный установлены в значение Истина, а у каждого экземпляра соответствующего объекта ОбъектXDTO появляется последовательность XDTO (объект ПоследовательностьXDTO). Управление информационным содержимым таких объектов намного сложнее, чем у объектов, состояние которых представлено только набором значений свойств.
    К счастью, в подавляющем большинстве случаев в применении mixed content не возникает необходимости.
    Свойство ФормаЭлементовПоУмолчанию у схемы XML должно иметь значение Квалифицированная.
    Данная рекомендация является элементом хорошего стиля, и XDTO придерживается этого стиля.
  • 16.1.7. Правила проверки фабрики XDTO

  • Общая схема кодирования идентификаторов сообщений об ошибках проверки фабрики XDTO выглядит следующим образом:xdto-<область>-<раздел>[-<правило>]: <описание ошибки>
  • гле:
    <область> – область проверки (фабрика XDTO, пакет XDTO, тип значения XDTO, фасет XDTO, тип объекта XDTO);
    ● <раздел> – номер раздела, проверка правила которого завершилась неудачей;
    ● <правило> – правило раздела;
    ● <описание ошибки> – описание ошибки.
  • 16.1.7.1. Правила проверки непосредственно фабрики XDTO
  • При проверке непосредственно фабрики XDTO ошибки кодируются префиксом model. При этом общий префикс будет иметь следующий вид:xdto-model-<раздел>[-<правило>]: <описание ошибки>
    Пакеты, входящие в модель, должны иметь уникальные URI пространства имен – дублирование пакетов в рамках модели запрещено.
    Директива импорта должна определять непустое URI пространства имен импортируемого пакета.
    Директивы импорта пакетов должны определять существующие пакеты типов.
    Пакеты типов, определенные в модели, должны удовлетворять правилам проверки пакетов.
  • 16.1.7.2. Правила проверки пакета XDTO

  • При проверке правильности пакета XDTO ошибки кодируются префиксом package. При этом общий префикс будет иметь следующий вид:xdto-package-<раздел>[-<правило>]: <описание ошибки>
    Пакет XDTO должен иметь установленное свойство URIПространстваИмен.
    Типы, определяемые в пакете XDTO, могут иметь ссылки только на типы, указанные в списке импортируемых (свойство Зависимости).
  • Директивы импорта должны удовлетворять следующим правилам:
  • ● директивы импорта должны определять пакеты XDTO, в которых не могут содержаться директивы импорта, указывающие на данный пакет
    XDTO, – зацикливание импортируемых директив не допускается;
    ● директива импорта должна определять не пустое свойство URIПространстваИмен импортируемого пакета XDTO;
    ● директивы импорта должны определять существующие пакеты XDTO.
  • Свойства пакета должны удовлетворять следующим правилам:
  • ● имена свойств пакета должны быть установлены и не являться пустыми;
    ● имена свойств пакета должны быть уникальны в пределах пакета;
    ● тип свойства пакета должен быть установлен или определен;
    ● типы свойств пакета должны быть определены в пакете или его зависимостях;
    ● задание одновременно имени типа глобального свойства и анонимного определения типа глобального свойства недопустимо;
    ● свойство пакета не должно ссылаться на определение другого свойства пакета;
    ● свойство пакета не должно определять границы количества значений свойства;
    ● свойство пакета может иметь форму представления только Атрибут или Элемент.
  • 16.1.7.3. Правила проверки типа значения XDTO

  • При проверке правильности типа значения XDTO ошибки кодируются префиксом valueType. При этом общий префикс будет иметь следующий
    вид:xdto-valueType-<раздел>[-<правило>]: <описание ошибки>
  • где:
    ● Общие правила проверки типа значения XDTO:
    ● если тип определен в рамках пакета типов, то должны выполняться следующие условия:
    ● тип значения XDTO должен иметь установленное свойство Имя, содержащее                   непустое имя;
    ● имя типа значения XDTO должно быть уникальным в пределах пакета XDTO (среди           всех типов пакета XDTO);
    ● если тип определен в рамках другого определения типа значения или в рамках                  определения свойства объектного типа, то должно выполняться следующее                        условие:
    ● свойство Имя определения типа не должно быть установлено;
    ● тип значения XDTO не может содержать ссылок на самого себя ни в базовом                       типе, ни в типе элемента списка, ни в одном из типов  объединения на всю                          глубину иерархии.
  •   ● Правила проверки базового типа – свойство БазовыйТип:
    ● если свойство БазовыйТип не установлено:
    ● если свойство Вариант не установлено, а свойство ТипыЧленовОбъединения не            установлено, или свойство Вариант установлено и имеет значение Атомарный:
    ● если свойство ОпределениеТипа содержит единственное значение, то это                          определение типа является определением анонимного базового типа;
    ● в противном случае базовым типом считается тип anySimpleType пространства имен XML-схемы (http://www.w3.org/2001/XMLSchema);
    ● если свойство БазовыйТип определения типа установлено, то должны выполняться следующие условия:
    ● базовый тип должен удовлетворять второму правилу проверки пакета XDTO;
    ● базовый тип должен являться типом значения XDTO;
    ● базовый тип не может являться данным типом значения XDTO.
    ● Правила проверки типа элемента списка – свойство ТипЭлементаСписка:
    ● если свойство ТипЭлементаСписка определения типа установлено, то должны выполняться следующие условия:
    ● тип элемента списка должен удовлетворять второму правилу проверки пакета XDTO;
    ● тип элемента списка должен являться типом значения XDTO;
    ● тип элемента списка не может являться данным типом значения XDTO;
    ● тип значения XDTO, являющийся элементом списка, должен быть либо атомарным, либо объединением типов значений XDTO,
    состоящим только из атомарных типов значений XDTO;
    ● если свойство Вариант не установлено, а свойство БазовыйТип установлено или свойство Вариант установлено и имеет значение Список:
    ● если свойство ОпределениеТипа содержит единственное значение, то это определение типа является определением анонимного типа элемента списка;
    ● в противном случае значение свойства ТипЭлементаСписка определяется из соответствующего свойства базового типа значения XDTO.
    ● Правила проверки типа объединения – свойство ТипыЧленовОбъединения:
    ● если свойство ТипыЧленовОбъединения определения типа XDTO установлено, то должны выполняться следующие условия:
    ● тип объединения должен удовлетворять второму правилу проверки пакета XDTO;
    ● тип объединения должен являться типом значения XDTO;
    ● тип объединения не должен являться данным типом значения XDTO;
    ● тип значения XDTO, являющийся объединением, должен быть либо атомарным, либо списком;
    ● если свойство Вариант не установлено, а свойство БазовыйТип установлено или свойство Вариант установлено и имеет значение Объединение:
    ● свойство ОпределениеТипа содержит значения, являющиеся анонимными определениями типов объединения;
    ● в противном случае значение свойства ТипыЧленовОбъединения определяется значением свойства ТипыЧленовОбъединения базового типа значения XDTO.
    ● Наследование типов значений XDTO считается правильным, если выполнятся следующие условия:
    ● для атомарных типов значений XDTO (после выполнения правил проверки типа элемента списка и правил проверки типа объединения
    свойства ТипЭлементаСписка и ТипыЧленовОбъединения не установлены) должны выполняться следующие условия:
    ● тип значения XDTO, являющийся базовым, должен быть атомарным, т. е. свойства ТипЭлементаСписка и ТипыЧленовОбъединения
    базового типа XDTO не должны быть установлены;
    ● предком типа значения XDTO должен быть один из примитивных типов пространства имен схемы XML
    (http://www.w3.org/2001/XMLSchema);
    ● состав фасетов, установленных в описании типа значения XDTO, должен соответствовать списку допустимых фасетов для
    примитивного типа, являющегося предком данного типа XDTO;
    ● значение каждого фасета, установленного в типе значения XDTO, должно удовлетворять правилам ограничения эффективного
    значения аналогичного фасета базового типа XDTO;
    ● для типов элемента списка (после выполнения правил проверки типа элемента списка и правил проверки типа объединения
    установлено свойство ТипЭлементаСписка):
    ● базовый тип XDTO не может являться типом объединения, т. е. свойство ТипыЧленовОбъединения базового типа XDTO не должно быть установлено;
    ● если свойство ТипЭлементаСписка базового типа XDTO установлено, то значение этого свойства должно определять базовый тип для типа элемента списка, определенного в свойстве ТипЭлементаСписка данного типа значения XDTO;
    ● если базовым типом является тип anySimpleType пространства имен XML схемы (http://www.w3.org/2001/XMLSchema), то среди списка фасетов допускается только фасет ПробельныеСимволы;
    ● в противном случае могут быть определены только фасеты: Образец, Перечисление, Длина, МинДлина, МаксДлина и ПробельныеСимволы;
    ● значение каждого фасета, установленного в типе, должно удовлетворять правилам ограничения эффективного значения аналогичного фасета базового типа;
    ● для типов объединения (после выполнения правил проверки типа элемента списка и правил проверки типа объединения установлено свойство ТипыЧленовОбъединения):
    ● базовым типом может являться тип anySimpleType пространства имен XML схемы (http://www.w3.org/2001/XMLSchema) или тип объединения, т. е. у базового типа должно быть установлено свойство ТипыЧленовОбъединения;
    ● если базовым типом является тип объединения, должны выполняться следующие условия:
    ● количество типов объединения базового типа не должно быть больше количества типов объединения данного типа;
    ● типы объединения должны быть потомками соответствующих им типов объединения базового типа в порядке следования в списке
    типов объединения;
    ● если базовым типом является тип anySimpleType пространства имен XML схемы (http://www.w3.org/2001/XMLSchema), то
    определение фасетов не допускается;
    ● в противном случае могут быть определены только фасеты Образец и Перечисление;
    ● значение каждого фасета, установленного в типе, должно удовлетворять правилам ограничения эффективного значения аналогичного
    фасета базового типа.
    ● Если свойство Вариант (модель содержания) определения типа установлено, то оно не должно противоречить определению типа:
    ● если свойство имеет значение Атомарный, то тип имеет атомарную модель содержания и должен удовлетворять правилам xdto-valueType-
    5.1;
    ● если свойство имеет значение Список, то тип имеет модель содержания Список и должен удовлетворять правилам xdto-valueType-5.2;
    ● если свойство имеет значение Объединение, то тип имеет модель содержания Объединение и должен удовлетворять правилам xdtovalueType-5.3.
  • 16.1.7.4. Правила проверки типа объекта XDTO

  • При проверке правильности типа объекта XDTO ошибки кодируются префиксом objectType. При этом общий префикс будет иметь следующий вид:xdto-objectType-<раздел>[-<правило>]: <описание ошибки>
    ● Общие правила проверки типа объекта XDTO:
    ● если тип определен в рамках пакета типов, то должны соблюдаться следующие условия:
    ● тип объекта XDTO должен иметь установленное свойство Имя, содержащее непустое имя;
    ● имя типа объекта XDTO должно быть уникальным в пределах пакета (среди всех типов пакета);
    ● если тип определен в рамках свойства объектного типа, то должны соблюдаться следующие условия:
    ● свойство Имя определения типа не должно быть установлено.
    ● Правила проверки базового типа – свойство БазовыйТип:
    ● если свойство БазовыйТип не установлено, то базовым типом считается тип anyType пространства имен XML схемы
    (http://www.w3.org/2001/XMLSchema);
    ● если свойство БазовыйТип типа объекта XDTO установлено, то должны выполняться следующие условия:
    ● базовый тип должен удовлетворять второму правилу проверки пакета XDTO;
    ● базовый тип должен являться типом объекта XDTO;
    ● базовый тип не может являться данным типом объекта XDTO.
    ● Каждое свойство типа объекта XDTO должно удовлетворять следующим правилам:
    ● имя свойства должно быть определено;
    ● имя свойства не может быть пустым;
    ● имя свойства должно быть уникальным для типа объекта XDTO;
    ● если свойство Тип установлено, то должны выполняться следующие условия:
    ● имя типа должно определять существующий тип объекта XDTO или тип значения XDTO;
    ● тип свойства должен удовлетворять второму правилу проверки пакета XDTO;
    ● свойство не может содержать определение анонимного типа;
    ● если свойство Тип не установлено, то должны выполняться следующие условия:
    ● если у свойства имеется определение анонимного типа, то типом свойства является тип, соответствующий данному определению;
    ● в противном случае типом свойства считается тип anyType пространства имен XML схемы (http://www.w3.org/2001/XMLSchema);
    ● если у свойства определено значение по умолчанию, то должны быть выполнены следующие условия:
    ● тип свойства ЗначениеПоУмолчанию должен быть типом значения XDTO;
    ● лексическое представление значения по умолчанию должно соответствовать пространству значений типа свойства XDTO;
    ● удовлетворять следующим требованиям:
    ● если свойство ЛокальноеИмя свойства XDTO не установлено, то в качестве локального имени XML представления свойства XDTO используется свойство Имя свойства XDTO;
    ● если свойство URIПространстваИмен свойства XDTO не установлено, то URI пространства имен XML представления свойства XDTO
    определяется следующим образом:
    ● если формой XML представления свойства XDTO (свойство Форма) является Элемент, то используется URI пространства имен типа, которому принадлежит данное свойство;
    ● в противном случае URI пространства имен XML-представления свойства XDTO считается отсутствующим;
    ● свойство XDTO должно быть уникально по XML-представлению в пределах типа объекта XDTO;
    ● если свойство XDTO имеет форму XML-представления Текст, то должны выполняться следующие правила:
    ● имя и URI пространства имен должны быть неустановленными или быть пустыми;
    ● среди свойств типа объекта XDTO допускается наличие свойств XDTO с формой XML представления Атрибут;
    ● если свойство XDTO имеет форму XML представления Элемент, то наличие среди свойств типа объекта XDTO свойства XDTO с формой XML-представления Текст запрещено;
    ● значение нижней границы количества появления значений свойства НижняяГраница может принимать значения неотрицательных целых чисел. Значение нижней границы НижняяГраница должно быть меньше или равно значению верхней границы количества появления значений свойств ВерхняяГраница при условии, что данное значение не равно -1;
    ● значение верхней границы количества значений свойства ВерхняяГраница может принимать значения неотрицательных целых чисел или -1. Если данное значение равно -1, то это означает неограниченное количество значений свойства;
    ● если значение свойства Фиксированное установлено, то по умолчанию должно быть установлено ЗначениеПоУмолчанию, соответствующее
    пространству значений типа свойства XDTO;
    ● если установлена ссылка на определение глобального свойства, то должны выполняться следующие правила:
    ● определение свойства не может переопределять значения свойств глобального определения;
    ● глобальное свойство, на определение которого ссылается данное определение свойства, должно быть определено в рамках данного пакета или пакетов-зависимостей.
    ● Если среди свойств типа объекта XDTO имеется свойство XDTO, совпадающее по имени или XML-представлению со свойством базового типа, то вид наследования определяется как наследование ограничением. При таком виде наследования должны выполняться следующие условия:
    ● для каждого свойства XDTO должны выполняться следующие условия:
    ● в базовом типе должно быть определено свойство XDTO с тем же именем – переопределяемое свойство;
    ● если базовый тип определяет порядок следования свойств (свойство Упорядоченный), то позиция переопределяемого свойства должна быть идентична позиции свойства в типе-наследнике;
    ● форма XML представления переопределяемого свойства и свойства данного типа должна совпадать;
    ● локальное имя XML представления переопределяемого свойства и свойства данного типа должно совпадать;
    ● URI пространства имен XML представления переопределяемого свойства и свойства данного типа должна совпадать;
    ● если переопределяемое свойство определяет фиксированное значение, то:
    ● наличие фиксированного значения не может быть отменено в типе-наследнике;
    ● фиксированное значение в базовом типе и типе-наследнике должно совпадать;
    ● нижняя граница количества значений свойства должна быть меньше или равна нижней границе количества значений переопределяемого свойства;
    ● верхняя граница количества значений свойства должна быть больше или равна верхней границе количества значений переопределяемого свойства;
    ● тип свойства должен являться потомком типу переопределяемого свойства;
    ● если базовый тип не обладает смешанным содержанием (свойство Смешанный), то смешанная модель не может быть установлена в типе-наследнике;
    ● если порядок следования свойств базового типа фиксирован (свойство Упорядоченный), то порядок не может быть изменен в типе-наследнике;
    ● если базовый тип не определяет наличие последовательности (свойство Последовательный), то наличие последовательности не может быть установлено в типе-наследнике;
    ● если базовый тип не определяет открытую модель содержания (свойство Открытый), то открытая модель содержания не может быть установлена в типе-наследнике.
    ● В противном случае вид наследования определяется как наследование расширением. Для данного вида наследования должны выполняться следующие правила:
    ● если модель содержания базового типа является смешанной (свойство Смешанный), то она не может быть изменена в типе-наследнике;
    ● если базовый тип определяет наличие последовательности (свойство Последовательный), то последовательность не может быть запрещена в типе-наследнике;
    ● если базовый тип определяет открытую модель содержания (свойство Открытый), то модель содержания не может быть изменена в типе-наследнике.
    ● При любом виде наследования должны выполняться следующие условия:
    ● если модель содержания является смешанной (свойство Смешанный), то наличие последовательности (свойство Последовательный) не может быть запрещено;
    ● если модель содержания является открытой (свойство Открытый), то наличие последовательности (свойство Последовательный) не может быть запрещено.
  • 16.1.7.5. Правила ограничения фасетов

  • При проверке правильности фасета XDTO ошибки кодируются префиксом facet. При этом общий префикс будет иметь следующий вид:
  • xdto-facet-<раздел>[-<правило>]: <описание ошибки>
  • Правила для фасета Длина:

    ● значение фасета должно совпадать с эффективным значением фасета базового типа;
    ● если установлено значение фасета МинДлина, то оно должно удовлетворять следующим условиям:
    ● значение фасета МинДлина должно быть меньше или равно значению фасета Длина;
    ● в базовом типе не установлено значение фасета Длина, или значение фасета МинДлина не отличается от эффективного значения фасета МинДлина базового типа;
    ● если установлено значение фасета МаксДлина, то оно должно удовлетворять следующим условиям:
    ● значение фасета МаксДлина должно быть меньше или равно значению фасета Длина;
    ● в базовом типе не установлено значение фасета Длина, или значение фасета МаксДлина не отличается от эффективного значения фасета МаксДлина базового типа.

    Правила для фасета МинДлина:

    ● значение фасета должно быть больше или равно эффективному значению фасета в базовом классе;
    ● значение фасета должно быть меньше или равно эффективному значению фасета МаксДлина.

  • Правила для фасета МаксДлина:

    ● значение фасета должно быть меньше или равно эффективному значению фасета в базовом классе;
    ● значение фасета должно быть больше или равно эффективному значению фасета МинДлина.

  • Правила для фасета ПробельныеСимволы:

    ● если эффективное значение фасета базового типа равно collapse, то значение фасета не может принимать другое значение;
    ● если эффективное значение фасета базового типа равно preserve, то значение фасета не может принимать значение replace.

  • Правила для фасета МинВключающее:

    ● значение фасета должно быть меньше эффективного значения фасета МаксИсключающее данного типа;
    ● значение фасета должно быть больше или равно эффективному значению фасета базового типа;
    ● если установлено значение фасета МаксВключающее, то оно должно быть меньше или равно эффективному значению фасета МаксВключающее базового типа.
    ● если установлено значение фасета МинИсключающее, то оно должно быть больше эффективного значения фасета МинИсключающее базового типа;
    ● если установлено значение фасета МаксИсключающее, то оно должно быть меньше эффективного значения фасета МаксИсключающее базового
    типа.

  • Правила для фасета МинИсключающее:

    ● установка значения фасета МинИсключающее и МинВключающее фасета в определении типа не допускается;
    ● если установлено значение фасета МаксВключающее, то значение фасета МинИсключающее должно быть меньше значения фасета МаксВключающее данного типа;
    ● значение фасета должно быть больше или равно эффективному значению фасета базового типа;
    ● если установлено значение фасета МаксВключающее, то оно должно быть меньше или равно эффективному значению фасета МаксВключающее базового типа;
    ● если установлено значение фасета МинВключающее, то оно должно быть больше или равно эффективному значению фасета МинВключающее базового типа;
    типа.

  • Правила для фасета МаксВключающее:
  • ● значение фасета должно быть больше или равно значению фасета МинВключающее данного типа;
    ● если установлено значение фасета МаксИсключающее, то оно должно быть меньше эффективного значения базового типа;
    ● если установлено значение фасета МинВключающее, то оно должно быть больше или равно эффективному значению базового типа;
    ● если установлено значение фасета МинИсключающее, то оно должно быть больше эффективного значения базового типа.
  • Правила для фасета МаксИсключающее:

    ● установка значения фасета МаксИсключающее и МаксВключающее фасета в определении типа не допускается;
    ● если установлено значение фасета МинИсключающее, то значение фасета МаксИсключающее должно быть больше значения фасета
    МинИсключающее данного типа;
    ● значение фасета должно быть меньше или равно эффективному значению фасета базового типа;
    ● если установлено значение фасета МаксВключающее, то оно должно быть меньше или равно эффективному значению базового типа;
    ● если установлено значение фасета МинИсключающее, то оно должно быть больше эффективного значения базового типа;
    ● если установлено значение фасета МинВключающее, то оно должно быть больше эффективного значения базового типа.

  • Правило для фасета РазрядовВсего:

    ● значение фасета должно быть меньше или равно эффективному значению фасета базового типа.

  • Правила для фасета РазрядовДробнойЧасти:

    ● значение фасета должно быть меньше или равно эффективному значению фасета РазрядовВсего;
    ● значение фасета должно быть меньше или равно эффективному значению фасета базового типа.

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