Вставка изображения в 1С — от карточки номенклатуры до программного кода

· 9 мин

Содержание

Чаще всего рисунок в 1С добавляют одним из трёх путей: прикрепить файл к карточке через механизм присоединённых файлов (без программирования), завести отдельное поле картинки в конфигураторе или загрузить изображение программно в реквизит типа ХранилищеЗначения. Какой способ выбрать — зависит от того, кто и зачем вставляет картинку: пользователь в рабочей базе, разработчик при доработке или автор печатной формы.

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

Куда вообще можно вставить картинку

Прежде чем выбирать способ, определитесь с задачей — от неё зависит всё остальное:

  • 🖼 Фото товара в карточке номенклатуры — для каталога, интернет-магазина, прайса с картинками.
  • 📎 Произвольный файл к объекту (скан договора, фото акта) — механизм присоединённых файлов.
  • 🏷 Логотип, печать и факсимиле на печатной форме — рисунок в макете табличного документа.
  • 🎨 Иконка для команды или кнопки интерфейса — общие картинки конфигурации.
  • 🧩 Собственное поле изображения в доработанной форме — реквизит и поле картинки через конфигуратор.
Что вам нужно сделать с рисунком?

Как прикрепить изображение пользователю — без конфигуратора

Самый быстрый способ, который не требует прав разработчика. В типовых конфигурациях на базе БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, Розница, УНФ) работает механизм присоединённых файлов.

Порядок действий:

  1. Откройте карточку нужного объекта — документа или элемента справочника.
  2. В командной панели или в меню формы найдите команду работы с файлами (обычно подписана как Присоединённые файлы или значок скрепки).
  3. Нажмите Добавить → Файл с диска и выберите изображение.
  4. Файл загрузится в базу и будет виден в списке присоединённых к этому объекту.

Так можно прикрепить сразу несколько картинок к одному объекту — например, фото с разных ракурсов или скан с двух сторон документа.

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

Для номенклатуры в торговых конфигурациях (УТ 11, Розница, УНФ) всё ещё проще: в карточке товара есть выделенная область для картинок. Нажмите на неё и загрузите файл с диска — изображение будет показываться в списках и формах подбора. В Бухгалтерии 3.0 отдельной «витрины» для фото товара нет, там выручает тот же механизм присоединённых файлов.

Где физически хранятся загруженные файлы, зависит от настройки: либо прямо в таблицах базы, либо в томах на диске (Администрирование → настройки работы с файлами). Для большого объёма тяжёлых изображений тома на диске предпочтительнее — база не распухает.

Какие форматы изображений понимает 1С

Платформа работает с распространёнными растровыми форматами. Для поля картинки, табличного документа и объекта Картинка поддерживаются:

ФорматПрозрачностьКогда применять
PNGдаЛоготипы, иконки, скриншоты — чёткие линии и прозрачный фон
JPEG (.jpg)нетФотографии товаров и людей — малый вес при хорошем качестве
GIFдаПростые иконки, редко — анимация
BMPнетБез сжатия, большой вес — лучше избегать
TIFFнетМногостраничные сканы

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

Эти же форматы понимает и табличный документ, куда вставляют логотипы и печати для бланков. А вот векторную графику (SVG) платформа как изображение не принимает — её предварительно переводят в растр (PNG нужного размера). Если качество при печати важно, сразу готовьте PNG с запасом по разрешению: растянутая маленькая картинка на бумаге выглядит мыльной.

Форматы WebP и HEIC платформа напрямую не показывает. Если фото пришло с телефона в HEIC или скачано как WebP — сначала пересохраните его в PNG или JPEG любым графическим редактором, иначе 1С выдаст ошибку загрузки.

Как завести поле картинки через конфигуратор

Этот путь нужен, когда готового места под изображение нет и его требуется добавить своей доработкой. Работа идёт в конфигураторе — делайте её в расширении конфигурации, чтобы не слетало при обновлении типовой.

Изображение в данных объекта хранится в реквизите типа ХранилищеЗначения — это универсальный контейнер для двоичных данных. Шаги:

  1. Откройте нужный объект (справочник или документ) в дереве конфигурации.
  2. Добавьте реквизит, например ФотоТовара, тип — ХранилищеЗначения.
  3. Откройте форму объекта.
  4. Перетащите на форму элемент типа Поле, в свойстве ВидПоля выберите Поле картинки.
  5. В свойстве ПутьКДанным укажите ваш реквизит (Объект.ФотоТовара).
  6. При необходимости задайте свойство РазмерКартинки — Пропорционально, чтобы картинка не искажалась.

