ЭлементУправленияКолонкамиАнализаДанных

Типы · DataAnalysisColumnsControl

Предназначен для управления доступностью интерактивного изменения колонки анализа данных.

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

ЭлементУправленияКолонкамиАнализаДанных (DataAnalysisColumnsControl)

ЭлементУправленияКолонкамиАнализаДанных (DataAnalysisColumnsControl)

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

Свойства:
Доступность (Enabled)
Имя (Name)

Описание:

Предназначен для управления доступностью интерактивного изменения колонки анализа данных.

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

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

См. также:
НастройкаКолонокАнализаДанных
НастройкаКолонокАнализаДанных, метод Найти
НастройкаКолонокАнализаДанных, метод Получить
НастройкаКолонокАнализаДанных, метод Индекс
НастройкаКолонокАнализаДанных, метод Удалить

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

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

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

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

Анализ данных: ограничить ручное редактирование колонок и параметров, не меняя расчёт

Два собственных обычных табличных поля редактируют настоящие коллекции построителя. Интерфейсные правила запрещают менять ключ и число кластеров; полный повторный расчёт проверяет сохранность шести исходных точек.

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

Полный модуль собственной обычной общей формы Уч85РедакторАнализа, только толстый клиент Windows. Ни клиентских директив, ни серверных вызовов; не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343. Имя конфигурации УчебныйРедакторАнализа85, совместимость НеИспользовать, основной режим Обычное приложение. Без документов, справочников, расширений, обменов или обработчиков с внешними действиями. Здесь ничего не запускалось: runtimeVerifiedScenarios=0.

  2. Общие формы → Уч85РедакторАнализа, тип Обычная. На ней два собственных элемента ТабличноеПоле: Колонки85 и Параметры85. У обоих Данные пусто, ТолькоПросмотр=Нет, ИзменятьСоставСтрок=Нет; не связывайте с реквизитом или переменной. Не назначайте эти поля владельцами открываемых форм: тогда свойства общего расширения недоступны.

  3. На этой же обычной форме три отдельные кнопки Ограничить, Снять, Проверить. Обработчики Нажатие назначаются полным модулем через Новый Действие; все три процедуры экспортные. Событие ПриОткрытии самой формы назначьте процедуре ПриОткрытии. Вставьте весь основной модуль целиком, включая Перем СвойПостроитель, фабрику, проверку и вспомогательную функцию.

  4. Создайте собственную общую команду ОткрытьРедакторАнализа без параметра. Ниже её полный клиентский модуль, который открывает собственную общую форму. Добавьте команду в свою подсистему. F7, обновите только новую учебную базу, запустите толстый клиент Windows в обычном приложении. Не используйте тонкий/веб-клиент или рабочую УТ/КА2.

  5. У несвязанного табличного поля ТипЗначения разрешён для записи: сначала задаём точный тип настоящей коллекции, затем её Значение и СоздатьКолонки. Значение — свойство общего расширения элементов обычной формы, а не объявленное собственное свойство ТабличноеПоле. Если поле уже связано с данными, изменять ТипЗначения нельзя.

  6. Источник — шесть вымышленных точек: (0,0), (0,1), (1,0), (10,10), (10,11), (11,10). Код — ключ; X и Y — непрерывные входы. Число кластеров=2, метод ДальняяСвязь, заполнение ВсеПоля. Никаких настоящих клиентов, продаж, сетевых моделей, файлов, печати или сохранения пользовательских настроек.

Перем СвойПостроитель;

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

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

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

Процедура ПроверитьНажатие(Кнопка) Экспорт
    ПроверитьСвойСтенд();
    ПроверитьСвойРасчет();
КонецПроцедуры

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

