ОбластьПостроенияДендрограммы

Типы · DendrogramPlotArea

Используется для оформления области построения дендрограммы.

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

ОбластьПостроенияДендрограммы (DendrogramPlotArea)

ОбластьПостроенияДендрограммы (DendrogramPlotArea)

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

Свойства:
ВертикальныеМетки (VerticalLabels)
Верх (Top)
Лево (Left)
ЛинииСвязей (LinkLines)
ЛинииШкалы (ScaleLines)
Низ (Bottom)
Право (Right)
ПрозрачныйФон (Transparent)
Рамка (Border)
Расположение (Placement)
ФорматШкалыЗначений (ValueScaleFormat)
ЦветЛиний (LineColor)
ЦветРамки (BorderColor)
ЦветТекста (TextColor)
ЦветФона (BackColor)
ЦветШкалы (ScaleColor)
Шрифт (Font)

Описание:

Используется для оформления области построения дендрограммы.

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

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

См. также:
Диаграмма, свойство ОбластьПостроения
Дендрограмма, свойство ОбластьПостроения

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

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

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

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

Нормировать расстояния только в копии для собственного сравнения

В собственном дереве ищем максимальное фактическое расстояние. Копия показывает относительную шкалу 0–1, не выдавая её за заново рассчитанную модель.

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

Полный модуль своей управляемой формы в толстом клиенте Windows. Собственный кластерный расчёт, поиск настоящей диаграммы отчёта и собственное поле дендрограммы.

