Добавляет элемент в заданную позицию.
Синтаксис
Вставить(<Индекс>)Полное описание, параметры и ограничения
ИсточникиДанныхСхемыКомпоновкиДанных.Вставить (DataCompositionSchemaDataSources.Insert)
ИсточникиДанныхСхемыКомпоновкиДанных (DataCompositionSchemaDataSources)
Вставить (Insert)
Доступен, начиная с версии 8.1.
Синтаксис:
Вставить(<Индекс>)
Параметры:
<Индекс> (обязательный)
Тип: Число.
Расположение элемента в коллекции.
Возвращаемое значение:
Тип: ИсточникДанныхСхемыКомпоновкиДанных.
Описание:
Добавляет элемент в заданную позицию.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Папки полей СКД и безопасный редактор логических источников
Два буквальных набора имеют свои папки Первый85/Второй85 и уникальные пути полей. Проверяем полярность запрета отбора, порядок источников, переназначение наборов до удаления источника и восстановление источников раньше наборов. Независимая копия сохраняет полный состав.
Где и как запускать
Полный серверный общий модуль УчебныеЗадачи новой пустой конфигурации УчебныеПапкиИсточники85; собственная модель, здесь не запускался.
Подготовка
НОВАЯ отдельная учебная база, не копия рабочей: точно8.5.1.1343, конфигурация УчебныеПапкиИсточники85, совместимость Не использовать. Нет бизнес-объектов, расширений, подписок и заданий. Модули вручную пустые, кроме этого общего модуля.
Конфигуратор → Общие → Общие модули → УчебныеЗадачи: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить ВЕСЬ основной модуль. Своя внешняя обработка УчебныеПапкиИсточники85 → управляемая Форма: команда/кнопка Выполнить с действием Выполнить. Полный модуль формы ниже; реквизиты не нужны.
Будущая ручная подготовка вне опыта: завершить прежний свой сеанс, сохранить, Обновить конфигурацию базы данных (F7), открыть свежий свой клиент и обработку. Здесь ни F7, ни 1С не запускались.
Записи базы и настоящие подключения не нужны. Основной85/Резерв85 — две логические записи Local в модели одной схемы, не две разные реальные базы. Запросы содержат только свои литералы A01/3 и B02/5; строк соединения и выполнения нет.
Для обоих количеств3/5 задаётся Число(1,0,Неотрицательный) вторым аргументом ОписаниеТипов: один разряд ВСЕГО, ноль дробных, диапазон0–9. Проверяются разрядность, дробная часть и знак каждого числового описания. Это ограниченный собственный опыт, не диапазон количества рабочего отчёта.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойПустойСтенд();
Если ПривилегированныйРежим() Тогда
ВызватьИсключение "Привилегированный режим в своём редакторе не нужен";
КонецЕсли;
Пусто = Новый Массив;
Имена = СтрРазделить("Основной85,Резерв85", ",");
ОбаОсновной = СтрРазделить("Основной85,Основной85", ",");
ОбаРезерв = СтрРазделить("Резерв85,Резерв85", ",");
Схема = Новый СхемаКомпоновкиДанных;
Каталог = Схема.ИсточникиДанных;
ПроверитьСвоюСхему(Схема, Пусто, Пусто, Ложь);
Основной = Каталог.Добавить();
ЗаполнитьСвойИсточник(Основной, "Основной85");
ПроверитьСвоюСхему(Схема, СтрРазделить("Основной85", ","), Пусто, Ложь);
ВосстановитьСвоиНаборы(Схема, ОбаОсновной);
ПроверитьСвоюСхему(Схема, СтрРазделить("Основной85", ","), ОбаОсновной, Ложь);
Резерв = Каталог.Вставить(0);
ЗаполнитьСвойИсточник(Резерв, "Резерв85");
ПроверитьСвоюСхему(Схема, СтрРазделить("Резерв85,Основной85", ","), ОбаОсновной, Ложь);
Каталог.Сдвинуть(Резерв, 1);
ПроверитьСвоюСхему(Схема, Имена, ОбаОсновной, Ложь);
ПервыйНабор = Схема.НаборыДанных.Получить(0);
ВторойНабор = Схема.НаборыДанных.Получить(1);
ВторойНабор.ИсточникДанных = "Резерв85";
ПроверитьСвоюСхему(Схема, Имена, Имена, Ложь);
Копия = СоздатьСвоюПолнуюСхему();
ПроверитьСвоюСхему(Копия, Имена, Имена, Ложь);
ПерваяПапка = ПервыйНабор.Поля.Получить(0);
УстановитьСвойЗапретОтбора(ПерваяПапка, Истина);
ПроверитьСвоюСхему(Схема, Имена, Имена, Истина);
ПроверитьСвоюСхему(Копия, Имена, Имена, Ложь);
УстановитьСвойЗапретОтбора(ПерваяПапка, Ложь);
ПроверитьСвоюСхему(Схема, Имена, Имена, Ложь);
ПервыйНабор.ИсточникДанных = "Резерв85";
ПроверитьСвоюСхему(Схема, Имена, ОбаРезерв, Ложь);
УдалитьСвойНезависимыйИсточник(Схема, Основной);
ПроверитьСвоюСхему(Схема, СтрРазделить("Резерв85", ","), ОбаРезерв, Ложь);
ПроверитьСвоюСхему(Копия, Имена, Имена, Ложь);
НовыйОсновной = Каталог.Вставить(0);
ЗаполнитьСвойИсточник(НовыйОсновной, "Основной85");
ПроверитьСвоюСхему(Схема, Имена, ОбаРезерв, Ложь);
ПервыйНабор.ИсточникДанных = "Основной85";
ПроверитьСвоюСхему(Схема, Имена, Имена, Ложь);
Схема.НаборыДанных.Очистить();
ПроверитьСвоюСхему(Схема, Имена, Пусто, Ложь);
Каталог.Очистить();
ПроверитьСвоюСхему(Схема, Пусто, Пусто, Ложь);
ПроверитьСвоюСхему(Копия, Имена, Имена, Ложь);
ВосстановитьСвоиИсточники(Схема);
ПроверитьСвоюСхему(Схема, Имена, Пусто, Ложь);
ВосстановитьСвоиНаборы(Схема, Имена);
ПроверитьСвоюСхему(Схема, Имена, Имена, Ложь);
ПроверитьСвоюСхему(Копия, Имена, Имена, Ложь);
Сообщить("Свои папки и источники восстановлены без ссылок на отсутствующие источники");
КонецПроцедуры
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
Функция СвойЗапросПапки(Имя)
Если Имя = "Первый85" Тогда
Возврат "ВЫБРАТЬ ""A01"" КАК Код, 3 КАК Количество";
ИначеЕсли Имя = "Второй85" Тогда
Возврат "ВЫБРАТЬ ""B02"" КАК Код, 5 КАК Количество";
КонецЕсли;
ВызватьИсключение "В собственной схеме только два известных буквальных запроса";
КонецФункции
Процедура ЗаполнитьСвойИсточник(Источник, Имя)
Если ТипЗнч(Источник) <> Тип("ИсточникДанныхСхемыКомпоновкиДанных") Тогда
ВызватьИсключение "Нужен свой действительный источник";
КонецЕсли;
Если Имя <> "Основной85" И Имя <> "Резерв85" Тогда
ВызватьИсключение "В опыте только свои основной и резервный логические источники";
КонецЕсли;
Источник.Имя = Имя;
Источник.ТипИсточникаДанных = "Local";
КонецПроцедуры
Процедура УстановитьСвойЗапретОтбора(Папка, Запрет)
Если ТипЗнч(Папка) <> Тип("ПапкаПолейНабораДанныхСхемыКомпоновкиДанных") Или ТипЗнч(Запрет) <> Тип("Булево") Тогда
ВызватьИсключение "Нужны собственная папка и настоящий булев запрет";
КонецЕсли;
Ограничения = Папка.ОграничениеИспользования;
Если ТипЗнч(Ограничения) <> Тип("ОграничениеИспользованияПоляСхемыКомпоновкиДанных") Тогда
ВызватьИсключение "Папка должна вернуть действительный объект ограничений";
КонецЕсли;
Ограничения.Поле = Ложь;
Ограничения.Группировка = Ложь;
Ограничения.Порядок = Ложь;
Ограничения.Условие = Запрет;
КонецПроцедуры
Функция СвойТипКоличестваПапки()
Возврат Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный));
КонецФункции
Процедура ПроверитьСвоюРазрядностьПапки(Описание)
Квалификаторы = Описание.КвалификаторыЧисла;
Если ТипЗнч(Квалификаторы) <> Тип("КвалификаторыЧисла") Или Квалификаторы.Разрядность <> 1
Или Квалификаторы.РазрядностьДробнойЧасти <> 0
Или Квалификаторы.ДопустимыйЗнак <> ДопустимыйЗнак.Неотрицательный Тогда
ВызватьИсключение "Своё количество папки имеет один разряд, ноль дробных и неотрицательный знак";
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСвойНабор(Схема, Набор, Имя, ИмяИсточника)
Запрос = СвойЗапросПапки(Имя);
Если ТипЗнч(Набор) <> Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")
Или Схема.ИсточникиДанных.Найти(ИмяИсточника) = Неопределено Тогда
ВызватьИсключение "Нужен свой набор и уже объявленный собственный источник";
КонецЕсли;
Набор.Имя = Имя;
Набор.ИсточникДанных = ИмяИсточника;
Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
Набор.Запрос = Запрос;
Папка = Набор.Поля.Добавить(Тип("ПапкаПолейНабораДанныхСхемыКомпоновкиДанных"));
Если ТипЗнч(Папка) <> Тип("ПапкаПолейНабораДанныхСхемыКомпоновкиДанных") Тогда
ВызватьИсключение "Нужна настоящая собственная папка, не простое поле";
КонецЕсли;
Папка.ПутьКДанным = Имя;
Папка.Заголовок = "Поля " + Имя;
УстановитьСвойЗапретОтбора(Папка, Ложь);
Имена = СтрРазделить("Код,Количество", ",");
Для Индекс = 0 По 1 Цикл
Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
Если ТипЗнч(Поле) <> Тип("ПолеНабораДанныхСхемыКомпоновкиДанных") Тогда
ВызватьИсключение "Нужно своё простое поле с явным типом";
КонецЕсли;
Поле.Поле = Имена[Индекс];
Поле.ПутьКДанным = Имя + "." + Имена[Индекс];
Если Индекс = 0 Тогда
Поле.ТипЗначения = Новый ОписаниеТипов("Строка");
Иначе
Поле.ТипЗначения = СвойТипКоличестваПапки();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьСвоюСхему(Схема, ИменаИсточников, ИсточникиНаборов, ОтборПервойЗапрещен)
Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных")
Или Схема.ИсточникиДанных.Количество() <> ИменаИсточников.Количество()
Или Схема.НаборыДанных.Количество() <> ИсточникиНаборов.Количество() Тогда
ВызватьИсключение "Не совпал весь собственный состав источников и наборов";
КонецЕсли;
Для Индекс = 0 По ИменаИсточников.Количество() - 1 Цикл
Источник = Схема.ИсточникиДанных.Получить(Индекс);
Если ТипЗнч(Источник) <> Тип("ИсточникДанныхСхемыКомпоновкиДанных")
Или Источник.Имя <> ИменаИсточников[Индекс] Или Источник.ТипИсточникаДанных <> "Local"
Или Схема.ИсточникиДанных.Индекс(Источник) <> Индекс
Или Схема.ИсточникиДанных[Индекс] <> Источник
Или Схема.ИсточникиДанных.Найти(ИменаИсточников[Индекс]) <> Источник Тогда
ВызватьИсключение "Не совпали полный порядок, имя, тип и поиск своих источников";
КонецЕсли;
КонецЦикла;
Если Схема.ИсточникиДанных.Найти("НетТакогоИсточника85") <> Неопределено Тогда
ВызватьИсключение "Отсутствующий собственный источник не должен находиться";
КонецЕсли;
Если ИсточникиНаборов.Количество() <> 0 И ИсточникиНаборов.Количество() <> 2 Тогда
ВызватьИсключение "В редакторе допускается пустой состав либо обе собственные части";
КонецЕсли;
ИменаНаборов = СтрРазделить("Первый85,Второй85", ",");
Для ИндексНабора = 0 По ИсточникиНаборов.Количество() - 1 Цикл
Имя = ИменаНаборов[ИндексНабора];
Набор = Схема.НаборыДанных.Получить(ИндексНабора);
Если ТипЗнч(Набор) <> Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")
Или Набор.Имя <> Имя Или Набор.ИсточникДанных <> ИсточникиНаборов[ИндексНабора]
Или Схема.ИсточникиДанных.Найти(Набор.ИсточникДанных) = Неопределено
Или Схема.НаборыДанных.Найти(Имя) <> Набор Или Набор.Запрос <> СвойЗапросПапки(Имя)
Или Набор.АвтоЗаполнениеДоступныхПолей Или Набор.Поля.Количество() <> 3 Тогда
ВызватьИсключение "Не совпали весь запрос, полный состав полей и действительная ссылка на источник";
КонецЕсли;
Папка = Набор.Поля.Получить(0);
Если ТипЗнч(Папка) <> Тип("ПапкаПолейНабораДанныхСхемыКомпоновкиДанных")
Или Папка.ПутьКДанным <> Имя Или Папка.Заголовок <> "Поля " + Имя Тогда
ВызватьИсключение "Не совпали собственные полный путь и заголовок папки";
КонецЕсли;
ОжидаемыйЗапрет = Ложь;
Если ИндексНабора = 0 Тогда
ОжидаемыйЗапрет = ОтборПервойЗапрещен;
КонецЕсли;
Ограничения = Папка.ОграничениеИспользования;
Если ТипЗнч(Ограничения) <> Тип("ОграничениеИспользованияПоляСхемыКомпоновкиДанных")
Или ТипЗнч(Ограничения.Поле) <> Тип("Булево") Или Ограничения.Поле
Или ТипЗнч(Ограничения.Группировка) <> Тип("Булево") Или Ограничения.Группировка
Или ТипЗнч(Ограничения.Порядок) <> Тип("Булево") Или Ограничения.Порядок
Или ТипЗнч(Ограничения.Условие) <> Тип("Булево") Или Ограничения.Условие <> ОжидаемыйЗапрет Тогда
ВызватьИсключение "Не совпали все четыре булевых запрета собственной папки";
КонецЕсли;
Имена = СтрРазделить("Код,Количество", ",");
Типы = СтрРазделить("Строка,Число", ",");
Для Индекс = 0 По 1 Цикл
Поле = Набор.Поля.Получить(Индекс + 1);
Если ТипЗнч(Поле) <> Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")
Или Поле.Поле <> Имена[Индекс] Или Поле.ПутьКДанным <> Имя + "." + Имена[Индекс]
Или ТипЗнч(Поле.ТипЗначения) <> Тип("ОписаниеТипов") Тогда
ВызватьИсключение "Не совпали собственные поля, префиксы и типы";
КонецЕсли;
ПолныеТипы = Поле.ТипЗначения.Типы();
Если ПолныеТипы.Количество() <> 1 Или ПолныеТипы[0] <> Тип(Типы[Индекс]) Тогда
ВызватьИсключение "Не совпал полный единственный тип собственного поля";
КонецЕсли;
Если Индекс = 1 Тогда
ПроверитьСвоюРазрядностьПапки(Поле.ТипЗначения);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ВосстановитьСвоиИсточники(Схема)
Пусто = Новый Массив;
ПроверитьСвоюСхему(Схема, Пусто, Пусто, Ложь);
Основной = Схема.ИсточникиДанных.Добавить();
ЗаполнитьСвойИсточник(Основной, "Основной85");
Резерв = Схема.ИсточникиДанных.Добавить();
ЗаполнитьСвойИсточник(Резерв, "Резерв85");
КонецПроцедуры
Процедура ВосстановитьСвоиНаборы(Схема, ИсточникиНаборов)
Если Схема.НаборыДанных.Количество() <> 0 Или ИсточникиНаборов.Количество() <> 2 Тогда
ВызватьИсключение "Восстановление только в свой пустой каталог наборов";
КонецЕсли;
Имена = СтрРазделить("Первый85,Второй85", ",");
Для Индекс = 0 По 1 Цикл
Если Схема.ИсточникиДанных.Найти(ИсточникиНаборов[Индекс]) = Неопределено Тогда
ВызватьИсключение "Сначала восстановите собственные определения источников";
КонецЕсли;
КонецЦикла;
Для Индекс = 0 По 1 Цикл
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
ЗаполнитьСвойНабор(Схема, Набор, Имена[Индекс], ИсточникиНаборов[Индекс]);
КонецЦикла;
КонецПроцедуры
Функция СоздатьСвоюПолнуюСхему()
Схема = Новый СхемаКомпоновкиДанных;
ВосстановитьСвоиИсточники(Схема);
Имена = СтрРазделить("Основной85,Резерв85", ",");
ВосстановитьСвоиНаборы(Схема, Имена);
ПроверитьСвоюСхему(Схема, Имена, Имена, Ложь);
Возврат Схема;
КонецФункции
Процедура УдалитьСвойНезависимыйИсточник(Схема, Источник)
Если ТипЗнч(Источник) <> Тип("ИсточникДанныхСхемыКомпоновкиДанных") Или Схема.ИсточникиДанных.Индекс(Источник) < 0 Тогда
ВызватьИсключение "Удаляется только действительный собственный источник этого каталога";
КонецЕсли;
Для Индекс = 0 По Схема.НаборыДанных.Количество() - 1 Цикл
Набор = Схема.НаборыДанных.Получить(Индекс);
Если Набор.ИсточникДанных = Источник.Имя Тогда
ВызватьИсключение "Сначала переназначьте все собственные наборы на существующий источник";
КонецЕсли;
КонецЦикла;
Схема.ИсточникиДанных.Удалить(Источник);
КонецПроцедурыУчебныеПапкиИсточники85.Форма
Своя внешняя обработка УчебныеПапкиИсточники85 → управляемая Форма → Модуль
Полный отдельный модуль своей формы с серверным вызовом; здесь не запускался.
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере();
Сообщить("Папки, ограничения и безопасное восстановление источников проверены");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
УчебныеЗадачи.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Папка получается из Набор.Поля.Добавить(Тип("ПапкаПолейНабораДанныхСхемыКомпоновкиДанных")). У неё Заголовок, ПутьКДанным и объект ограничений, но нет Имя или дочерней коллекции Поля. Простые поля остаются в общем каталоге набора, с путями Первый85.Код/Первый85.Количество и Второй85.Код/Второй85.Количество.
Оба набора используют псевдонимы Код/Количество в Поле; разные ПутьКДанным предотвращают конфликт несвязанных наборов. В каждом каталоге ровно три элемента: папка, строковый Код, числовое Количество. Проверяются полный тип, путь, заголовок, порядок и полный запрос.
У настоящего объекта ОграничениеИспользования явно задать все четыре Булево. Поле/Группировка/Порядок=Ложь, Условие сначала Ложь, затем Истина и обратно. Истина означает ЗАПРЕТ, а не разрешение. Условие — точное имя ограничения отбора, не выдуманное Отбор.
Шестнадцать состояний оригинала сверяют весь каталог источников с именами/Local/индексами/числовым []/Найти, всю привязку каждого набора к существующему источнику, полные запросы и все поля/папки/четыре запрета. Изменение одного запрета сверяется отдельно, без изменения размеров каталогов.
Добавить основной источник, объявить оба набора на нём. Вставить резервный в0, полностью проверить обратный порядок, затем Сдвинуть(Резерв,1). У источников Вставить получает только индекс, а не Тип; по имени используем Найти, не недокументированный строковый [].
Переназначить второй набор на существующий резерв; после проверки и создания независимой копии переназначить первый. Теперь оба ссылаются на Резерв85. Помощник удаления сканирует ВСЕ свои наборы и запрещает удалять источник, на имя которого кто-либо ещё ссылается. Только после этого Удалить(Основной) как объект.
Вставить новый основной в0, полностью заполнить, вернуть первый набор на него. Перед очисткой всех источников сначала очистить свой каталог наборов и подтвердить0; затем очистить источники. Восстановить две записи источников раньше двух наборов. Проверка существования обеих привязок выполняется до добавления наборов.
Копия заново создаёт свои источники, оба запроса, папки, простые поля и ограничения. Пять сверок копии показывают сохранность после запрета отбора, удаления основного и очистки обоих каталогов оригинала. Старые ссылки после удаления/очистки не используются.
Как проверить результат
Будущий итог модели: источники Основной85/Резерв85 в этом порядке; Первый85 ссылается на Основной85, Второй85 на Резерв85. Папки и четыре уникальных префиксных пути восстановлены, все четыре запрета каждой папки=Ложь, полные запросы/типы полей прежние. Копия имеет тот же состав.
Ложь в ограничении не предоставляет права и не делает поле доступным вопреки самому набору. Реальная доступность дочерних полей в UI, наследование запретов, сортировка/отбор результата, подключение или переключение реальной базы этим опытом не доказаны.
Будущий отрицательный контроль: вызвать УдалитьСвойНезависимыйИсточник(Схема,Основной) до переназначения первого набора на резерв. Проверка должна отказать ДО удаления по живой ссылке имени. Другой контроль: путь поля второго набора заменить на Первый85.Код — полный контроль префикса должен отказать. Здесь контроля не было.
runtimeVerifiedScenarios=0. Только статическая сверка установленной справки и итогового HTML. Нет исполнения1С, рабочих данных, чтения/записи записей, запросов, сети/подключений, компоновки или печати.
Ожидаемый результат
Содержательный редактор папок и зависимых логических источников: точные ограничения, переназначение ссылок до удаления и восстановление в безопасном порядке.
На что обратить внимание
Истина в каждом ограничении — недоступность соответствующего применения. Не путать запреты с RLS, ролями, функциональными опциями или гарантией видимости.
Папка должна вернуть объект ОграничениеИспользованияПоляСхемыКомпоновкиДанных; код проверяет тип до изменения. Применение запрета к UI не запускалось. Нельзя выдумывать свойства папки Имя/Поля или ограничения Отбор.
Вставить источника — абсолютный индекс; Сдвинуть — объект и относительное смещение; Индекс/Удалить — текущий объект. После удаления основной создаётся заново, после очистки заново создаются все определения.
Числовой [] коллекции источников документирован, строковый индекс не предполагается. Имя источника хранится строкой в наборе и всегда должно находиться через Найти до удаления/восстановления зависимостей.
Пустые каталоги — этап собственного редактора. Не утверждается готовность отчёта к выполнению в промежуточном состоянии. К настройкам выбора/группировки папки здесь не добавляются, отчёт не запускается.
Квалификаторы числового описания заданы явно и сверяются после пересоздания наборов. Для других величин и дробных количеств нужно отдельно выбирать диапазон; данный учебный диапазон0–9 не является производственным правилом.
В КА2 ВедомостьПоДенежнымСредствам есть папка АналитикаДСВПути и поля с её префиксом; ФинансоваяОтчетностьСервер создаёт папку через Добавить(Тип(...)) и заполняет путь/заголовок. Здесь используется собственная маленькая модель, не вызов рабочего отчёта.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.