Процедура ПроверитьСвойРасчет()
    Ключ = СвойПостроитель.НастройкаКолонок.Найти("Код");
    X = СвойПостроитель.НастройкаКолонок.Найти("X");
    Y = СвойПостроитель.НастройкаКолонок.Найти("Y");
    Если Ключ = Неопределено Или X = Неопределено Или Y = Неопределено Тогда
        ВызватьИсключение "Исходные три колонки нельзя удалить настройками редактора";
    КонецЕсли;
    Количество = ПараметрУчебногоАнализа(СвойПостроитель.Параметры, "КоличествоКластеров", "ClusterCount");
    Метод = ПараметрУчебногоАнализа(СвойПостроитель.Параметры, "МетодКластеризации", "ClusterizationMethod");
    Заполнение = ПараметрУчебногоАнализа(СвойПостроитель.Параметры, "ТипЗаполненияТаблицы", "TableFillType");
    Если СвойПостроитель.НастройкаКолонок.Количество() <> 3 Или СвойПостроитель.Параметры.Количество() <> 5
        Или Ключ.ТипКолонки <> ТипКолонкиАнализаДанныхКластеризация.Ключ
        Или X.ТипКолонки <> ТипКолонкиАнализаДанныхКластеризация.Входная
        Или Y.ТипКолонки <> ТипКолонкиАнализаДанныхКластеризация.Входная
        Или X.ВидДанных <> ВидДанныхАнализа.Непрерывные Или Y.ВидДанных <> ВидДанныхАнализа.Непрерывные
        Или Количество.Значение <> 2 Или Метод.Значение <> МетодКластеризации.ДальняяСвязь
        Или Заполнение.Значение <> ТипЗаполненияТаблицыРезультатаАнализаДанных.ВсеПоля Тогда
        ВызватьИсключение "Изменены настоящие настройки расчёта, а не только флаги редактора";
    КонецЕсли;
    Источник = СвойПостроитель.ИсточникДанных;
    Если Источник.Количество() <> 6 Или Источник.Колонки.Количество() <> 3 Тогда
        ВызватьИсключение "Собственный источник должен содержать шесть точек и три колонки";
    КонецЕсли;
    Ожидаемые = Новый Массив;
    Ожидаемые.Добавить(Новый Структура("X,Y", 0, 0));
    Ожидаемые.Добавить(Новый Структура("X,Y", 0, 1));
    Ожидаемые.Добавить(Новый Структура("X,Y", 1, 0));
    Ожидаемые.Добавить(Новый Структура("X,Y", 10, 10));
    Ожидаемые.Добавить(Новый Структура("X,Y", 10, 11));
    Ожидаемые.Добавить(Новый Структура("X,Y", 11, 10));
    Для Номер = 0 По 5 Цикл
        Точка = Источник.Получить(Номер);
        Если Точка.Код <> "guide-point-" + Строка(Номер + 1)
            Или Точка.X <> Ожидаемые[Номер].X Или Точка.Y <> Ожидаемые[Номер].Y Тогда
            ВызватьИсключение "Исходные учебные координаты или ключ изменены";
        КонецЕсли;
    КонецЦикла;
    СвойПостроитель.Выполнить();
    Результат = СвойПостроитель.Результат;
    Если ТипЗнч(Результат) <> Тип("РезультатАнализаДанныхКластеризация") Тогда
        ВызватьИсключение "Расчёт должен дать настоящий результат кластеризации";
    КонецЕсли;
    Если Результат.КоличествоОбъектов <> 6 Или Результат.Кластеры.Количество() <> 2
        Или Результат.ОбъектыКластеризации.Количество() <> 6 Или Результат.ТаблицаКластеризации.Количество() <> 6 Тогда
        ВызватьИсключение "Шесть точек должны остаться в результате двух кластеров";
    КонецЕсли;
    Всего = 0;
    Для Каждого Кластер Из Результат.Кластеры Цикл
        Всего = Всего + Кластер.КоличествоОбъектов;
    КонецЦикла;
    Если Всего <> 6 Тогда
        ВызватьИсключение "В кластерах нельзя потерять исходные объекты";
    КонецЕсли;
    Сообщить("Настоящий расчёт: объектов=6, кластеров=2, строк полной таблицы=6. Сеть, файл, печать и прогноз не выполняются.");
КонецПроцедуры