Подготовка

  1. Используйте отдельную учебную базу 8.5.1.1343 и толстый управляемый клиент Windows. Создайте внешнюю обработку с пустой управляемой основной формой.

  2. Создайте только команду Выполнить и её кнопку. Назначьте обработчик Выполнить(Команда), а событию ПриСозданииНаСервере — одноимённый обработчик из полного модуля.

  3. Не создавайте вручную реквизит УчебноеДерево и поле ПолеУчебногоДерева: они создаются серверной процедурой. Каждый урок запускайте в своей копии формы.

  4. Клиентский построитель отчёта анализа данных недоступен в тонком/веб-клиенте. Самостоятельное перенесение этого полного опыта на сервер тоже не подходит.

  5. Шесть точек с собственными кодами guide-point-1…6 создаются в памяти: три около (0,0), три около (10,10). Это не координаты людей, адреса клиентов или рабочие платежи.

  6. Алгоритм ДальняяСвязь формирует собственный кластерный отчёт. Код ищет настоящий рисунок типа Дендрограмма и проверяет его тип до обращения к связям. Отсутствие рисунка — явная ошибка подготовки, не выдуманный успех.

  7. Рабочие документы, файлы, сеть и печать не используются. Запуск в 1С и фактический вид диаграммы не проверены: выполните контрольные шаги на собственном стенде.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("УчебноеДерево", Новый ОписаниеТипов("Дендрограмма")));
    ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
    ЭтаФорма.УчебноеДерево = Новый Дендрограмма;
    Поле = Элементы.Добавить("ПолеУчебногоДерева", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеДендрограммы;
    Поле.ПутьКДанным = "УчебноеДерево";
    Поле.Заголовок = "Кластеры шести собственных точек";
КонецПроцедуры

&НаКлиенте
Процедура Выполнить(Команда)
    Точки = Новый ТаблицаЗначений;
    Точки.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Точки.Колонки.Добавить("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);
    Сообщить(Колонки.Получить(Колонки.Индекс(Ключ)) = Ключ);
    Построитель.Выполнить();
    Результат = Построитель.Результат;
    Если ТипЗнч(Результат) <> Тип("РезультатАнализаДанныхКластеризация") Тогда
        ВызватьИсключение "Ожидался результат кластеризации";
    КонецЕсли;
    Сообщить(Результат.КоличествоОбъектов = 6);
    Сообщить(Результат.Кластеры.Количество() = 2);
    Сообщить(Результат.ОбъектыКластеризации.Количество() = 6);
    Сообщить(Результат.ТаблицаКластеризации.Количество() = 6);
    ВсегоВКластерах = 0;
    Для Каждого Кластер Из Результат.Кластеры Цикл
        ВсегоВКластерах = ВсегоВКластерах + Кластер.КоличествоОбъектов;
        Сообщить(СтрШаблон("Размер группы=%1; координат центра=%2", Кластер.КоличествоОбъектов, Кластер.ЦентрТяжести.Количество()));
        Сообщить("Тип значений прогноза: " + Строка(ТипЗнч(Кластер.ЗначенияПолейПрогноза)));
    КонецЦикла;
    Сообщить(ВсегоВКластерах = 6);
    Сообщить("Строк таблицы связей: " + Строка(Результат.ТаблицаСвязей.Количество()));
    Сообщить("Строк матрицы расстояний: " + Строка(Результат.МежкластерныеРасстояния.Количество()));
    Сообщить(ТипЗнч(Результат.НастройкаКолонок) = Тип("КолонкиАнализаДанных"));
    Сообщить(ТипЗнч(Результат.Параметры) = Тип("ПараметрыАнализаДанных"));
    Документ = Новый ТабличныйДокумент;
    Построитель.Вывести(Документ);
    Дерево = Неопределено;
    Для Каждого Рисунок Из Документ.Рисунки Цикл
        Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Дендрограмма Тогда
            Дерево = Рисунок.Объект;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Дерево = Неопределено Тогда
        ВызватьИсключение "В собственном кластерном отчёте не найдена дендрограмма. Проверьте толстый клиент, метод ДальняяСвязь и автоматически формируемый макет";
    КонецЕсли;
    Если ТипЗнч(Дерево) <> Тип("Дендрограмма") Тогда
        ВызватьИсключение "В собственном рисунке ожидалась Дендрограмма";
    КонецЕсли;
    Если Дерево.Элементы.Количество() < 2 Или Дерево.Связи.Количество() = 0 Тогда
        ВызватьИсключение "Для опыта нужна настоящая диаграмма минимум с двумя элементами и связями";
    КонецЕсли;
    ДоЭлементов = Дерево.Элементы.Количество();
    ДоСвязей = Дерево.Связи.Количество();
    Копия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Дерево));
    Если ТипЗнч(Копия) <> Тип("Дендрограмма") Тогда
        ВызватьИсключение "Внутреннее восстановление не вернуло Дендрограмма";
    КонецЕсли;
    Если Копия.Элементы.Количество() <> ДоЭлементов Или Копия.Связи.Количество() <> ДоСвязей Тогда
        ВызватьИсключение "Копия собственного дерева не сохранила размеры коллекций";
    КонецЕсли;
    Максимум = 0;
    Для Каждого Связь Из Копия.Связи Цикл
        Если ТипЗнч(Связь.Расстояние) <> Тип("Число") Тогда
            ВызватьИсключение "Для нормирования нужны числовые расстояния";
        КонецЕсли;
        Если Связь.Расстояние < 0 Тогда
            ВызватьИсключение "Этот учебный опыт допускает только неотрицательные расстояния";
        КонецЕсли;
        Если Связь.Расстояние > Максимум Тогда
            Максимум = Связь.Расстояние;
        КонецЕсли;
    КонецЦикла;
    Если Максимум = 0 Тогда
        ВызватьИсключение "Нельзя нормировать свои расстояния делением на нулевой максимум";
    КонецЕсли;
    Для Каждого Связь Из Копия.Связи Цикл
        Исходное = Связь.Расстояние;
        Связь.Расстояние = Исходное / Максимум;
        Если Связь.Расстояние < 0 Или Связь.Расстояние > 1 Тогда
            ВызватьИсключение "Нормированное значение вышло за собственный диапазон 0–1";
        КонецЕсли;
    КонецЦикла;
    Копия.ОбластьЗаголовка.Текст = "Относительная шкала собственного дерева, не новый анализ";
    Копия.ОбластьПостроения.ФорматШкалыЗначений = "ЧДЦ=3;ЧГ=0";
    ЭтаФорма.УчебноеДерево = Копия;
    Сообщить(Копия.Элементы.Количество() = ДоЭлементов);
    Сообщить(Копия.Связи.Количество() = ДоСвязей);
    Сообщить(Дерево.Элементы.Количество() = ДоЭлементов);
    Сообщить(Дерево.Связи.Количество() = ДоСвязей);
    Документ.Показать("Исходные расстояния собственных точек; в форме отдельная нормированная копия");
