Свои иконки в конфигурации 1С 8.3: от файла PNG до кнопки на форме

· 9 мин

Содержание

Чтобы добавить пиктограмму в 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.

Создание общей картинки в Конфигураторе

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

  1. Откройте базу в режиме Конфигуратор. Если конфигурация не открыта, выберите Конфигурация → Открыть конфигурацию.
  2. В дереве разверните Общие и найдите ветку Общие картинки.
  3. Щёлкните по ветке правой кнопкой и выберите Добавить.
  4. На вкладке основных свойств задайте Имя латиницей или кириллицей без пробелов, например ЗагрузкаПрайса. Синоним можно не заполнять.
  5. Откройте саму картинку (двойной щелчок по объекту или кнопка открытия рядом с полем картинки) и загрузите файл с диска.
  6. Убедитесь, что в окне предпросмотра видна иконка, а не пустое поле. Закройте окно.
  7. Сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7).

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

Если конфигурация типовая и на поддержке

В типовой БП, ЗУП или УТ объекты на поддержке редактировать нельзя без снятия с поддержки. Снимать её ради иконки — плохая идея: каждое обновление превратится в ручное сравнение.

Правильный путь — расширение конфигурации :

  1. Конфигурация → Расширения конфигурации → добавьте новое расширение.
  2. В дереве расширения создайте собственную общую картинку так же, как описано выше.
  3. Заимствуйте форму, где нужна иконка, и укажите картинку у нужной кнопки в заимствованной форме.
  4. Свои команды и подсистемы, созданные в расширении, получают картинку обычным свойством.

Расширение переживает обновления типовой, а иконки остаются на месте.

Как назначить иконку подсистеме, команде и кнопке

Сама по себе общая картинка нигде не видна. Её нужно привязать к элементу интерфейса.

Раздел (подсистема)

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

Отображение панели разделов пользователь может переключить на «только текст». Тогда иконок не будет ни у одного раздела, и это не ошибка конфигурации.

Команда

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

Если команда выводится в командную панель формы, её вид на кнопке зависит ещё и от свойства кнопки Отображение.

Кнопка и декорация на форме

  1. Откройте форму в редакторе.
  2. Выделите кнопку в дереве элементов.
  3. В палитре свойств задайте Картинка — общую картинку или стандартную из библиотеки.
  4. В свойстве Отображение выберите Картинка или Картинка и текст.

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

Иконки в строках таблицы

Частый приём практиков — значок статуса в колонке таблицы. Для этого не нужно десять отдельных картинок:

  • 🧩 нарисуйте одну горизонтальную полосу из иконок 16×16 подряд (например, 4 иконки — файл 64×16);
  • 🧩 загрузите её как общую картинку;
  • 🧩 у поля таблицы с числовым значением задайте свойство КартинкаЗначений и выберите эту полосу.

Значение 0 покажет первую иконку, 1 — вторую и так далее. Колонка «Статус» превращается в набор цветных значков без единой строки кода.

Стандартная библиотека картинок платформы

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

Где их найти:

  1. В свойстве Картинка любого элемента нажмите кнопку выбора.
  2. В открывшемся окне переключитесь на вкладку стандартных картинок.
  3. Пролистайте список или найдите картинку по имени.

Плюсы стандартных иконок:

  • ✅ они нарисованы в стиле «Такси» и меняются вместе с ним;
  • ✅ у них есть варианты для разных масштабов экрана;
  • ✅ они не увеличивают объём конфигурации;
  • ✅ пользователь узнаёт привычный значок без подписи.

В типовых конфигурациях на БСП есть ещё сотни общих картинок, которые разработчики фирмы 1С уже нарисовали. Прежде чем загружать свою, загляните в ветку Общие картинки — нужная иконка часто там уже лежит.

Источник иконкиКогда братьМинус
Стандартная библиотекаТиповое действие: добавить, печать, обновитьНет специфичных значков
Общие картинки БСПИконка есть в типовойМожет измениться при обновлении
Своя общая картинкаУникальное действие или фирменный значокНужно рисовать и поддерживать

Программная смена иконки в коде

Иногда иконка должна зависеть от состояния: документ проведён или нет, загрузка идёт или завершена. Тогда картинку меняют из модуля формы.

Смена картинки кнопки:

&НаКлиенте
Процедура ОбновитьВидКнопки()

    Если ИдётЗагрузка Тогда
        Элементы.ФормаЗагрузить.Картинка = БиблиотекаКартинок.ДлительнаяОперация16;
    Иначе
        Элементы.ФормаЗагрузить.Картинка = БиблиотекаКартинок.ЗагрузкаПрайса;
    КонецЕсли;
    Элементы.ФормаЗагрузить.Отображение = ОтображениеКнопки.КартинкаИТекст;

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

