ПараметрыКомпоновкиДанныхТаблицыСхемыЗапроса

Типы · QuerySchemaTableDataCompositionParameters

Содержит коллекцию параметров компоновки данных схемы запроса. Количество параметров и тип каждого из них зависит от самой таблицы. Каждый параметр может быть одного из следующих типов: ПараметрТаблицыСхемыЗапроса - в таком случае параметр компоновки может принимать значение только параметра, указанного с символом "", например, Парам; ВыраженияОтбораКомпоновкиДанныхСхемыЗапроса - в таком случае параметр представляет собой набор параметров, каждый из которых может принимать либо значение обычного параметра (имя которого указано с символом "", например, Парам), либо имя доступного поля данной таблицы схемы запроса. При использовании поля таблицы схемы запроса параметр может содержать признак ИспользоватьРеквизиты и псевдоним.

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

ПараметрыКомпоновкиДанныхТаблицыСхемыЗапроса (QuerySchemaTableDataCompositionParameters)

ПараметрыКомпоновкиДанныхТаблицыСхемыЗапроса (QuerySchemaTableDataCompositionParameters)

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

Элементы коллекции:
ВыраженияОтбораКомпоновкиДанныхСхемыЗапроса, ПараметрыТаблицыСхемыЗапроса
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются параметры компоновки данных таблицы.
Возможно обращение к параметру компоновки данных таблицы посредством оператора [...]. В качестве аргумента передается индекс.

Методы:
Индекс (IndexOf)
Количество (Count)
Получить (Get)

Описание:

Содержит коллекцию параметров компоновки данных схемы запроса. Количество параметров и тип каждого из них зависит от самой таблицы. Каждый параметр может быть одного из следующих типов:
ПараметрТаблицыСхемыЗапроса - в таком случае параметр компоновки может принимать значение только параметра, указанного с символом "", например, Парам;

ВыраженияОтбораКомпоновкиДанныхСхемыЗапроса - в таком случае параметр представляет собой набор параметров, каждый из которых может принимать либо значение обычного параметра (имя которого указано с символом "", например, Парам), либо имя доступного поля данной таблицы схемы запроса. При использовании поля таблицы схемы запроса параметр может содержать признак ИспользоватьРеквизиты и псевдоним.

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

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

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

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

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

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

Схема запроса: обычные параметры среза и отдельные параметры СКД, с повторным разбором

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

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

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

Подготовка

  1. Создайте НОВУЮ отдельную пустую учебную базу, не копию рабочей, точно на8.5.1.1343. Имя конфигурации УчебныеПараметрыТаблицы85, совместимость Не использовать. Нет справочников, документов, прочих регистров, расширений базы/сеанса, подписок и фоновых заданий; другие модули вручную пусты. Проверки не умеют прочитать текст этих модулей.

  2. Регистры сведений → Добавить → УчебнаяИстория85. Режим записи Независимый, периодичность В пределах секунды. Одно измерение КодТовара: Строка, длина3. Один ресурс Цена: Число12,2. Без реквизитов, регистраторов и обработчиков. СрезПоследних доступен именно периодическому регистру; непериодический регистр не заменяет эту подготовку. Записи для этой задачи вообще не нужны.

  3. Общие → Общие модули → УчебныеЗадачи. Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь; клиенты и внешнее соединение выключены, повторное использование выключено. Вставьте ВЕСЬ основной модуль, включая функции и процедуры после ВыполнитьПример.

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

  5. После всей подготовки сохраните свою конфигурацию и завершите прежний свой сеанс без активной транзакции. В Конфигураторе: Конфигурация → Обновить конфигурацию базы данных (F7); дождитесь успеха только своей учебной конфигурации. Затем свежий собственный сеанс и кнопка Выполнить. Здесь 1С и F7 не запускались.

  6. СхемаЗапроса разбирает описание, а не выполняет запрос. Здесь нет Новый Запрос, Выполнить запроса, Прочитать, Записать, транзакций, файлов и сети. Подготовленные метаданные дают таблицу и типы полей, но не служат доказательством каких-либо цен или строк базы.

