Коллекция запросов пакета.
Полное описание, параметры и ограничения
ПакетЗапросовСхемыЗапроса (QuerySchemaQueryBatch)
ПакетЗапросовСхемыЗапроса (QuerySchemaQueryBatch)
Доступен, начиная с версии 8.3.5.
Элементы коллекции:
ЗапросВыбораСхемыЗапроса, ЗапросУничтоженияТаблицыСхемыЗапроса
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются запрос выбора или запрос уничтожения таблицы.
Возможно обращение к запросу выбора или запросу уничтожения таблицы посредством оператора [...]. В качестве аргумента передается индекс.
Методы:
Добавить (Add)
ДобавитьКопию (AddCopy)
Индекс (IndexOf)
Количество (Count)
Очистить (Clear)
Переместить (MoveTo)
Получить (Get)
Сдвинуть (Move)
Удалить (Delete)
Описание:
Коллекция запросов пакета.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.3.5.
Методическая информация
Практические примеры
Характеристики товаров СКД: свой ПВХ, регистр, таблицы и запросы с полным восстановлением
Описываем для собственных товаров виды числовых свойств и место хранения значений. Переключаем источники с таблиц на запросы с другими именами полей, возвращаем таблицы, удаляем и восстанавливаем описание. Семь самостоятельных разборов проверяют все11 readonly-свойств и неизменные колонки товаров.
Где и как запускать
Полный серверный общий модуль УчебныеЗадачи нового собственного стенда УчебныеХарактеристики85; только метаданные и модель в памяти, запуск в1С не проверен.
Подготовка
Создайте НОВУЮ отдельную учебную базу, не копию рабочей, на точно8.5.1.1343; имя конфигурации УчебныеХарактеристики85, совместимость Не использовать. Рабочие УТ/КА2/УНФ/БП и их расширения не меняйте. Нужны ровно три прикладных объекта ниже, без подписок, расширений, регламентных заданий или иных объектов.
Справочники → УчебныеТовары85: неиерархический, код Строка3, наименование40, без владельцев, реквизитов и табличных частей. Автонумерация выключена. Модули объекта/менеджера пусты; элементы не создавайте.
Планы видов характеристик → УчебныеВиды85: неиерархический, код Строка3, наименование40. В свойстве Тип разрешите только Число12,2; дополнительные значения характеристик не назначайте. Без реквизитов, табличных частей и предопределённых видов; модули пусты. Это допустимые ТИПЫ значений, не тип ссылки на вид свойства.
Регистры сведений → УчебныеЗначения85: независимый, непериодический. Измерение Товар: СправочникСсылка.УчебныеТовары85; измерение Вид: ПланВидовХарактеристикСсылка.УчебныеВиды85; ресурс Значение: Число12,2. Реквизитов и обработчиков нет. Записи не создавайте: данный урок редактирует модель запроса, а не значения характеристик.
Общие → Общие модули → УчебныеЗадачи: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставьте весь основной код. Создайте свою внешнюю обработку УчебныеХарактеристикиЗапроса85, управляемую Форму и команду/кнопку Выполнить с действием Выполнить, без реквизитов. Полный отдельный модуль формы дан ниже.
Вне опыта завершите прежний свой сеанс без транзакции, сохраните свою конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). После успеха свежий собственный управляемый клиент и своя обработка. Здесь 1С, F7, формы и BSL не запускались.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойСтендХарактеристик();
ПроверитьСвоюМодельХарактеристик();
ЗапросВидов = ПроверитьСвойЗапросИсточника("ВЫБРАТЬ Виды.Ссылка КАК Ключ, Виды.Наименование КАК Имя, Виды.ТипЗначения КАК ТипЗначения
|ИЗ ПланВидовХарактеристик.УчебныеВиды85 КАК Виды", Истина);
ЗапросЗначений = ПроверитьСвойЗапросИсточника("ВЫБРАТЬ Значения.Товар КАК Объект, Значения.Вид КАК Характеристика, Значения.Значение КАК ЗначениеХарактеристики
|ИЗ РегистрСведений.УчебныеЗначения85 КАК Значения", Ложь);
Схема = Новый СхемаЗапроса;
Схема.РежимКомпоновкиДанных = Истина;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ Товары.Ссылка КАК Товар, Товары.Наименование КАК Наименование
|ИЗ Справочник.УчебныеТовары85 КАК Товары");
Характеристики = ПолучитьСвоиХарактеристики(Схема);
ТипТоваров = Новый ОписаниеТипов("СправочникСсылка.УчебныеТовары85");
ПроверитьСвоюХарактеристику(Схема, "Пусто", ЗапросВидов, ЗапросЗначений);
ПроверитьПовторныйРазборХарактеристик(Схема, "Пусто", ЗапросВидов, ЗапросЗначений);
Добавленная = Характеристики.Добавить(ТипТоваров, "ПланВидовХарактеристик.УчебныеВиды85", "",
"Ссылка", "Наименование", "ТипЗначения", "РегистрСведений.УчебныеЗначения85", "", "Товар", "Вид", "Значение");
Если Добавленная <> Характеристики.Получить(0) Тогда
ВызватьИсключение "Добавить должен вернуть текущую собственную характеристику";
КонецЕсли;
ПроверитьСвоюХарактеристику(Схема, "Таблицы", ЗапросВидов, ЗапросЗначений);
ПроверитьПовторныйРазборХарактеристик(Схема, "Таблицы", ЗапросВидов, ЗапросЗначений);
Изменённая = Характеристики.Изменить(0, ТипТоваров, "", ЗапросВидов, "Ключ", "Имя", "ТипЗначения",
"", ЗапросЗначений, "Объект", "Характеристика", "ЗначениеХарактеристики");
Если Изменённая <> Характеристики.Получить(0) Тогда
ВызватьИсключение "Изменить должен вернуть текущую собственную характеристику";
КонецЕсли;
ПроверитьСвоюХарактеристику(Схема, "Запросы", ЗапросВидов, ЗапросЗначений);
ПроверитьПовторныйРазборХарактеристик(Схема, "Запросы", ЗапросВидов, ЗапросЗначений);
Копия = Новый СхемаЗапроса;
Копия.РежимКомпоновкиДанных = Истина;
Копия.УстановитьТекстЗапроса(Схема.ПолучитьТекстЗапроса());
ПроверитьСвоюХарактеристику(Копия, "Запросы", ЗапросВидов, ЗапросЗначений);
Возвращённая = Характеристики.Изменить(0, ТипТоваров, "ПланВидовХарактеристик.УчебныеВиды85", "",
"Ссылка", "Наименование", "ТипЗначения", "РегистрСведений.УчебныеЗначения85", "", "Товар", "Вид", "Значение");
Если Возвращённая <> Характеристики.Получить(0) Тогда
ВызватьИсключение "Возвращение к таблицам должно дать текущую собственную характеристику";
КонецЕсли;
ПроверитьСвоюХарактеристику(Схема, "Таблицы", ЗапросВидов, ЗапросЗначений);
ПроверитьПовторныйРазборХарактеристик(Схема, "Таблицы", ЗапросВидов, ЗапросЗначений);
Характеристики.Удалить(0);
ПроверитьСвоюХарактеристику(Схема, "Пусто", ЗапросВидов, ЗапросЗначений);
ПроверитьПовторныйРазборХарактеристик(Схема, "Пусто", ЗапросВидов, ЗапросЗначений);
Восстановленная = Характеристики.Добавить(ТипТоваров, "ПланВидовХарактеристик.УчебныеВиды85", "",
"Ссылка", "Наименование", "ТипЗначения", "РегистрСведений.УчебныеЗначения85", "", "Товар", "Вид", "Значение");
Если Восстановленная <> Характеристики.Получить(0) Тогда
ВызватьИсключение "После удаления нужно новое текущее описание";
КонецЕсли;
ПроверитьСвоюХарактеристику(Схема, "Таблицы", ЗапросВидов, ЗапросЗначений);
ПроверитьПовторныйРазборХарактеристик(Схема, "Таблицы", ЗапросВидов, ЗапросЗначений);
Характеристики.Очистить();
ПроверитьСвоюХарактеристику(Схема, "Пусто", ЗапросВидов, ЗапросЗначений);
ПроверитьПовторныйРазборХарактеристик(Схема, "Пусто", ЗапросВидов, ЗапросЗначений);
ПроверитьСвоюХарактеристику(Копия, "Запросы", ЗапросВидов, ЗапросЗначений);
Сообщить("Оригинал: характеристик0, колонки товаров2; самостоятельная копия: описание своих запросов видов и значений сохранено");
КонецПроцедуры
Процедура ПроверитьСвойСтендХарактеристик()
Если Метаданные.Справочники.Количество() <> 1 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 1 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 1 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый стенд: один справочник, один ПВХ и один регистр значений";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойТип(Описание, ОжидаемыйТип)
Если ТипЗнч(Описание) <> Тип("ОписаниеТипов") Тогда
ВызватьИсключение "Нужно настоящее описание типа собственного поля";
КонецЕсли;
Типы = Описание.Типы();
Если Типы.Количество() <> 1 Или Типы[0] <> ОжидаемыйТип Тогда
ВызватьИсключение "Не совпал полный набор типов собственного поля";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвоюМодельХарактеристик()
Если ПривилегированныйРежим() Тогда
ВызватьИсключение "Привилегированный режим для собственной модели не нужен";
КонецЕсли;
МетаТовар = Метаданные.Справочники.Найти("УчебныеТовары85");
МетаВиды = Метаданные.ПланыВидовХарактеристик.Найти("УчебныеВиды85");
МетаЗначения = Метаданные.РегистрыСведений.Найти("УчебныеЗначения85");
Если МетаТовар = Неопределено Или МетаВиды = Неопределено Или МетаЗначения = Неопределено Тогда
ВызватьИсключение "Нужны все три собственных объекта учебной модели";
КонецЕсли;
Если МетаТовар.Иерархический Или МетаВиды.Иерархический
Или МетаТовар.Реквизиты.Количество() <> 0 Или МетаТовар.ТабличныеЧасти.Количество() <> 0
Или МетаВиды.Реквизиты.Количество() <> 0 Или МетаВиды.ТабличныеЧасти.Количество() <> 0
Или МетаТовар.ДлинаКода <> 3 Или МетаТовар.ДлинаНаименования <> 40
Или МетаВиды.ДлинаКода <> 3 Или МетаВиды.ДлинаНаименования <> 40
Или МетаВиды.ДополнительныеЗначенияХарактеристик <> Неопределено Тогда
ВызватьИсключение "Не совпала собственная минимальная схема справочника и ПВХ";
КонецЕсли;
ПроверитьСвойТип(МетаВиды.Тип, Тип("Число"));
Если МетаВиды.Тип.КвалификаторыЧисла.Разрядность <> 12 Или МетаВиды.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 2 Тогда
ВызватьИсключение "Свой ПВХ разрешает только Число12,2";
КонецЕсли;
Если МетаЗначения.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый
Или МетаЗначения.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический
Или МетаЗначения.Измерения.Количество() <> 2 Или МетаЗначения.Ресурсы.Количество() <> 1
Или МетаЗначения.Реквизиты.Количество() <> 0 Тогда
ВызватьИсключение "Нужен независимый непериодический собственный регистр: два измерения и один ресурс";
КонецЕсли;
МетаОбъект = МетаЗначения.Измерения.Найти("Товар");
МетаВид = МетаЗначения.Измерения.Найти("Вид");
МетаЗначение = МетаЗначения.Ресурсы.Найти("Значение");
Если МетаОбъект = Неопределено Или МетаВид = Неопределено Или МетаЗначение = Неопределено Тогда
ВызватьИсключение "Не совпали имена собственных измерений и ресурса";
КонецЕсли;
ПроверитьСвойТип(МетаОбъект.Тип, Тип("СправочникСсылка.УчебныеТовары85"));
ПроверитьСвойТип(МетаВид.Тип, Тип("ПланВидовХарактеристикСсылка.УчебныеВиды85"));
ПроверитьСвойТип(МетаЗначение.Тип, Тип("Число"));
Если МетаЗначение.Тип.КвалификаторыЧисла.Разрядность <> 12 Или МетаЗначение.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 2 Тогда
ВызватьИсключение "Ресурс собственной модели должен иметь Число12,2";
КонецЕсли;
КонецПроцедуры
Функция ПроверитьСвойЗаголовок(Схема, ИсточникИмя, Псевдоним, Имена, Выражения, ИменаТипов)
Если Схема.ПакетЗапросов.Количество() <> 1 Тогда
ВызватьИсключение "Нужна одна собственная схема без пакетных побочных операций";
КонецЕсли;
Выбор = Схема.ПакетЗапросов.Получить(0);
Если ТипЗнч(Выбор) <> Тип("ЗапросВыбораСхемыЗапроса") Или Выбор.Операторы.Количество() <> 1 Тогда
ВызватьИсключение "Нужен один собственный запрос выбора и оператор";
КонецЕсли;
Оператор = Выбор.Операторы.Получить(0);
Если ТипЗнч(Оператор) <> Тип("ОператорВыбратьСхемыЗапроса") Или Оператор.Источники.Количество() <> 1 Тогда
ВызватьИсключение "Нужен один собственный физический источник";
КонецЕсли;
Таблица = Оператор.Источники.Получить(0).Источник;
Если ТипЗнч(Таблица) <> Тип("ТаблицаСхемыЗапроса") Или НРег(Таблица.ИмяТаблицы) <> НРег(ИсточникИмя)
Или Таблица.Псевдоним <> Псевдоним Тогда
ВызватьИсключение "Не совпал точный собственный источник и псевдоним";
КонецЕсли;
Если Выбор.Колонки.Количество() <> Имена.Количество() Или Оператор.ВыбираемыеПоля.Количество() <> Имена.Количество() Тогда
ВызватьИсключение "Не совпал полный размер собственного заголовка";
КонецЕсли;
Для Индекс = 0 По Имена.Количество() - 1 Цикл
Колонка = Выбор.Колонки.Получить(Индекс);
Если ТипЗнч(Колонка) <> Тип("КолонкаСхемыЗапроса") Или Колонка.Псевдоним <> Имена[Индекс]
Или Выбор.Колонки.Найти(Имена[Индекс]) <> Колонка Или Колонка.Поля.Количество() <> 1
Или ТипЗнч(Колонка.Поля.Получить(0)) <> Тип("ВыражениеСхемыЗапроса")
Или Колонка.Поля.Получить(0) <> Новый ВыражениеСхемыЗапроса(Выражения[Индекс]) Тогда
ВызватьИсключение "Не совпали все имена, порядок и полные выражения собственного заголовка";
КонецЕсли;
ПроверитьСвойТип(Колонка.ТипЗначения, Тип(ИменаТипов[Индекс]));
КонецЦикла;
Возврат Выбор;
КонецФункции
Функция ПолучитьСвоиХарактеристики(Схема)
Если Не Схема.РежимКомпоновкиДанных Тогда
ВызватьИсключение "Собственная основная схема должна быть в режиме СКД";
КонецЕсли;
Выбор = ПроверитьСвойЗаголовок(Схема, "Справочник.УчебныеТовары85", "Товары",
СтрРазделить("Товар,Наименование", ","), СтрРазделить("Товары.Ссылка,Товары.Наименование", ","),
СтрРазделить("СправочникСсылка.УчебныеТовары85,Строка", ","));
Характеристики = Выбор.Характеристики;
Если ТипЗнч(Характеристики) <> Тип("ХарактеристикиКомпоновкиДанныхСхемыЗапроса") Тогда
ВызватьИсключение "Нужна настоящая собственная коллекция характеристик";
КонецЕсли;
Возврат Характеристики;
КонецФункции
Функция ПроверитьСвойЗапросИсточника(Текст, ЭтоВиды)
Если ТипЗнч(Текст) <> Тип("Строка") Или Текст = "" Тогда
ВызватьИсключение "В режиме запроса нужен непустой текст собственного источника";
КонецЕсли;
Источник = Новый СхемаЗапроса;
Источник.РежимКомпоновкиДанных = Ложь;
Источник.УстановитьТекстЗапроса(Текст);
Если ЭтоВиды Тогда
Выбор = ПроверитьСвойЗаголовок(Источник, "ПланВидовХарактеристик.УчебныеВиды85", "Виды",
СтрРазделить("Ключ,Имя,ТипЗначения", ","), СтрРазделить("Виды.Ссылка,Виды.Наименование,Виды.ТипЗначения", ","),
СтрРазделить("ПланВидовХарактеристикСсылка.УчебныеВиды85,Строка,ОписаниеТипов", ","));
Иначе
Выбор = ПроверитьСвойЗаголовок(Источник, "РегистрСведений.УчебныеЗначения85", "Значения",
СтрРазделить("Объект,Характеристика,ЗначениеХарактеристики", ","), СтрРазделить("Значения.Товар,Значения.Вид,Значения.Значение", ","),
СтрРазделить("СправочникСсылка.УчебныеТовары85,ПланВидовХарактеристикСсылка.УчебныеВиды85,Число", ","));
КонецЕсли;
Если Выбор.Операторы.Количество() <> 1 Тогда
ВызватьИсключение "Свой источник не должен иметь объединений";
КонецЕсли;
Возврат Источник.ПолучитьТекстЗапроса();
КонецФункции
Процедура ПроверитьСвоюХарактеристику(Схема, Режим, ЗапросВидов, ЗапросЗначений)
Характеристики = ПолучитьСвоиХарактеристики(Схема);
Если Режим = "Пусто" Тогда
Если Характеристики.Количество() <> 0 Тогда
ВызватьИсключение "Должна быть пуста только собственная коллекция характеристик";
КонецЕсли;
Возврат;
КонецЕсли;
Если Характеристики.Количество() <> 1 Тогда
ВызватьИсключение "В собственном описании нужен ровно один тип товаров";
КонецЕсли;
Элемент = Характеристики.Получить(0);
Если ТипЗнч(Элемент) <> Тип("ХарактеристикаКомпоновкиДанныхСхемыЗапроса")
Или Характеристики[0] <> Элемент Или Характеристики.Индекс(Элемент) <> 0 Тогда
ВызватьИсключение "Не совпали тип, индекс и текущий элемент собственной коллекции";
КонецЕсли;
ПроверитьСвойТип(Элемент.Тип, Тип("СправочникСсылка.УчебныеТовары85"));
Если ТипЗнч(Элемент.ВидыХарактеристикЗапрос) <> Тип("Строка") Или ТипЗнч(Элемент.ВидыХарактеристикТаблица) <> Тип("Строка")
Или ТипЗнч(Элемент.ЗначенияХарактеристикЗапрос) <> Тип("Строка") Или ТипЗнч(Элемент.ЗначенияХарактеристикТаблица) <> Тип("Строка")
Или ТипЗнч(Элемент.ПолеВида) <> Тип("Строка") Или ТипЗнч(Элемент.ПолеЗначения) <> Тип("Строка")
Или ТипЗнч(Элемент.ПолеИмени) <> Тип("Строка") Или ТипЗнч(Элемент.ПолеКлюча) <> Тип("Строка")
Или ТипЗнч(Элемент.ПолеОбъекта) <> Тип("Строка") Или ТипЗнч(Элемент.ПолеТипаЗначения) <> Тип("Строка") Тогда
ВызватьИсключение "Все десять readonly-параметров источников должны иметь тип Строка";
КонецЕсли;
Если Режим = "Таблицы" Тогда
Если НРег(Элемент.ВидыХарактеристикТаблица) <> НРег("ПланВидовХарактеристик.УчебныеВиды85")
Или НРег(Элемент.ЗначенияХарактеристикТаблица) <> НРег("РегистрСведений.УчебныеЗначения85")
Или Элемент.ВидыХарактеристикЗапрос <> "" Или Элемент.ЗначенияХарактеристикЗапрос <> ""
Или Элемент.ПолеКлюча <> "Ссылка" Или Элемент.ПолеИмени <> "Наименование"
Или Элемент.ПолеОбъекта <> "Товар" Или Элемент.ПолеВида <> "Вид" Или Элемент.ПолеЗначения <> "Значение" Тогда
ВызватьИсключение "Не совпало полное собственное описание источников-таблиц";
КонецЕсли;
ИначеЕсли Режим = "Запросы" Тогда
Если Элемент.ВидыХарактеристикТаблица <> "" Или Элемент.ЗначенияХарактеристикТаблица <> ""
Или Элемент.ПолеКлюча <> "Ключ" Или Элемент.ПолеИмени <> "Имя"
Или Элемент.ПолеОбъекта <> "Объект" Или Элемент.ПолеВида <> "Характеристика" Или Элемент.ПолеЗначения <> "ЗначениеХарактеристики" Тогда
ВызватьИсключение "Не совпали полные собственные имена полей источников-запросов";
КонецЕсли;
Если ПроверитьСвойЗапросИсточника(Элемент.ВидыХарактеристикЗапрос, Истина) <> ЗапросВидов
Или ПроверитьСвойЗапросИсточника(Элемент.ЗначенияХарактеристикЗапрос, Ложь) <> ЗапросЗначений Тогда
ВызватьИсключение "Не совпали полные канонические запросы источников характеристик";
КонецЕсли;
Иначе
ВызватьИсключение "Неизвестное собственное ожидание режима характеристик";
КонецЕсли;
Если Элемент.ПолеТипаЗначения <> "ТипЗначения" Тогда
ВызватьИсключение "Тип значения берётся из своего ПВХ, не из ссылки товара или числового ресурса";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьПовторныйРазборХарактеристик(Схема, Режим, ЗапросВидов, ЗапросЗначений)
Повторная = Новый СхемаЗапроса;
Повторная.РежимКомпоновкиДанных = Истина;
Повторная.УстановитьТекстЗапроса(Схема.ПолучитьТекстЗапроса());
ПроверитьСвоюХарактеристику(Повторная, Режим, ЗапросВидов, ЗапросЗначений);
КонецПроцедурыУчебныеХарактеристикиЗапроса85.Форма
Своя внешняя обработка УчебныеХарактеристикиЗапроса85 → управляемая Форма → Модуль
Полный отдельный модуль своей управляемой формы; модель схемы работает на сервере, здесь не запускался.
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере();
Сообщить("Собственное описание характеристик, изменение источников и полный повторный разбор проверены");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
УчебныеЗадачи.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Проверить точную платформу, отсутствие расширений/чужой транзакции и всю собственную модель. Регистр связывает конкретный товар с конкретным видом свойства; числовой ресурс согласован с допустимыми значениями ПВХ.
Разобрать два своих обычных запроса источников без выполнения. Виды дают Ключ/Имя/ТипЗначения; значения дают Объект/Характеристика/ЗначениеХарактеристики. Проверить каждую колонку, порядок, полное выражение и точный набор типов. Получить канонические тексты от СхемаЗапроса, не угадывая отступы.
Разобрать основную схему товаров в режиме СКД. Обычные колонки Товар и Наименование сохраняются на всех этапах. Коллекция Характеристики принадлежит ЗапросВыбораСхемыЗапроса; исходно она пуста.
Добавить описание для ОписаниеТипов собственного СправочникСсылка.УчебныеТовары85. Режим таблиц: виды — свой ПВХ, ключ Ссылка, имя Наименование, тип ТипЗначения; значения — свой регистр, объект Товар, вид Вид, значение Значение. Параметры текстов запросов пусты, поскольку имена таблиц заданы.
Проверить все11 readonly-свойств: Тип — описание ровно одного типа ссылки товара; остальные десять — строки с точными именами/пустыми текстами. Проверить Количество1, Получить(0), [], Индекс0 и совпадение возвращённого Добавить с текущим элементом. Сформировать текст и полностью проверить новую самостоятельную схему.
Изменить принимает индекс0 и ещё11 аргументов, возвращает текущее описание. Переключить обе таблицы на пустые имена и передать собственные канонические запросы; одновременно изменить имена полей на их псевдонимы Ключ/Имя и Объект/Характеристика/ЗначениеХарактеристики. Полученный элемент проверить заново, старое описание после Изменить не использовать.
В режиме запросов сверить все свойства, каждую ссылочную связь и полный канонический текст обоих источников. Отдельно сохранить Копия с этим описанием. Вернуть оригинал к таблицам через Изменить и повторно проверить все свойства и новый полный разбор.
Удалить принимает числовой индекс0, не объект. Проверить пустую коллекцию при сохранённых колонках товаров; восстановить новым Добавить и ещё раз проверить режим таблиц. Очистить только оригинал. Финально оригинал пуст, Копия продолжает хранить оба источника-запроса и все имена. Семь контрольных разборов плюс независимая сохраняемая копия.
Как проверить результат
Будущий результат: исходная схема после очистки имеет0 характеристик и2 обычные колонки. Копия имеет1 описание для собственного типа ссылки товара, таблицы-источники пусты, два запроса полностью соответствуют своим ПВХ/регистру. Имена Ключ, Имя, ТипЗначения, Объект, Характеристика, ЗначениеХарактеристики сохранены.
В режиме таблиц проверяются полные имена собственного ПВХ и регистра, поля Ссылка/Наименование/ТипЗначения и Товар/Вид/Значение, пустые тексты запросов. В режиме запросов проверяются не только непустые строки, но точные источники, выражения, типы и полный канонический текст. Ни элементы товаров/ПВХ, ни строки регистра не создаются.
Будущий отрицательный контроль вне опыта: в ожидании ПолеВида заменить Характеристика на Вид только для режима запросов. После сохранения/F7 до свежего собственного сеанса полная проверка должна отказать, хотя число характеристик1. Вернуть код и до нового сеанса снова сохранить/F7. Здесь контроль не исполнялся.
runtimeVerifiedScenarios=0. Static/native-проверки не являются выполнением в1С, отображением настроек СКД или получением настоящих значений товаров. Состояния описаны как будущие ручные проверки в собственной пустой базе.
Ожидаемый результат
Описаны обе стороны хранения характеристик и реальный жизненный цикл собственного описания СКД; все свойства проверяются после изменения и самостоятельного восстановления, без неизвестных входных объектов.
На что обратить внимание
Все свойства ХарактеристикаКомпоновкиДанныхСхемыЗапроса readonly. Для изменения используется Изменить коллекции, а не присваивание ПолеКлюча, Тип или другого свойства. После Изменить берём возвращённый/текущий элемент, после удаления старый элемент не читается.
Тип описания характеристики — тип ОБЪЕКТА, которому принадлежат свойства: ссылка своего товара. ТипЗначения в источнике видов — допустимый тип ЗНАЧЕНИЯ конкретного свойства. Ссылка вида свойства — третий отдельный тип. Их нельзя взаимозаменять.
Непустое имя таблицы имеет приоритет: соответствующий текст запроса игнорируется. Чтобы использовать запрос, имя таблицы нужно очистить и дать корректный текст; в уроке выполняется именно это. Присутствие сразу двух непустых параметров не заявляется совместным источником.
В native-описании аргумента ПолеТипаЗначения встречается указание на источник значений, но отдельное свойство и официальный пример 1С связывают его со СПИСКОМ видов характеристик. Здесь оно явно берётся из ПВХ/запроса видов. Пустая строка не используется как способ угадать числовой тип.
Схема описывает, откуда СКД сможет получать свойства, но не является выполненным отчётом и не хранит автоматически цену у товара. Здесь нет Запрос.Выполнить, записей, транзакций, сети, печати или рабочих баз. Обычные колонки и дочерние объекты копии принадлежат своим родительским схемам.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Выражения отбора СКД: найти текущий элемент, удалить цену, восстановить и очистить
В своей модели запроса разрешаем отбор по коду и цене. Ищем реальные элементы по их представлению, удаляем только цену числовым индексом, восстанавливаем её и очищаем исходную схему. Независимая копия сохраняет весь отбор; данные базы не читаются.
Где и как запускать
Полный серверный общий модуль УчебныеЗадачи своего нового стенда УчебныеПараметрыТаблицы85; BSL в1С не запускался.
Подготовка
Нужна НОВАЯ отдельная учебная база, не копия рабочей, на точно платформе8.5.1.1343. Имя конфигурации УчебныеПараметрыТаблицы85, совместимость Не использовать. Единственный независимый регистр сведений УчебнаяИстория85, В пределах секунды; измерение КодТовара Строка3, ресурс Цена Число12,2, без реквизитов/обработчиков. Остальных прикладных объектов, расширений, подписок и заданий нет. Записи не нужны.
Своя конфигурация → Общие → Общие модули → УчебныеЗадачи: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставьте весь основной модуль. Другие вручную создаваемые модули пусты.
Создайте свою внешнюю обработку УчебныйОтборЗапроса85, управляемую Форму и команду/кнопку Выполнить с действием Выполнить. Реквизиты не нужны. Полный отдельный модуль формы дан ниже; схема остаётся на сервере.
До опыта завершите прежний свой сеанс без транзакции, сохраните/F7: Конфигурация → Обновить конфигурацию базы данных. Только после успеха свежий собственный управляемый клиент и своя обработка. Здесь F7 и BSL не запускались.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойМинимальныйСтенд();
ПроверитьСвойРегистр();
Схема = Новый СхемаЗапроса;
Схема.РежимКомпоновкиДанных = Истина;
Схема.УстановитьТекстЗапроса("ВЫБРАТЬ История.КодТовара КАК КодТовара, История.Цена КАК Цена
|ИЗ РегистрСведений.УчебнаяИстория85 КАК История");
Отбор = ПолучитьСвойОтбор(Схема);
ПроверитьСвойОтбор(Схема, 0);
ПроверитьПовторныйРазборОтбора(Схема, 0);
Код = Отбор.Добавить("История.КодТовара");
Код.Псевдоним = "КодДляОтбора";
Код.ИспользоватьРеквизиты = Ложь;
Цена = Отбор.Добавить(Новый ВыражениеСхемыЗапроса("История.Цена"));
Цена.Псевдоним = "ЦенаДляОтбора";
Цена.ИспользоватьРеквизиты = Ложь;
ПроверитьСвойОтбор(Схема, 2);
ПроверитьПовторныйРазборОтбора(Схема, 2);
Если Отбор.Индекс(Цена) <> 1 Тогда
ВызватьИсключение "Перед удалением нужен фактический индекс своей цены";
КонецЕсли;
Отбор.Удалить(1);
ПроверитьСвойОтбор(Схема, 1);
ПроверитьПовторныйРазборОтбора(Схема, 1);
ВосстановленнаяЦена = Отбор.Добавить(Новый ВыражениеСхемыЗапроса("История.Цена"));
ВосстановленнаяЦена.Псевдоним = "ЦенаДляОтбора";
ВосстановленнаяЦена.ИспользоватьРеквизиты = Ложь;
ПроверитьСвойОтбор(Схема, 2);
ПроверитьПовторныйРазборОтбора(Схема, 2);
Копия = Новый СхемаЗапроса;
Копия.РежимКомпоновкиДанных = Истина;
Копия.УстановитьТекстЗапроса(Схема.ПолучитьТекстЗапроса());
ПроверитьСвойОтбор(Копия, 2);
Отбор.Очистить();
ПроверитьСвойОтбор(Схема, 0);
ПроверитьПовторныйРазборОтбора(Схема, 0);
ПроверитьСвойОтбор(Копия, 2);
Сообщить("Своя схема: выражений отбора0, обычных колонок2; самостоятельная копия: два полных выражения с признаком Ложь");
КонецПроцедуры
Процедура ПроверитьСвойМинимальныйСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 1 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойРегистр()
Если ПривилегированныйРежим() Тогда
ВызватьИсключение "Привилегированный режим для учебного разбора не нужен";
КонецЕсли;
МетаРегистр = Метаданные.РегистрыСведений.Найти("УчебнаяИстория85");
Если МетаРегистр = Неопределено Тогда
ВызватьИсключение "Нужен только собственный регистр УчебнаяИстория85";
КонецЕсли;
Если МетаРегистр.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый
Или МетаРегистр.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Секунда
Или МетаРегистр.Измерения.Количество() <> 1 Или МетаРегистр.Ресурсы.Количество() <> 1
Или МетаРегистр.Реквизиты.Количество() <> 0 Тогда
ВызватьИсключение "Нужен независимый периодический регистр с одним измерением и ресурсом";
КонецЕсли;
МетаКод = МетаРегистр.Измерения.Найти("КодТовара");
МетаЦена = МетаРегистр.Ресурсы.Найти("Цена");
Если МетаКод = Неопределено Или МетаЦена = Неопределено Тогда
ВызватьИсключение "Нужны свои КодТовара и Цена";
КонецЕсли;
КодТипы = МетаКод.Тип.Типы();
ЦенаТипы = МетаЦена.Тип.Типы();
Если КодТипы.Количество() <> 1 Или ЦенаТипы.Количество() <> 1 Тогда
ВызватьИсключение "Составные типы своих полей не подходят";
КонецЕсли;
Если КодТипы[0] <> Тип("Строка") Или ЦенаТипы[0] <> Тип("Число")
Или МетаКод.Тип.КвалификаторыСтроки.Длина <> 3
Или МетаЦена.Тип.КвалификаторыЧисла.Разрядность <> 12
Или МетаЦена.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 2 Тогда
ВызватьИсключение "Не совпали полные собственные типы полей";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьСвойОператор(Схема)
Если Не Схема.РежимКомпоновкиДанных Или Схема.ПакетЗапросов.Количество() <> 1 Тогда
ВызватьИсключение "Нужна одна собственная схема в режиме СКД";
КонецЕсли;
Выбор = Схема.ПакетЗапросов.Получить(0);
Если ТипЗнч(Выбор) <> Тип("ЗапросВыбораСхемыЗапроса") Или Выбор.Операторы.Количество() <> 1 Тогда
ВызватьИсключение "Нужен один собственный запрос выбора и оператор";
КонецЕсли;
Оператор = Выбор.Операторы.Получить(0);
Если ТипЗнч(Оператор) <> Тип("ОператорВыбратьСхемыЗапроса") Или Оператор.Источники.Количество() <> 1 Тогда
ВызватьИсключение "Нужен один собственный источник";
КонецЕсли;
Источник = Оператор.Источники.Получить(0);
Таблица = Источник.Источник;
Если ТипЗнч(Таблица) <> Тип("ТаблицаСхемыЗапроса")
Или НРег(Таблица.ИмяТаблицы) <> НРег("РегистрСведений.УчебнаяИстория85")
Или Таблица.Псевдоним <> "История" Тогда
ВызватьИсключение "Только свой физический источник История, без виртуальных или вложенных таблиц";
КонецЕсли;
Возврат Оператор;
КонецФункции
Функция ПолучитьСвойВыбор(Схема)
Оператор = ПолучитьСвойОператор(Схема);
Выбор = Схема.ПакетЗапросов.Получить(0);
Если Выбор.Колонки.Количество() <> 2 Или Оператор.ВыбираемыеПоля.Количество() <> 2 Тогда
ВызватьИсключение "Нужны ровно две собственные исходные колонки";
КонецЕсли;
Для Индекс = 0 По 1 Цикл
Колонка = Выбор.Колонки.Получить(Индекс);
Если Индекс = 0 Тогда
Имя = "КодТовара";
Выражение = Новый ВыражениеСхемыЗапроса("История.КодТовара");
ОжидаемыйТип = Тип("Строка");
Иначе
Имя = "Цена";
Выражение = Новый ВыражениеСхемыЗапроса("История.Цена");
ОжидаемыйТип = Тип("Число");
КонецЕсли;
Если ТипЗнч(Колонка) <> Тип("КолонкаСхемыЗапроса") Или Колонка.Псевдоним <> Имя
Или Выбор.Колонки.Найти(Имя) <> Колонка Или Колонка.Поля.Количество() <> 1
Или ТипЗнч(Колонка.Поля.Получить(0)) <> Тип("ВыражениеСхемыЗапроса")
Или Колонка.Поля.Получить(0) <> Выражение Тогда
ВызватьИсключение "Не совпали имя, порядок и полное выражение собственной колонки";
КонецЕсли;
Если ТипЗнч(Колонка.ТипЗначения) <> Тип("ОписаниеТипов") Тогда
ВызватьИсключение "Нужно описание типа собственной колонки";
КонецЕсли;
Типы = Колонка.ТипЗначения.Типы();
Если Типы.Количество() <> 1 Или Типы[0] <> ОжидаемыйТип Тогда
ВызватьИсключение "Не совпал полный набор типов собственной колонки";
КонецЕсли;
КонецЦикла;
Возврат Выбор;
КонецФункции
Функция ПолучитьСвойОтбор(Схема)
Выбор = ПолучитьСвойВыбор(Схема);
Оператор = Выбор.Операторы.Получить(0);
Отбор = Оператор.ВыраженияОтбораКомпоновкиДанных;
Если ТипЗнч(Отбор) <> Тип("ВыраженияОтбораКомпоновкиДанныхСхемыЗапроса") Тогда
ВызватьИсключение "Нужен собственный контейнер выражений отбора СКД оператора";
КонецЕсли;
Возврат Отбор;
КонецФункции
Процедура ПроверитьСвойОтбор(Схема, ОжидаемоеКоличество)
Отбор = ПолучитьСвойОтбор(Схема);
Если Отбор.Количество() <> ОжидаемоеКоличество Тогда
ВызватьИсключение "Не совпало полное число собственных выражений отбора СКД";
КонецЕсли;
Для Индекс = 0 По Отбор.Количество() - 1 Цикл
Элемент = Отбор.Получить(Индекс);
Если Индекс = 0 Тогда
Ожидаемое = Новый ВыражениеСхемыЗапроса("История.КодТовара");
Псевдоним = "КодДляОтбора";
Иначе
Ожидаемое = Новый ВыражениеСхемыЗапроса("История.Цена");
Псевдоним = "ЦенаДляОтбора";
КонецЕсли;
Если ТипЗнч(Элемент) <> Тип("ВыражениеОтбораКомпоновкиДанныхСхемыЗапроса")
Или ТипЗнч(Элемент.Выражение) <> Тип("ВыражениеСхемыЗапроса") Или Элемент.Выражение <> Ожидаемое
Или ТипЗнч(Элемент.Псевдоним) <> Тип("Строка") Или Элемент.Псевдоним <> Псевдоним
Или ТипЗнч(Элемент.ИспользоватьРеквизиты) <> Тип("Булево") Или Элемент.ИспользоватьРеквизиты
Или Отбор.Индекс(Элемент) <> Индекс Или Отбор[Индекс] <> Элемент Тогда
ВызватьИсключение "Не совпали полный тип, выражение, псевдоним, признак и индекс собственного отбора";
КонецЕсли;
Представление = Строка(Элемент.Выражение);
Если Представление = "" Или Отбор.Найти(Представление) <> Элемент Тогда
ВызватьИсключение "Найти по фактическому полному представлению должен вернуть именно текущий элемент";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьПовторныйРазборОтбора(Схема, ОжидаемоеКоличество)
Текст = Схема.ПолучитьТекстЗапроса();
Если ТипЗнч(Текст) <> Тип("Строка") Или Текст = "" Тогда
ВызватьИсключение "Нужен реальный сформированный текст собственной схемы";
КонецЕсли;
Повторная = Новый СхемаЗапроса;
Повторная.РежимКомпоновкиДанных = Истина;
Повторная.УстановитьТекстЗапроса(Текст);
ПроверитьСвойОтбор(Повторная, ОжидаемоеКоличество);
КонецПроцедурыУчебныйОтборЗапроса85.Форма
Своя внешняя обработка УчебныйОтборЗапроса85 → управляемая Форма → Модуль
Полный отдельный модуль своей управляемой формы; схемы работают на сервере, здесь не исполнялся.
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере();
Сообщить("Поиск, удаление, очистка и независимая копия своего отбора СКД проверены");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
УчебныеЗадачи.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Включить режим СКД до разбора своего обычного текста. Проверить один физический источник История, две колонки КодТовара и Цена, их полный порядок/выражения/типы. Контейнер отбора берётся именно у своего ОператорВыбратьСхемыЗапроса, не из параметров виртуальной таблицы.
Исходный список пуст. Добавить История.КодТовара строкой, а История.Цена объектом ВыражениеСхемыЗапроса. Назначить КодДляОтбора и ЦенаДляОтбора; в ЭТИХ элементах ИспользоватьРеквизиты поддерживает запись, поэтому явно установить Ложь. Свойство Выражение readonly: его задаёт Добавить.
Для обоих элементов проверить точный тип, полное выражение, строковый псевдоним, Булево Ложь, Индекс, Получить и []. Положительный Найти получает фактическое полное Строка(Элемент.Выражение), не один псевдоним и не произвольную строку. Для ВыражениеСхемыЗапроса установленная справка явно документирует строковое преобразование и сравнение по строке; найденный объект должен совпасть с текущим элементом.
Проверить фактический индекс цены1 и вызвать Удалить(1). Остаться должен код0 с прежним полным выражением/псевдонимом/признаком. Удалённую Цена больше не читать. Добавить новый элемент цены по тому же собственному выражению и восстановить весь исходный список.
После каждого состояния 0→2→1→2→0 сформировать текст и заново разобрать НОВОЙ схемой в режиме СКД: пять полных контрольных разборов, не поиск подстроки в тексте. Каждый раз также проверяются неизменные обычные колонки.
Перед финальной очисткой сохранить независимую Копия со всеми двумя выражениями. Очистить только свой исходный контейнер. Оригинал пуст, копия хранит код и цену со всеми ожидаемыми свойствами. Дочерние элементы между схемами не переносятся.
Как проверить результат
Будущий результат: исходная схема после очистки имеет0 выражений отбора и2 обычные колонки. Копия имеет2 выражения в порядке История.КодТовара/КодДляОтбора и История.Цена/ЦенаДляОтбора, оба ИспользоватьРеквизиты=Ложь. Никаких строк регистра не прочитано и не записано.
Будущий отрицательный контроль вне опыта: поменять только ожидаемое полное выражение цены в ПроверитьСвойОтбор на История.КодТовара. После сохранения/F7 до нового собственного сеанса проверка должна отказать, хотя число элементов2. Вернуть код и до нового сеанса снова сохранить/F7. Здесь контроль не выполнялся.
runtimeVerifiedScenarios=0: структуры, форма и сериализация в1С не исполнялись. Сохранение описаний фильтра не доказывает фактический результат СКД-процессора, интерфейс настройки или права на реальные данные.
Ожидаемый результат
Удаление и очистка затрагивают только принадлежащую своему оператору модель отбора; полные самостоятельные разборы и копия проверяют смысл выражений, а не только их количество.
На что обратить внимание
У выражения отбора Выражение Только чтение, ИспользоватьРеквизиты Чтение и запись. Не путать этот тип с ПолеВыбораКомпоновкиДанныхСхемыЗапроса, где одноимённый признак в установленной справке readonly.
Удалить принимает Число, не элемент. Индекс принимает реальный элемент. Найти принимает строку представления; формат не составляется вручную. После удаления/очистки старые описания не читаются.
Эта коллекция описывает доступные выражения отбора СКД, но не устанавливает сама условие Цена>100 и не выбирает данные. Источник, две обычные колонки и поля выбора СКД — отдельные части модели.
Запрос.Выполнить, транзакции, записи, сеть и рабочие конфигурации здесь отсутствуют. Все классы схемы работают в серверном модуле только своей новой базы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.