КоллекцияСвойствXDTO.Количество

Методы · Count

Получает количество элементов коллекции.

Синтаксис

Количество()
Полное описание, параметры и ограничения

КоллекцияСвойствXDTO.Количество (XDTOPropertyCollection.Count)

КоллекцияСвойствXDTO (XDTOPropertyCollection)

Количество (Count)

Доступен, начиная с версии 8.1.

Синтаксис:
Количество()
Возвращаемое значение:
Тип: Число.

Описание:

Получает количество элементов коллекции.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Разобрать пакет своей модели: типы, корни XML и квалификация имён

Пакет получаем по URI собственной схемы. Тип Order и корневое свойство order — разные части модели; зависимости пакета не являются HTTP-запросами.

Где и как запускать

Полный серверный общий модуль собственной отдельной учебной конфигурации.

Подготовка

  1. Создайте отдельную собственную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую КА2, УНФ, УТ или БП.

  2. Создайте неглобальный общий модуль УчебнаяМодельXDTO85 с флагом Сервер. Вставьте весь выбранный пример, включая вспомогательные функции, если они присутствуют.

  3. Из серверной команды своей учебной обработки вызовите УчебнаяМодельXDTO85.ВыполнитьПример(). Передавать неизвестный объект или реквизиты чужой конфигурации не нужно.

  4. XSD целиком встроена в код: артикул Sku, цвет Color, список артикулов, объединение, абстрактный Base, строка Item, производный Order и смешанный Note.

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

  6. urn:guide:model85 и URI стандартной XML Schema — идентификаторы пространств имён. Код не загружает их из Интернета; import/include, DTD и внешних файлов нет.

  7. Проверки Истина относятся к приведённой неизменённой учебной XSD. После её изменения сначала пересмотрите ожидаемые типы, границы и обязательность.

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

Процедура ВыполнитьПример() Экспорт
    XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:g=""urn:guide:model85"" targetNamespace=""urn:guide:model85"" elementFormDefault=""qualified"" attributeFormDefault=""unqualified"">
    |<xs:simpleType name=""Sku""><xs:restriction base=""xs:string""><xs:length value=""4""/><xs:pattern value=""[A-Z][0-9]{3}""/></xs:restriction></xs:simpleType>
    |<xs:simpleType name=""Color""><xs:restriction base=""xs:string""><xs:enumeration value=""red""/><xs:enumeration value=""blue""/></xs:restriction></xs:simpleType>
    |<xs:simpleType name=""SkuList""><xs:list itemType=""g:Sku""/></xs:simpleType>
    |<xs:simpleType name=""QuantityOrCode""><xs:union memberTypes=""xs:positiveInteger g:Sku""/></xs:simpleType>
    |<xs:complexType name=""Base"" abstract=""true""><xs:attribute name=""code"" type=""g:Sku"" use=""required""/></xs:complexType>
    |<xs:complexType name=""Item""><xs:sequence><xs:element name=""name"" type=""xs:string""/><xs:element name=""quantity"" type=""xs:nonNegativeInteger""/></xs:sequence></xs:complexType>
    |<xs:complexType name=""Order""><xs:complexContent><xs:extension base=""g:Base""><xs:sequence><xs:element name=""item"" type=""g:Item"" minOccurs=""0"" maxOccurs=""unbounded""/></xs:sequence></xs:extension></xs:complexContent></xs:complexType>
    |<xs:complexType name=""Note"" mixed=""true""><xs:sequence><xs:element name=""amount"" type=""xs:decimal"" minOccurs=""0"" maxOccurs=""unbounded""/></xs:sequence></xs:complexType>
    |<xs:element name=""order"" type=""g:Order""/><xs:element name=""note"" type=""g:Note""/>
    |</xs:schema>";
    ЧтениеСхемы = Новый ЧтениеXML;
    ЧтениеСхемы.УстановитьСтроку(XSD);
    Попытка
        Дерево = Новый ПостроительDOM;
        ДокументСхемы = Дерево.Прочитать(ЧтениеСхемы);
    Исключение
        ОшибкаСхемы = ОписаниеОшибки();
        Попытка
            ЧтениеСхемы.Закрыть();
        Исключение
            ВызватьИсключение ОшибкаСхемы + Символы.ПС + "Закрытие: " + ОписаниеОшибки();
        КонецПопытки;
        ВызватьИсключение ОшибкаСхемы;
    КонецПопытки;
    ЧтениеСхемы.Закрыть();
    ПостроительСхем = Новый ПостроительСхемXML;
    Схема = ПостроительСхем.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
    Если Схема = Неопределено Тогда
        ВызватьИсключение "Не построена собственная схема коллекций";
    КонецЕсли;
    НаборСхем = Новый НаборСхемXML;
    НаборСхем.Добавить(Схема);
    Если НЕ НаборСхем.Проверить() Тогда
        ВызватьИсключение "Собственная схема не прошла проверку";
    КонецЕсли;
    Фабрика = Новый ФабрикаXDTO(НаборСхем);
    Пакет = Фабрика.Пакеты.Получить("urn:guide:model85");
    Если Пакет = Неопределено Тогда
        ВызватьИсключение "Не получен собственный пакет";
    КонецЕсли;
    Сообщить(Пакет.URIПространстваИмен = "urn:guide:model85");
    Сообщить(Пакет.КвалифицированнаяФормаЭлемента);
    Сообщить(НЕ Пакет.КвалифицированнаяФормаАтрибута);
    Сообщить(Пакет.Количество() >= 8);
    Для Индекс = 0 По Пакет.Количество() - 1 Цикл
        ТипПакета = Пакет.Получить(Индекс);
        Сообщить("Тип пакета: " + ТипПакета.Имя);
    КонецЦикла;
    Сообщить(Пакет.Получить("Order") = Фабрика.Тип("urn:guide:model85", "Order"));
    Корни = Пакет.КорневыеСвойства;
    КореньЗаказа = Корни.Получить("order");
    КореньПояснения = Корни.Получить("note");
    Если КореньЗаказа = Неопределено ИЛИ КореньПояснения = Неопределено Тогда
        ВызватьИсключение "Не найдены оба собственных корня XML";
    КонецЕсли;
    Сообщить(Корни.Количество() = 2);
    Сообщить(КореньЗаказа.Тип = Пакет.Получить("Order"));
    Сообщить(КореньПояснения.Тип = Пакет.Получить("Note"));
    Зависимости = Пакет.Зависимости;
    Сообщить("Зависимостей модели: " + Строка(Зависимости.Количество()));
    Для Индекс = 0 По Зависимости.Количество() - 1 Цикл
        Зависимость = Зависимости.Получить(Индекс);
        Сообщить("URI зависимости: " + Зависимость.URIПространстваИмен);
    КонецЦикла;
