Получает формат картинки.
Синтаксис
Формат()Полное описание, параметры и ограничения
Картинка.Формат (Picture.Format)
Картинка (Picture)
Формат (Format)
Доступен, начиная с версии 8.0.
Синтаксис:
Формат()
Возвращаемое значение:
Тип: ФорматКартинки.
Описание:
Получает формат картинки.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Получить PNG собственного дерева с явным размером без записи файла
Получаем картинку реального дерева 640×360, проверяем формат, размеры и наличие двоичных данных. Выгрузка не превращается в печать или неизвестный путь файла.
Где и как запускать
Полный модуль своей управляемой формы в толстом клиенте Windows. Собственный кластерный расчёт, поиск настоящей диаграммы отчёта и собственное поле дендрограммы.
Подготовка
Используйте отдельную учебную базу 8.5.1.1343 и толстый управляемый клиент Windows. Создайте внешнюю обработку с пустой управляемой основной формой.
Создайте только команду Выполнить и её кнопку. Назначьте обработчик Выполнить(Команда), а событию ПриСозданииНаСервере — одноимённый обработчик из полного модуля.
Не создавайте вручную реквизит УчебноеДерево и поле ПолеУчебногоДерева: они создаются серверной процедурой. Каждый урок запускайте в своей копии формы.
Клиентский построитель отчёта анализа данных недоступен в тонком/веб-клиенте. Самостоятельное перенесение этого полного опыта на сервер тоже не подходит.
Шесть точек с собственными кодами guide-point-1…6 создаются в памяти: три около (0,0), три около (10,10). Это не координаты людей, адреса клиентов или рабочие платежи.
Алгоритм ДальняяСвязь формирует собственный кластерный отчёт. Код ищет настоящий рисунок типа Дендрограмма и проверяет его тип до обращения к связям. Отсутствие рисунка — явная ошибка подготовки, не выдуманный успех.
Рабочие документы, файлы, сеть и печать не используются. Запуск в 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 Тогда
ВызватьИсключение "Для опыта нужна настоящая диаграмма минимум с двумя элементами и связями";
КонецЕсли;
ДоЭлементов = Дерево.Элементы.Количество();
ДоСвязей = Дерево.Связи.Количество();
Изображение = Дерево.ПолучитьКартинку(640, 360, ФорматКартинки.PNG);
Если ТипЗнч(Изображение) <> Тип("Картинка") Тогда
ВызватьИсключение "Вместо собственной картинки получен другой тип";
КонецЕсли;
ДанныеPNG = Изображение.ПолучитьДвоичныеДанные();
Если ДанныеPNG = Неопределено Тогда
ВызватьИсключение "У картинки собственного дерева не получены двоичные данные";
КонецЕсли;
Сообщить(Изображение.Формат() = ФорматКартинки.PNG);
Сообщить(Изображение.Ширина() = 640);
Сообщить(Изображение.Высота() = 360);
Сообщить(ДанныеPNG.Размер() > 0);
Сообщить("Байт собственного PNG в памяти: " + Строка(ДанныеPNG.Размер()));
ЭтаФорма.УчебноеДерево = Дерево;
Сообщить(Дерево.Элементы.Количество() = ДоЭлементов);
Сообщить(Дерево.Связи.Количество() = ДоСвязей);
Документ.Показать("Отчёт по шести собственным точкам; рабочие данные не использовались");
КонецПроцедуры
&НаКлиенте
Функция ПараметрУчебногоАнализа(Параметры, Русское, Английское)
Параметр = Параметры.Найти(Русское);
Если Параметр = Неопределено Тогда
Параметр = Параметры.Найти(Английское);
КонецЕсли;
Если Параметр = Неопределено Тогда
ВызватьИсключение "Нет документированного параметра " + Русское;
КонецЕсли;
Возврат Параметр;
КонецФункцииРазбор по шагам
Сначала получить настоящую диаграмму из собственного кластерного отчёта. Пустое изображение не подставляется вместо неизвестного результата.
ПолучитьКартинку вызывается на клиенте. Все три аргумента заданы: ширина 640, высота 360, PNG вместо формата BMP по умолчанию.
Проверить возвращённый тип Картинка. Ширина, Высота и Формат у неё — методы с круглыми скобками.
ПолучитьДвоичныеДанные может вернуть Неопределено: обработать это до Размер. Число байтов само по себе не доказывает читаемость подписей.
Показать фактический размер данных и исходное дерево. Код не вызывает Картинка.Записать, Печать или отправку в HTTP.
Как проверить результат
Дополнительные шесть проверок Истина: PNG, 640, 360, непустые байты и неизменность двух коллекций.
Повторите с 800×450 и осмысленно измените проверки размеров. При маленьком размере подписи могут стать нечитабельными, хотя двоичные данные корректно созданы.
Ожидаемый результат
Содержательный экспорт в память проверен по конкретному объекту, размеру, формату и ненулевому содержимому.
На что обратить внимание
ПолучитьКартинку у Дендрограмма в установленной справке доступен тонкому и толстому клиенту, не серверу. Этот полный отчётный урок использует толстый клиент.
640×360 — пиксели картинки. Это не относительные координаты области и не размеры её шрифта.
Успешное создание картинки не доказывает запуск в 1С, внешний вид или качество статистического анализа: это проверяется отдельно на своём стенде.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Добавить собственный знак готовности и передать его как вложение HTML
Маленький SVG-знак создаётся из явно приведённого текста, без скачивания. Документ получает абсолютную картинку, а HTML-компоненты — её вложение.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Отдельная учебная база, серверный общий модуль УчебныеЗадачи. Фрагмент без директив вставьте в тело ВыполнитьПример() Экспорт.
Документ создаётся заново в памяти при каждом запуске. Существующие реквизиты, файлы и документы конфигурации не меняются.
Сообщения показывают контрольные проверки. Для визуального просмотра оформления используйте отдельную задачу с полным модулем учебной формы.
Добавление картинки и УстановитьHTML выполняются на сервере. Не переносите этот фрагмент в клиентский обработчик.
Для визуального просмотра поместите фрагмент перед Возврат Документ в серверной функции СоздатьУчебнуюПамятку полного модуля задачи с формой. Он создаст отдельный документ вместо прежней памятки.
SVG = "<svg xmlns=""http://www.w3.org/2000/svg"" width=""32"" height=""32"" viewBox=""0 0 32 32""><rect width=""32"" height=""32"" rx=""6"" fill=""#146e32""/><path d=""M8 16l5 5 11-12"" fill=""none"" stroke=""white"" stroke-width=""3""/></svg>";
ДанныеЗнака = ПолучитьДвоичныеДанныеИзСтроки(SVG, КодировкаТекста.UTF8, Ложь);
КартинкаЗнака = Новый Картинка(ДанныеЗнака);
Сообщить(КартинкаЗнака.Формат() = ФорматКартинки.SVG);
Документ = Новый ФорматированныйДокумент;
Текст = Документ.Добавить("Готово: ");
Знак = Документ.Добавить(КартинкаЗнака, Тип("КартинкаФорматированногоДокумента"));
Знак.Ширина = 32;
Знак.Высота = 32;
Знак.НавигационнаяСсылка = "";
Сообщить(Знак.Ширина = 32 И Знак.Высота = 32);
Сообщить(ТипЗнч(Знак.Картинка) = Тип("Картинка"));
Сообщить(Знак.Родитель = Текст.Родитель);
Сообщить(Знак.НавигационнаяСсылка = "");
Сообщить(Документ.ПолучитьПозициюПоЗакладке(Знак.ЗакладкаКонца) > Документ.ПолучитьПозициюПоЗакладке(Знак.ЗакладкаНачала));
HTML = "";
Вложения = Новый Структура;
Документ.ПолучитьHTML(HTML, Вложения);
Сообщить(Вложения.Количество() = 1);
Копия = Новый ФорматированныйДокумент;
Копия.УстановитьHTML(HTML, Вложения);
Сообщить(СтрНайти(Копия.ПолучитьТекст(), "Готово:") > 0);Разбор по шагам
SVG содержит только собственные фигуры rect/path и встроенные цвета, без скриптов и внешних ссылок.
Конструктор Картинка из ДвоичныеДанные создаёт абсолютную картинку. Вставка картинок в форматированный документ доступна на сервере.
Добавить возвращает КартинкаФорматированногоДокумента. Это отдельный элемент, не сам исходный объект Картинка.
Устанавливаем размер и пустую навигационную ссылку; через Родитель и закладки изучаем положение элемента рядом с текстом.
ПолучитьHTML формирует HTML и структуру вложений. Абсолютная встроенная картинка требует передачи вложения вместе с HTML.
УстановитьHTML восстанавливает копию из обоих компонентов, а не только из строки с потерянными картинками.
Как проверить результат
Все восемь сообщений Истина; вложений ровно одно, текст Готово: сохранён.
При просмотре в подготовленной форме виден собственный зелёный знак готовности; проверьте его отображение отдельно в вашем клиенте.
Ожидаемый результат
Картинка встроена в собственный документ, показана её связь с параграфом и HTML-вложением.
На что обратить внимание
Числа 32 задают размеры элемента. В этом уроке не смешиваем их с поинтами отступа параграфа.
Наличие текста в копии не является пиксельной проверкой картинки — для неё есть визуальный контроль в учебной форме.
Нельзя подставлять неизвестный SVG/HTML извне, считая этот пример проверкой безопасности содержимого.
Картинка задана данными, не внешним URL; сеть для её получения не нужна.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.