Картинка.ПолучитьДвоичныеДанные

Методы · GetBinaryData

Преобразует картинку в тип ДвоичныеДанные.

Синтаксис

ПолучитьДвоичныеДанные(<ВсеВарианты>, <ПодобратьВариант>)
Полное описание, параметры и ограничения

Картинка.ПолучитьДвоичныеДанные (Picture.GetBinaryData)

Картинка (Picture)

ПолучитьДвоичныеДанные (GetBinaryData)

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

Синтаксис:
ПолучитьДвоичныеДанные(<ВсеВарианты>, <ПодобратьВариант>)
Параметры:

<ВсеВарианты> (необязательный)
Тип: Булево.
Данный параметр используется, если картинка представлена архивом, содержащим варианты этой картинки. Если значение Ложь - будет выгружен один вариант. Если значение Истина - все варианты в виде архива.
Значение по умолчанию: Ложь.

<ПодобратьВариант> (необязательный)
Тип: Соответствие, Неопределено.
Данный параметр используется, если картинка представлена архивом, содержащим варианты этой картинки, и <ВсеВарианты> установлен в значение Ложь.
Пары "Ключ-Значение" соответствуют xml-тегам в манифесте вариантов картинки. Если параметры выбора варианта не заданы, будет выбран вариант по умолчанию. Если параметры указывают на несуществующий в архиве вариант, то будет возвращено Неопределено.
Значение по умолчанию: Неопределено.
Возвращаемое значение:
Тип: ДвоичныеДанные, Неопределено.

Описание:

Преобразует картинку в тип ДвоичныеДанные.

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

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

См. также:
Картинка, конструктор Формирование из двоичных данных

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

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

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

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

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

Задаём 640×360 пикселей и формат PNG явно. Получение картинки не равно сохранению отчёта на диск или подтверждению читаемости подписей.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Учебная база, серверный общий модуль УчебныеЗадачи, фрагмент внутри ВыполнитьПример() Экспорт.

  2. Числа вымышлены. Файлы, печать и запросы к данным конфигурации не используются.

  3. Для визуальной проверки в собственной управляемой обработке создайте реквизит КартинкаГрафика типа Картинка и поле картинки. Возвращайте Изображение из серверной функции и присваивайте реквизиту, не строке пути.

Диаграмма = Новый Диаграмма;
Диаграмма.ТипДиаграммы = ТипДиаграммы.Гистограмма;
План = Диаграмма.УстановитьСерию("plan");
План.Текст = "План, шт.";
Факт = Диаграмма.УстановитьСерию("actual");
Факт.Текст = "Факт, шт.";
Месяцы = Новый Массив;
Месяцы.Добавить(Новый Структура("Ключ,Название,План,Факт", "2026-01", "Январь", 10, 8));
Месяцы.Добавить(Новый Структура("Ключ,Название,План,Факт", "2026-02", "Февраль", 12, 11));
Месяцы.Добавить(Новый Структура("Ключ,Название,План,Факт", "2026-03", "Март", 15, 16));
Для Каждого Месяц Из Месяцы Цикл
    Точка = Диаграмма.УстановитьТочку(Месяц.Ключ);
    Точка.Текст = Месяц.Название;
    Диаграмма.УстановитьЗначение(Точка, План, Месяц.План);
    Диаграмма.УстановитьЗначение(Точка, Факт, Месяц.Факт);
КонецЦикла;
Диаграмма.ОбластьЗаголовка.Текст = "Учебный план/факт, шт.";
Диаграмма.ВидПодписей = ВидПодписейКДиаграмме.Значение;
Диаграмма.ФорматЗначенийВПодписях = "ЧДЦ=0;ЧН=0";
Диаграмма.ЦветФона = Новый Цвет(255, 255, 255);
Диаграмма.ПрозрачныйФон = Ложь;
Изображение = Диаграмма.ПолучитьКартинку(640, 360, ФорматКартинки.PNG);
Сообщить(Изображение.Ширина() = 640);
Сообщить(Изображение.Высота() = 360);
БайтыPNG = Изображение.ПолучитьДвоичныеДанные();
Если БайтыPNG = Неопределено Тогда
    ВызватьИсключение "Не получены двоичные данные собственного PNG";
КонецЕсли;
Сообщить(БайтыPNG.Размер() > 0);
Копия = Новый Картинка(БайтыPNG);
Сообщить(Копия.Ширина() = 640 И Копия.Высота() = 360);
Сообщить("PNG сформирован только в памяти, файл не записывался.");

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

  1. Полная собственная матрица план/факт создаётся в памяти и оформляется до получения картинки.

  2. ПолучитьКартинку получает размеры и формат явно: нулевые размеры означают отдельное поведение текущего элемента или размеров по умолчанию.

  3. Ширина() и Высота() картинки — методы, не свойства. Проверяем заданные 640×360.

  4. ПолучитьДвоичныеДанные даёт PNG; проверяем наличие и размер, затем создаём отдельную Картинка из этих байтов.

  5. Записать не вызывается. Картинка в памяти может быть показана через собственный реквизит, но это отдельная визуальная проверка.

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

  1. Четыре булевых сообщения Истина: размеры исходной и повторно созданной картинки совпадают, байты не пустые.

  2. При показе через реквизит формы отдельно проверьте читаемость месяцев, легенды и чисел. Ненулевой размер байтов этого не доказывает.

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

Растровое представление получено с контролируемыми размерами и пройдено обратное создание картинки без файла.

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

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

  2. Не используйте размеры 0, если нужен предсказуемый размер внешнего изображения.

  3. При реальной выгрузке файл, доставка и права доступа требуют отдельного явного решения; здесь их нет.

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

Получить PNG собственного дерева с явным размером без записи файла

Получаем картинку реального дерева 640×360, проверяем формат, размеры и наличие двоичных данных. Выгрузка не превращается в печать или неизвестный путь файла.

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

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

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

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

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

  2. ПолучитьКартинку вызывается на клиенте. Все три аргумента заданы: ширина 640, высота 360, PNG вместо формата BMP по умолчанию.

  3. Проверить возвращённый тип Картинка. Ширина, Высота и Формат у неё — методы с круглыми скобками.

  4. ПолучитьДвоичныеДанные может вернуть Неопределено: обработать это до Размер. Число байтов само по себе не доказывает читаемость подписей.

  5. Показать фактический размер данных и исходное дерево. Код не вызывает Картинка.Записать, Печать или отправку в HTTP.

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

  1. Дополнительные шесть проверок Истина: PNG, 640, 360, непустые байты и неизменность двух коллекций.

  2. Повторите с 800×450 и осмысленно измените проверки размеров. При маленьком размере подписи могут стать нечитабельными, хотя двоичные данные корректно созданы.

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

Содержательный экспорт в память проверен по конкретному объекту, размеру, формату и ненулевому содержимому.

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

  1. ПолучитьКартинку у Дендрограмма в установленной справке доступен тонкому и толстому клиенту, не серверу. Этот полный отчётный урок использует толстый клиент.

  2. 640×360 — пиксели картинки. Это не относительные координаты области и не размеры её шрифта.

  3. Успешное создание картинки не доказывает запуск в 1С, внешний вид или качество статистического анализа: это проверяется отдельно на своём стенде.

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

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

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

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

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