ТекущиеДанныеСтруктурыНастроекКомпоновкиДанных.Выбор

Свойства · Selection

Тип: ВыбранныеПоляКомпоновкиДанных. Текущий набор выбранных полей.

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

ТекущиеДанныеСтруктурыНастроекКомпоновкиДанных.Выбор (DataCompositionSettingsStructureCurrentData.Selection)

ТекущиеДанныеСтруктурыНастроекКомпоновкиДанных (DataCompositionSettingsStructureCurrentData)

Выбор (Selection)

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

Использование:
Только чтение.
Описание:
Тип: ВыбранныеПоляКомпоновкиДанных.
Текущий набор выбранных полей.
Доступность:

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

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

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

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

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

Редактировать настоящие текущие данные СКД и отделить ограничения UI параметров от фильтра отчета

Полный ordinary thick-only модуль с собственной Local-схемой двух константных строк, двумя реальными параметрами, собственным редактором, выбором корня/деталей и проверкой фактической компоновки.

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

Полный модуль своей ОбщаяФорма.Редактор85, ОБЫЧНАЯ форма ТОЛСТОГО клиента; настоящие ordinary табличные поля, все объекты и результат в памяти.

Подготовка

  1. Создайте отдельную новую пустую CF УчебныйРедакторСКД85 на 8.5.1.1343. Основной режим Обычное приложение. Бизнес-объектов, расширений, регламентных заданий и подписок нет; рабочую базу не используйте.

  2. Создайте ОбщаяФорма.Редактор85 вида Обычная. Разместите три настоящих элемента ТабличноеПоле: Структура85, Параметры85, Результат85. Свойство Данные не связывайте с произвольной строкой имени реквизита: полный модуль устанавливает реальное native Значение для каждого поля.

  3. Структура85 отображает настройки компоновки данных, не ТаблицаЗначений. Код задает ее Значение = собственные НастройкиКомпоновкиДанных и ПодробнаяНастройка = Истина; specialization и native ТекущиеДанные должны соответствовать этому действительному объекту.

  4. Параметры85 получает Значение = настоящие ПараметрыДанных собственного редактора; СоздатьКолонки вызывается после назначения источника. Результат85 только для просмотра, ИзменятьСоставСтрок = Ложь; исходные данные запроса никогда не берутся из этой таблицы.

  5. Добавьте реквизит Состояние85 Строка 500 и поле только для просмотра. Добавьте четыре обычные кнопки: НастроитьКорень85, ПроверитьСвоюГруппировку85, ОграничитьСвойРедакторПараметров85, СформироватьСвойРезультат85; свяжите Нажатие с одноименными процедурами (первый служебный параметр Кнопка).

  6. Свяжите ordinary событие формы ПриОткрытии с ПриОткрытии() без параметров. Вставьте полный модуль на уровне формы, включая Перем и guard. Не используйте managed форму: ее ТекущиеДанные для структуры — копия структуры, не показанный native объект.

  7. Откройте только эту общую форму в толстом клиенте, ordinary application. Схема строится в памяти из собственного запроса Local: Альфа85 с числом 1 и Бета85 с числом 5, обе категории Учебная85. Никакие таблицы базы, файлы, публикации и сетевые серверы не нужны.

  8. В настоящем дереве выберите верхний корень настроек перед НастроитьКорень85. Для ПроверитьСвоюГруппировку85 выберите именно собственные МоиДетали85. Состав native ТекущиеДанные зависит от выбранной строки и подробного режима; неверный выбор отказывается, не подменяется fake объектом.

Перем СвояСхема85;
Перем СвойРедактор85;
Перем СвоиНастройки85;
Перем СвоиДетали85;
Перем ПутьПользовательскогоПоля85;
Перем КореньНастроен85;
Перем КореньМогИзмениться85;

