Вставка изображения в 1С — от карточки номенклатуры до программного кода
Содержание
Чаще всего рисунок в 1С добавляют одним из трёх путей: прикрепить файл
к карточке через механизм присоединённых файлов (без программирования), завести отдельное поле картинки в конфигураторе или загрузить изображение
программно в реквизит типа ХранилищеЗначения. Какой способ выбрать — зависит от того, кто и зачем вставляет картинку: пользователь в рабочей базе, разработчик при доработке или автор печатной формы.
Ниже разберём каждый вариант по шагам, а заодно — какие форматы изображений 1С понимает, как уменьшить вес базы и что делать, если картинка не отображается.
Куда вообще можно вставить картинку
Прежде чем выбирать способ, определитесь с задачей — от неё зависит всё остальное:
- 🖼 Фото товара в карточке номенклатуры — для каталога, интернет-магазина, прайса с картинками.
- 📎 Произвольный файл к объекту (скан договора, фото акта) — механизм присоединённых файлов.
- 🏷 Логотип, печать и факсимиле на печатной форме — рисунок в макете табличного документа.
- 🎨 Иконка для команды или кнопки интерфейса — общие картинки конфигурации.
- 🧩 Собственное поле изображения в доработанной форме — реквизит и поле картинки через конфигуратор.
Как прикрепить изображение пользователю — без конфигуратора
Самый быстрый способ, который не требует прав разработчика. В типовых конфигурациях на базе БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, Розница, УНФ) работает механизм присоединённых файлов.
Порядок действий:
- Откройте карточку нужного объекта — документа или элемента справочника.
- В командной панели или в меню формы найдите команду работы с файлами (обычно подписана как
Присоединённые файлыили значок скрепки). - Нажмите
Добавить→Файл с дискаи выберите изображение. - Файл загрузится в базу и будет виден в списке присоединённых к этому объекту.
Так можно прикрепить сразу несколько картинок к одному объекту — например, фото с разных ракурсов или скан с двух сторон документа.
Загруженное изображение открывается двойным щелчком во встроенном просмотрщике или во внешней программе — как настроено на рабочем месте. Права на добавление и удаление файлов регулируются ролями: если команды работы с файлами в карточке не видно, обратитесь к администратору — возможно, у профиля пользователя отключён соответствующий доступ.
Для номенклатуры в торговых конфигурациях (УТ 11, Розница, УНФ) всё ещё проще: в карточке товара есть выделенная область для картинок. Нажмите на неё и загрузите файл с диска — изображение будет показываться в списках и формах подбора. В Бухгалтерии 3.0 отдельной «витрины» для фото товара нет, там выручает тот же механизм присоединённых файлов.
Где физически хранятся загруженные файлы, зависит от настройки: либо прямо в таблицах базы, либо в томах на диске (Администрирование → настройки работы с файлами). Для большого объёма тяжёлых изображений тома на диске предпочтительнее — база не распухает.
Какие форматы изображений понимает 1С
Платформа работает с распространёнными растровыми форматами. Для поля картинки, табличного документа и объекта Картинка поддерживаются:
| Формат | Прозрачность | Когда применять |
|---|---|---|
| PNG | да | Логотипы, иконки, скриншоты — чёткие линии и прозрачный фон |
JPEG (.jpg) | нет | Фотографии товаров и людей — малый вес при хорошем качестве |
| GIF | да | Простые иконки, редко — анимация |
| BMP | нет | Без сжатия, большой вес — лучше избегать |
| TIFF | нет | Многостраничные сканы |
Для интерфейсных иконок и печатей с прозрачным фоном берите PNG — он держит прозрачность и не теряет чёткость. Для фотографий товара разумнее JPEG: он весит в разы меньше.
Эти же форматы понимает и табличный документ, куда вставляют логотипы и печати для бланков. А вот векторную графику (SVG) платформа как изображение не принимает — её предварительно переводят в растр (PNG нужного размера). Если качество при печати важно, сразу готовьте PNG с запасом по разрешению: растянутая маленькая картинка на бумаге выглядит мыльной.
Форматы WebP и HEIC платформа напрямую не показывает. Если фото пришло с телефона в HEIC или скачано как WebP — сначала пересохраните его в PNG или JPEG любым графическим редактором, иначе 1С выдаст ошибку загрузки.
Как завести поле картинки через конфигуратор
Этот путь нужен, когда готового места под изображение нет и его требуется добавить своей доработкой. Работа идёт в конфигураторе — делайте её в расширении конфигурации, чтобы не слетало при обновлении типовой.
Изображение в данных объекта хранится в реквизите типа ХранилищеЗначения — это универсальный контейнер для двоичных данных. Шаги:
- Откройте нужный объект (справочник или документ) в дереве конфигурации.
- Добавьте реквизит, например
ФотоТовара, тип —ХранилищеЗначения. - Откройте форму объекта.
- Перетащите на форму элемент типа Поле, в свойстве
ВидПолявыберитеПоле картинки. - В свойстве
ПутьКДаннымукажите ваш реквизит (Объект.ФотоТовара). - При необходимости задайте свойство
РазмерКартинки—Пропорционально, чтобы картинка не искажалась.
После этого поле отобразит содержимое хранилища. Само заполнение — либо руками (кнопка выбора файла на поле картинки, если включена), либо программно (следующий раздел).
Если картинка нужна только как иконка команды или подсистемы, а не как данные, заводите её в ветке Общие → Общие картинки. Такие изображения хранятся в самой конфигурации и доступны в редакторе команд и форм, но в базу пользователя их не загрузить — это ресурс интерфейса, а не данные.
Как добавить рисунок программно — для разработчиков
Программная загрузка нужна при импорте каталога, обмене с сайтом или массовой заливке фотографий. Общая логика: прочитать файл в двоичные данные, упаковать в ХранилищеЗначения и записать в реквизит.
Простейший серверный вариант, когда файл лежит на сервере или в файловой базе:
&НаСервере
Процедура ЗагрузитьФотоССервера(ПутьКФайлу)
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
Объект.ФотоТовара = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных());
КонецПроцедуры
Второй параметр ХранилищеЗначения — сжатие: оно уменьшает место в базе, особенно для PNG и сканов.
В клиент-серверной базе и тем более в веб-клиенте нельзя читать файл с диска клиента прямо на сервере — у сервера нет доступа к файловой системе пользователя. Правильный приём — сначала поместить выбранный файл во временное хранилище на клиенте, затем на сервере забрать его оттуда:
&НаКлиенте
Процедура ВыбратьФото(Команда)
Оповещение = Новый ОписаниеОповещения("ФотоПомещено", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина);
КонецПроцедуры
&НаКлиенте
Процедура ФотоПомещено(Результат, АдресВоВременномХранилище, ВыбранноеИмя, Параметры) Экспорт
Если Результат Тогда
ЗаписатьФото(АдресВоВременномХранилище);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьФото(Адрес)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
Объект.ФотоТовара = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных());
КонецПроцедуры
Чтобы показать загруженное изображение в поле картинки, платформа сама развернёт содержимое ХранилищеЗначения. Если же изображение нужно получить как объект Картинка (например, для отчёта), постройте его из двоичных данных:
ДвоичныеДанные = Объект.ФотоТовара.Получить();
Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
КартинкаТовара = Новый Картинка(ДвоичныеДанные);
КонецЕсли;
После программной записи реквизита не забудьте записать сам объект (Объект.Записать() или штатная запись формы) — иначе картинка останется только в памяти текущего сеанса и при закрытии формы пропадёт.
Отдельная частая подзадача — показать миниатюру прямо в колонке динамического списка, а не только в карточке. Для этого в форме списка добавляют реквизит-картинку и в обработчике получения данных заполняют его уменьшенным изображением объекта. Держите такие миниатюры маленькими (несколько десятков пикселей): список запрашивает их пачками, и тяжёлые картинки заметно тормозят прокрутку.
При массовом импорте не читайте все файлы в цикле в одну транзакцию — записывайте объекты порциями. Так вы не удержите в памяти сразу сотни мегабайт двоичных данных и не упрётесь в блокировки.
Как уменьшить вес базы при работе с картинками
Изображения — самая тяжёлая часть данных. Сотня фотографий по 5 МБ раздувает базу на полгигабайта и замедляет резервное копирование . Несколько приёмов держат объём под контролем:
Исходные снимки с телефона на 4–8 МБ в карточке товара не нужны: на экране они всё равно показываются в маленькой области. Уменьшайте картинку до загрузки, а не полагайтесь на масштабирование в форме — в базу попадает именно исходный файл со всем его весом.
Если база уже разрослась, посмотрите в сторону хранения присоединённых файлов в томах: перенос из таблиц на диск заметно облегчает саму базу и ускоряет её обслуживание.
Логотип и печать на печатной форме
Отдельная частая задача — поставить рисунок не в данные, а в печатную форму: логотип в шапку счёта, печать и факсимиле подписи в акт.
Картинка в печатной форме живёт в макете — это табличный документ. Чтобы вставить рисунок:
- Откройте макет печатной формы в конфигураторе (или в расширении, если дорабатываете типовую).
- В меню
Таблица→Рисунки→Картинкавыберите файл с логотипом. - Разместите и отмасштабируйте рисунок в нужной области макета.
- Для печати и факсимиле подписи берите PNG с прозрачным фоном, чтобы они ложились поверх текста, а не закрывали его белым прямоугольником.
Во многих типовых конфигурациях логотип, печать и факсимиле подключаются без конфигуратора — через настройки реквизитов организации (Администрирование → настройки организаций, раздел с логотипом и печатью). Сначала проверьте этот путь: он не требует изменения макета и сохраняется при обновлении.
Частые ошибки при добавлении изображений
ПутьКДанным у поля картинки — оно должно указывать на реквизит с изображением. Пустое поле чаще всего означает, что данные записались не в тот реквизит или объект не был сохранён.НачатьПомещениеФайла), а на сервере забирайте его через ПолучитьИзВременногоХранилища.РазмерКартинки значением Пропорционально, тогда пропорции сохранятся.Частые вопросы
Можно ли вставить несколько картинок в один объект?
Чем отличается общая картинка от реквизита с изображением?
ХранилищеЗначения — это данные конкретного объекта, у каждого товара или документа своё изображение.Как перенести фото товаров из старой базы или с сайта?
ДвоичныеДанные, упаковать в ХранилищеЗначения и записать в реквизит номенклатуры. При обмене с сайтом фотографии обычно передаются в составе выгрузки каталога и заполняются автоматически.