Процедура ВыполнитьПример() Экспорт
    ПроверитьСвойМинимальныйСтенд();
    ПроверитьСвойРегистр();
    Схема = Новый СхемаЗапроса;
    Схема.РежимКомпоновкиДанных = Истина;
    ИсходныйТекст = "ВЫБРАТЬ Срез.КодТовара КАК КодТовара, Срез.Цена КАК Цена
    |ИЗ РегистрСведений.УчебнаяИстория85.СрезПоследних(&ДатаЗапроса, КодТовара = &КодТовара) КАК Срез";
    Схема.УстановитьТекстЗапроса(ИсходныйТекст);
    Таблица = ПолучитьСвоюТаблицу(Схема);
    ПроверитьСвоиОбычныеПараметры(Таблица, "ДатаЗапроса");
    Параметры = Таблица.Параметры;
    ПервыйОбычный = Параметры.Получить(0);
    ПервыйОбычный.Выражение = Новый ВыражениеСхемыЗапроса("&ДатаРасчета");
    ПроверитьСвоиОбычныеПараметры(Таблица, "ДатаРасчета");
    ПараметрыСКД = Таблица.ПараметрыКомпоновкиДанных;
    Если ПараметрыСКД.Количество() <> 2 Тогда
        ВызватьИсключение "У своей виртуальной таблицы нужны две позиции параметров СКД";
    КонецЕсли;
    ПериодСКД = ПараметрыСКД.Получить(0);
    ОтборСКД = ПараметрыСКД.Получить(1);
    Если ТипЗнч(ПериодСКД) <> Тип("ПараметрТаблицыСхемыЗапроса")
        Или ТипЗнч(ОтборСКД) <> Тип("ВыраженияОтбораКомпоновкиДанныхСхемыЗапроса") Тогда
        ВызватьИсключение "Нельзя считать все параметры СКД одинаковыми объектами";
    КонецЕсли;
    Если ОтборСКД.Количество() <> 0 Тогда
        ВызватьИсключение "Свой исходный текст не содержит выражений отбора СКД";
    КонецЕсли;
    ПериодСКД.Выражение = Новый ВыражениеСхемыЗапроса("&ДатаОтчета");
    КодСКД = ОтборСКД.Добавить("КодТовара");
    КодСКД.Псевдоним = "КодДляОтбора";
    КодСКД.ИспользоватьРеквизиты = Ложь;
    ПроверитьСвоиПараметрыСКД(Таблица);
    ПроверитьСвоиОбычныеПараметры(Таблица, "ДатаРасчета");
    СформированныйТекст = Схема.ПолучитьТекстЗапроса();
    Если ТипЗнч(СформированныйТекст) <> Тип("Строка") Или СтрНайти(СформированныйТекст, "{") = 0 Тогда
        ВызватьИсключение "Схема должна сформировать реальный текст с расширением СКД";
    КонецЕсли;
    ПовторнаяСхема = Новый СхемаЗапроса;
    ПовторнаяСхема.РежимКомпоновкиДанных = Истина;
    ПовторнаяСхема.УстановитьТекстЗапроса(СформированныйТекст);
    ПовторнаяТаблица = ПолучитьСвоюТаблицу(ПовторнаяСхема);
    ПроверитьСвоиОбычныеПараметры(ПовторнаяТаблица, "ДатаРасчета");
    ПроверитьСвоиПараметрыСКД(ПовторнаяТаблица);
    ПервыйОбычный.Выражение = Новый ВыражениеСхемыЗапроса("&ДатаЗапроса");
    ПроверитьСвоиОбычныеПараметры(Таблица, "ДатаЗапроса");
    ПроверитьСвоиПараметрыСКД(Таблица);
    ПроверитьСвоиОбычныеПараметры(ПовторнаяТаблица, "ДатаРасчета");
    ПроверитьСвоиПараметрыСКД(ПовторнаяТаблица);
    Если ИсходныйТекст <> "ВЫБРАТЬ Срез.КодТовара КАК КодТовара, Срез.Цена КАК Цена
    |ИЗ РегистрСведений.УчебнаяИстория85.СрезПоследних(&ДатаЗапроса, КодТовара = &КодТовара) КАК Срез" Тогда
        ВызватьИсключение "Свой исходный строковый текст не должен измениться";
    КонецЕсли;
    Сообщить(СформированныйТекст);
    Сообщить("Обычных параметров2; позиций СКД2; поле отбора1; повторный разбор и независимость схем проверены");
КонецПроцедуры

Процедура ПроверитьСвойМинимальныйСтенд()
    Если Метаданные.Справочники.Количество() <> 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.СрезПоследних")
        Или Таблица.Псевдоним <> "Срез" Тогда
        ВызватьИсключение "Не совпали своя таблица и псевдоним";
    КонецЕсли;
    Для Каждого ИмяПоля Из СтрРазделить("КодТовара,Цена", ",") Цикл
        Поле = Таблица.ДоступныеПоля.Найти(ИмяПоля);
        Если ТипЗнч(Поле) <> Тип("ДоступноеПолеСхемыЗапроса") Тогда
            ВызватьИсключение "Не найдено собственное доступное поле " + ИмяПоля;
        КонецЕсли;
        Если ИмяПоля = "КодТовара" Тогда
            ОжидаемыйТип = Тип("Строка");
        Иначе
            ОжидаемыйТип = Тип("Число");
        КонецЕсли;
        Если Не Поле.ТипЗначения.СодержитТип(ОжидаемыйТип) Тогда
            ВызватьИсключение "Не совпал тип собственного доступного поля " + Поле.Имя;
        КонецЕсли;
    КонецЦикла;
    Возврат Таблица;
