ТаблицаСхемыЗапроса

Типы · QuerySchemaTable

Содержит описание таблицы, из которой получаются данные запроса. Соответствует таблице, которая находится в выражении ИЗ языка запросов.

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

ТаблицаСхемыЗапроса (QuerySchemaTable)

ТаблицаСхемыЗапроса (QuerySchemaTable)

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

Свойства:
ДоступныеПоля (AvailableFields)
ИмяТаблицы (TableName)
Параметры (Parameters)
ПараметрыКомпоновкиДанных (DataCompositionParameters)
Псевдоним (Alias)

Описание:

Содержит описание таблицы, из которой получаются данные запроса.
Соответствует таблице, которая находится в выражении ИЗ языка запросов.

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

Сервер, толстый клиент, внешнее соединение.

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

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

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

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

Характеристики товаров СКД: свой ПВХ, регистр, таблицы и запросы с полным восстановлением

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

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

Полный серверный общий модуль УчебныеЗадачи нового собственного стенда УчебныеХарактеристики85; только метаданные и модель в памяти, запуск в1С не проверен.

Подготовка

  1. Создайте НОВУЮ отдельную учебную базу, не копию рабочей, на точно8.5.1.1343; имя конфигурации УчебныеХарактеристики85, совместимость Не использовать. Рабочие УТ/КА2/УНФ/БП и их расширения не меняйте. Нужны ровно три прикладных объекта ниже, без подписок, расширений, регламентных заданий или иных объектов.

  2. Справочники → УчебныеТовары85: неиерархический, код Строка3, наименование40, без владельцев, реквизитов и табличных частей. Автонумерация выключена. Модули объекта/менеджера пусты; элементы не создавайте.

  3. Планы видов характеристик → УчебныеВиды85: неиерархический, код Строка3, наименование40. В свойстве Тип разрешите только Число12,2; дополнительные значения характеристик не назначайте. Без реквизитов, табличных частей и предопределённых видов; модули пусты. Это допустимые ТИПЫ значений, не тип ссылки на вид свойства.

  4. Регистры сведений → УчебныеЗначения85: независимый, непериодический. Измерение Товар: СправочникСсылка.УчебныеТовары85; измерение Вид: ПланВидовХарактеристикСсылка.УчебныеВиды85; ресурс Значение: Число12,2. Реквизитов и обработчиков нет. Записи не создавайте: данный урок редактирует модель запроса, а не значения характеристик.

  5. Общие → Общие модули → УчебныеЗадачи: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставьте весь основной код. Создайте свою внешнюю обработку УчебныеХарактеристикиЗапроса85, управляемую Форму и команду/кнопку Выполнить с действием Выполнить, без реквизитов. Полный отдельный модуль формы дан ниже.

  6. Вне опыта завершите прежний свой сеанс без транзакции, сохраните свою конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (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 → управляемая Форма → Модуль

Полный отдельный модуль своей управляемой формы; модель схемы работает на сервере, здесь не запускался.

&НаКлиенте
Процедура Выполнить(Команда)
    ВыполнитьНаСервере();
    Сообщить("Собственное описание характеристик, изменение источников и полный повторный разбор проверены");
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
    УчебныеЗадачи.ВыполнитьПример();
КонецПроцедуры

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

  1. Проверить точную платформу, отсутствие расширений/чужой транзакции и всю собственную модель. Регистр связывает конкретный товар с конкретным видом свойства; числовой ресурс согласован с допустимыми значениями ПВХ.

  2. Разобрать два своих обычных запроса источников без выполнения. Виды дают Ключ/Имя/ТипЗначения; значения дают Объект/Характеристика/ЗначениеХарактеристики. Проверить каждую колонку, порядок, полное выражение и точный набор типов. Получить канонические тексты от СхемаЗапроса, не угадывая отступы.

  3. Разобрать основную схему товаров в режиме СКД. Обычные колонки Товар и Наименование сохраняются на всех этапах. Коллекция Характеристики принадлежит ЗапросВыбораСхемыЗапроса; исходно она пуста.

  4. Добавить описание для ОписаниеТипов собственного СправочникСсылка.УчебныеТовары85. Режим таблиц: виды — свой ПВХ, ключ Ссылка, имя Наименование, тип ТипЗначения; значения — свой регистр, объект Товар, вид Вид, значение Значение. Параметры текстов запросов пусты, поскольку имена таблиц заданы.

  5. Проверить все11 readonly-свойств: Тип — описание ровно одного типа ссылки товара; остальные десять — строки с точными именами/пустыми текстами. Проверить Количество1, Получить(0), [], Индекс0 и совпадение возвращённого Добавить с текущим элементом. Сформировать текст и полностью проверить новую самостоятельную схему.

  6. Изменить принимает индекс0 и ещё11 аргументов, возвращает текущее описание. Переключить обе таблицы на пустые имена и передать собственные канонические запросы; одновременно изменить имена полей на их псевдонимы Ключ/Имя и Объект/Характеристика/ЗначениеХарактеристики. Полученный элемент проверить заново, старое описание после Изменить не использовать.

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

  8. Удалить принимает числовой индекс0, не объект. Проверить пустую коллекцию при сохранённых колонках товаров; восстановить новым Добавить и ещё раз проверить режим таблиц. Очистить только оригинал. Финально оригинал пуст, Копия продолжает хранить оба источника-запроса и все имена. Семь контрольных разборов плюс независимая сохраняемая копия.

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

  1. Будущий результат: исходная схема после очистки имеет0 характеристик и2 обычные колонки. Копия имеет1 описание для собственного типа ссылки товара, таблицы-источники пусты, два запроса полностью соответствуют своим ПВХ/регистру. Имена Ключ, Имя, ТипЗначения, Объект, Характеристика, ЗначениеХарактеристики сохранены.

  2. В режиме таблиц проверяются полные имена собственного ПВХ и регистра, поля Ссылка/Наименование/ТипЗначения и Товар/Вид/Значение, пустые тексты запросов. В режиме запросов проверяются не только непустые строки, но точные источники, выражения, типы и полный канонический текст. Ни элементы товаров/ПВХ, ни строки регистра не создаются.

  3. Будущий отрицательный контроль вне опыта: в ожидании ПолеВида заменить Характеристика на Вид только для режима запросов. После сохранения/F7 до свежего собственного сеанса полная проверка должна отказать, хотя число характеристик1. Вернуть код и до нового сеанса снова сохранить/F7. Здесь контроль не исполнялся.

  4. runtimeVerifiedScenarios=0. Static/native-проверки не являются выполнением в1С, отображением настроек СКД или получением настоящих значений товаров. Состояния описаны как будущие ручные проверки в собственной пустой базе.

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

Описаны обе стороны хранения характеристик и реальный жизненный цикл собственного описания СКД; все свойства проверяются после изменения и самостоятельного восстановления, без неизвестных входных объектов.

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

  1. Все свойства ХарактеристикаКомпоновкиДанныхСхемыЗапроса readonly. Для изменения используется Изменить коллекции, а не присваивание ПолеКлюча, Тип или другого свойства. После Изменить берём возвращённый/текущий элемент, после удаления старый элемент не читается.

  2. Тип описания характеристики — тип ОБЪЕКТА, которому принадлежат свойства: ссылка своего товара. ТипЗначения в источнике видов — допустимый тип ЗНАЧЕНИЯ конкретного свойства. Ссылка вида свойства — третий отдельный тип. Их нельзя взаимозаменять.

  3. Непустое имя таблицы имеет приоритет: соответствующий текст запроса игнорируется. Чтобы использовать запрос, имя таблицы нужно очистить и дать корректный текст; в уроке выполняется именно это. Присутствие сразу двух непустых параметров не заявляется совместным источником.

  4. В native-описании аргумента ПолеТипаЗначения встречается указание на источник значений, но отдельное свойство и официальный пример 1С связывают его со СПИСКОМ видов характеристик. Здесь оно явно берётся из ПВХ/запроса видов. Пустая строка не используется как способ угадать числовой тип.

  5. Схема описывает, откуда СКД сможет получать свойства, но не является выполненным отчётом и не хранит автоматически цену у товара. Здесь нет Запрос.Выполнить, записей, транзакций, сети, печати или рабочих баз. Обычные колонки и дочерние объекты копии принадлежат своим родительским схемам.

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

Выражения отбора СКД: найти текущий элемент, удалить цену, восстановить и очистить

В своей модели запроса разрешаем отбор по коду и цене. Ищем реальные элементы по их представлению, удаляем только цену числовым индексом, восстанавливаем её и очищаем исходную схему. Независимая копия сохраняет весь отбор; данные базы не читаются.

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

Полный серверный общий модуль УчебныеЗадачи своего нового стенда УчебныеПараметрыТаблицы85; BSL в1С не запускался.

Подготовка

  1. Нужна НОВАЯ отдельная учебная база, не копия рабочей, на точно платформе8.5.1.1343. Имя конфигурации УчебныеПараметрыТаблицы85, совместимость Не использовать. Единственный независимый регистр сведений УчебнаяИстория85, В пределах секунды; измерение КодТовара Строка3, ресурс Цена Число12,2, без реквизитов/обработчиков. Остальных прикладных объектов, расширений, подписок и заданий нет. Записи не нужны.

  2. Своя конфигурация → Общие → Общие модули → УчебныеЗадачи: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставьте весь основной модуль. Другие вручную создаваемые модули пусты.

  3. Создайте свою внешнюю обработку УчебныйОтборЗапроса85, управляемую Форму и команду/кнопку Выполнить с действием Выполнить. Реквизиты не нужны. Полный отдельный модуль формы дан ниже; схема остаётся на сервере.

  4. До опыта завершите прежний свой сеанс без транзакции, сохраните/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 → управляемая Форма → Модуль

Полный отдельный модуль своей управляемой формы; схемы работают на сервере, здесь не исполнялся.

&НаКлиенте
Процедура Выполнить(Команда)
    ВыполнитьНаСервере();
    Сообщить("Поиск, удаление, очистка и независимая копия своего отбора СКД проверены");
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
    УчебныеЗадачи.ВыполнитьПример();
КонецПроцедуры

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

  1. Включить режим СКД до разбора своего обычного текста. Проверить один физический источник История, две колонки КодТовара и Цена, их полный порядок/выражения/типы. Контейнер отбора берётся именно у своего ОператорВыбратьСхемыЗапроса, не из параметров виртуальной таблицы.

  2. Исходный список пуст. Добавить История.КодТовара строкой, а История.Цена объектом ВыражениеСхемыЗапроса. Назначить КодДляОтбора и ЦенаДляОтбора; в ЭТИХ элементах ИспользоватьРеквизиты поддерживает запись, поэтому явно установить Ложь. Свойство Выражение readonly: его задаёт Добавить.

  3. Для обоих элементов проверить точный тип, полное выражение, строковый псевдоним, Булево Ложь, Индекс, Получить и []. Положительный Найти получает фактическое полное Строка(Элемент.Выражение), не один псевдоним и не произвольную строку. Для ВыражениеСхемыЗапроса установленная справка явно документирует строковое преобразование и сравнение по строке; найденный объект должен совпасть с текущим элементом.

  4. Проверить фактический индекс цены1 и вызвать Удалить(1). Остаться должен код0 с прежним полным выражением/псевдонимом/признаком. Удалённую Цена больше не читать. Добавить новый элемент цены по тому же собственному выражению и восстановить весь исходный список.

  5. После каждого состояния 0→2→1→2→0 сформировать текст и заново разобрать НОВОЙ схемой в режиме СКД: пять полных контрольных разборов, не поиск подстроки в тексте. Каждый раз также проверяются неизменные обычные колонки.

  6. Перед финальной очисткой сохранить независимую Копия со всеми двумя выражениями. Очистить только свой исходный контейнер. Оригинал пуст, копия хранит код и цену со всеми ожидаемыми свойствами. Дочерние элементы между схемами не переносятся.

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

  1. Будущий результат: исходная схема после очистки имеет0 выражений отбора и2 обычные колонки. Копия имеет2 выражения в порядке История.КодТовара/КодДляОтбора и История.Цена/ЦенаДляОтбора, оба ИспользоватьРеквизиты=Ложь. Никаких строк регистра не прочитано и не записано.

  2. Будущий отрицательный контроль вне опыта: поменять только ожидаемое полное выражение цены в ПроверитьСвойОтбор на История.КодТовара. После сохранения/F7 до нового собственного сеанса проверка должна отказать, хотя число элементов2. Вернуть код и до нового сеанса снова сохранить/F7. Здесь контроль не выполнялся.

  3. runtimeVerifiedScenarios=0: структуры, форма и сериализация в1С не исполнялись. Сохранение описаний фильтра не доказывает фактический результат СКД-процессора, интерфейс настройки или права на реальные данные.

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

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

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

  1. У выражения отбора Выражение Только чтение, ИспользоватьРеквизиты Чтение и запись. Не путать этот тип с ПолеВыбораКомпоновкиДанныхСхемыЗапроса, где одноимённый признак в установленной справке readonly.

  2. Удалить принимает Число, не элемент. Индекс принимает реальный элемент. Найти принимает строку представления; формат не составляется вручную. После удаления/очистки старые описания не читаются.

  3. Эта коллекция описывает доступные выражения отбора СКД, но не устанавливает сама условие Цена>100 и не выбирает данные. Источник, две обычные колонки и поля выбора СКД — отдельные части модели.

  4. Запрос.Выполнить, транзакции, записи, сеть и рабочие конфигурации здесь отсутствуют. Все классы схемы работают в серверном модуле только своей новой базы.

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

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

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

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

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