Процедура ПриОткрытии()
    #Если ТолстыйКлиентОбычноеПриложение Тогда
        ПроверитьСвойПустойСтенд();
        СвояСхема85 = Новый СхемаКомпоновкиДанных;
        Источник = СвояСхема85.ИсточникиДанных.Добавить();
        Источник.Имя = "МойLocal85";
        Источник.ТипИсточникаДанных = "Local";
        Набор = СвояСхема85.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
        Набор.Имя = "МоиДвеСтроки85";
        Набор.ИсточникДанных = Источник.Имя;
        Набор.АвтоЗаполнениеДоступныхПолей = Истина;
        Набор.Запрос = "ВЫБРАТЬ Д.Наименование, Д.Категория, Д.Число * &Коэффициент85 КАК Количество
|ИЗ (ВЫБРАТЬ ""Альфа85"" КАК Наименование, ""Учебная85"" КАК Категория, 1 КАК Число
|    ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""Бета85"", ""Учебная85"", 5) КАК Д
|ГДЕ Д.Число >= &Минимум85";
        Минимум = СвояСхема85.Параметры.Добавить();
        Минимум.Имя = "Минимум85";
        Минимум.Заголовок = "Минимальное собственное число";
        Минимум.ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(9, 0));
        Минимум.Значение = 1;
        Коэффициент = СвояСхема85.Параметры.Добавить();
        Коэффициент.Имя = "Коэффициент85";
        Коэффициент.Заголовок = "Свой технический коэффициент";
        Коэффициент.ТипЗначения = Минимум.ТипЗначения;
        Коэффициент.Значение = 2;
        Базовые = СвояСхема85.НастройкиПоУмолчанию;
        Для Каждого ИмяПоля Из СтрРазделить("Наименование,Категория,Количество", ",") Цикл
            ПолеВыбора = Базовые.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
            ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
            ПолеВыбора.Использование = Истина;
        КонецЦикла;
        Детали = Базовые.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
        Детали.Имя = "МоиДетали85";
        Детали.Использование = Истина;
        АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
        АвтоВыбор.Использование = Истина;
        СвойРедактор85 = Новый КомпоновщикНастроекКомпоновкиДанных;
        Доступные85 = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СвояСхема85);
        Если ТипЗнч(Доступные85) <> Тип("ИсточникДоступныхНастроекКомпоновкиДанных") Тогда
            ВызватьИсключение "Реальный источник доступных настроек должен быть создан из своей схемы";
        КонецЕсли;
        СвойРедактор85.Инициализировать(Доступные85);
        СвойРедактор85.ЗагрузитьНастройки(Базовые);
        СвоиНастройки85 = СвойРедактор85.Настройки;
        СвоиНастройки85.ПараметрыДанных.УстановитьЗначениеПараметра("Минимум85", 1);
        СвоиНастройки85.ПараметрыДанных.УстановитьЗначениеПараметра("Коэффициент85", 2);
        СвоиДетали85 = СвоиНастройки85.Структура.Получить(0);
        ЭлементыФормы.Структура85.Значение = СвоиНастройки85;
        ЭлементыФормы.Структура85.СоздатьКолонки();
        ЭлементыФормы.Структура85.ПодробнаяНастройка = Истина;
        ЭлементыФормы.Параметры85.Значение = СвоиНастройки85.ПараметрыДанных;
        ЭлементыФормы.Параметры85.СоздатьКолонки();
        ЭлементыФормы.Результат85.Значение = Новый ТаблицаЗначений;
        КореньНастроен85 = Ложь;
        КореньМогИзмениться85 = Ложь;
        Состояние85 = "Выберите корень собственной структуры; затем НастроитьКорень85. Это thick ordinary редактор.";
    #Иначе
        ВызватьИсключение "Этот native редактор требует обычной формы толстого клиента";
    #КонецЕсли
КонецПроцедуры

