ТабличныйДокумент.Рисунки

Свойства · Drawings

Тип: КоллекцияРисунковТабличногоДокумента. Содержит коллекцию рисунков табличного документа.

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

ТабличныйДокумент.Рисунки (SpreadsheetDocument.Drawings)

ТабличныйДокумент (SpreadsheetDocument)

Рисунки (Drawings)

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

Использование:
Только чтение.
Описание:
Тип: КоллекцияРисунковТабличногоДокумента.
Содержит коллекцию рисунков табличного документа.
Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

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

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

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

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

Заполнить собственную диаграмму табличного документа и восстановить обновление при ошибке

Разбираем Обновление в его контексте обычного толстого клиента. В управляемых формах отключение этого свойства не является ускорением.

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

Учебное обычное приложение, толстый клиент Windows: собственная обычная форма внешней обработки. Это не модуль управляемой формы и не серверный вызов.

Подготовка

  1. Отдельная пустая учебная конфигурация для ОБЫЧНОГО приложения, толстый клиент Windows. Не переключайте рабочую конфигурацию и не запускайте урок в тонком клиенте.

  2. В собственной внешней обработке создайте обычную форму, добавьте кнопку УчебныйПример и назначьте её Действие одноимённой процедуре. Код — полный обработчик модуля формы, без &НаКлиенте.

  3. Документ и его рисунок создаются кодом заново. Макет типового отчёта, рабочий табличный документ и исходные файлы не используются.

Процедура УчебныйПример(Кнопка)
    Документ = Новый ТабличныйДокумент;
    Рисунок = Документ.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Диаграмма);
    Рисунок.Расположить(Документ.Область(1, 1, 20, 12));
    Диаграмма = Рисунок.Объект;
    Диаграмма.ТипДиаграммы = ТипДиаграммы.Гистограмма;
    ПрежнееОбновление = Диаграмма.Обновление;
    Диаграмма.Обновление = Ложь;
    Попытка
        Продажи = Диаграмма.УстановитьСерию("sales");
        Продажи.Текст = "Продано, шт.";
        Для Месяц = 1 По 3 Цикл
            Точка = Диаграмма.УстановитьТочку(Месяц);
            Точка.Текст = "Месяц " + Строка(Месяц);
            Диаграмма.УстановитьЗначение(Точка, Продажи, Месяц * 5);
        КонецЦикла;
        Диаграмма.ОбластьЗаголовка.Текст = "Собственные значения 5/10/15";
        Диаграмма.Обновление = ПрежнееОбновление;
    Исключение
        Диаграмма.Обновление = ПрежнееОбновление;
        ВызватьИсключение;
    КонецПопытки;
    Сообщить(Диаграмма.Обновление = ПрежнееОбновление);
    Сообщить(Диаграмма.Точки.Количество() = 3);
    Документ.Показать("Учебная диаграмма — без файла и печати");
КонецПроцедуры

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

  1. Коллекция рисунков нового табличного документа создаёт рисунок типа Диаграмма. Рисунок.Объект содержит именно диаграмму.

  2. Расположить принимает область ячеек, а не четыре отдельных числа. Используем собственную область 1,1–20,12.

  3. Сохраняем прежний режим Обновление, отключаем его на время пакетного заполнения и возвращаем при успехе и при исключении.

  4. Создаются три собственные точки 5/10/15. Показать открывает новый документ, но не вызывает печать или сохранение.

  5. Смысл свойства сверяется со справкой платформы; похожая работа с Обновление найдена в исходном отчёте УТ 10.3, но этот пример не вызывает его код.

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

  1. Два сообщения Истина: режим обновления восстановлен, точек три.

  2. Открытый собственный табличный документ показывает 5/10/15. Файл не создаётся и печать не запускается.

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

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

Пакетное заполнение и восстановление состояния разобраны в подходящем клиентском контексте, без обещания ускорения управляемой формы.

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

  1. В управляемых формах установка Обновление не влияет на производительность. Используйте для них обычные уроки Диаграмма без этого приёма.

  2. Показать — интерактивная клиентская операция; серверный фрагмент не может открыть пользователю это окно.

  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 Тогда
        ВызватьИсключение "Для опыта нужна настоящая диаграмма минимум с двумя элементами и связями";
    КонецЕсли;
    ДоЭлементов = Дерево.Элементы.Количество();
    ДоСвязей = Дерево.Связи.Количество();
    Копия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Дерево));
    Если ТипЗнч(Копия) <> Тип("Дендрограмма") Тогда
        ВызватьИсключение "Внутреннее восстановление не вернуло Дендрограмма";
    КонецЕсли;
    Если Копия.Элементы.Количество() <> ДоЭлементов Или Копия.Связи.Количество() <> ДоСвязей Тогда
        ВызватьИсключение "Копия собственного дерева не сохранила размеры коллекций";
    КонецЕсли;
    Если Копия.Связи.Количество() < 2 Тогда
        ВызватьИсключение "Для перемещения своей связи нужно не меньше двух записей";
    КонецЕсли;
    Связь = Копия.Связи.Получить(0);
    Сообщить(Копия.Связи.Индекс(Связь) = 0);
    ПервыйКонец = Связь.ПервыйЭлемент;
    ВторойКонец = Связь.ВторойЭлемент;
    Копия.Связи.Сдвинуть(Связь, 1);
    Сообщить(Копия.Связи.Индекс(Связь) = 1);
    Сообщить(Копия.Связи.Получить(1) = Связь);
    Сообщить(Связь.ПервыйЭлемент = ПервыйКонец И Связь.ВторойЭлемент = ВторойКонец);
    Копия.Связи.Удалить(Связь);
    Сообщить(Копия.Связи.Количество() = ДоСвязей - 1);
    Копия.Связи.Очистить();
    Сообщить(Копия.Связи.Количество() = 0);
    Сообщить(Копия.Элементы.Количество() = ДоЭлементов);
    ЭтаФорма.УчебноеДерево = Дерево;
    Сообщить(Дерево.Элементы.Количество() = ДоЭлементов);
    Сообщить(Дерево.Связи.Количество() = ДоСвязей);
    Документ.Показать("Отчёт по шести собственным точкам; рабочие данные не использовались");
КонецПроцедуры

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

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

  1. Внутренний формат используется только между двумя операциями в памяти. Содержимое собственной диаграммы не печатается как служебная строка и не отправляется в сеть.

  2. Проверить тип и размеры восстановленной копии. Для перемещения первой связи на следующую позицию нужны как минимум две связи.

  3. Получить(0) и Индекс возвращают запись и её положение. Сдвинуть меняет порядок коллекции, не заменяя readonly-концы связи.

  4. Удалить одну связь в копии и проверить уменьшение на 1. Такая структура уже не обязана быть полным деревом исходного кластерного анализа.

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

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

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

  2. После опыта собственный исходный отчёт и поле продолжают показывать настоящее дерево; очистка Копия.Связи не очищает Дерево.Связи.

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

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

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

  1. Дерево и Копия должны быть разными экземплярами, не двумя переменными одной ссылки. Внутреннее восстановление проверяется до мутаций.

  2. Порядок записи в Связи не является порядком объединения кластеров для иной модели. Не объявляйте перемещение новым анализом.

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

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

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

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

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

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