Процедура СоздатьСвойАнализ()
    Точки = Новый ТаблицаЗначений;
    Точки.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Точки.Колонки.Добавить("X", Новый ОписаниеТипов("Число"));
    Точки.Колонки.Добавить("Y", Новый ОписаниеТипов("Число"));
    Координаты = Новый Массив;
    Координаты.Добавить(Новый Структура("X,Y", 0, 0));
    Координаты.Добавить(Новый Структура("X,Y", 0, 1));
    Координаты.Добавить(Новый Структура("X,Y", 1, 0));
    Координаты.Добавить(Новый Структура("X,Y", 10, 10));
    Координаты.Добавить(Новый Структура("X,Y", 10, 11));
    Координаты.Добавить(Новый Структура("X,Y", 11, 10));
    Для Индекс = 0 По 5 Цикл
        Точка = Точки.Добавить();
        Точка.Код = "guide-point-" + Строка(Индекс + 1);
        Точка.X = Координаты[Индекс].X;
        Точка.Y = Координаты[Индекс].Y;
    КонецЦикла;
    СвойПостроитель = Новый ПостроительОтчетаАнализаДанных;
    СвойПостроитель.ТипАнализа = Тип("АнализДанныхКластеризация");
    СвойПостроитель.ИсточникДанных = Точки;
    СвойПостроитель.ОтображатьСостояние = Ложь;
    СвойПостроитель.ОбрабатыватьПрерываниеПользователя = Истина;
    Колонки = СвойПостроитель.НастройкаКолонок;
    Ключ = Колонки.Найти("Код");
    X = Колонки.Найти("X");
    Y = Колонки.Найти("Y");
    Если Ключ = Неопределено ИЛИ X = Неопределено ИЛИ Y = Неопределено Тогда
        ВызватьИсключение "Нет трёх настроек собственных колонок";
    КонецЕсли;
    Ключ.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Ключ;
    Ключ.ВидДанных = ВидДанныхАнализа.Дискретные;
    X.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
    X.ВидДанных = ВидДанныхАнализа.Непрерывные;
    Y.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
    Y.ВидДанных = ВидДанныхАнализа.Непрерывные;
    Количество = ПараметрУчебногоАнализа(СвойПостроитель.Параметры, "КоличествоКластеров", "ClusterCount");
    Если НЕ Количество.ТипЗначения.СодержитТип(Тип("Число")) Тогда
        ВызватьИсключение "У параметра количества ожидается числовой тип";
    КонецЕсли;
    Количество.Значение = 2;
    Метод = ПараметрУчебногоАнализа(СвойПостроитель.Параметры, "МетодКластеризации", "ClusterizationMethod");
    Метод.Значение = МетодКластеризации.ДальняяСвязь;
    Заполнение = ПараметрУчебногоАнализа(СвойПостроитель.Параметры, "ТипЗаполненияТаблицы", "TableFillType");
    Заполнение.Значение = ТипЗаполненияТаблицыРезультатаАнализаДанных.ВсеПоля;
    Сообщить("Параметр: " + Количество.Имя + "; заголовок: " + Количество.Заголовок);
    Сообщить(Количество.Значение = 2);
    Сообщить(Ключ.Имя = "Код");
    Сообщить("Тип дополнительных параметров X: " + Строка(ТипЗнч(X.ДополнительныеПараметры)));
    Сообщить(Колонки.Количество() = 3);
    Сообщить(Колонки.Получить(Колонки.Индекс(Ключ)) = Ключ);
КонецПроцедуры

Функция ПараметрУчебногоАнализа(Параметры, Русское, Английское)
    Параметр = Параметры.Найти(Русское);
    Если Параметр = Неопределено Тогда
        Параметр = Параметры.Найти(Английское);
    КонецЕсли;
    Если Параметр = Неопределено Тогда
        ВызватьИсключение "Нет документированного параметра " + Русское;
    КонецЕсли;
    Возврат Параметр;
КонецФункции

Процедура ПроверитьСвойСтенд()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд УчебныйРедакторАнализа85 платформы 8.5.1.1343";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры
ОткрытьРедакторАнализа

УчебныйРедакторАнализа85 → Общие команды → ОткрытьРедакторАнализа → Модуль

