Коллекция ограничений использования доступных параметров системы компоновки данных.
Полное описание, параметры и ограничения
ОграниченияИспользованияДоступныхПараметровКомпоновкиДанных (DataCompositionAvailableParameterUseRestrictions)
ОграниченияИспользованияДоступныхПараметровКомпоновкиДанных (DataCompositionAvailableParameterUseRestrictions)
Доступен, начиная с версии 8.2.
Элементы коллекции:
ОграничениеИспользованияДоступногоПараметраКомпоновкиДанных
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются ограничения использования параметров.
Возможно обращение к ограничениям использования параметров посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0).
Методы:
Вставить (Insert)
Добавить (Add)
Индекс (IndexOf)
Количество (Count)
Найти (Find)
Очистить (Clear)
ПараметрДоступен (ParameterEnabled)
Получить (Get)
Сдвинуть (Move)
Удалить (Delete)
Описание:
Коллекция ограничений использования доступных параметров системы компоновки данных.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
Расширение табличного поля доступных полей компоновки данных, свойство ОграниченияИспользования
Расширение табличного поля значений параметров компоновки данных, свойство ОграниченияИспользования
Расширение таблицы формы для значений параметров компоновки данных, свойство ОграниченияИспользования
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Редактировать настоящие текущие данные СКД и отделить ограничения UI параметров от фильтра отчета
Полный ordinary thick-only модуль с собственной Local-схемой двух константных строк, двумя реальными параметрами, собственным редактором, выбором корня/деталей и проверкой фактической компоновки.
Где и как запускать
Полный модуль своей ОбщаяФорма.Редактор85, ОБЫЧНАЯ форма ТОЛСТОГО клиента; настоящие ordinary табличные поля, все объекты и результат в памяти.
Подготовка
Создайте отдельную новую пустую CF УчебныйРедакторСКД85 на 8.5.1.1343. Основной режим Обычное приложение. Бизнес-объектов, расширений, регламентных заданий и подписок нет; рабочую базу не используйте.
Создайте ОбщаяФорма.Редактор85 вида Обычная. Разместите три настоящих элемента ТабличноеПоле: Структура85, Параметры85, Результат85. Свойство Данные не связывайте с произвольной строкой имени реквизита: полный модуль устанавливает реальное native Значение для каждого поля.
Структура85 отображает настройки компоновки данных, не ТаблицаЗначений. Код задает ее Значение = собственные НастройкиКомпоновкиДанных и ПодробнаяНастройка = Истина; specialization и native ТекущиеДанные должны соответствовать этому действительному объекту.
Параметры85 получает Значение = настоящие ПараметрыДанных собственного редактора; СоздатьКолонки вызывается после назначения источника. Результат85 только для просмотра, ИзменятьСоставСтрок = Ложь; исходные данные запроса никогда не берутся из этой таблицы.
Добавьте реквизит Состояние85 Строка 500 и поле только для просмотра. Добавьте четыре обычные кнопки: НастроитьКорень85, ПроверитьСвоюГруппировку85, ОграничитьСвойРедакторПараметров85, СформироватьСвойРезультат85; свяжите Нажатие с одноименными процедурами (первый служебный параметр Кнопка).
Свяжите ordinary событие формы ПриОткрытии с ПриОткрытии() без параметров. Вставьте полный модуль на уровне формы, включая Перем и guard. Не используйте managed форму: ее ТекущиеДанные для структуры — копия структуры, не показанный native объект.
Откройте только эту общую форму в толстом клиенте, ordinary application. Схема строится в памяти из собственного запроса Local: Альфа85 с числом 1 и Бета85 с числом 5, обе категории Учебная85. Никакие таблицы базы, файлы, публикации и сетевые серверы не нужны.
В настоящем дереве выберите верхний корень настроек перед НастроитьКорень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 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Инициализируем настоящий КомпоновщикНастроек из собственной СхемаКомпоновкиДанных. После ЗагрузитьНастройки берем именно живые редактор.Настройки и их строку МоиДетали85; оба показываются собственным ordinary табличным полем.
НастроитьКорень85 сначала получает реальное ТекущиеДанные и проверяет его native тип и Строка == собственные настройки. Выбор readonly как свойство, но его собственную коллекцию редактируем: две исходные колонки и одно действительное пользовательское поле.
ПараметрыДанных реально задают Минимум85 = 1 и Коэффициент85 = 2. Query отбирает исходные числа по минимуму и умножает их на коэффициент; до настройки СКД количества 2 и 10.
ПараметрыВывода — другой объект, не &параметр query. Из доступных параметров получаем настоящий Заголовок и устанавливаем свою надпись; этот параметр не используется как отбор и в коллекционном выводе не объявляется видимым заголовком.
ПользовательскиеПоля создает реальное expression-поле Количество * 2. ПутьКДанным readonly и генерируется платформой: выбираем именно возвращенный путь, а не угадываем ПользовательскоеПоле1.
Текущие Отбор, Порядок и УсловноеОформление мутируют живые собственные дочерние коллекции: Количество >= 3, сортировка убыванием и зеленый фон. Коллекционный вывод не показывает цвет, поэтому цвет отдельно изучается в редакторе; числовой отбор доказывается фактическим процессором.
Для текущей строки МоиДетали85 используем ПоляГруппировки, которого нет у корня. В своей изначально пустой коллекции создаем поле Категория, проверяем живую строку, затем очищаем только его и восстанавливаем детальные записи.
Из настоящего табличного поля Параметры85 читаем readonly ОграниченияИспользования. Add и Insert создают реальные элементы; readback параметров и Доступность проверяет доступный минимум и скрытый технический коэффициент.
Коллекция проверяется последовательностью пусто → Add/Insert два → Move с -1 → Clear → новые два. Старые ссылки после Clear не используются. Найти показан как честный поиск отсутствующего идентификатора в доказанно пустой коллекции; положительный поиск по неустановленному ID не выдумывается.
Финальная компоновка выполняется настоящими native layout/processor/output в ТаблицаЗначений: отбор оставляет Бета85, количество 10 и значение пользовательского выражения 20. Ограничение UI скрывает коэффициент, но его реальное значение 2 остается в query.
Как проверить результат
При открытии видны две собственные query-настройки параметров; выберите корень и нажмите НастроитьКорень85. Живой выбор содержит 3 поля, пользовательских полей 1, отбора/порядка/условного оформления по одному.
Выберите МоиДетали85 и нажмите проверку группировки: собственная коллекция 0 → 1 Категория → 0, исходные детальные записи восстановлены.
Нажмите ограничения параметров: readback Add/Insert/Index/Get/Move/Clear проходит; Минимум85 доступен, технический Коэффициент85 скрыт из UI. Его значение в собственных данных по-прежнему 2.
Сформируйте фактический результат: одна Бета85, колонка Количество = 10, среди собственных выбранных числовых колонок expression дает 20. Код не подставляет эти значения в результат вручную.
Повторите формирование после ограничения UI: реальные 10 и 20 сохраняются. Это доказывает, что скрытие параметра не является запретом использования query-параметра.
Нажмите настройку корня на выбранной строке деталей и наоборот: команда должна отказать до изменения коллекций. Повторная настройка того же корня тоже запрещена, не добавляет дубликаты.
Смените подробный режим или тип источника табличного поля в своей новой копии урока: если native объект/состав свойств другой, фиксируйте конкретный отказ; не подставляйте Структура ради прохождения проверки.
Противоречивые native ПараметрДоступен и Удалить не используются и не засчитаны. На реальном стенде сравните Actual тип Add с типом ОграничениеИспользованияДоступногоПараметраКомпоновкиДанных; несоответствие вызывает исключение, не fake success.
Ожидаемый результат
23 ранее непокрытых API включены в реальный собственный ordinary editor lifecycle, с живыми настройками, собственным источником доступных настроек, native коллекциями параметров и проверяемым кодом фактической компоновки.
На что обратить внимание
1С и UI не запускались; статические тесты не доказывают actual native исполнение или отрисовку. Ручные проверки выполняются только в собственном стенде.
Состав ТекущиеДанныеСтруктурыНастроекКомпоновкиДанных непостоянен. Нельзя читать все свойства у произвольного узла; root и details команды строго отделены и проверяют собственный Строка.
У managed таблицы структуры настройки возвращается копия: ее изменение не меняет данные формы. Этот урок намеренно thick ordinary, не thin/client imitation.
UI ограничение доступного параметра — не security, не запрет использования параметра в схеме и не фильтр результата; query и настоящий СКД Отбор разобраны отдельно.
Native справка коллекции ошибочно называет field-restriction return/type у нескольких методов. Actual type guard основан на описанном типе элементов самой коллекции; запуск не объявляется успешным без readback.
ПараметрДоступен и Удалить исключены из PRIMARY до первичного доказательства конкретных правильных аргументов; имитация неизвестного field argument запрещена.
Найти в этом уроке проверяет отсутствие только в пустой собственной коллекции; строка имени параметра не объявляется доказанным внутренним ID для positive lookup.
Перед Clear убеждаемся в своей новой форме и коллекции; не очищайте ограничения, поля или пользовательские настройки чужого отчета.
Заголовок и цвет относятся к выводу/оформлению, а коллекционный приемник нужен для независимой числовой проверки. Видимый табличный результат не обещает перенести все оформление СКД.
Контрольные 1/5 → 2/10 → только 10 → 20 получены из собственной схемы и выражения, не из конфигурационного справочника. Записи БД, сеть, файлы, печать и резервные копии не нужны.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.