Справочники и Данные · 11 мин
Как получить картинку номенклатуры в 1С
Разбираем, как получить и вывести картинку номенклатуры в 1С: встроенные файлы, реквизиты, программный код, вывод в печатные формы и на сайт.
Картинка номенклатуры в 1С используется в карточке товара, в подборе, в печатных каталогах и при выгрузке на сайт. В зависимости от конфигурации и роли пользователя «получить картинку» может означать разное: посмотреть изображение в карточке, извлечь файл из базы, вывести его в печатную форму или получить программно через встроенный язык.
В типовых конфигурациях (Управление торговлей 11, ERP, Комплексная автоматизация, УНФ) изображения хранятся как присоединённые файлы, а ссылка на основную картинку обычно находится в реквизите «Файл картинки» элемента справочника «Номенклатура». В старых конфигурациях (например, УТ 10.3) картинка хранилась в реквизите типа «Хранилище значения» прямо в карточке товара.
Ниже разобраны все практические сценарии: от простого просмотра в интерфейсе до программного получения двоичных данных и вывода картинки в макет. Отдельно рассмотрены типичные ошибки и ограничения прав доступа.
Где 1С хранит картинки номенклатуры
В конфигурациях на Библиотеке стандартных подсистем (БСП) — УТ 11, КА 2, ERP 2, УНФ — изображения хранятся в справочнике присоединённых файлов «НоменклатураПрисоединенныеФайлы». Сами двоичные данные в зависимости от настроек программы лежат либо в информационной базе (в хранилище значений), либо в томах на диске. В карточке товара при этом заполнен реквизит «Файл картинки» — это ссылка на основной файл изображения.
В УТ 10.3 и других конфигурациях на обычных формах картинка хранится в реквизите «Изображение» (тип «ХранилищеЗначения») непосредственно в элементе справочника «Номенклатура». Это принципиально меняет способ программного доступа: вместо работы с присоединёнными файлами используется метод Получить() хранилища значения.
Понять, какая схема используется в вашей базе, просто: откройте карточку товара. Если картинка отображается сразу и есть кнопка выбора из файла — скорее всего, это старая схема с хранилищем значения. Если рядом с изображением есть ссылка «Ещё файлы» или список присоединённых файлов — работает механизм БСП.
Как посмотреть и извлечь картинку через интерфейс
Самый простой сценарий — пользователю нужно просто увидеть или сохранить изображение товара. В карточке номенклатуры (УТ 11, ERP, КА) картинка отображается в левой части формы. Если её нет, проверьте, заполнен ли реквизит «Файл картинки»: кликните по области изображения или откройте список присоединённых файлов.
Чтобы сохранить картинку на диск, откройте список присоединённых файлов (команда «Присоединённые файлы» в карточке товара или одноимённый пункт в меню «Ещё»), выделите нужный файл и выполните «Сохранить как…». Файл будет выгружен в исходном формате (JPG, PNG и т.д.) с исходным именем.
Если нужно получить картинки сразу для группы товаров, ручной способ неудобен. В типовых конфигурациях есть обработка «Групповое изменение реквизитов» и возможность выгрузки через «Выгрузку данных на сайт», но массовое извлечение файлов проще выполнить программно — об этом ниже.
- 1Откройте карточку номенклатуры
- 2Перейдите в список присоединённых файлов (команда «Присоединённые файлы» или меню «Ещё»)
- 3Выделите файл изображения в списке
- 4Нажмите «Сохранить как…» и укажите каталог
- 5Проверьте, что файл открылся в просмотрщике изображений
Программное получение картинки в конфигурациях на БСП
Для конфигураций на БСП (УТ 11, КА 2, ERP 2, УНФ) двоичные данные присоединённого файла получают через общий модуль «РаботаСФайлами». Типовой код выглядит так: сначала берём ссылку из реквизита «ФайлКартинки», затем получаем двоичные данные и преобразуем их в объект «Картинка».
ФайлКартинки = НоменклатураСсылка.ФайлКартинки;
Если ЗначениеЗаполнено(ФайлКартинки) Тогда
ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки);
Картинка = Новый Картинка(ДвоичныеДанные);
КонецЕсли;
Если в базе несколько изображений на один товар, а основной файл не задан, можно найти все присоединённые файлы владельца через «РаботаСФайлами.ПрисоединенныеФайлыКОбъекту» или запросом к справочнику присоединённых файлов с отбором по владельцу и расширению (jpg, jpeg, png, gif, bmp).
Для сохранения картинки в файл на диске достаточно вызвать метод Записать() у двоичных данных, указав путь. Учтите: на сервере 1С код выполняется в контексте сервера, поэтому путь должен быть доступен серверу, а не клиентскому компьютеру. Для передачи файла клиенту используйте временное хранилище (ПоместитьВоВременноеХранилище) и НачатьПолучениеФайлов на клиенте.
Программное получение картинки в УТ 10.3 и старых конфигурациях
В конфигурациях на обычных формах (УТ 10.3, УПП 1.3) изображение хранится в реквизите «Изображение» типа «ХранилищеЗначения». Код получения заметно короче: достаточно вызвать метод Получить() и привести результат к типу «Картинка».
ХранимоеЗначение = НоменклатураСсылка.Изображение.Получить();
Если ТипЗнч(ХранимоеЗначение) = Тип("Картинка") Тогда
Картинка = ХранимоеЗначение;
ИначеЕсли ТипЗнч(ХранимоеЗначение) = Тип("ДвоичныеДанные") Тогда
Картинка = Новый Картинка(ХранимоеЗначение);
КонецЕсли;
Обратите внимание на проверку типа: в хранилище значения может лежать как объект «Картинка», так и «ДвоичныеДанные», а иногда — Неопределено, если реквизит пуст. Вызов метода Получить() без проверки на пустой реквизит безопасен (вернёт Неопределено), но попытка создать «Картинка» из Неопределено вызовет ошибку.
Для сохранения на диск в этих конфигурациях используется метод Картинка.Записать(ИмяФайла), тип файла определяется по расширению. Если в хранилище лежат двоичные данные, сохраняйте их напрямую через ДвоичныеДанные.Записать().
ХранимоеЗначение = НоменклатураСсылка.Изображение.Получить();
Если ХранимоеЗначение <> Неопределено Тогда
Картинка = Новый Картинка(ХранимоеЗначение);
Картинка.Записать("C:\Images\tovar.jpg");
КонецЕсли;Вывод картинки в печатную форму и на сайт
Чтобы вывести изображение товара в печатную форму (например, в прайс-лист или каталог), в макете табличного документа добавьте область с типом «Картинка» (рисунок табличного документа). Затем программно присвойте этому рисунку полученный объект «Картинка» через свойство «Картинка» коллекции «Рисунки» области.
При выгрузке на сайт (типовой обмен с Битрикс и подобными) картинки передаются автоматически в составе пакета CommerceML — из присоединённых файлов формируются элементы «Картинка» для каждого товара. Если картинки не выгружаются, чаще всего причина в том, что не заполнен реквизит «Файл картинки» у товара или в настройках обмена отключена выгрузка файлов изображений.
Для отчётов на СКД картинку выводят через функцию общего модуля, возвращающую объект «Картинка», с последующим выводом в макет отчёта. Это требует доработки макета и ресурсных полей, поэтому для разовой задачи проще построить табличный документ программно.
Способы получить картинку
Подходит для разового просмотра и сохранения; неудобен для массового извлечения
Для конфигураций на БСП; подходит для массовой выгрузки, печатных форм и обменов
Для старых конфигураций; простой код, но нет поддержки нескольких изображений на товар
Для передачи картинок в интернет-магазин; требует заполненного реквизита «Файл картинки»
Частые ошибки и проверка результата
Самая частая проблема — картинка «есть», но не отображается. Причины: реквизит «Файл картинки» не заполнен (файл присоединён, но не назначен основным), файл физически отсутствует в томе хранения (при хранении на диске), у пользователя нет прав на чтение присоединённых файлов. Проверка проста: откройте список присоединённых файлов товара и попробуйте открыть файл двойным щелчком.
Вторая типичная ошибка в коде — обращение к реквизиту «ФайлКартинки» через точку от ссылки в цикле по тысячам товаров. Это порождает запрос к базе на каждой итерации и резко замедляет работу. Правильный подход — получить ссылки на файлы одним запросом с соединением к таблице номенклатуры.
Третья ошибка — попытка получить двоичные данные файла, который хранится в томе на диске, с клиентского компьютера без доступа к тому. В этом случае РаботаСФайлами вернёт ошибку или пустые данные. Решение — выполнять получение данных на сервере и передавать результат клиенту через временное хранилище.
После любой доработки проверьте результат на трёх сценариях: товар с картинкой, товар без картинки и товар с несколькими присоединёнными файлами. Убедитесь, что в отсутствие изображения выводится заглушка или пустая область, а не ошибка.
Как проверить результат
Картинка видна сразу при открытии
Пустая область или значок отсутствующего файла
ДвоичныеДанные не пустые, объект Картинка создан
Ошибка при вызове или Неопределено
В пакете обмена есть элемент «Картинка» с именем файла
Товар выгружается без изображений
Картинка видна всем ролям, которым она нужна
Видна только администратору
FAQ
Картинка присоединена к товару, но в карточке не отображается. Что делать?
Откройте список присоединённых файлов товара и проверьте, какой файл назначен основным. В карточке отображается только файл, указанный в реквизите «Файл картинки». Назначьте нужное изображение основным — обычно это делается командой в списке файлов или выбором в самой карточке.
Как массово выгрузить все картинки номенклатуры в папку?
Напишите простую обработку: запросом выберите товары с заполненным «ФайлКартинки», для каждого получите двоичные данные через РаботаСФайлами.ДвоичныеДанныеФайла() и сохраните методом Записать() с именем, например, из артикула. Выполняйте получение данных на сервере, если файлы хранятся в томах.
Можно ли хранить несколько картинок для одного товара?
Да, в конфигурациях на БСП к товару можно присоединить любое количество файлов изображений. Основной (отображаемый в карточке и выгружаемый на сайт первым) — только один, он задаётся реквизитом «Файл картинки». Остальные доступны в списке присоединённых файлов и могут выгружаться как дополнительные изображения.
Почему код РаботаСФайлами.ДвоичныеДанныеФайла() возвращает ошибку?
Чаще всего файл хранится в томе на диске, а код выполняется на клиенте без доступа к этому тому, либо том недоступен серверу. Перенесите вызов в серверный контекст (директива &НаСервере) и проверьте настройки томов хранения файлов в администрировании программы.
Как вывести картинку товара в печатную форму прайс-листа?
В макете табличного документа добавьте рисунок (область с типом «Картинка»), при формировании отчёта получите объект «Картинка» из присоединённого файла товара и присвойте его рисунку через коллекцию Рисунки области. Для товаров без изображения оставляйте рисунок пустым или подставляйте картинку-заглушку.
Картинки не выгружаются на сайт при типовом обмене. В чём причина?
Проверьте три момента: заполнен ли реквизит «Файл картинки» у товаров, включена ли выгрузка изображений в настройках узла обмена, и доступны ли файлы (если они в томах на диске — доступен ли том серверу). Также убедитесь, что расширения файлов входят в список разрешённых для выгрузки.
Что важно запомнить
Картинка номенклатуры в типовых 1С — присоединённый файл, основной задаётся реквизитом «Файл картинки». В интерфейсе её сохраняют через список присоединённых файлов, программно — через РаботаСФайлами (БСП) или ХранилищеЗначения (старые конфигурации). Большинство проблем сводится к незаполненному основному файлу, правам доступа и выполнению кода не в том контексте.