КонецПроцедуры

Разбор по шагам

  1. Построить свою XSD и фабрику. Найти пакет строго по urn:guide:model85, а не взять первый чужой пакет конфигурации.

  2. Сверить URI пакета. elementFormDefault=qualified задаёт квалификацию элементов, attributeFormDefault=unqualified — отсутствие квалификации атрибутов по умолчанию.

  3. Обойти реальные типы пакета по индексам от 0 до Количество()-1. В схеме восемь именованных типов; порядок обхода не считаем постоянным.

  4. Получить Order по имени и сопоставить с Фабрика.Тип. Не путать тип Order с элементом order в нижнем регистре.

  5. Найти два корневых свойства и проверить, что их типы — Order и Note. Описатель корня задаёт XML-оболочку, а не новую строку заказа.

  6. Получить зависимости модели и вывести только URI существующих пакетов. Их количество не задаём выдуманной константой.

  7. Не присваивать флаги или коллекции пакета: они только для чтения, модель формируется исходной схемой.

Как проверить результат

  1. Восемь булевых проверок дают Истина: URI, два флага, наличие восьми типов, совпадение Order, количество корней и два типа корней.

  2. В перечне типов присутствуют Sku, Color, SkuList, QuantityOrCode, Base, Item, Order, Note. Их порядок не обещается.

  3. Количество и URI зависимостей — результат построения модели; в коде нет загрузчика URL или файлов.

Ожидаемый результат

По своей схеме получена понятная карта: пакет → типы и корневые свойства → зависимости модели.

На что обратить внимание

  1. Имя типа и имя XML-элемента чувствительны к регистру. Order и order нельзя менять местами.

  2. Квалификация означает пространство имён XML, а не роль пользователя и не квалификацию разработчика.

  3. Флаги по умолчанию схемы не отменяют локальный form у отдельного объявления, если вы добавите его позднее.

  4. Количество типов не равно количеству XML-корней, товаров или строк заказа.

  5. ПакетXDTO этой фабрики не является ОбъектМетаданныхПакетXDTO конфигурации.

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

Заполнить товар по собственному типу XDTO и проверить обязательные свойства

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

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Сначала прочитайте учебную XSD в начале кода: code обязателен, note необязателен; quantity — nonNegativeInteger.

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

XSD = "<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema""
| xmlns:g=""urn:guide:product"" targetNamespace=""urn:guide:product""
| elementFormDefault=""qualified"" version=""1.0"" xml:lang=""ru"">
| <xs:annotation><xs:documentation>Учебный товар, не контракт внешнего API</xs:documentation></xs:annotation>
| <xs:simpleType name=""Sku""><xs:restriction base=""xs:string"">
|  <xs:length value=""4""/><xs:pattern value=""[A-Z][0-9]{3}""/>
| </xs:restriction></xs:simpleType>
| <xs:complexType name=""Product""><xs:sequence>
|  <xs:element name=""name"" type=""xs:string""/>
|  <xs:element name=""quantity"" type=""xs:nonNegativeInteger""/>
|  <xs:element name=""note"" type=""xs:string"" minOccurs=""0""/>
| </xs:sequence><xs:attribute name=""code"" type=""g:Sku"" use=""required""/>
| </xs:complexType>
| <xs:element name=""product"" type=""g:Product""/>
|</xs:schema>";
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XSD);
Попытка
    ЧтениеДерева = Новый ПостроительDOM;
    ДокументСхемы = ЧтениеДерева.Прочитать(Чтение);
    Чтение.Закрыть();
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Построитель = Новый ПостроительСхемXML;
Схема = Построитель.СоздатьСхемуXML(ДокументСхемы.ЭлементДокумента);
Если Схема = Неопределено Тогда
    ВызватьИсключение "Не удалось построить учебную схему";