Процедура НастроитьКорень85(Кнопка)
    ПроверитьСвойПустойСтенд();
    Текущие = ЭлементыФормы.Структура85.ТекущиеДанные;
    Если Текущие = Неопределено Или ТипЗнч(Текущие) <> Тип("ТекущиеДанныеСтруктурыНастроекКомпоновкиДанных") Тогда
        ВызватьИсключение "Выберите настоящую строку собственной ordinary структуры, не managed копию";
    КонецЕсли;
    Если Текущие.Строка <> СвоиНастройки85 Тогда
        ВызватьИсключение "Эта команда работает только с выбранным корнем собственных настроек";
    КонецЕсли;
    Если КореньМогИзмениться85 Тогда
        ВызватьИсключение "Свой корень уже мог измениться; после успеха или ошибки для повтора откройте новую форму";
    КонецЕсли;
    КореньМогИзмениться85 = Истина;
    Выбор = Текущие.Выбор;
    Выбор.Элементы.Очистить();
    Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество", ",") Цикл
        ПолеВыбора = Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
        ПолеВыбора.Использование = Истина;
    КонецЦикла;
    ПараметрыДанных = Текущие.ПараметрыДанных;
    ПараметрыДанных.УстановитьЗначениеПараметра("Минимум85", 1);
    ПараметрыДанных.УстановитьЗначениеПараметра("Коэффициент85", 2);
    Если ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Минимум85")).Значение <> 1
        Или ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Коэффициент85")).Значение <> 2 Тогда
        ВызватьИсключение "Настоящие параметры данных не прочитались обратно";
    КонецЕсли;
    ПараметрыВывода = Текущие.ПараметрыВывода;
    Заголовок = ПараметрыВывода.ДоступныеПараметры.НайтиПараметр(Новый ПараметрКомпоновкиДанных("Заголовок"));
    Если Заголовок = Неопределено Тогда
        ВызватьИсключение "В собственном подробном редакторе отсутствует native параметр заголовка";
    КонецЕсли;
    ПараметрыВывода.УстановитьЗначениеПараметра(Заголовок.Параметр, "Мой учебный результат85");
    Пользовательские = Текущие.ПользовательскиеПоля;
    ПолеУдвоения = Пользовательские.Элементы.Добавить(Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных"));
    ПолеУдвоения.Заголовок = "Еще раз удвоенное учебное количество";
    ПолеУдвоения.Использование = Истина;
    ПолеУдвоения.УстановитьВыражения("Количество * 2", "Сумма(Количество) * 2");
    ПутьПользовательскогоПоля85 = ПолеУдвоения.ПутьКДанным;
    Если ПутьПользовательскогоПоля85 = "" Или ПолеУдвоения.ПолучитьВыражениеДетальныхЗаписей() <> "Количество * 2" Тогда
        ВызватьИсключение "Свое native пользовательское поле не создано";
    КонецЕсли;
    ДопПоле = Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ДопПоле.Поле = Новый ПолеКомпоновкиДанных(ПутьПользовательскогоПоля85);
    ДопПоле.Использование = Истина;
    Отбор = Текущие.Отбор;
    Условие = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
    Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    Условие.ПравоеЗначение = 3;
    Условие.Использование = Истина;
    Порядок = Текущие.Порядок;
    Сортировка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
    Сортировка.Поле = Новый ПолеКомпоновкиДанных("Количество");
    Сортировка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
    Сортировка.Использование = Истина;
    Оформление = Текущие.УсловноеОформление;
    ЭлементОформления = Оформление.Элементы.Добавить();
    ЭлементОформления.Использование = Истина;
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(225, 245, 230));
    ПолеЦвета = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеЦвета.Поле = Новый ПолеКомпоновкиДанных("Количество");
    Если СвоиНастройки85.Выбор.Элементы.Количество() <> 3
        Или СвоиНастройки85.ПользовательскиеПоля.Элементы.Количество() <> 1
        Или СвоиНастройки85.Отбор.Элементы.Количество() <> 1
        Или СвоиНастройки85.Порядок.Элементы.Количество() <> 1
        Или СвоиНастройки85.УсловноеОформление.Элементы.Количество() <> 1 Тогда
        ВызватьИсключение "Изменились не настоящие свои настройки, а копия либо чужой корень";
    КонецЕсли;
    КореньНастроен85 = Истина;
    Состояние85 = "Свои параметры 1 и 2; настоящий отбор Количество>=3; пользовательское поле взято по фактическому native пути";