После этого поле отобразит содержимое хранилища. Само заполнение — либо руками (кнопка выбора файла на поле картинки, если включена), либо программно (следующий раздел).

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

Как добавить рисунок программно — для разработчиков

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

Простейший серверный вариант, когда файл лежит на сервере или в файловой базе:

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

Второй параметр ХранилищеЗначения — сжатие: оно уменьшает место в базе, особенно для PNG и сканов.

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

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

&НаКлиенте
Процедура ФотоПомещено(Результат, АдресВоВременномХранилище, ВыбранноеИмя, Параметры) Экспорт
    Если Результат Тогда
        ЗаписатьФото(АдресВоВременномХранилище);
    КонецЕсли;
КонецПроцедуры

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

Чтобы показать загруженное изображение в поле картинки, платформа сама развернёт содержимое ХранилищеЗначения. Если же изображение нужно получить как объект Картинка (например, для отчёта), постройте его из двоичных данных:

ДвоичныеДанные = Объект.ФотоТовара.Получить();
Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
    КартинкаТовара = Новый Картинка(ДвоичныеДанные);
КонецЕсли;

После программной записи реквизита не забудьте записать сам объект (Объект.Записать() или штатная запись формы) — иначе картинка останется только в памяти текущего сеанса и при закрытии формы пропадёт.

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

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

Как уменьшить вес базы при работе с картинками

Изображения — самая тяжёлая часть данных. Сотня фотографий по 5 МБ раздувает базу на полгигабайта и замедляет резервное копирование . Несколько приёмов держат объём под контролем:

Перед массовой загрузкой фотографий
Выполнено: 0 / 5

Исходные снимки с телефона на 4–8 МБ в карточке товара не нужны: на экране они всё равно показываются в маленькой области. Уменьшайте картинку до загрузки, а не полагайтесь на масштабирование в форме — в базу попадает именно исходный файл со всем его весом.

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

Логотип и печать на печатной форме

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

Картинка в печатной форме живёт в макете — это табличный документ. Чтобы вставить рисунок:

  1. Откройте макет печатной формы в конфигураторе (или в расширении, если дорабатываете типовую).
  2. В меню Таблица → Рисунки → Картинка выберите файл с логотипом.
  3. Разместите и отмасштабируйте рисунок в нужной области макета.
  4. Для печати и факсимиле подписи берите PNG с прозрачным фоном, чтобы они ложились поверх текста, а не закрывали его белым прямоугольником.

Во многих типовых конфигурациях логотип, печать и факсимиле подключаются без конфигуратора — через настройки реквизитов организации (Администрирование → настройки организаций, раздел с логотипом и печатью). Сначала проверьте этот путь: он не требует изменения макета и сохраняется при обновлении.

Частые ошибки при добавлении изображений

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

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

Можно ли вставить несколько картинок в один объект?
Да. Через механизм присоединённых файлов к одному документу или элементу справочника прикрепляется любое число файлов. В карточке номенклатуры торговых конфигураций тоже можно хранить несколько изображений товара.
Чем отличается общая картинка от реквизита с изображением?
Общая картинка — ресурс интерфейса: иконки команд, кнопок, подсистем. Она хранится в конфигурации и одинакова для всех. Реквизит типа ХранилищеЗначения — это данные конкретного объекта, у каждого товара или документа своё изображение.
Как перенести фото товаров из старой базы или с сайта?
Программно: прочитать файлы в ДвоичныеДанные, упаковать в ХранилищеЗначения и записать в реквизит номенклатуры. При обмене с сайтом фотографии обычно передаются в составе выгрузки каталога и заполняются автоматически.
Почему картинка не печатается на счёте, хотя на экране видна?
Скорее всего рисунок добавлен в форму, а не в макет печати. Логотип и печать нужно вставлять в макет печатной формы (табличный документ) либо через настройки логотипа и печати организации.
В каком формате хранить фотографии, чтобы база не росла?
Фотографии — в JPEG с умеренным качеством и уменьшенным разрешением, логотипы и иконки — в PNG. При записи в хранилище включайте сжатие, а большие объёмы файлов выносите в тома на диске.