КонецЕсли;
Набор = Новый НаборСхемXML;
Набор.Добавить(Схема);
Если Не Набор.Проверить() Тогда
    ВызватьИсключение "Учебная XSD не прошла проверку";
КонецЕсли;
Фабрика = Новый ФабрикаXDTO(Набор);
ТипТовара = Фабрика.Тип("urn:guide:product", "Product");
Если ТипТовара = Неопределено Тогда
    ВызватьИсключение "В фабрике не найден тип Product";
КонецЕсли;
Товар = Фабрика.Создать(ТипТовара);
Свойства = Товар.Свойства();
Код = Свойства.Получить("code");
Название = Свойства.Получить("name");
Количество = Свойства.Получить("quantity");
Примечание = Свойства.Получить("note");
Если Код = Неопределено Или Название = Неопределено
    Или Количество = Неопределено Или Примечание = Неопределено Тогда
    ВызватьИсключение "Не найдены четыре свойства учебной модели";
КонецЕсли;
Товар.Установить(Код, Фабрика.Создать(Код.Тип, "A001"));
Товар.Установить(Название, Фабрика.Создать(Название.Тип, "Книга"));
Товар.Установить(Количество, Фабрика.Создать(Количество.Тип, "3"));
Товар.Проверить();

Сообщить(Свойства.Количество() = 4);
Сообщить(Товар.Тип().Имя = "Product");
Сообщить(Товар.Тип().URIПространстваИмен = "urn:guide:product");
Сообщить(Товар.Установлено(Код));
Сообщить(Не Товар.Установлено(Примечание));
Сообщить(Код.НижняяГраница = 1 И Код.ВерхняяГраница = 1);
Сообщить(Примечание.НижняяГраница = 0 И Примечание.ВерхняяГраница = 1);
Сообщить("Форма свойства code: " + Строка(Код.Форма));
Сообщить("Имя свойства: " + Код.Имя + "; локальное имя: " + Код.ЛокальноеИмя);
Сообщить("URI свойства code: " + Код.URIПространстваИмен);
Сообщить("Квалифицированное: " + Строка(Код.Квалифицированное));
Сообщить("Возможно пустое: " + Строка(Код.ВозможноПустое));
Сообщить("Фиксированное: " + Строка(Код.Фиксированное));
Сообщить(Код.ТипВладелец.Имя = "Product");
ЗначениеКода = Товар.ПолучитьXDTO(Код);
ЗначениеНазвания = Товар.ПолучитьXDTO(Название);
ЗначениеКоличества = Товар.ПолучитьXDTO(Количество);
Сообщить(ЗначениеКода.Значение = "A001");
Сообщить(ЗначениеНазвания.Значение = "Книга");
Сообщить(ЗначениеКоличества.Значение = 3);
Товар.Установить(Примечание, Фабрика.Создать(Примечание.Тип, ""));
Сообщить(Товар.Установлено(Примечание));
Товар.Сбросить(Примечание);
Сообщить(Не Товар.Установлено(Примечание));
Товар.Проверить();

Разбор по шагам

  1. Тип Product получаем из фабрики по URI и имени; Создать возвращает новый ОбъектXDTO.

  2. Коллекция свойств описывает четыре поля. НижняяГраница 1 означает обязательность, 0 допускает отсутствие. ВерхняяГраница 1 ограничивает одиночное значение.

  3. Форма code — атрибут XML, name/quantity/note — элементы. Квалифицированное и URI определяют правила имени, а не значение SKU.

  4. Фабрика.Создать по типу конкретного свойства даёт ЗначениеXDTO. Установить получает описатель и совместимое значение.

  5. ПолучитьXDTO возвращает типизированное значение; у него .Значение содержит скаляр платформы.

  6. Пустая строка note всё ещё установлена. Сбросить удаляет установленность необязательного поля, не записывает пустую строку вместо отсутствия.

Как проверить результат

  1. Четыре свойства, тип Product и URI urn:guide:product.

  2. code/name/quantity заполнены как A001/Книга/3, note первоначально отсутствует.

  3. После назначения пустой строки note установлено, после Сбросить снова не установлено; окончательная проверка модели проходит.

Ожидаемый результат

Конкретный учебный товар заполнен и проверен по XSD с различием отсутствующего и пустого необязательного поля.

На что обратить внимание

  1. ЗначениеЗаполнено не заменяет Установлено XDTO: пустая строка может быть установленным значением.

  2. Проверка схемы не гарантирует, что название соответствует справочнику или товар разрешён к продаже.

  3. Нельзя присваивать отрицательное количество: его тип в учебной схеме nonNegativeInteger.

  4. Свойства схемы только читаем; для другого контракта создавайте согласованную схему, не меняйте внешнюю модель наугад.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.