К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как получить картинку из общих картинок в 1С

Как получить картинку из общих картинок в 1С: метод ПолучитьОбщуюКартинку, БиблиотекаКартинок, вывод на форму и в табличный документ, типичные ошибки.

Общие картинки в 1С — это ресурсы конфигурации, которые хранятся в ветке «Общие → Общие картинки» дерева конфигуратора и доступны из любого модуля. Они используются для оформления кнопок, команд, элементов форм и табличных документов, а также позволяют не дублировать одно и то же изображение в разных объектах. Получить такую картинку программно можно двумя основными способами: через глобальный контекст БиблиотекаКартинок и через метод ПолучитьОбщуюКартинку().

Выбор способа зависит от задачи. Если имя картинки известно заранее и оно зафиксировано в конфигурации, удобнее обращение через БиблиотекаКартинок.ИмяКартинки — такой код проще читается и контролируется при рефакторинге. Если имя формируется динамически (например, хранится в настройках или зависит от состояния объекта), используется ПолучитьОбщуюКартинку(ИмяКартинки), где имя передаётся строкой.

Ниже разобраны оба подхода, вывод картинки на управляемую и обычную форму, вставка в табличный документ, а также типичные ошибки, из-за которых изображение не отображается или код падает с исключением.

Где хранятся общие картинки и как их добавить

Общие картинки находятся в конфигураторе в ветке «Общие → Общие картинки». Чтобы добавить новую, нужно щёлкнуть правой кнопкой по ветке, выбрать «Добавить», задать имя и синоним, затем в свойстве «Картинка» загрузить файл изображения. Поддерживаются распространённые форматы: PNG, GIF, JPEG, BMP, а также векторные варианты в зависимости от версии платформы.

Имя общей картинки — это идентификатор, по которому к ней обращаются из кода. Оно должно быть уникальным в пределах конфигурации и подчиняться правилам именования объектов метаданных: без пробелов, без кириллицы в большинстве корпоративных стандартов разработки. Если конфигурация расширяется, картинку можно добавить и через расширение — тогда она будет доступна только в контексте этого расширения.

Отдельный источник изображений — стандартная библиотека картинок платформы. В типовых формах и при разработке можно использовать встроенные картинки (например, «СоздатьЭлементГруппы», «Печать»), которые доступны без добавления собственных файлов. Они обращаются через ту же БиблиотекаКартинок.

Получение картинки через БиблиотекаКартинок

Самый простой способ — обращение к свойству глобального контекста. Платформа автоматически формирует коллекцию БиблиотекаКартинок, в которую входят и стандартные картинки платформы, и общие картинки конфигурации. Доступ выполняется по имени как к свойству объекта.

КартинкаСтатуса = БиблиотекаКартинок.Информация;

Элементы.ДекорацияСтатус.Картинка = КартинкаСтатуса;

Важно понимать: ссылки на собственные общие картинки конфигурации и на стандартные картинки платформы выглядят одинаково. Если имя совпадает со стандартным, приоритет и поведение зависят от версии платформы, поэтому собственным картинкам лучше давать говорящие уникальные имена, например ЛоготипОрганизации или СтатусДокументаПроведен.

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

Получение картинки через ПолучитьОбщуюКартинку()

Метод глобального контекста ПолучитьОбщуюКартинку(Имя) принимает имя картинки строкой и возвращает объект типа Картинка. Это основной вариант, когда имя вычисляется в момент выполнения — например, выбирается по статусу документа или берётся из настроек пользователя.

ИмяКартинки = "Статус_" + Строка(СтатусДокумента);

КартинкаСтатуса = ПолучитьОбщуюКартинку(ИмяКартинки);

Элементы.ДекорацияСтатус.Картинка = КартинкаСтатуса;

Если картинки с указанным именем нет в конфигурации, метод вызывает исключение, поэтому при динамическом формировании имени стоит предусмотреть обработку ошибки или проверку через попытку:

Попытка

КартинкаСтатуса = ПолучитьОбщуюКартинку(ИмяКартинки);

Исключение

КартинкаСтатуса = БиблиотекаКартинок.Информация;

КонецПопытки;

Вывод картинки на управляемую форму

На управляемой форме картинку обычно выводят через элемент «Декорация» с видом «Картинка» либо назначают картинку команде или кнопке. Для декорации достаточно присвоить свойству Картинка полученный объект — в коде формы или непосредственно в конфигураторе через палитру свойств, где общие картинки доступны в выпадающем списке выбора.

// В модуле формы, например в ПриСозданииНаСервере

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Элементы.ДекорацияЛоготип.Картинка = БиблиотекаКартинок.ЛоготипОрганизации;

КонецПроцедуры

Для кнопок и команд картинка задаётся в свойстве «Картинка» команды. Если картинка назначена команде в конфигураторе, программно её менять не требуется. Программное назначение нужно, когда изображение зависит от контекста: например, разные пиктограммы для строк таблицы по состоянию строки.

Картинка в строках таблицы формы

Для таблиц формы часто используют колонку с типом «Картинка» и оформление через условное оформление формы: в зависимости от значения поля строки подставляется нужная картинка из библиотеки. Это выполняется декларативно, без обхода строк в коде, и работает быстрее ручного присвоения.

Вывод картинки в обычной форме и в табличном документе

В обычных формах (режим обычного приложения) подход аналогичен: элементу формы типа «Поле картинки» или «Надпись» с картинкой присваивается значение из БиблиотекаКартинок. Разница только в составе элементов и свойств, сам объект Картинка тот же.

