ВложенныеСхемыКомпоновкиДанных.Удалить

Методы · Delete

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

Синтаксис

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

ВложенныеСхемыКомпоновкиДанных.Удалить (NestedDataCompositionSchemas.Delete)

ВложенныеСхемыКомпоновкиДанных (NestedDataCompositionSchemas)

Удалить (Delete)

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

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

<Элемент> (обязательный)
Тип: ВложеннаяСхемаКомпоновкиДанных.
Удаляемый элемент.
Описание:

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

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

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

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

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

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

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

Вложенные схемы СКД: собственные запросы, readonly объекты и выбор полей

Родитель с буквальным ROOT/0 содержит два настоящих вложенных описания A01/3 и B02/5. Заполняем возвращённые readonly объекты схемы/настроек, выбираем реальные поля, временно выключаем Количество, редактируем порядок/состав каталога и полностью восстанавливаем независимо от копии.

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

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

Подготовка

  1. НОВАЯ отдельная учебная база, не копия рабочей: точно8.5.1.1343, конфигурация УчебныеВложенные85, совместимость Не использовать. Нет справочников, документов, регистров, расширений, подписок и заданий. Модули вручную пустые, кроме этого общего модуля.

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

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

  4. Записи базы не нужны: три собственных Local-источника принадлежат трём своим схемам, а не одному общему каталогу. У каждого набора свой полный буквальный запрос, явные поля Код Строка/Количество Число и AutoFields=Ложь. Настройки вложенных описаний получают два собственных выбранных поля.

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

Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

Функция СвойЗапросСхемы(Маркер)
    Если Маркер = "Основы" Тогда
        Возврат "ВЫБРАТЬ ""ROOT"" КАК Код, 0 КАК Количество";
    ИначеЕсли Маркер = "Первой" Тогда
        Возврат "ВЫБРАТЬ ""A01"" КАК Код, 3 КАК Количество";
    ИначеЕсли Маркер = "Второй" Тогда
        Возврат "ВЫБРАТЬ ""B02"" КАК Код, 5 КАК Количество";
    КонецЕсли;
    ВызватьИсключение "В собственном опыте только три известных буквальных схемы";
КонецФункции

Функция МаркерСвоегоВложения(Имя)
    Если Имя = "ПерваяВложенная85" Тогда
        Возврат "Первой";
    ИначеЕсли Имя = "ВтораяВложенная85" Тогда
        Возврат "Второй";
    КонецЕсли;
    ВызватьИсключение "В каталоге только два собственных вложенных описания";
КонецФункции