Полный клиентский модуль собственной общей команды. Не выполнялся.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ОткрытьФорму("ОбщаяФорма.Уч85РедакторАнализа");
КонецПроцедуры

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

  1. СоздатьСвойАнализ воспроизводит уже существующий полный урок кластеризации: создаёт собственную таблицу, настоящий построитель, три настройки колонок и реальные параметры. Имя параметра читается из объекта после поиска по документированному русскому/английскому имени, а не угадывается из подписи.

  2. Колонки85.Значение получает КолонкиАнализаДанных; поэтому НастройкаКолонок элемента формы имеет другой тип — НастройкаКолонокАнализаДанных. Параметры85.Значение получает ПараметрыАнализаДанных; НастройкаПараметров элемента формы — НастройкаПараметровАнализаДанных. Это две интерфейсные коллекции, не настройки математической модели.

  3. ПриОткрытии очищает только правила двух вновь созданных собственных элементов. Ограничить требует обе пустые коллекции, поэтому повторный вызов или неизвестные правила не затираются.

  4. Добавить в обеих коллекциях документирован как процедура без возвращаемого элемента. Поэтому результат не присваивается: получаем настоящее правило через Найти. Имя берём из действительной исходной колонки/параметра, не из Заголовок и не из названия кнопки.

  5. Правило Код=False запрещает интерактивное изменение ключевой колонки. Временное X без второго аргумента показывает Доступность=True по умолчанию. Проверяем настоящий тип, readonly Имя, mutable Доступность и число правил; включение/выключение изменяет только флаг собственного элемента.

  6. Индекс сначала проверяем на -1 и границы. Получить(Индекс) должен вернуть тот же элемент. Удалить получает именно найденный ЭлементУправленияКолонкамиАнализаДанных, не КолонкаАнализаДанных исходной модели. Исходная X не удаляется.

  7. Очистить убирает интерфейсное правило Код и nullable Найти возвращает Неопределено. После этого снова добавляем только своё окончательное правило Код=False; неизвестные правила никогда не очищаются командой Ограничить.

  8. У параметров аналогично: настоящее имя КоличествоКластеров=False и временное имя ТипЗаполненияТаблицы=True. Проверяем тип элемента параметров, имя, изменение флага, Индекс/Получить, удаление временного правила. В модели остаются все пять документированных параметров.

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

  10. ПроверитьСвойРасчет до и после каждого изменения проверяет исходные координаты и ключи, роли колонок, значение числа кластеров 2, метод и заполнение. Затем запускает настоящий расчёт: тип результата, шесть объектов, две группы, шесть строк и сумма количества объектов в группах 6. Не заполняем результат ожидаемыми строками.

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

  1. Будущий ручной тест на своём стенде: F7 → толстый клиент → ОткрытьРедакторАнализа. Появляются два собственных редактора. Проверки коллекций и исходного расчёта проходят; отрисовка здесь не проверялась.

  2. Нажмите Ограничить. Ожидаются ровно два окончательных интерфейсных правила: Код=False и каноническое имя параметра количества кластеров=False. Попробуйте вручную менять только их в своих редакторах: запрещённые изменения должны быть недоступны. Статическая проверка флага не доказывает фактический UI.

  3. Настоящий расчёт до/после: объектов=6, кластеров=2, строк полной таблицы=6, сумма размеров групп=6. Номер и порядок групп не объявляются постоянным бизнес-идентификатором.

  4. Нажмите Снять: в обеих коллекциях правил 0, исходные три колонки и пять параметров сохранены. Вручную проверьте возвращение возможности редактирования, затем повторите Ограничить без изменения самой модели.

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

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

Будущий результат: отдельные настройки собственного редактора блокируются и восстанавливаются; собственный расчёт сохраняет все шесть точек. В 1С и UI не проверялось.

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

  1. Доступность интерфейсного правила не является RLS, правом доступа, защитой от программного изменения или фиксацией математической модели. Значение параметра в модели задаётся отдельно; не используйте запрет редактора для защиты секретных данных.

  2. Не путайте КолонкиАнализаДанных с НастройкаКолонокАнализаДанных и ПараметрыАнализаДанных с НастройкаПараметровАнализаДанных. Конструкторы интерфейсных коллекций/элементов не выдумываются: они получены от расширений собственных обычных табличных полей.

  3. Имя элементов интерфейсных правил только читается. Добавить не обещает возвращаемое значение; Найти nullable. Удалить требует элемент именно своей коллекции, не строку имени и не элемент исходных настроек модели.

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

  5. Обычные поля, их расширения и построитель используются только в толстом клиенте. Возможность сериализации исходных коллекций не доказывает доступность UI в тонком/веб-клиенте.

  6. Код не выполняется автоматически из HTML. Сигнатуры сверены с установленной справкой; учебный набор проверен статически. Визуальное поведение нужно проверить отдельно на новом стенде: runtimeVerifiedScenarios=0.

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

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

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

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

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