КонецФункции

Процедура ПроверитьСвоиОбычныеПараметры(Таблица, ДатаИмя)
    Параметры = Таблица.Параметры;
    Если ТипЗнч(Параметры) <> Тип("ПараметрыТаблицыСхемыЗапроса") Или Параметры.Количество() <> 2 Тогда
        ВызватьИсключение "Нужны два обычных параметра собственного СрезПоследних";
    КонецЕсли;
    Для Индекс = 0 По 1 Цикл
        Элемент = Параметры.Получить(Индекс);
        Если ТипЗнч(Элемент) <> Тип("ПараметрТаблицыСхемыЗапроса") Или Параметры.Индекс(Элемент) <> Индекс Тогда
            ВызватьИсключение "Не совпали тип и индекс собственного обычного параметра";
        КонецЕсли;
        Если Индекс = 0 Тогда
            Текст = "&" + ДатаИмя;
        Иначе
            Текст = "КодТовара = &КодТовара";
        КонецЕсли;
        Ожидаемое = Новый ВыражениеСхемыЗапроса(Текст);
        Если ТипЗнч(Элемент.Выражение) <> Тип("ВыражениеСхемыЗапроса") Или Элемент.Выражение <> Ожидаемое Тогда
            ВызватьИсключение "Не совпало полное выражение обычного параметра";
        КонецЕсли;
        Найденный = Параметры.Найти(Строка(Элемент.Выражение));
        Если Найденный <> Элемент Или Параметры.Получить(Параметры.Индекс(Найденный)) <> Элемент Тогда
            ВызватьИсключение "Поиск форматированного выражения должен вернуть тот же реальный элемент";
        КонецЕсли;
    КонецЦикла;
    Если Параметры.Количество() <> 2 Тогда
        ВызватьИсключение "Обход не должен расширять собственные обычные параметры";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьСвоиПараметрыСКД(Таблица)
    ПараметрыСКД = Таблица.ПараметрыКомпоновкиДанных;
    Если ТипЗнч(ПараметрыСКД) <> Тип("ПараметрыКомпоновкиДанныхТаблицыСхемыЗапроса") Или ПараметрыСКД.Количество() <> 2 Тогда
        ВызватьИсключение "Нужны два возможных параметра СКД собственной таблицы";
    КонецЕсли;
    ПериодСКД = ПараметрыСКД.Получить(0);
    ОтборСКД = ПараметрыСКД.Получить(1);
    Если ТипЗнч(ПериодСКД) <> Тип("ПараметрТаблицыСхемыЗапроса")
        Или ТипЗнч(ОтборСКД) <> Тип("ВыраженияОтбораКомпоновкиДанныхСхемыЗапроса") Тогда
        ВызватьИсключение "Период — одиночный параметр, отбор — отдельная коллекция выражений";
    КонецЕсли;
    Если ПараметрыСКД.Индекс(ПериодСКД) <> 0 Или ПараметрыСКД.Индекс(ОтборСКД) <> 1 Тогда
        ВызватьИсключение "Не совпали индексы разных типов параметров СКД";
    КонецЕсли;
    ОжидаемыйПериод = Новый ВыражениеСхемыЗапроса("&ДатаОтчета");
    Если ПериодСКД.Выражение <> ОжидаемыйПериод Или ОтборСКД.Количество() <> 1 Тогда
        ВызватьИсключение "Не совпал собственный период или число выражений СКД";
    КонецЕсли;
    КодСКД = ОтборСКД.Получить(0);
    ОжидаемыйКод = Новый ВыражениеСхемыЗапроса("КодТовара");
    Если ТипЗнч(КодСКД) <> Тип("ВыражениеОтбораКомпоновкиДанныхСхемыЗапроса")
        Или КодСКД.Выражение <> ОжидаемыйКод Или КодСКД.Псевдоним <> "КодДляОтбора"
        Или ТипЗнч(КодСКД.ИспользоватьРеквизиты) <> Тип("Булево") Или КодСКД.ИспользоватьРеквизиты
        Или ОтборСКД.Индекс(КодСКД) <> 0 Тогда
        ВызватьИсключение "Не совпали все свойства собственного поля отбора СКД";
    КонецЕсли;