Процедура ЗаполнитьСвоюСхему(Схема, Маркер)
    Запрос = СвойЗапросСхемы(Маркер);
    Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных") Или Схема.ИсточникиДанных.Количество() <> 0
        Или Схема.НаборыДанных.Количество() <> 0 Или Схема.ВложенныеСхемыКомпоновкиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Заполняется только свой пустой возвращённый объект схемы";
    КонецЕсли;
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "Источник" + Маркер + "85";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Если ТипЗнч(Набор) <> Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Тогда
        ВызватьИсключение "Нужен собственный набор запроса";
    КонецЕсли;
    Набор.Имя = "Данные" + Маркер + "85";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
    Набор.Запрос = Запрос;
    Имена = СтрРазделить("Код,Количество", ",");
    Типы = СтрРазделить("Строка,Число", ",");
    Для Индекс = 0 По 1 Цикл
        Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
        Если ТипЗнч(Поле) <> Тип("ПолеНабораДанныхСхемыКомпоновкиДанных") Тогда
            ВызватьИсключение "Нужно своё явно типизированное простое поле";
        КонецЕсли;
        Поле.Поле = Имена[Индекс];
        Поле.ПутьКДанным = Имена[Индекс];
        Поле.ТипЗначения = Новый ОписаниеТипов(Типы[Индекс]);
    КонецЦикла;
    ПроверитьСвоюСхему(Схема, Маркер);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. Схема и Настройки у описания — readonly. Получаем реальные СхемаВложения/НастройкиВложения, проверяем типы, заполняем их содержимое. Не присваиваем Описание.Схема = Новый ... и не подменяем её родительской схемой, поэтому в этом коде не строится цикл самоссылок.

  3. Каждая дочерняя схема имеет собственный источник/набор с другим полным запросом. Настройки описания получают ПолеКомпоновкиДанных("Код") и ПолеКомпоновкиДанных("Количество") с булевым Использование=Истина. У родителя отдельно заполняется НастройкиПоУмолчанию.

  4. Не предполагаем равенство Описание.Настройки и Описание.Схема.НастройкиПоУмолчанию. По контракту первое применяется к настройкам вложенного объекта при добавлении в настройки. Здесь изменяем именно возвращённое Настройки описания и проверяем его состав; разрешение/слияние настроек движком не запускается.

  5. Добавить первую вложенную в конец; вторую Вставить(0), проверить обратный порядок, затем Сдвинуть(Вторая,1). Обращение по числовому индексу, имени, Индекс/Получить/Найти должны указывать на текущие собственные описания; отсутствующее имя даёт Неопределено.

  6. Десять контрольных состояний оригинала сверяют весь родительский источник/запрос/типы полей/выбор, полный текущий каталог и все дочерние источники, имена, заголовки, запросы, флаги и пути полей. У дочерних схем нет следующего уровня вложенности. Выбор сравнивается по полному XML собственного ПолеКомпоновкиДанных, не по Строка(Поле).

  7. Заново построить независимую копию со своими дочерними объектами. У первой вложенной оригинала временно выключить только Количество в Настройки.Выбор, проверить точный Булево Ложь, сохранность Код и второго описания; копия и родительский выбор остаются включёнными. Затем вернуть Истина.

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

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

  1. Будущий итог модели: у родителя ROOT/0, вложенные ПерваяВложенная85/ВтораяВложенная85 содержат A01/3 и B02/5. В каждой схеме ровно свой источник и набор, поля Код Строка/Количество Число. Родительский выбор и оба выбора описаний содержат два точных пути с Использование=Истина; копия имеет тот же состав.

  2. Собственное поле XML сериализуется только в строку: helper проверяет тип ПолеКомпоновкиДанных, не принимает метаданные или записи базы. Ни один объект/набор записей базы не сериализуется. Сопоставление XML подтверждает полный путь модели, не исполняет отбор или запрос.

  3. Будущий отрицательный контроль: после заполнения первой вложенной заменить только её Настройки.Выбор.Элементы.Получить(1).Поле на Новый ПолеКомпоновкиДанных("Код"). При прежнем количестве2 и флагах контроль должен отказать по полному пути. Другой контроль: изменить число3 на30 в полном запросе первой дочерней схемы. Здесь проверки не выполнялись.

  4. runtimeVerifiedScenarios=0. Только статическая сверка контрактов установленной справки и итогового HTML. Нет исполнения1С, чтения/записи записей, запуска запросов, применения вложений к реальным настройкам, компиляции/вывода, сети или печати.

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

Содержательный каталог двух вложенных схем с реально заполненными readonly объектами, полным выбором полей и независимым восстановлением.

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

  1. Схема, Настройки и корневой каталог readonly: нельзя заменять свойства целиком. Это не запрещает работу с собственными коллекциями возвращённых объектов.

  2. Вставить вложенной получает только абсолютный индекс, а не Тип. Индекс/Удалить — текущий объект описания, Сдвинуть — объект/относительное смещение. После удаления/очистки описания создаются заново.

  3. Не предполагаются совместное владение настройками, рекурсивный поиск по чужим корням или перенос объектов оригинала в копию. По именам ищем именно в своём каталоге.

  4. Пустой каталог после очистки — состояние собственного редактора. Нет утверждения, что удалённое описание уже добавлено в структуру отчёта или остаётся там валидным. Здесь вложенные объекты не добавляются к структуре настроек и отчёт не запускается.

  5. Заголовок описан как текст выбора пользователем, но настоящий диалог выбора и видимый отчёт не проверены. Перестановка каталога не доказывает сортировку результатов.

  6. В КА2 ИсполнениеПланаПродаж действительно есть вложенные ПоКлиентам/ПоПодразделениям с заголовками По клиентам/По подразделениям; у каждой свои schema и settings. В собственном примере повторён принцип, а рабочий отчёт и выгрузка не изменяются.

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

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

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

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

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