Свои иконки в конфигурации 1С 8.3: от файла PNG до кнопки на форме
Содержание
Чтобы добавить пиктограмму в 1С, откройте Конфигуратор, в дереве метаданных разверните Общие → Общие картинки, создайте новую картинку и загрузите в неё файл PNG. Потом укажите эту картинку в свойстве Картинка нужного объекта: подсистемы, команды или кнопки формы. Сохраните конфигурацию и обновите базу данных (F7).
Это общий механизм платформы 1С:Предприятие 8.3, он одинаков в любой конфигурации. Разница только в том, где вы правите: в своей конфигурации, в типовой со снятой поддержкой или в расширении. Ниже — каждый этап по порядку, с размерами, кодом и подводными камнями.
Какие файлы подходят для иконок 1С
Платформа принимает почти все распространённые форматы. Но для интерфейса подходят не все одинаково.
| Формат | Прозрачность | Где уместен |
|---|---|---|
| PNG | Да, альфа-канал | Иконки кнопок, команд, разделов. Основной выбор |
| SVG | Да | Иконки, которые должны чётко выглядеть при масштабе 125–200% (поддерживается в современных версиях 8.3) |
| ICO | Да | Если иконка уже есть в этом формате |
| GIF | Только один цвет | Простые значки, анимация |
| BMP, JPG | Нет | Фотографии, логотипы на печатных формах. Для кнопок не годятся |
Перед загрузкой подготовьте файл:
- 📐 Размер под место. Для кнопок и команд — 16×16 пикселей. Для разделов на панели разделов берут крупнее: 24×24 или 32×32. Проверьте результат на экране, а не на глаз в редакторе.
- 🪟 Прозрачный фон. У PNG фон должен быть прозрачным, иначе на кнопке появится белый квадрат.
- 🎨 Единый стиль. Иконки «Такси» плоские, с тонким контуром. Объёмная глянцевая картинка рядом с ними выглядит чужой.
- ✂️ Лёгкий вес. Иконка 16×16 занимает 1–2 КБ. Если файл весит 200 КБ, в нём, скорее всего, лишние метаданные или он просто больше нужного.
Для высокой плотности пикселей (масштаб 150% и выше) нарисуйте иконку сразу в двух размерах — 16×16 и 32×32. Платформа умеет хранить несколько вариантов одной картинки: их загружают ZIP-архивом с файлом описания manifest.xml. Если возиться с архивом не хочется — используйте SVG.
Создание общей картинки в Конфигураторе
Общая картинка — это объект метаданных. Её можно назначить сколько угодно элементам интерфейса, а при замене файла иконка обновится везде сразу.
- Откройте базу в режиме Конфигуратор. Если конфигурация не открыта, выберите
Конфигурация → Открыть конфигурацию. - В дереве разверните
Общиеи найдите веткуОбщие картинки. - Щёлкните по ветке правой кнопкой и выберите
Добавить. - На вкладке основных свойств задайте
Имялатиницей или кириллицей без пробелов, напримерЗагрузкаПрайса. Синоним можно не заполнять. - Откройте саму картинку (двойной щелчок по объекту или кнопка открытия рядом с полем картинки) и загрузите файл с диска.
- Убедитесь, что в окне предпросмотра видна иконка, а не пустое поле. Закройте окно.
- Сохраните конфигурацию и выполните
Конфигурация → Обновить конфигурацию базы данных(F7).
Перед изменениями в рабочей базе сделайте резервную копию — выгрузку в .dt или копию каталога файловой базы. Добавление картинки безопасно само по себе, но обновление конфигурации базы данных лучше проводить, когда в базе нет пользователей.
Если конфигурация типовая и на поддержке
В типовой БП, ЗУП или УТ объекты на поддержке редактировать нельзя без снятия с поддержки. Снимать её ради иконки — плохая идея: каждое обновление превратится в ручное сравнение.
Правильный путь — расширение конфигурации :
Конфигурация → Расширения конфигурации→ добавьте новое расширение.- В дереве расширения создайте собственную общую картинку так же, как описано выше.
- Заимствуйте форму, где нужна иконка, и укажите картинку у нужной кнопки в заимствованной форме.
- Свои команды и подсистемы, созданные в расширении, получают картинку обычным свойством.
Расширение переживает обновления типовой, а иконки остаются на месте.
Как назначить иконку подсистеме, команде и кнопке
Сама по себе общая картинка нигде не видна. Её нужно привязать к элементу интерфейса.
Раздел (подсистема)
Откройте свойства подсистемы верхнего уровня и выберите вашу картинку в свойстве Картинка. Она появится на панели разделов в режиме 1С:Предприятие. Если картинку не задать, платформа покажет стандартный значок.
Отображение панели разделов пользователь может переключить на «только текст». Тогда иконок не будет ни у одного раздела, и это не ошибка конфигурации.
Команда
У общих команд и команд объектов (справочника, документа, обработки) есть то же свойство Картинка. Иконка команды показывается в командной панели формы, в панели действий раздела и в меню «Ещё».
Если команда выводится в командную панель формы, её вид на кнопке зависит ещё и от свойства кнопки Отображение.
Кнопка и декорация на форме
- Откройте форму в редакторе.
- Выделите кнопку в дереве элементов.
- В палитре свойств задайте
Картинка— общую картинку или стандартную из библиотеки. - В свойстве
ОтображениевыберитеКартинкаилиКартинка и текст.
Для статичной иконки на форме, например значка-предупреждения рядом с текстом, добавьте элемент Декорация типа «Картинка» и укажите картинку в его свойствах.
Иконки в строках таблицы
Частый приём практиков — значок статуса в колонке таблицы. Для этого не нужно десять отдельных картинок:
- 🧩 нарисуйте одну горизонтальную полосу из иконок 16×16 подряд (например, 4 иконки — файл 64×16);
- 🧩 загрузите её как общую картинку;
- 🧩 у поля таблицы с числовым значением задайте свойство
КартинкаЗначенийи выберите эту полосу.
Значение 0 покажет первую иконку, 1 — вторую и так далее. Колонка «Статус» превращается в набор цветных значков без единой строки кода.
Стандартная библиотека картинок платформы
Прежде чем рисовать иконку, проверьте, нет ли готовой. Платформа содержит сотни стандартных картинок: добавить, удалить, изменить, обновить, печать, найти, сортировка, стрелки, предупреждения, статусы.
Где их найти:
- В свойстве
Картинкалюбого элемента нажмите кнопку выбора. - В открывшемся окне переключитесь на вкладку стандартных картинок.
- Пролистайте список или найдите картинку по имени.
Плюсы стандартных иконок:
- ✅ они нарисованы в стиле «Такси» и меняются вместе с ним;
- ✅ у них есть варианты для разных масштабов экрана;
- ✅ они не увеличивают объём конфигурации;
- ✅ пользователь узнаёт привычный значок без подписи.
В типовых конфигурациях на БСП есть ещё сотни общих картинок, которые разработчики фирмы 1С уже нарисовали. Прежде чем загружать свою, загляните в ветку Общие картинки — нужная иконка часто там уже лежит.
| Источник иконки | Когда брать | Минус |
|---|---|---|
| Стандартная библиотека | Типовое действие: добавить, печать, обновить | Нет специфичных значков |
| Общие картинки БСП | Иконка есть в типовой | Может измениться при обновлении |
| Своя общая картинка | Уникальное действие или фирменный значок | Нужно рисовать и поддерживать |
Программная смена иконки в коде
Иногда иконка должна зависеть от состояния: документ проведён или нет, загрузка идёт или завершена. Тогда картинку меняют из модуля формы.
Смена картинки кнопки:
&НаКлиенте
Процедура ОбновитьВидКнопки()
Если ИдётЗагрузка Тогда
Элементы.ФормаЗагрузить.Картинка = БиблиотекаКартинок.ДлительнаяОперация16;
Иначе
Элементы.ФормаЗагрузить.Картинка = БиблиотекаКартинок.ЗагрузкаПрайса;
КонецЕсли;
Элементы.ФормаЗагрузить.Отображение = ОтображениеКнопки.КартинкаИТекст;
КонецПроцедуры
К общим картинкам конфигурации обращаются так же, как к стандартным: БиблиотекаКартинок.ИмяКартинки. Если указать несуществующее имя, модуль не скомпилируется — проверьте имя в дереве метаданных. ДлительнаяОперация16 — картинка из БСП; в конфигурации без БСП подставьте свою.
Картинка, которую пользователь загружает сам
Для фото товара или логотипа организации общая картинка не подходит: файл приходит от пользователя. Его хранят в реквизите справочника типа ХранилищеЗначения, а на форме показывают через Поле картинки.
Схема такая. На форме элемента создайте реквизит формы АдресКартинки (строка) и поле картинки, связанное с ним. Реквизит объекта назовём Изображение.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДанныеКартинки = РеквизитФормыВЗначение("Объект").Изображение.Получить();
Если ДанныеКартинки <> Неопределено Тогда
АдресКартинки = ПоместитьВоВременноеХранилище(ДанныеКартинки, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьКартинку(Команда)
Оповещение = Новый ОписаниеОповещения("ВыбратьКартинкуЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьКартинкуЗавершение(Результат, Адрес, ИмяФайла, ДопПараметры) Экспорт
Если Результат Тогда
АдресКартинки = Адрес;
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ЭтоАдресВременногоХранилища(АдресКартинки) Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресКартинки);
ТекущийОбъект.Изображение = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
КонецЕсли;
КонецПроцедуры
Храните именно ДвоичныеДанные файла, а не объект Картинка: так сохраняется исходный формат и файл можно выгрузить обратно без потерь. Реквизиты типа ХранилищеЗначения в данные формы не попадают, поэтому запись идёт через ТекущийОбъект в ПередЗаписьюНаСервере.
Почему иконка не появляется: разбор ошибок
Ошибки с пиктограммами почти всегда сводятся к нескольким причинам. Проверьте их по порядку.
F7 и перезапустите сеанс пользователя.Отображение стоит в значении «Текст». Переключите на «Картинка» или «Картинка и текст».Ещё одна ловушка — имя картинки в коде. Переименовали общую картинку в дереве — переименуйте и обращения БиблиотекаКартинок.СтароеИмя в модулях. Иначе форма перестанет открываться с ошибкой компиляции. Поиск по всей конфигурации (Ctrl+Shift+F) находит все такие места за минуту.
Как графика влияет на размер базы
Иконки из общих картинок живут в самой конфигурации. Десяток PNG по 2 КБ не заметит никто. Проблемы начинаются с пользовательских картинок в данных.
Откуда берётся рост:
- 📦 фото товаров с телефона по 4–6 МБ каждое, сохранённые как есть;
- 📦 сканы документов в справочнике файлов вместо ссылки на файловое хранилище;
- 📦 хранилище значений без сжатия;
- 📦 одна и та же картинка, загруженная в сотню элементов справочника.
Простой расчёт: 3 000 товаров по 5 МБ дают 15 ГБ. Файловая база такого размера заметно тормозит при выгрузке, а резервная копия занимает в разы больше времени.
Что делать:
- Уменьшайте файл до загрузки. Для карточки товара хватает 800–1200 пикселей по длинной стороне и JPG с качеством 80%. Это 100–200 КБ вместо 5 МБ.
- Сжимайте хранилище.
Новый СжатиеДанных(9)в примере выше. На PNG выигрыш небольшой — он уже сжат, — но на BMP и TIFF разница кратная. - Выносите файлы из базы. В конфигурациях на БСП есть хранение присоединённых файлов в томах на диске: база держит только ссылку, а сами файлы лежат в каталоге на сервере. Настройка находится в разделе
Администрирование. - Не дублируйте. Одинаковую картинку храните один раз — в общей картинке или отдельном справочнике — и ссылайтесь на неё.
Перенос уже накопленных файлов в тома — длительная операция. Запускайте её вне рабочего времени: пользователи в это время могут столкнуться с задержками при работе с файлами.