Как программно установить изображение в поле формы или ячейку таблицы в 1С 8.3?

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

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

Способ 1: Установка изображения в поле формы (Декорация или Поле картинки)

Для отображения одиночного изображения на форме чаще всего используются элементы типа Декорация (с видом Картинка) или специализированное Поле картинки. Этот процесс реализации достаточно прост и понятен.

Прежде всего, необходимо получить объект типа Картинка. Это можно сделать несколькими способами:

  1. Загрузка файла с локального диска:

    Для создания объекта Картинка из файла можно использовать путь к нему или предварительно полученные двоичные данные. Типовой алгоритм выглядит следующим образом:

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

      
      &НаКлиенте
      Процедура ЗагрузитьКартинкуИзФайлаНаДиск(Команда)
          Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
          Диалог.ПолноеИмяФайла = "";
          Диалог.Фильтр = "Изображения (*.png,*.jpg,*.gif)|*.png;*.jpg;*.gif";
          Диалог.Заголовок = "Выберите файл изображения";
                          
          Если Диалог.Выбрать() Тогда
              ВыбранныйФайл = Диалог.ПолноеИмяФайла;
              Если Не ПустаяСтрока(ВыбранныйФайл) Тогда
                  ДвоичныеДанныеКартинки = Новый ДвоичныеДанные(ВыбранныйФайл);
                  НоваяКартинка = Новый Картинка(ДвоичныеДанныеКартинки);
                                  
                  // Устанавливаем картинку в элемент формы
                  // 'Элементы.МояДекорация' — имя соответствующего элемента на форме
                  Элементы.МояДекорация.Картинка = НоваяКартинка;
                                  
                  Сообщить("Изображение успешно загружено.");
              КонецЕсли;
          КонецЕсли;
      КонецПроцедуры
      

      В данном примере Элементы.МояДекорация ссылается на декорацию формы, у которой в свойствах задан Вид = Картинка.

    2. Использование двоичных данных:

      Если изображение уже получено в виде двоичных данных (например, прочитано из базы или пришло по API), объект Картинка создается напрямую из них:

      
      &НаКлиенте
      Процедура УстановитьИзображениеИзДанных(ДвоичныеДанныеИзображения)
          Если ДвоичныеДанныеИзображения <> Неопределено Тогда
              НоваяКартинка = Новый Картинка(ДвоичныеДанныеИзображения);
              Элементы.МояДекорация.Картинка = НоваяКартинка;
          Иначе
              Предупреждение("Данные изображения отсутствуют.");
          КонецЕсли;
      КонецПроцедуры
      
  2. Получение картинки из макета конфигурации:

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

    
    &НаКлиенте
    Процедура УстановитьКартинкуИзМакета(Команда)
        // 'ЛоготипФирмы' — имя общего макета типа Картинка
        КартинкаИзМакета = ПолучитьОбщийМакет("ЛоготипФирмы").ПолучитьКартинку();
                
        Если КартинкаИзМакета <> Неопределено Тогда
            Элементы.МояДекорация.Картинка = КартинкаИзМакета;
        Иначе
            Сообщить("Не удалось найти макет 'ЛоготипФирмы'.");
        КонецЕсли;
    КонецПроцедуры
    

    Этот метод идеален для элементов интерфейса, которые не меняются в зависимости от действий пользователя.

Способ 2: Вывод изображений в табличных частях и списках

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

  1. Создание реквизита данных:

    В структуру таблицы необходимо добавить реквизит для хранения данных картинки. Оптимальным выбором будет тип ХранилищеЗначения (для хранения объекта Картинка) или ДвоичныеДанные.

  2. Настройка колонки таблицы:

    В редакторе формы выберите нужную колонку таблицы и установите её свойство Вид в значение Поле картинки. Убедитесь, что свойство ПутьКДанным указывает на созданный ранее реквизит (например, Объект.Товары.Изображение).

    Платформа 1С автоматически извлечет данные из ХранилищаЗначения и визуализирует их в ячейке.

  3. Программное заполнение данных в строках:

    Заполнение выполняется аналогично работе с одиночными полями, но с привязкой к конкретной строке:

    1. Загрузка из файла для текущей строки:

      
      &НаКлиенте
      Процедура ЗагрузитьКартинкуВСтроку(Команда)
          СтрокаТаблицы = Элементы.ТаблицаТовары.ТекущиеДанные;
          Если СтрокаТаблицы = Неопределено Тогда
              Возврат;
          КонецЕсли;
                          
          Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
          Если Диалог.Выбрать() Тогда
              Данные = Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
              ОбъектКартинка = Новый Картинка(Данные);
                              
              // Помещаем объект в ХранилищеЗначения для корректного отображения
              СтрокаТаблицы.Изображение = Новый ХранилищеЗначения(ОбъектКартинка);
          КонецЕсли;
      КонецПроцедуры
      
    2. Установка иконки из макета:

      
      &НаКлиенте
      Процедура УстановитьСтандартнуюИконку(Команда)
          СтрокаТаблицы = Элементы.ТаблицаТовары.ТекущиеДанные;
          Если СтрокаТаблицы <> Неопределено Тогда
              КартинкаМакет = БиблиотекаКартинок.ВажноеСобытие; // Пример из стандартной библиотеки
              СтрокаТаблицы.Изображение = Новый ХранилищеЗначения(КартинкаМакет);
          КонецЕсли;
      КонецПроцедуры
      

Рекомендации и важные нюансы

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

  1. Производительность: Массовая загрузка тяжелых изображений в таблицы может привести к задержкам при отрисовке формы. Старайтесь использовать оптимизированные миниатюры (thumbnails) для списков.

  2. Стратегия хранения:

    • Для неизменяемых элементов интерфейса всегда используйте макеты конфигурации или библиотеку картинок.

    • Для пользовательского контента (фото товаров) используйте ХранилищеЗначения в реквизитах справочников или документов — настроить это поможет обработка вывода изображений товаров в формах списков.

  3. Масштабирование: У элементов формы есть свойство РазмерКартинки (Авто, Реальный размер, Растянуть, Пропорционально). Выбор правильного режима позволит избежать искажений.

  4. Очистка данных: Чтобы программно убрать изображение, присвойте свойству или реквизиту значение Неопределено.

    
    // Удаление картинки из декорации
    Элементы.МояДекорация.Картинка = Неопределено;
            
    // Удаление из строки таблицы
    ТекущаяСтрока.Изображение = Новый ХранилищеЗначения(Неопределено);
    

Используя данные методы, вы сможете создавать современные и информативные интерфейсы в управляемом приложении 1С 8.3, гибко управляя визуализацией данных в зависимости от бизнес-логики вашей конфигурации.

← На главную