Как программно задать внешнюю картинку для кнопки в управляемых формах 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разберем альтернативный подход: использование Поля картинки

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

Суть метода заключается в следующем:

  1. Добавляем на форму элемент Поле картинки.
  2. Устанавливаем свойство элемента Гиперссылка в значение Истина.
  3. Программно считываем файл, преобразуем его в объект Картинка и помещаем во временное хранилище.
  4. Присваиваем полученный адрес хранилища в свойство ПутьКДанным нашего поля.

Реализация решения по шагам

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

В модуле формы, например, в процедуре ПриСозданииНаСервере или ПриОткрытии, выполним загрузку изображения:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Создаем объект картинки из файла на диске
    КартинкаИзФайла = Новый Картинка("D:\Изображения\Кнопка.png");
    
    // Помещаем картинку во временное хранилище для отображения на форме
    АдресКартинкиВХранилище = ПоместитьВоВременноеХранилище(КартинкаИзФайла);
КонецПроцедуры

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


&НаКлиенте
Процедура АдресКартинкиВХранилищеНажатие(Элемент, СтандартнаяОбработка)
    // Отключаем стандартное поведение, чтобы выполнить наш код
    СтандартнаяОбработка = Ложь;
    
    // Здесь размещаем логику, которая должна была быть в кнопке
    Сообщить("Нажата имитация кнопки с внешней картинкой!");
КонецПроцедуры

Почему это лучший вариант?

Проанализируем преимущества данного подхода:

Рекомендации по проектированию

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

Если вам нужно менять картинки в зависимости от состояний (например, \"нажато\" или \"отжато\"), просто создайте логику переключения адреса в АдресКартинкиВХранилище по нажатию. Таким образом, вы получите полностью управляемый графический элемент, который внешне ничем не отличается от стандартной кнопки платформы 1С.

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

← На главную