В табличном документе (печатной форме) картинку вставляют через коллекцию рисунков области. Для этого в макете создают именованную область, а в коде добавляют рисунок и назначают ему картинку:

ОбластьМакета = Макет.ПолучитьОбласть("Шапка");

Рисунок = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

Рисунок.Картинка = БиблиотекаКартинок.ЛоготипОрганизации;

Рисунок.Верх = 2;

Рисунок.Лево = 2;

Рисунок.Высота = 15;

Рисунок.Ширина = 40;

ТабДокумент.Вывести(ОбластьМакета);

Альтернатива — заранее разместить рисунок в макете в конфигураторе и задать ему картинку статически. Тогда код не нужен вовсе, но поменять изображение динамически (например, логотип по организации) уже не получится без программного доступа к рисунку по имени: ОбластьМакета.Рисунки.Логотип.Картинка = ....

Порядок действий
  1. 1
    Добавьте картинку в ветку «Общие → Общие картинки» конфигуратора и задайте ей уникальное имя
  2. 2
    Загрузите файл изображения в свойство «Картинка» нового объекта
  3. 3
    В коде получите картинку через БиблиотекаКартинок.Имя или ПолучитьОбщуюКартинку("Имя")
  4. 4
    Присвойте результат элементу формы, команде или рисунку табличного документа
  5. 5
    Запустите форму или печатную форму и убедитесь, что изображение отображается

Сравнение способов получения картинки

Сравнение вариантов

БиблиотекаКартинок.Имя

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

ПолучитьОбщуюКартинку(Имя)

Подходит для динамического имени из настроек или состояния объекта. Требует обработки исключения на случай отсутствия картинки.

Статическое задание в конфигураторе

Подходит для неизменных элементов: картинка назначается в палитре свойств без кода. Ограничение — нельзя менять изображение по условию без программного вмешательства.

На практике чаще всего комбинируют: статические элементы оформляются в конфигураторе, а динамические — кодом через БиблиотекаКартинок. Метод ПолучитьОбщуюКартинку оставляют для сценариев, где имя реально вычисляется, иначе он только усложняет сопровождение.

Типичные ошибки и как их проверить

Типичные ошибки
01
Опечатка в имени картинки в ПолучитьОбщуюКартинку — исключение в момент выполнения, у пользователя форма не открывается
02
Картинка добавлена в расширение, а код обращается из основной конфигурации без учёта контекста — изображение не находится
03
Присвоение картинки элементу до его доступности (например, для несуществующего имени элемента формы) — ошибка обращения к свойству
04
Использование ПолучитьОбщуюКартинку там, где имя фиксировано — усложнение кода и потеря возможности найти использование картинки поиском
05
Слишком большой файл изображения в общих картинках — рост размера конфигурации и замедление открытия форм с этой картинкой

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

Контрольные точки

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

Отображение на форме
Норма

Картинка видна в элементе, пропорции сохранены

Тревожный признак

Пустое место или исключение при открытии формы

Код получения
Норма

Имя в коде точно совпадает с именем общей картинки в конфигураторе

Тревожный признак

Расхождение в регистре букв или лишние символы в строке имени

Табличный документ
Норма

Рисунок выводится в заданной области с ненулевыми размерами

Тревожный признак

Рисунок добавлен, но Высота или Ширина равны нулю — изображение невидимо

Ещё один практический момент: при обновлении конфигурации поставщиком собственные общие картинки могут быть затёрты, если они добавлены в типовой объект без расширения. Собственные изображения безопаснее держать в отдельных объектах с уникальными именами или в расширении конфигурации.

Итог

Что важно запомнить

Общие картинки получают через БиблиотекаКартинок.Имя при известном имени и через ПолучитьОбщуюКартинку(Имя) при динамическом. Результат присваивается элементу формы, команде или рисунку табличного документа. Динамические имена требуют обработки исключений, а собственные картинки лучше защищать от затирания при обновлениях.

Частые вопросы

Чем БиблиотекаКартинок отличается от ПолучитьОбщуюКартинку?

БиблиотекаКартинок — это коллекция, к которой обращаются по имени как к свойству, и она включает также стандартные картинки платформы. ПолучитьОбщуюКартинку — метод, принимающий имя строкой, что позволяет формировать имя динамически. По результату оба возвращают объект типа Картинка.

Можно ли получить картинку из общих картинок на клиенте в тонком клиенте?

Да. Объект Картинка и обращение к БиблиотекаКартинок доступны и на клиенте, и на сервере, поэтому для установки картинки элементу формы серверный вызов не обязателен.

Что произойдёт, если картинки с таким именем нет?

При обращении через ПолучитьОбщуюКартинку будет вызвано исключение, которое при отсутствии обработки прервёт выполнение кода. При обращении через БиблиотекаКартинок к несуществующей картинке конфигурации также возникнет ошибка. Динамические имена следует оборачивать в Попытка/Исключение.

Как вставить общую картинку в печатную форму без кода?

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

Можно ли хранить изображения не в общих картинках, а в базе данных?

Да, изображения часто хранят в реквизитах типа ХранилищеЗначения или в присоединённых файлах, а на форму выводят через навигационную ссылку или временное хранилище. Общие картинки подходят для неизменных ресурсов оформления, а пользовательские изображения — для хранения в данных.

Почему картинка в табличном документе не видна, хотя код выполняется без ошибок?

Наиболее частая причина — нулевые или слишком малые размеры рисунка (Высота, Ширина) либо размещение за пределами видимой области. Проверьте координаты Верх и Лево, а также что область с рисунком действительно выведена в итоговый табличный документ.