КонецПроцедуры

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

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

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

  2. Пройти фактические расстояния собственной копии. Отклонить нечисто числовые/отрицательные значения, поскольку выбранное нормирование рассчитано на неотрицательную шкалу.

  3. Найти максимум до изменения хотя бы одной связи. Если все расстояния 0, остановиться до деления.

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

  5. Показать нормированную копию в своём поле с предупреждением в заголовке. Исходный ТабличныйДокумент оставить с исходными расстояниями.

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

  1. Дополнительные четыре проверки Истина: обе коллекции копии и обе коллекции исходного дерева сохранили размеры; нормированные значения проходят диапазон 0–1.

  2. В отладчике сравните фактические Расстояние исходной и скопированной первой связи. Для собственного массива 0, 2, 5 нормирование максимумом 5 означает 0, 0.4, 1; эти числа не объявляются фактическими расстояниями вашего рассчитанного дерева.

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

Математическое преобразование отделено от результата кластеризации и выполняется с проверенными границами только в копии.

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

  1. Увеличение или нормирование расстояний вручную не создаёт доказанный новый результат кластерного анализа.

  2. Диапазон шкалы 0–1 не является вероятностью покупки, точностью модели или процентом сходства клиентов.

  3. Копия и исходник используются отдельно. Строковое служебное представление не выводится пользователю и не сохраняется на диск.

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

Разместить заголовок и область построения собственного дерева

Меняем только представление настоящего кластерного дерева: относительные границы областей, рамки, цвета, шрифты и формат шкалы.

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

Полный модуль своей управляемой формы в толстом клиенте Windows. Собственный кластерный расчёт, поиск настоящей диаграммы отчёта и собственное поле дендрограммы.

