ИсточникиДанныхСхемыКомпоновкиДанных.Вставить

Методы · Insert

Добавляет элемент в заданную позицию.

Синтаксис

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

ИсточникиДанныхСхемыКомпоновкиДанных.Вставить (DataCompositionSchemaDataSources.Insert)

ИсточникиДанныхСхемыКомпоновкиДанных (DataCompositionSchemaDataSources)

Вставить (Insert)

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

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

<Индекс> (обязательный)
Тип: Число.
Расположение элемента в коллекции.
Возвращаемое значение:
Тип: ИсточникДанныхСхемыКомпоновкиДанных.

Описание:

Добавляет элемент в заданную позицию.

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

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

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

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

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

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

Папки полей СКД и безопасный редактор логических источников

Два буквальных набора имеют свои папки Первый85/Второй85 и уникальные пути полей. Проверяем полярность запрета отбора, порядок источников, переназначение наборов до удаления источника и восстановление источников раньше наборов. Независимая копия сохраняет полный состав.

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

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

Подготовка

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

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

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

  4. Записи базы и настоящие подключения не нужны. Основной85/Резерв85 — две логические записи Local в модели одной схемы, не две разные реальные базы. Запросы содержат только свои литералы A01/3 и B02/5; строк соединения и выполнения нет.

  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 → управляемая Форма → Модуль

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

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

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

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

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

  2. Оба набора используют псевдонимы Код/Количество в Поле; разные ПутьКДанным предотвращают конфликт несвязанных наборов. В каждом каталоге ровно три элемента: папка, строковый Код, числовое Количество. Проверяются полный тип, путь, заголовок, порядок и полный запрос.

  3. У настоящего объекта ОграничениеИспользования явно задать все четыре Булево. Поле/Группировка/Порядок=Ложь, Условие сначала Ложь, затем Истина и обратно. Истина означает ЗАПРЕТ, а не разрешение. Условие — точное имя ограничения отбора, не выдуманное Отбор.

  4. Шестнадцать состояний оригинала сверяют весь каталог источников с именами/Local/индексами/числовым []/Найти, всю привязку каждого набора к существующему источнику, полные запросы и все поля/папки/четыре запрета. Изменение одного запрета сверяется отдельно, без изменения размеров каталогов.

  5. Добавить основной источник, объявить оба набора на нём. Вставить резервный в0, полностью проверить обратный порядок, затем Сдвинуть(Резерв,1). У источников Вставить получает только индекс, а не Тип; по имени используем Найти, не недокументированный строковый [].

  6. Переназначить второй набор на существующий резерв; после проверки и создания независимой копии переназначить первый. Теперь оба ссылаются на Резерв85. Помощник удаления сканирует ВСЕ свои наборы и запрещает удалять источник, на имя которого кто-либо ещё ссылается. Только после этого Удалить(Основной) как объект.

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

  8. Копия заново создаёт свои источники, оба запроса, папки, простые поля и ограничения. Пять сверок копии показывают сохранность после запрета отбора, удаления основного и очистки обоих каталогов оригинала. Старые ссылки после удаления/очистки не используются.

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

  1. Будущий итог модели: источники Основной85/Резерв85 в этом порядке; Первый85 ссылается на Основной85, Второй85 на Резерв85. Папки и четыре уникальных префиксных пути восстановлены, все четыре запрета каждой папки=Ложь, полные запросы/типы полей прежние. Копия имеет тот же состав.

  2. Ложь в ограничении не предоставляет права и не делает поле доступным вопреки самому набору. Реальная доступность дочерних полей в UI, наследование запретов, сортировка/отбор результата, подключение или переключение реальной базы этим опытом не доказаны.

  3. Будущий отрицательный контроль: вызвать УдалитьСвойНезависимыйИсточник(Схема,Основной) до переназначения первого набора на резерв. Проверка должна отказать ДО удаления по живой ссылке имени. Другой контроль: путь поля второго набора заменить на Первый85.Код — полный контроль префикса должен отказать. Здесь контроля не было.

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

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

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

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

  1. Истина в каждом ограничении — недоступность соответствующего применения. Не путать запреты с RLS, ролями, функциональными опциями или гарантией видимости.

  2. Папка должна вернуть объект ОграничениеИспользованияПоляСхемыКомпоновкиДанных; код проверяет тип до изменения. Применение запрета к UI не запускалось. Нельзя выдумывать свойства папки Имя/Поля или ограничения Отбор.

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

  4. Числовой [] коллекции источников документирован, строковый индекс не предполагается. Имя источника хранится строкой в наборе и всегда должно находиться через Найти до удаления/восстановления зависимостей.

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

  6. Квалификаторы числового описания заданы явно и сверяются после пересоздания наборов. Для других величин и дробных количеств нужно отдельно выбирать диапазон; данный учебный диапазон0–9 не является производственным правилом.

  7. В КА2 ВедомостьПоДенежнымСредствам есть папка АналитикаДСВПути и поля с её префиксом; ФинансоваяОтчетностьСервер создаёт папку через Добавить(Тип(...)) и заполняет путь/заголовок. Здесь используется собственная маленькая модель, не вызов рабочего отчёта.

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

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

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

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

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