При разработке интерфейсов на управляемых формах многие сталкиваются с ограничением платформы: стандартный элемент Кнопка не позволяет программно назначить иконку из произвольного файла на диске. Платформа 1С жестко ограничивает работу с изображениями, разрешая использовать только объекты из БиблиотекаКартинок. Однако, если перед нами стоит задача динамической загрузки графики (например, аватар пользователя или картинка товара из файла), мы можем воспользоваться проверенным архитектурным решением.
Поскольку 1С не поддерживает прямую подмену свойств кнопки для внешних файлов, мы заменим её на элемент управления Поле картинки. Этот элемент может выглядеть и работать в точности как кнопка, если мы правильно настроим его поведение и обработку событий.
Суть метода заключается в следующем:
Поле картинки.Гиперссылка в значение Истина.Картинка и помещаем во временное хранилище.ПутьКДанным нашего поля.Давайте рассмотрим, как это реализовать на практике. Сначала нам необходимо определить реквизит формы, в котором будет храниться адрес нашей картинки. Пусть это будет строковый реквизит с именем АдресКартинкиВХранилище.
В модуле формы, например, в процедуре ПриСозданииНаСервере или ПриОткрытии, выполним загрузку изображения:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Создаем объект картинки из файла на диске
КартинкаИзФайла = Новый Картинка("D:\Изображения\Кнопка.png");
// Помещаем картинку во временное хранилище для отображения на форме
АдресКартинкиВХранилище = ПоместитьВоВременноеХранилище(КартинкаИзФайла);
КонецПроцедуры
Теперь, когда картинка успешно загружена и отображается, нам нужно добавить обработчик нажатия. Поскольку у нашего Поля картинки установлено свойство Гиперссылка, пользователь сможет взаимодействовать с ним точно так же, как с обычной кнопкой.
&НаКлиенте
Процедура АдресКартинкиВХранилищеНажатие(Элемент, СтандартнаяОбработка)
// Отключаем стандартное поведение, чтобы выполнить наш код
СтандартнаяОбработка = Ложь;
// Здесь размещаем логику, которая должна была быть в кнопке
Сообщить("Нажата имитация кнопки с внешней картинкой!");
КонецПроцедуры
Проанализируем преимущества данного подхода:
Поле картинки полностью поддерживается платформой и не требует использования сторонних расширений или хаков CSS.При использовании этого метода не забывайте о том, что размер Поля картинки должен быть соизмерим с размером исходного изображения. Вы можете настроить свойство РазмерКартинки (например, значение Пропорционально), чтобы изображение гармонично вписывалось в интерфейс вашей формы.
Если вам нужно менять картинки в зависимости от состояний (например, \"нажато\" или \"отжато\"), просто создайте логику переключения адреса в АдресКартинкиВХранилище по нажатию. Таким образом, вы получите полностью управляемый графический элемент, который внешне ничем не отличается от стандартной кнопки платформы 1С.
Используя этот алгоритм, вы избежите \"борьбы\" с ограничениями платформы и обеспечите чистоту кода, что упростит дальнейшее сопровождение и обновление вашей конфигурации.