Как вставить динамическое изображение из файла на диске в таблицу 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При формировании печатных форм, каталогов товаров или прайс-листов с иллюстрациями в 1С:Предприятие 7.7 часто возникает необходимость выводить различные графические файлы из папки на жестком диске в зависимости от реквизитов текущей строки. Разберем, как реализовать такую загрузку штатными средствами платформы без использования внешней библиотеки картинок конфигурации.

Штатный механизм вывода динамических картинок в макет

Платформа 1С 7.7 позволяет загружать файлы с диска прямо в момент вывода секции таблицы. Для этого используется встроенный графический объект в макете и обращение к контексту выводимого объекта через свойство ТекущийОбъект.

Разберем пошаговый алгоритм настройки макета и программного кода:

  1. В окне редактирования макета таблицы создаем или открываем нужную секцию (например, строку таблицы Строка).
  2. С помощью панели инструментов добавляем в секцию графический прямоугольник под рисунок (элемент типа «Текст» или «Рисунок»).
  3. Открываем свойства созданного объекта и в поле формулы (вычисляемого выражения) прописываем вызов процедуры или метода загрузки. Например: Таб.ТекущийОбъект.Загрузить(ПолныйПутьКФайлу) или пользовательскую функцию ВставитьКартинку(Таб.ТекущийОбъект, ПутьКФайлу).
  4. В модуле отчета или обработки создаем процедуру вывода секций с передачей пути к нужному файлу.

Посмотрим на пример кода формирования отчета с динамической подгрузкой файлов:


Функция ВывестиФото(ОбъектКартинка, ПолноеИмяФайла)
    Если ФС.СуществуетФайл(ПолноеИмяФайла) = 1 Тогда
        // 0 - реальный размер, 1 - растянуть, 2 - пропорционально
        ОбъектКартинка.РежимРисования(2);
        ОбъектКартинка.Загрузить(ПолноеИмяФайла);
    Иначе
        ОбъектКартинка.Очистить();
    КонецЕсли;
    Возврат "";
КонецФункции

Процедура Сформировать()
    Перем Таб;
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    
    КаталогФото = КаталогИБ() + "Images\";
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        ФайлИзображения = КаталогФото + СокрЛП(Артикул) + ".jpg";
        Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    
    Таб.Показать("Прайс-лист с фото");
КонецПроцедуры

В свойствах графической рамки в секции Строка в данном случае прописывается вызов функции:

ВывестиФото(Таб.ТекущийОбъект, ФайлИзображения)

Почему вместо изображения отображается белый фон или пустота

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

  1. Неподдерживаемый формат файла. Встроенный объект таблицы 1С 7.7 корректно обрабатывает форматы .bmp, .jpg, .ico, .wmf, .emf. Файлы формата .png (особенно содержащие прозрачные слои) и анимированные .gif штатно платформой не поддерживаются и отображаются пустым белым фоном.
  2. Ошибки в пути к файлу. Если функция ФС.СуществуетФайл() возвращает 0, метод Загрузить() не сможет найти файл. Всегда проверяйте корректность полного пути, включая каталог информационной базы и расширение файла.
  3. Блокировка файла операционной системой. Если изображение в данный момент открыто графическим редактором в монопольном режиме или у пользователя Windows отсутствуют права на чтение каталога, файл не загрузится.

Возможность динамической смены фона формы

Рассмотрим вопрос программного изменения фонового изображения самой экранной диалоговой формы. В платформе 1С 7.7 свойство картинки фона формы настраивается исключительно статически на этапе конфигурирования. Штатного метода для динамической смены фона формы из встроенного языка не предусмотрено.

Если требуется динамически выводить изображения непосредственно на форму документа или обработки, применяют следующие подходы:

  1. Использование элемента управления ActiveX (например, Microsoft WebBrowser или специализированных компонентов PictureBox), размещаемого на форме.
  2. Использование внешних компонент расширения интерфейса, перехватывающих отрисовку оконных элементов платформы.
← На главную