КонецПроцедуры

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

Процедура ОграничитьСвойРедакторПараметров85(Кнопка)
    ПроверитьСвойПустойСтенд();
    Ограничения = ЭлементыФормы.Параметры85.ОграниченияИспользования;
    Если ТипЗнч(Ограничения) <> Тип("ОграниченияИспользованияДоступныхПараметровКомпоновкиДанных") Тогда
        ВызватьИсключение "Нужна настоящая native коллекция собственного табличного поля параметров";
    КонецЕсли;
    Если Ограничения.Количество() <> 0 Тогда
        ВызватьИсключение "Урок запускается один раз на новой собственной форме с пустыми ограничениями";
    КонецЕсли;
    Если Ограничения.Найти("нет-своего-параметра85") <> Неопределено Тогда
        ВызватьИсключение "В пустой собственной коллекции поиск обязан вернуть Неопределено";
    КонецЕсли;
    Коэффициент = Ограничения.Добавить();
    Если ТипЗнч(Коэффициент) <> Тип("ОграничениеИспользованияДоступногоПараметраКомпоновкиДанных") Тогда
        ВызватьИсключение "Actual элемент должен быть parameter-restriction; ошибочный native field-return не имитируется";
    КонецЕсли;
    Коэффициент.Параметр = Новый ПараметрКомпоновкиДанных("Коэффициент85");
    Коэффициент.Доступность = Ложь;
    Минимум = Ограничения.Вставить(0);
    Минимум.Параметр = Новый ПараметрКомпоновкиДанных("Минимум85");
    Минимум.Доступность = Истина;
    Если Ограничения.Количество() <> 2 Или Ограничения.Индекс(Минимум) <> 0
        Или Ограничения.Индекс(Коэффициент) <> 1 Или Ограничения.Получить(0) <> Минимум
        Или Минимум.Параметр <> Новый ПараметрКомпоновкиДанных("Минимум85") Или Не Минимум.Доступность
        Или Коэффициент.Параметр <> Новый ПараметрКомпоновкиДанных("Коэффициент85") Или Коэффициент.Доступность Тогда
        ВызватьИсключение "Own native add/insert/order/parameter/readback не подтверждены";
    КонецЕсли;
    Ограничения.Сдвинуть(Коэффициент, -1);
    Если Ограничения.Индекс(Коэффициент) <> 0 Или Ограничения.Получить(1) <> Минимум Тогда
        ВызватьИсключение "Свой реальный элемент не передвинут на ненулевое смещение";
    КонецЕсли;
    Ограничения.Очистить();
    Если Ограничения.Количество() <> 0 Или Ограничения.Найти("нет-своего-параметра85") <> Неопределено Тогда
        ВызватьИсключение "Очищается только своя коллекция UI ограничений";
    КонецЕсли;
    Минимум = Ограничения.Добавить();
    Минимум.Параметр = Новый ПараметрКомпоновкиДанных("Минимум85");
    Минимум.Доступность = Истина;
    Коэффициент = Ограничения.Добавить();
    Коэффициент.Параметр = Новый ПараметрКомпоновкиДанных("Коэффициент85");
    Коэффициент.Доступность = Ложь;
    Если СвоиНастройки85.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Коэффициент85")).Значение <> 2 Тогда
        ВызватьИсключение "Ограничение UI не должно менять собственное значение query-параметра";
    КонецЕсли;
    ЭлементыФормы.Параметры85.ОбновитьСтроки();
    Состояние85 = "Минимум остается доступен; собственный коэффициент исключен из UI, но query все еще использует 2";