КонецПроцедуры
УчебныеПараметры85.Форма

Своя внешняя обработка УчебныеПараметры85 → управляемая Форма → Модуль

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

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

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

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

  1. Включить РежимКомпоновкиДанных ДО УстановитьТекстЗапроса. Получить настоящий ТаблицаСхемыЗапроса через пакет→запрос выбора→оператор→источник. Сохранить обе родительские схемы в переменных на всё время работы с дочерними объектами; источник не удаляется и между схемами не переносится.

  2. Проверить своё имя виртуальной таблицы, псевдоним Срез и доступные КодТовара/Цена со строковым и числовым типами. ДоступныеПоля не являются строками среза и не читают цены. Параметры и ПараметрыКомпоновкиДанных — разные readonly-коллекции одного собственного источника.

  3. Обычных параметров два: индекс0 — &ДатаЗапроса, индекс1 — КодТовара = &КодТовара. Для каждого проверяются точный тип, полное выражение, Индекс и поиск по Строка(Выражение). Найти принимает строковое выражение с учётом форматирования, а не имя регистра, индекс или объект ВыражениеСхемыЗапроса.

  4. Заменить Выражение первого обычного параметра новым ВыражениеСхемыЗапроса("&ДатаРасчета"). Это чтение и запись свойства внутри своей схемы, не установка значения параметра для выполнения запроса. Второе обычное условие должно остаться полностью прежним.

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

  6. В период СКД записать выражение &ДатаОтчета. Во второй контейнер добавить доступное поле КодТовара, дать псевдоним КодДляОтбора, оставить ИспользоватьРеквизиты=Ложь. Строковое поле не превращается в ссылочный объект с подчинёнными реквизитами. Выражение элемента отбора readonly; оно задаётся при Добавить, а не присваиванием свойства.

  7. Сформировать текст через ПолучитьТекстЗапроса. Не сочинять фигурные скобки вручную: их формирует объектная модель. Наличие скобки — лишь дополнительная проверка, главное — повторный разбор этого текста НОВОЙ схемой в режиме СКД и полная повторная сверка обычных/СКД-параметров.

  8. Вернуть обычный период исходной схемы в &ДатаЗапроса. Отдельная повторная схема должна сохранить &ДатаРасчета, а обе — &ДатаОтчета и КодДляОтбора. Исходная строка текста не меняется. Это проверяет независимость двух собственных структур, не перенос дочерних объектов между ними.

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

  1. Будущий результат: первая схема после восстановления имеет обычный период &ДатаЗапроса; повторная имеет &ДатаРасчета. В каждой обычный второй параметр КодТовара = &КодТовара, период СКД &ДатаОтчета и ровно одно поле отбора СКД КодТовара с псевдонимом КодДляОтбора и флагом Ложь.

  2. Положительное сообщение формы выводится только после возврата серверного модуля. Перед ним показывается реально сформированный текст; форматирование, отступы и регистр ключевых слов не объявляются побайтово фиксированными. Проверка выражений опирается на документированное сравнение ВыражениеСхемыЗапроса.

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

  4. Python-тесты проверяют состав нашего кода, подготовку, точные API-контракты и собственную модель ожиданий. Схема, разбор текста, метаданные и форма в1С не запускались; runtimeVerifiedScenarios=0.

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

Полный собственный пример отличает обычное выражение периода, расширение СКД и будущие значения параметров запроса. Две структуры сверены после сериализации и независимого восстановления, без неизвестного входного объекта.

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

  1. У ПараметрыТаблицыСхемыЗапроса.Получить есть документированный побочный эффект расширения коллекции при индексе больше количества; оператор [] за границей выдаёт ошибку. Здесь используются только0и1 после проверки количества2, затем число элементов сверяется повторно. Это не правило обычного Массив или всех коллекций.

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

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

  4. Коллекции Таблица.Параметры, Таблица.ПараметрыКомпоновкиДанных, ИмяТаблицы и ДоступныеПоля readonly. Изменяется только поддерживаемое Выражение реального параметра, собственный контейнер отбора и его RW-псевдоним/флаг; readonly-полю Выражение элемента отбора ничего не присваивается.

  5. В режиме СКД недоступны свойства итогов и текст с ИТОГИ вызывает исключение при установке. Здесь нет ИТОГИ и обращения к этим полям; обычная схема без СКД не является взаимозаменяемой подготовкой.

  6. Сформированный текст с расширением — описание для СКД, не доказательство строк данных и не команда для прямого Запрос.Выполнить. Здесь ни значения дат/кодов для исполнения, ни строки регистра не создаются. Реальное выполнение и интерфейс редактора не проверены.

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

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

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

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

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