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

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

Коллекция картинок в 1С: как сделать и использовать

Как создать коллекцию картинок в 1С, добавить изображения в конфигураторе, обратиться к картинке из кода и хранить картинки в базе данных.

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

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

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

Что такое общая картинка и когда она нужна

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

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

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

Как создать общую картинку в конфигураторе

Откройте конфигурацию в конфигураторе и в дереве объектов найдите ветку «Общие» → «Общие картинки». Если конфигурация закрыта для редактирования (типовая на полной поддержке), сначала включите возможность изменения через меню «Конфигурация» → «Поддержка» → «Настройка поддержки». Учтите, что изменение типовой конфигурации усложняет последующие обновления.

Нажмите кнопку добавления (или правой кнопкой — «Добавить»). В палитре свойств задайте имя картинки латинскими буквами без пробелов — именно по этому имени вы будете обращаться к ней из кода. Затем в свойстве «Картинка» нажмите кнопку выбора и загрузите файл изображения с диска.

После загрузки сохраните конфигурацию (F7 или «Конфигурация» → «Сохранить конфигурацию») и обновите конфигурацию базы данных (F5 с подтверждением или «Обновить конфигурацию базы данных»). Без обновления картинка не попадёт в рабочую базу.

Порядок добавления общей картинки
  1. 1
    Откройте конфигуратор и ветку «Общие» → «Общие картинки»
  2. 2
    Нажмите «Добавить» и задайте имя латиницей, например ЛоготипКомпании
  3. 3
    В свойстве «Картинка» загрузите файл изображения
  4. 4
    Сохраните конфигурацию и обновите конфигурацию базы данных
  5. 5
    Проверьте доступность: в модуле наберите БиблиотекаКартинок. — имя должно появиться в подсказке

Формат, размер и прозрачность изображения

Платформа корректно работает с распространёнными форматами: PNG, JPEG, GIF, BMP. Для пиктограмм интерфейса предпочтителен PNG — он поддерживает прозрачность и не теряет качество при сжатии. JPEG подходит для фотографий и логотипов без прозрачного фона, но на мелких элементах даёт заметные артефакты.

Размер подбирайте под место использования. Для кнопок команд обычно достаточно 16×16 или 32×32 пикселя, для логотипа в печатной форме ориентируйтесь на фактическую область вывода в табличном документе. Избыточно большие изображения увеличивают размер конфигурации и замедляют её загрузку, поэтому перед добавлением уменьшайте картинки в графическом редакторе до реально нужных габаритов.

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

Как обратиться к картинке из кода

Для программного доступа используется объект БиблиотекаКартинок. Обращение выполняется по имени: БиблиотекаКартинок.ЛоготипКомпании — вернёт объект типа «Картинка». Встроенные картинки платформы доступны так же, например БиблиотекаКартинок.СоздатьЭлементСписка.

Типичный пример — назначение картинки команде формы или декорации:

// Картинка для декорации формы

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

// Картинка для кнопки, созданной программно

НоваяКнопка.Картинка = БиблиотекаКартинок.Печать;

НоваяКнопка.Отображение = ОтображениеКнопки.Картинка;

Если имя картинки известно только в виде строки (например, хранится в настройках), используйте вычисляемое обращение: БиблиотекаКартинок[ИмяКартинки]. При отсутствии картинки с таким именем будет вызвана ошибка, поэтому динамические обращения оборачивайте в попытку/исключение.

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

В печатных формах картинки выводятся через объект «Рисунок» табличного документа. В макете добавьте область с рисунком, задайте ему имя, а в коде найдите рисунок и подставьте картинку из библиотеки:

ТабДокумент = Новый ТабличныйДокумент;

Макет = ПолучитьМакет("МакетСчета");

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

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

Рисунок = ТабДокумент.Рисунки.Найти("Логотип");

Если Рисунок <> Неопределено Тогда

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

КонецЕсли;

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

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

Хранение картинок в базе данных: альтернатива общим картинкам

Когда изображения добавляют пользователи — фотографии номенклатуры, сканы документов, логотипы контрагентов — их хранят не в конфигурации, а в данных. Стандартный подход: реквизит объекта с типом «ХранилищеЗначения», куда помещают двоичные данные файла.

Загрузка и получение картинки выглядят так:

// Запись картинки в реквизит типа ХранилищеЗначения

ДвоичныеДанные = Новый ДвоичныеДанные("C:\Images\photo.jpg");

Объект.ФайлКартинки = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));

Объект.Записать();

// Чтение и вывод на форму

ДвоичныеДанные = Объект.ФайлКартинки.Получить();

Если ДвоичныеДанные <> Неопределено Тогда

АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);

КонецЕсли;

Для отображения на управляемой форме реквизит формы типа «Строка» заполняется адресом временного хранилища, а элемент формы «Поле картинки» отображает изображение по этому адресу. В типовых конфигурациях для этого часто используют присоединённые файлы — готовый механизм библиотеки стандартных подсистем, который решает задачу без самостоятельной разработки.

Где хранить картинки

Общие картинки конфигурации

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

ХранилищеЗначения в реквизите

Подходит для пользовательских изображений. Гибко, но требует своей реализации загрузки, хранения и вывода.

Присоединённые файлы (БСП)

Готовый механизм для файлов и картинок в типовых конфигурациях. Требует наличия библиотеки стандартных подсистем.

Проверка результата и типичные ошибки

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

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

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

Итог

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

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

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

Можно ли заменить картинку без обновления конфигурации?

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

Почему БиблиотекаКартинок не видит мою картинку?

Чаще всего не обновлена конфигурация базы данных после добавления картинки. Также проверьте точное написание имени — оно чувствительно к регистру при обращении через квадратные скобки, и убедитесь, что код выполняется в контексте, где библиотека картинок доступна (на сервере или толстом клиенте — доступна везде).

Какой формат лучше для пиктограмм команд?

PNG с прозрачным фоном. Он корректно отображается на любом фоне формы и не даёт артефактов сжатия на мелких элементах, в отличие от JPEG. Размера 16×16 или 32×32 пикселя обычно достаточно.

Как вывести картинку из базы на управляемую форму?

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

Влияет ли количество общих картинок на производительность?

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