КонецПроцедуры

Процедура СформироватьСвойРезультат85(Кнопка)
    ПроверитьСвойПустойСтенд();
    Если Не КореньНастроен85 Или СвоиДетали85.ПоляГруппировки.Элементы.Количество() <> 0 Тогда
        ВызватьИсключение "Сначала настройте свой корень и восстановите собственные детальные записи";
    КонецЕсли;
    РабочиеНастройки = СвойРедактор85.ПолучитьНастройки();
    Схема = СвояСхема85;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакета.Выполнить(Схема, РабочиеНастройки, , ,
        Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    Процессор = Новый ПроцессорКомпоновкиДанных;
    Процессор.Инициализировать(Макет);
    Приемник = Новый ТаблицаЗначений;
    Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    Вывод.ОтображатьПроцентВывода = Ложь;
    Вывод.УстановитьОбъект(Приемник);
    Вывод.Вывести(Процессор, Ложь);
    Если Приемник.Количество() <> 1 Тогда
        ВызватьИсключение "Настоящий отбор должен оставить только Бета85, не просто скрыть параметр";
    КонецЕсли;
    СтрокаРезультата = Приемник.Получить(0);
    Если СтрокаРезультата.Наименование <> "Бета85" Или СтрокаРезультата.Количество <> 10 Тогда
        ВызватьИсключение "Не совпали own query данные и настоящий результат компоновки";
    КонецЕсли;
    ЕстьУдвоение = Ложь;
    Для Каждого Колонка Из Приемник.Колонки Цикл
        ЗначениеЯчейки = СтрокаРезультата[Колонка.Имя];
        Если ТипЗнч(ЗначениеЯчейки) = Тип("Число") И ЗначениеЯчейки = 20 Тогда
            ЕстьУдвоение = Истина;
        КонецЕсли;
    КонецЦикла;
    Если Не ЕстьУдвоение Тогда
        ВызватьИсключение "Собственное пользовательское выражение Количество*2 должно дать 20";
    КонецЕсли;
    ЭлементыФормы.Результат85.Значение = Приемник;
    ЭлементыФормы.Результат85.СоздатьКолонки();
    Состояние85 = "Readback actual СКД: одна Бета85, 10 и 20. Скрытие коэффициента в UI не убрало его из query.";
КонецПроцедуры

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

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

  1. Инициализируем настоящий КомпоновщикНастроек из собственной СхемаКомпоновкиДанных. После ЗагрузитьНастройки берем именно живые редактор.Настройки и их строку МоиДетали85; оба показываются собственным ordinary табличным полем.

  2. НастроитьКорень85 сначала получает реальное ТекущиеДанные и проверяет его native тип и Строка == собственные настройки. Выбор readonly как свойство, но его собственную коллекцию редактируем: две исходные колонки и одно действительное пользовательское поле.

  3. ПараметрыДанных реально задают Минимум85 = 1 и Коэффициент85 = 2. Query отбирает исходные числа по минимуму и умножает их на коэффициент; до настройки СКД количества 2 и 10.

  4. ПараметрыВывода — другой объект, не &параметр query. Из доступных параметров получаем настоящий Заголовок и устанавливаем свою надпись; этот параметр не используется как отбор и в коллекционном выводе не объявляется видимым заголовком.

  5. ПользовательскиеПоля создает реальное expression-поле Количество * 2. ПутьКДанным readonly и генерируется платформой: выбираем именно возвращенный путь, а не угадываем ПользовательскоеПоле1.

  6. Текущие Отбор, Порядок и УсловноеОформление мутируют живые собственные дочерние коллекции: Количество >= 3, сортировка убыванием и зеленый фон. Коллекционный вывод не показывает цвет, поэтому цвет отдельно изучается в редакторе; числовой отбор доказывается фактическим процессором.

  7. Для текущей строки МоиДетали85 используем ПоляГруппировки, которого нет у корня. В своей изначально пустой коллекции создаем поле Категория, проверяем живую строку, затем очищаем только его и восстанавливаем детальные записи.

  8. Из настоящего табличного поля Параметры85 читаем readonly ОграниченияИспользования. Add и Insert создают реальные элементы; readback параметров и Доступность проверяет доступный минимум и скрытый технический коэффициент.

  9. Коллекция проверяется последовательностью пусто → Add/Insert два → Move с -1 → Clear → новые два. Старые ссылки после Clear не используются. Найти показан как честный поиск отсутствующего идентификатора в доказанно пустой коллекции; положительный поиск по неустановленному ID не выдумывается.

  10. Финальная компоновка выполняется настоящими native layout/processor/output в ТаблицаЗначений: отбор оставляет Бета85, количество 10 и значение пользовательского выражения 20. Ограничение UI скрывает коэффициент, но его реальное значение 2 остается в query.

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

  1. При открытии видны две собственные query-настройки параметров; выберите корень и нажмите НастроитьКорень85. Живой выбор содержит 3 поля, пользовательских полей 1, отбора/порядка/условного оформления по одному.

  2. Выберите МоиДетали85 и нажмите проверку группировки: собственная коллекция 0 → 1 Категория → 0, исходные детальные записи восстановлены.

  3. Нажмите ограничения параметров: readback Add/Insert/Index/Get/Move/Clear проходит; Минимум85 доступен, технический Коэффициент85 скрыт из UI. Его значение в собственных данных по-прежнему 2.

  4. Сформируйте фактический результат: одна Бета85, колонка Количество = 10, среди собственных выбранных числовых колонок expression дает 20. Код не подставляет эти значения в результат вручную.

  5. Повторите формирование после ограничения UI: реальные 10 и 20 сохраняются. Это доказывает, что скрытие параметра не является запретом использования query-параметра.

  6. Нажмите настройку корня на выбранной строке деталей и наоборот: команда должна отказать до изменения коллекций. Повторная настройка того же корня тоже запрещена, не добавляет дубликаты.

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

  8. Противоречивые native ПараметрДоступен и Удалить не используются и не засчитаны. На реальном стенде сравните Actual тип Add с типом ОграничениеИспользованияДоступногоПараметраКомпоновкиДанных; несоответствие вызывает исключение, не fake success.

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

23 ранее непокрытых API включены в реальный собственный ordinary editor lifecycle, с живыми настройками, собственным источником доступных настроек, native коллекциями параметров и проверяемым кодом фактической компоновки.

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

  1. 1С и UI не запускались; статические тесты не доказывают actual native исполнение или отрисовку. Ручные проверки выполняются только в собственном стенде.

  2. Состав ТекущиеДанныеСтруктурыНастроекКомпоновкиДанных непостоянен. Нельзя читать все свойства у произвольного узла; root и details команды строго отделены и проверяют собственный Строка.

  3. У managed таблицы структуры настройки возвращается копия: ее изменение не меняет данные формы. Этот урок намеренно thick ordinary, не thin/client imitation.

  4. UI ограничение доступного параметра — не security, не запрет использования параметра в схеме и не фильтр результата; query и настоящий СКД Отбор разобраны отдельно.

  5. Native справка коллекции ошибочно называет field-restriction return/type у нескольких методов. Actual type guard основан на описанном типе элементов самой коллекции; запуск не объявляется успешным без readback.

  6. ПараметрДоступен и Удалить исключены из PRIMARY до первичного доказательства конкретных правильных аргументов; имитация неизвестного field argument запрещена.

  7. Найти в этом уроке проверяет отсутствие только в пустой собственной коллекции; строка имени параметра не объявляется доказанным внутренним ID для positive lookup.

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

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

  10. Контрольные 1/5 → 2/10 → только 10 → 20 получены из собственной схемы и выражения, не из конфигурационного справочника. Записи БД, сеть, файлы, печать и резервные копии не нужны.

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

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

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

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

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