Клонирует данный компонент схемы XML.
Синтаксис
КлонироватьКомпоненту(<Рекурсивно>)Полное описание, параметры и ограничения
ФасетМаксимальногоИсключающегоЗначенияXS.КлонироватьКомпоненту (XSMaxExclusiveFacet.CloneComponent)
ФасетМаксимальногоИсключающегоЗначенияXS (XSMaxExclusiveFacet)
КлонироватьКомпоненту (CloneComponent)
Доступен, начиная с версии 8.1.
Синтаксис:
КлонироватьКомпоненту(<Рекурсивно>)
Параметры:
<Рекурсивно> (необязательный)
Тип: Булево.
Признак рекурсивного клонирования компонента (клонируются также компоненты, содержащиеся в данном).
Значение по умолчанию: Истина.
Возвращаемое значение:
Тип: АннотацияXS, СхемаXML, ИнформацияДляПриложенияXS, ДокументацияXS, ФасетМинимальногоИсключающегоЗначенияXS, ФасетМинимальногоВключающегоЗначенияXS, ФасетМаксимальногоИсключающегоЗначенияXS, ФасетМаксимальногоВключающегоЗначенияXS, ФасетДлиныXS, ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS, ФасетОбщегоКоличестваРазрядовXS, ФасетКоличестваРазрядовДробнойЧастиXS, ФасетПеречисленияXS, ФасетОбразцаXS, ФасетПробельныхСимволовXS, ОпределениеПростогоТипаXS, ОпределениеСоставногоТипаXS, ОпределениеГруппыАтрибутовXS, ОпределениеГруппыМоделиXS, ОбъявлениеАтрибутаXS, ОбъявлениеЭлементаXS, ОпределениеОграниченияИдентичностиXS, ОпределенияXPathXS, ОбъявлениеНотацииXS, МаскаXS, ИмпортXS, ВключениеXS, ПереопределениеXS, ИспользованиеАтрибутаXS, ГруппаМоделиXS, ФрагментXS.
Описание:
Клонирует данный компонент схемы XML.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Отличить исключающие границы скидки от включающих
Учебная доля скидки строго больше нуля и строго меньше единицы. Проверяем 0, 0.25 и 1, чтобы границы не оставались только словами.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте собственную схему из начала примера. Не нужно менять реквизиты документа или скидки в реальной базе.
0.25 здесь доля: 25 процентов. Не подставляйте 25 вместо 0.25.
XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema""
| xmlns:g=""urn:guide:limits"" targetNamespace=""urn:guide:limits"">
| <xs:simpleType name=""Price""><xs:restriction base=""xs:decimal"">
| <xs:minInclusive value=""0""/><xs:maxInclusive value=""9999.99""/>
| <xs:totalDigits value=""6""/><xs:fractionDigits value=""2""/>
| </xs:restriction></xs:simpleType>
| <xs:simpleType name=""Discount""><xs:restriction base=""xs:decimal"">
| <xs:minExclusive value=""0""/><xs:maxExclusive value=""1""/>
| </xs:restriction></xs:simpleType>
| <xs:simpleType name=""Status""><xs:restriction base=""xs:string"">
| <xs:whiteSpace value=""collapse""/>
| <xs:enumeration value=""draft""/><xs:enumeration value=""published""/>
| <xs:enumeration value=""closed""/>
| </xs:restriction></xs:simpleType>
| <xs:simpleType name=""Description""><xs:restriction base=""xs:string"">
| <xs:minLength value=""3""/><xs:maxLength value=""20""/>
| </xs:restriction></xs:simpleType>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
Документ = Новый ПостроительDOM;
DOM = Документ.Прочитать(Чтение);
Чтение.Закрыть();
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(DOM.ЭлементДокумента);
Если Схема = Неопределено Тогда
ВызватьИсключение "Не построена собственная схема ограничений";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
ВызватьИсключение "Не прошла проверка собственной схемы";
КонецЕсли;
Фабрика = Новый ФабрикаXDTO(Набор);
Определение = Схема.ОпределенияТипов.Получить("Discount", "urn:guide:limits");
ТипМодели = Фабрика.Тип("urn:guide:limits", "Discount");
Сообщить(Определение.Фасеты.Количество() = 2);
Для Каждого Фасет Из Определение.Фасеты Цикл
Сообщить(Строка(Фасет.ТипКомпоненты) + ": " + Фасет.ЛексическоеЗначение);
Сообщить("Типизированное значение: " + Строка(Фасет.Значение));
Сообщить("Фиксирован в потомках: " + Строка(Фасет.Фиксированный));
Сообщить(Фасет.ОпределениеПростогоТипа.Имя = Определение.Имя);
Сообщить(Фасет.Контейнер <> Неопределено);
Сообщить(Фасет.КорневойКонтейнер <> Неопределено);
Сообщить(Фасет.Схема.ПространствоИмен = "urn:guide:limits");
Сообщить(Фасет.Аннотация = Неопределено);
Сообщить(Фасет.Компоненты.Количество() = 0);
Фасет.ОбновитьЭлементDOM();
Сообщить("XML-тег ограничения: " + Фасет.ЭлементDOM.ИмяЭлемента);
КопияФасета = Фасет.КлонироватьКомпоненту(Истина);
Сообщить(ТипЗнч(КопияФасета) = ТипЗнч(Фасет));
Сообщить(КопияФасета.ЛексическоеЗначение = Фасет.ЛексическоеЗначение);
Сообщить(Не Фасет.Содержит(КопияФасета));
КонецЦикла;
Для Каждого Граница Из Определение.Фасеты Цикл
Сообщить(Граница.Исключающий И Не Граница.Включающий);
КонецЦикла;
Случаи = Новый Массив;
Случаи.Добавить(Новый Структура("Текст,Ожидается", "0", Ложь));
Случаи.Добавить(Новый Структура("Текст,Ожидается", "0.25", Истина));
Случаи.Добавить(Новый Структура("Текст,Ожидается", "1", Ложь));
Для Каждого Случай Из Случаи Цикл
Допустимо = Ложь;
Попытка
ЗначениеМодели = Фабрика.Создать(ТипМодели, Случай.Текст);
Допустимо = Истина;
Исключение
Сообщить("Отклонено: " + Случай.Текст + "; "
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Если Допустимо <> Случай.Ожидается Тогда
ВызватьИсключение "Не совпал результат проверки значения: " + Случай.Текст;
КонецЕсли;
Сообщить(СтрШаблон("%1: допустимо = %2", Случай.Текст, Допустимо));
КонецЦикла;Разбор по шагам
Discount ограничивает десятичное значение двумя исключающими границами.
Типы фасетов minExclusive/maxExclusive отличаются от minInclusive/maxInclusive, даже при одинаковых числовых значениях.
Пара Исключающий/Включающий противоположна; вывод подтверждает выбранное правило схемы.
Модель проверяет три случая: обе границы отклоняются, значение между ними принимается.
Копии фасетов остаются отдельными компонентами и не ослабляют исходный контракт.
Как проверить результат
Два фасета со значениями 0 и 1, Исключающий Истина и Включающий Ложь.
Для 0 и 1 ожидаемое отклонение, для 0.25 успешное создание значения.
Ожидаемый результат
Граничные условия строгого диапазона показаны на реальных типизированных значениях скидки.
На что обратить внимание
Отсутствующая скидка и нулевая скидка — разные задачи; этот тип описывает именно положительную долю.
Правила скидок конкретной конфигурации могут допускать 0 и 100 процентов. Учебный контракт их не заменяет.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.