К общим картинкам конфигурации обращаются так же, как к стандартным: БиблиотекаКартинок.ИмяКартинки. Если указать несуществующее имя, модуль не скомпилируется — проверьте имя в дереве метаданных. ДлительнаяОперация16 — картинка из БСП; в конфигурации без БСП подставьте свою.

Картинка, которую пользователь загружает сам

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

Схема такая. На форме элемента создайте реквизит формы АдресКартинки (строка) и поле картинки, связанное с ним. Реквизит объекта назовём Изображение.

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

    ДанныеКартинки = РеквизитФормыВЗначение("Объект").Изображение.Получить();
    Если ДанныеКартинки <> Неопределено Тогда
        АдресКартинки = ПоместитьВоВременноеХранилище(ДанныеКартинки, УникальныйИдентификатор);
    КонецЕсли;

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

&НаКлиенте
Процедура ВыбратьКартинку(Команда)

    Оповещение = Новый ОписаниеОповещения("ВыбратьКартинкуЗавершение", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);

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

&НаКлиенте
Процедура ВыбратьКартинкуЗавершение(Результат, Адрес, ИмяФайла, ДопПараметры) Экспорт

    Если Результат Тогда
        АдресКартинки = Адрес;
        Модифицированность = Истина;
    КонецЕсли;

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

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

    Если ЭтоАдресВременногоХранилища(АдресКартинки) Тогда
        ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресКартинки);
        ТекущийОбъект.Изображение = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
    КонецЕсли;

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

Храните именно ДвоичныеДанные файла, а не объект Картинка: так сохраняется исходный формат и файл можно выгрузить обратно без потерь. Реквизиты типа ХранилищеЗначения в данные формы не попадают, поэтому запись идёт через ТекущийОбъект в ПередЗаписьюНаСервере.

Почему иконка не появляется: разбор ошибок

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

Диагностика: выберите симптом

Ещё одна ловушка — имя картинки в коде. Переименовали общую картинку в дереве — переименуйте и обращения БиблиотекаКартинок.СтароеИмя в модулях. Иначе форма перестанет открываться с ошибкой компиляции. Поиск по всей конфигурации (Ctrl+Shift+F) находит все такие места за минуту.

Как графика влияет на размер базы

Иконки из общих картинок живут в самой конфигурации. Десяток PNG по 2 КБ не заметит никто. Проблемы начинаются с пользовательских картинок в данных.

Откуда берётся рост:

  • 📦 фото товаров с телефона по 4–6 МБ каждое, сохранённые как есть;
  • 📦 сканы документов в справочнике файлов вместо ссылки на файловое хранилище;
  • 📦 хранилище значений без сжатия;
  • 📦 одна и та же картинка, загруженная в сотню элементов справочника.

Простой расчёт: 3 000 товаров по 5 МБ дают 15 ГБ. Файловая база такого размера заметно тормозит при выгрузке, а резервная копия занимает в разы больше времени.

Что делать:

  1. Уменьшайте файл до загрузки. Для карточки товара хватает 800–1200 пикселей по длинной стороне и JPG с качеством 80%. Это 100–200 КБ вместо 5 МБ.
  2. Сжимайте хранилище. Новый СжатиеДанных(9) в примере выше. На PNG выигрыш небольшой — он уже сжат, — но на BMP и TIFF разница кратная.
  3. Выносите файлы из базы. В конфигурациях на БСП есть хранение присоединённых файлов в томах на диске: база держит только ссылку, а сами файлы лежат в каталоге на сервере. Настройка находится в разделе Администрирование.
  4. Не дублируйте. Одинаковую картинку храните один раз — в общей картинке или отдельном справочнике — и ссылайтесь на неё.

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

Перед публикацией иконки в рабочей базе
Выполнено: 0 / 6

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

Можно ли поменять иконку раздела без программиста?
Нет. Картинка подсистемы задаётся в Конфигураторе или расширении. Пользователь в режиме 1С:Предприятие может только скрыть иконки, переключив панель разделов на текст.
Где взять готовые иконки в стиле «Такси»?
Сначала в стандартной библиотеке платформы и в общих картинках типовой конфигурации. Сторонние наборы подходят, если у них плоский стиль и лицензия разрешает использование в коммерческих программах.
Сохранится ли моя иконка после обновления типовой?
Если она добавлена в расширение — да. Если вы правили типовую со снятой поддержкой, при обновлении придётся вручную сравнивать и переносить изменения.
Почему в веб-клиенте иконка выглядит иначе, чем в тонком клиенте?
Браузер масштабирует растровые картинки по-своему. Вариант 32×32 или SVG снимает проблему в обоих клиентах.
Можно ли поставить картинку в печатную форму?
Да. В табличном макете вставьте рисунок типа «Картинка» и при выводе присвойте ему значение программно, например логотип организации из её реквизита.