ПоляВыбораКомпоновкиДанныхСхемыЗапроса.Удалить

Методы · Delete

Удаляет элемент из коллекции по индексу.

Синтаксис

Удалить(<Индекс>)
Полное описание, параметры и ограничения

ПоляВыбораКомпоновкиДанныхСхемыЗапроса.Удалить (QuerySchemaDataCompositionSelectionFields.Delete)

ПоляВыбораКомпоновкиДанныхСхемыЗапроса (QuerySchemaDataCompositionSelectionFields)

Удалить (Delete)

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

Синтаксис:
Удалить(<Индекс>)
Параметры:

<Индекс> (обязательный)
Тип: Число.
Индекс удаляемого элемента.
Описание:

Удаляет элемент из коллекции по индексу.

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

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

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

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

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

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

Поля выбора СКД: оба способа добавления, порядок, псевдонимы и независимая копия

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

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

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

Подготовка

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

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

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

  4. До опыта завершите прежний собственный сеанс без транзакции; сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). После успеха откройте свежий собственный управляемый клиент и свою обработку. F7, форма и BSL здесь не запускались.

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

Процедура ВыполнитьПример() Экспорт
    ПроверитьСвойМинимальныйСтенд();
    ПроверитьСвойРегистр();
    Схема = Новый СхемаЗапроса;
    Схема.РежимКомпоновкиДанных = Истина;
    Схема.УстановитьТекстЗапроса("ВЫБРАТЬ История.КодТовара КАК КодТовара, История.Цена КАК Цена
    |ИЗ РегистрСведений.УчебнаяИстория85 КАК История");
    Выбор = ПолучитьСвойВыбор(Схема);
    Поля = Выбор.ПоляВыбораКомпоновкиДанных;
    ПустойПорядок = Новый Массив;
    ПроверитьСвоиПоля(Выбор, ПустойПорядок);
    ПроверитьПовторныйРазборПолей(Схема, ПустойПорядок);
    КодКолонка = Выбор.Колонки.Найти("КодТовара");
    ПолеКода = Поля.Добавить(КодКолонка);
    ПолеКода.Псевдоним = "КодДляОтчета";
    ПолеЦены = Поля.Добавить("Цена");
    ПолеЦены.Псевдоним = "Стоимость";
    СнимокКода = СнимокСвоегоПоля(ПолеКода, "КодТовара", "КодДляОтчета");
    СнимокЦены = СнимокСвоегоПоля(ПолеЦены, "Цена", "Стоимость");
    ИсходныйПорядок = СвойПорядок(СнимокКода, СнимокЦены);
    ОбратныйПорядок = СвойПорядок(СнимокЦены, СнимокКода);
    ПроверитьСвоиПоля(Выбор, ИсходныйПорядок);
    ПроверитьПовторныйРазборПолей(Схема, ИсходныйПорядок);
    Поля.Переместить(ПолеЦены, 0);
    ПроверитьСвоиПоля(Выбор, ОбратныйПорядок);
    ПроверитьПовторныйРазборПолей(Схема, ОбратныйПорядок);
    Поля.Сдвинуть(0, 1);
    ПроверитьСвоиПоля(Выбор, ИсходныйПорядок);
    ПроверитьПовторныйРазборПолей(Схема, ИсходныйПорядок);
    Поля.Переместить(0, 1);
    ПроверитьСвоиПоля(Выбор, ОбратныйПорядок);
    ПроверитьПовторныйРазборПолей(Схема, ОбратныйПорядок);
    Поля.Сдвинуть(ПолеКода, -1);
    ПроверитьСвоиПоля(Выбор, ИсходныйПорядок);
    ПроверитьПовторныйРазборПолей(Схема, ИсходныйПорядок);
    ПолеКода.Псевдоним = "ТоварДляВыбора";
    ПереименованныйКод = Новый Структура("ИмяКолонки,Псевдоним,ИспользоватьРеквизиты", "КодТовара", "ТоварДляВыбора", СнимокКода.ИспользоватьРеквизиты);
    ПроверитьСвоиПоля(Выбор, СвойПорядок(ПереименованныйКод, СнимокЦены));
    ПроверитьПовторныйРазборПолей(Схема, СвойПорядок(ПереименованныйКод, СнимокЦены));
    Поля.Удалить(0);
    ПроверитьСвоиПоля(Выбор, СвойПорядок(СнимокЦены));
    ПроверитьПовторныйРазборПолей(Схема, СвойПорядок(СнимокЦены));
    ВосстановленноеПоле = Поля.Добавить(КодКолонка);
    ВосстановленноеПоле.Псевдоним = "КодДляОтчета";
    Поля.Переместить(ВосстановленноеПоле, 0);
    ПроверитьСвоиПоля(Выбор, ИсходныйПорядок);
    ПроверитьПовторныйРазборПолей(Схема, ИсходныйПорядок);
    КопияСхемы = Новый СхемаЗапроса;
    КопияСхемы.РежимКомпоновкиДанных = Истина;
    КопияСхемы.УстановитьТекстЗапроса(Схема.ПолучитьТекстЗапроса());
    КопияВыбора = ПолучитьСвойВыбор(КопияСхемы);
    ПроверитьСвоиПоля(КопияВыбора, ИсходныйПорядок);
    Поля.Очистить();
    Выбор = ПолучитьСвойВыбор(Схема);
    ПроверитьСвоиПоля(Выбор, ПустойПорядок);
    ПроверитьПовторныйРазборПолей(Схема, ПустойПорядок);
    ПроверитьСвоиПоля(КопияВыбора, ИсходныйПорядок);
    Сообщить("Исходный список СКД пуст, две обычные колонки сохранены; самостоятельная копия содержит КодДляОтчета и Стоимость");
    Сообщить("Readonly-признаки сохранены: код=" + Строка(СнимокКода.ИспользоватьРеквизиты) + ", цена=" + Строка(СнимокЦены.ИспользоватьРеквизиты));
КонецПроцедуры

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

Функция СнимокСвоегоПоля(Элемент, Имя, Псевдоним)
    Если ТипЗнч(Элемент) <> Тип("ПолеВыбораКомпоновкиДанныхСхемыЗапроса")
        Или ТипЗнч(Элемент.ИспользоватьРеквизиты) <> Тип("Булево")
        Или ТипЗнч(Элемент.Псевдоним) <> Тип("Строка") Или Элемент.Псевдоним <> Псевдоним Тогда
        ВызватьИсключение "Не совпали тип элемента, псевдоним или тип readonly-признака";
    КонецЕсли;
    Возврат Новый Структура("ИмяКолонки,Псевдоним,ИспользоватьРеквизиты", Имя, Псевдоним, Элемент.ИспользоватьРеквизиты);
КонецФункции

Функция СвойПорядок(Первая, Вторая = Неопределено)
    Порядок = Новый Массив;
    Порядок.Добавить(Первая);
    Если Вторая <> Неопределено Тогда
        Порядок.Добавить(Вторая);
    КонецЕсли;
    Возврат Порядок;
КонецФункции

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

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

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

Модуль своей управляемой формы с отдельным серверным вызовом; здесь не исполнялся.

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

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

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

  1. Проверить собственный стенд, физический источник История и ровно две исходные обычные колонки КодТовара и Цена. У каждой проверяются порядок, псевдоним, полное выражение и одноточный набор типов Строка/Число. Сам запрос не выполняется.

  2. У исходного собственного текста список выбора СКД пуст. Проверить его и самостоятельный повторный разбор. Обычные колонки и поля расширения — разные коллекции: первое остаётся из двух элементов при дальнейшей очистке второго.

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

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

  5. Каждый раз проверить Получить и [], Индекс текущего элемента и Найти по полному фактическому Строка(Элемент). Псевдоним не подставляется в Найти вместо представления; формат представления не выдумывается. Возвращённый объект должен быть тем же элементом текущей коллекции.

  6. Переместить поле цены объектом в индекс0: порядок цена,код. Сдвинуть числовой индекс0 на +1: код,цена. Переместить индекс0 в1 и затем Сдвинуть реальный ПолеКода на -1. Так отличаем абсолютный индекс от относительного смещения и проверяем оба разрешённых типа аргумента.

  7. Переименовать только псевдоним поля СКД в ТоварДляВыбора; физический источник, исходная колонка КодТовара и readonly-признак не меняются. Проверить полное новое состояние и повторно разобрать текст.

  8. Удалить числовой индекс0, оставить только Стоимость. Удалённое ПолеКода больше не читать. Восстановить новым элементом по всё ещё живой обычной КодКолонка, вернуть КодДляОтчета и исходный порядок. Очистка/удаление не трогают две обычные колонки.

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

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

  1. Будущий результат: после каждого перемещения порядок совпадает с явными ожиданиями; после переименования только псевдоним кода ТоварДляВыбора; после удаления остаётся только Цена/Стоимость. В финале первая схема: список СКД0 и обычные колонки2. Копия: поля СКД2 в порядке КодТовара/КодДляОтчета, Цена/Стоимость; обычные колонки2.

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

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

  4. Статическая проверка не является запуском: runtimeVerifiedScenarios=0. Проверка не доказывает интерфейс конструктора, выполнение СКД-процессора или строки результата. Никакие данные регистра и реальные рабочие базы не изменяются.

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

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

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

  1. Поле и ИспользоватьРеквизиты по установленной справке Только чтение, Псевдоним Чтение и запись. В описании признака также есть фраза об установке Истина — это несогласованность native-текста, не основание разрешать присваивание readonly. В этом коде такие присваивания отсутствуют.

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

  3. Удалить принимает Число. Переместить принимает элемент/индекс и абсолютный новый индекс; Сдвинуть — элемент/индекс и относительное смещение. После удаления/очистки старые дочерние элементы не читаются.

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

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

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

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

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

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

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