Подготовка

  1. Используйте отдельную учебную базу 8.5.1.1343 и толстый управляемый клиент Windows. Создайте внешнюю обработку с пустой управляемой основной формой.

  2. Создайте только команду Выполнить и её кнопку. Назначьте обработчик Выполнить(Команда), а событию ПриСозданииНаСервере — одноимённый обработчик из полного модуля.

  3. Не создавайте вручную реквизит УчебноеДерево и поле ПолеУчебногоДерева: они создаются серверной процедурой. Каждый урок запускайте в своей копии формы.

  4. Клиентский построитель отчёта анализа данных недоступен в тонком/веб-клиенте. Самостоятельное перенесение этого полного опыта на сервер тоже не подходит.

  5. Шесть точек с собственными кодами guide-point-1…6 создаются в памяти: три около (0,0), три около (10,10). Это не координаты людей, адреса клиентов или рабочие платежи.

  6. Алгоритм ДальняяСвязь формирует собственный кластерный отчёт. Код ищет настоящий рисунок типа Дендрограмма и проверяет его тип до обращения к связям. Отсутствие рисунка — явная ошибка подготовки, не выдуманный успех.

  7. Рабочие документы, файлы, сеть и печать не используются. Запуск в 1С и фактический вид диаграммы не проверены: выполните контрольные шаги на собственном стенде.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("УчебноеДерево", Новый ОписаниеТипов("Дендрограмма")));
    ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
    ЭтаФорма.УчебноеДерево = Новый Дендрограмма;
    Поле = Элементы.Добавить("ПолеУчебногоДерева", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеДендрограммы;
    Поле.ПутьКДанным = "УчебноеДерево";
    Поле.Заголовок = "Кластеры шести собственных точек";
КонецПроцедуры

&НаКлиенте
Процедура Выполнить(Команда)
    Точки = Новый ТаблицаЗначений;
    Точки.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Точки.Колонки.Добавить("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);
    Сообщить(Колонки.Получить(Колонки.Индекс(Ключ)) = Ключ);
    Построитель.Выполнить();
    Результат = Построитель.Результат;
    Если ТипЗнч(Результат) <> Тип("РезультатАнализаДанныхКластеризация") Тогда
        ВызватьИсключение "Ожидался результат кластеризации";
    КонецЕсли;
    Сообщить(Результат.КоличествоОбъектов = 6);
    Сообщить(Результат.Кластеры.Количество() = 2);
    Сообщить(Результат.ОбъектыКластеризации.Количество() = 6);
    Сообщить(Результат.ТаблицаКластеризации.Количество() = 6);
    ВсегоВКластерах = 0;
    Для Каждого Кластер Из Результат.Кластеры Цикл
        ВсегоВКластерах = ВсегоВКластерах + Кластер.КоличествоОбъектов;
        Сообщить(СтрШаблон("Размер группы=%1; координат центра=%2", Кластер.КоличествоОбъектов, Кластер.ЦентрТяжести.Количество()));
        Сообщить("Тип значений прогноза: " + Строка(ТипЗнч(Кластер.ЗначенияПолейПрогноза)));
    КонецЦикла;
    Сообщить(ВсегоВКластерах = 6);
    Сообщить("Строк таблицы связей: " + Строка(Результат.ТаблицаСвязей.Количество()));
    Сообщить("Строк матрицы расстояний: " + Строка(Результат.МежкластерныеРасстояния.Количество()));
    Сообщить(ТипЗнч(Результат.НастройкаКолонок) = Тип("КолонкиАнализаДанных"));
    Сообщить(ТипЗнч(Результат.Параметры) = Тип("ПараметрыАнализаДанных"));
    Документ = Новый ТабличныйДокумент;
    Построитель.Вывести(Документ);
    Дерево = Неопределено;
    Для Каждого Рисунок Из Документ.Рисунки Цикл
        Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Дендрограмма Тогда
            Дерево = Рисунок.Объект;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Дерево = Неопределено Тогда
        ВызватьИсключение "В собственном кластерном отчёте не найдена дендрограмма. Проверьте толстый клиент, метод ДальняяСвязь и автоматически формируемый макет";
    КонецЕсли;
    Если ТипЗнч(Дерево) <> Тип("Дендрограмма") Тогда
        ВызватьИсключение "В собственном рисунке ожидалась Дендрограмма";
    КонецЕсли;
    Если Дерево.Элементы.Количество() < 2 Или Дерево.Связи.Количество() = 0 Тогда
        ВызватьИсключение "Для опыта нужна настоящая диаграмма минимум с двумя элементами и связями";
    КонецЕсли;
    ДоЭлементов = Дерево.Элементы.Количество();
    ДоСвязей = Дерево.Связи.Количество();
    Дерево.ПрозрачныйФон = Ложь;
    Дерево.ЦветФона = Новый Цвет(250, 251, 253);
    Дерево.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
    Дерево.ЦветРамки = Новый Цвет(80, 100, 120);
    Заголовок = Дерево.ОбластьЗаголовка;
    Заголовок.Расположение = РасположениеОбластиЗаголовкаДиаграммы.УказываетсяРасположение;
    Заголовок.Лево = 0.05;
    Заголовок.Верх = 0.02;
    Заголовок.Право = 0.95;
    Заголовок.Низ = 0.15;
    Заголовок.Текст = "Шесть собственных точек: иерархия сходства";
    Заголовок.ПрозрачныйФон = Ложь;
    Заголовок.ЦветФона = Новый Цвет(232, 240, 248);
    Заголовок.ЦветТекста = Новый Цвет(25, 45, 70);
    Заголовок.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
    Заголовок.ЦветРамки = Новый Цвет(80, 100, 120);
    Заголовок.Шрифт = Новый Шрифт("Arial", 11, Истина);
    Область = Дерево.ОбластьПостроения;
    Область.Расположение = РасположениеОбластиПостроенияДиаграммы.УказываетсяРасположение;
    Область.Лево = 0.10;
    Область.Верх = 0.20;
    Область.Право = 0.95;
    Область.Низ = 0.92;
    Область.ПрозрачныйФон = Ложь;
    Область.ЦветФона = Новый Цвет(255, 255, 255);
    Область.ЦветТекста = Новый Цвет(25, 45, 70);
    Область.ЦветЛиний = Новый Цвет(35, 85, 130);
    Область.ЦветШкалы = Новый Цвет(80, 100, 120);
    Область.ЛинииСвязей = Новый Линия(ТипЛинииДиаграммы.Сплошная, 1);
    Область.ЛинииШкалы = Новый Линия(ТипЛинииДиаграммы.Точечная, 1);
    Область.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
    Область.ЦветРамки = Новый Цвет(150, 165, 180);
    Область.Шрифт = Новый Шрифт("Arial", 10);
    Область.ВертикальныеМетки = Ложь;
    Область.ФорматШкалыЗначений = "ЧДЦ=2;ЧГ=0";
    Сообщить(Заголовок.Лево < Заголовок.Право И Заголовок.Верх < Заголовок.Низ);
    Сообщить(Область.Лево < Область.Право И Область.Верх < Область.Низ);
    Сообщить(Заголовок.Низ < Область.Верх);
    ЭтаФорма.УчебноеДерево = Дерево;
    Сообщить(Дерево.Элементы.Количество() = ДоЭлементов);
    Сообщить(Дерево.Связи.Количество() = ДоСвязей);
    Документ.Показать("Отчёт по шести собственным точкам; рабочие данные не использовались");
КонецПроцедуры

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

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

  1. Получить собственное дерево из реального отчёта, а не создавать пустую картинку для проверки стиля.

  2. ОбластьЗаголовка и ОбластьПостроения readonly как ссылки, но их собственные документированные поля настройки изменяемы. Сохранить эти объекты в переменные.

  3. Расположение=УказываетсяРасположение включает явные границы. Координаты 0–1 относительные: это доли площади диаграммы, не пиксели и не сантиметры.

  4. Заголовку выделить верхние 2–15%, области построения — 20–92%. Порядок Лево<Право и Верх<Низ проверяется отдельно.

  5. Отключить прозрачность у самого дерева и обеих областей, чтобы явно заданный фон применялся. Обычная Одинарная рамка делает заданный ЦветРамки осмысленным.

  6. Сплошная линия связи и точечная линия шкалы не меняют расстояния кластерного анализа. Формат чисел шкалы меняет подпись, не исходные данные.

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

  1. Дополнительные пять проверок Истина: обе корректные области, непересечение и сохранность размеров коллекций.

  2. Откройте своё поле в толстом клиенте и проверьте читаемость заголовка и шкалы. Свойства цвета сами по себе не доказывают фактический оттенок при иной теме или отсутствии Arial.

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

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

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

  1. При Авто платформа выбирает размещение областей; этот урок явно выбирает УказываетсяРасположение.

  2. Если ПрозрачныйФон=Истина, соответствующий ЦветФона не используется. Для Выпуклая/Вдавленная рамки ЦветРамки тоже имеет иное поведение.

  3. Нельзя присваивать Дерево.ОбластьЗаголовка или Дерево.ОбластьПостроения новые объекты. Меняются свойства полученных областей.

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

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

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

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

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