Фото товара, логотип, печать, рисунок в макете: куда и как добавить изображение в 1С 8.3

· 10 мин

Содержание

Вставить картинку в 1С проще всего через карточку объекта: в карточке номенклатуры щёлкните по пустой области изображения и выберите файл с диска, а логотип и печать загружаются в карточке организации, в группе «Логотип и печать». Для рисунка в печатной форме или отчёте откройте табличный документ и выберите в главном меню Таблица → Рисунки → Картинка.

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

Какой способ добавить картинку выбрать

Сначала определите, что именно нужно: показать фото в карточке, вывести логотип на печать или нарисовать иконку на кнопке. От этого зависит инструмент.

ЗадачаГде делаетсяКто делаетПрава в базе
Фото товара в карточке номенклатурыРежим 1С:ПредприятиеПользовательИзменение справочника
Логотип, печать, подписи для счётаКарточка организацииБухгалтерИзменение организации
Файл-скан к документу (накладная, договор)Присоединённые файлыПользовательРабота с файлами
Рисунок в своём отчёте или бланкеТабличный документПользовательНе нужны особые
Иконка на кнопке, картинка на формеКонфигуратор, общие картинкиРазработчикАдминистратор
Загрузка фото из кода, с камерыМодуль формыРазработчикАдминистратор
Что вам нужно сделать с картинкой?

Как вставить картинку в 1С:Предприятии без Конфигуратора

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

Фото в карточке номенклатуры

  1. Откройте Справочники → Товары и услуги → Номенклатура (в Бухгалтерии 3.0) или раздел НСИ и администрирование, ссылка «Номенклатура» (в УТ 11).
  2. Откройте карточку нужной позиции.
  3. Щёлкните по пустому полю картинки в карточке.
  4. Выберите файл на диске: PNG, JPG, BMP или GIF.
  5. Нажмите Записать и закрыть.

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

Фото со смартфона весит 3–8 МБ. Перед загрузкой уменьшите его до 800–1200 пикселей по длинной стороне. В карточке разницы не видно, а база на тысячу товаров легче на несколько гигабайт.

Логотип, печать и подписи организации

  1. Откройте Главное → Организации и карточку своей организации.
  2. Разверните группу «Логотип и печать».
  3. Загрузите логотип, оттиск печати, подписи руководителя и главного бухгалтера, каждый своей командой загрузки.
  4. Запишите карточку.

Теперь в счёте на оплату откройте меню печати и выберите вариант «Счёт на оплату (с печатью и подписями)». Обычный вариант печатает документ без факсимиле.

Печать и подписи сканируйте на белом листе и сохраняйте в PNG с прозрачным фоном. Белый прямоугольник вокруг оттиска закроет сумму прописью и строку «Руководитель».

Факсимиле подписи заменяет живую подпись только там, где это согласовано с контрагентом. Для счёта на оплату обычно годится, для актов и накладных лучше уточнить договор.

Скан или фото, приложенные к документу

В форме любого документа или справочника на БСП есть кнопка со скрепкой. Она открывает список присоединённых файлов:

  • 📎 перетащите файл в список мышью или выберите его через команду добавления;
  • 📷 сканируйте сразу из 1С, если настроен сканер (команда сканирования есть в том же списке);
  • 🔍 откройте файл двойным щелчком, он запустится в программе просмотра Windows.

Такой файл не появляется на печатной форме. Он просто хранится вместе с документом.

Рисунок в табличном документе

Нужен логотип в своём бланке или подпись в выгруженном отчёте:

  1. Откройте табличный документ: сформированный отчёт или новый файл через Файл → Новый → Табличный документ.
  2. Выделите ячейку, рядом с которой должен стоять рисунок.
  3. В главном меню выберите Таблица → Рисунки → Картинка.
  4. Укажите файл, поставьте рисунок на место и растяните за маркеры.
  5. Сохраните документ в MXL, если планируете переиспользовать бланк.

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

Добавление картинок в конфигурацию через Конфигуратор

Здесь начинается работа разработчика. Изменения в типовой конфигурации на поддержке лучше делать в расширении: так обновления не затрут доработку.

Общая картинка (библиотека картинок)

  1. Откройте Конфигурация → Открыть конфигурацию.
  2. В дереве метаданных разверните Общие → Общие картинки.
  3. Нажмите Добавить, задайте имя латиницей или кириллицей без пробелов, например ЛоготипКомпании.
  4. В окне свойств откройте картинку и выберите файл.
  5. Сохраните и обновите конфигурацию базы данных (F7).

Теперь картинку видно во всех свойствах типа «Картинка» в выпадающем списке библиотеки. Из кода она доступна как БиблиотекаКартинок.ЛоготипКомпании.

Для иконок кнопок берите размер 16×16 пикселей. Общая картинка может хранить несколько вариантов под разную плотность экрана: тогда на мониторах с масштабом 150–200 % иконки не размываются.

Картинка на форме

Два элемента решают разные задачи:

ЭлементЧто показываетКогда брать
Декорация «Картинка»Одна и та же картинка всегдаЛоготип в шапке, иллюстрация-подсказка
Поле картинкиДанные реквизита, у каждого объекта своиФото товара, сотрудника, скан

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

Реквизит для хранения

В справочнике добавьте реквизит типа ХранилищеЗначения, например Картинка. Тип ДвоичныеДанные для реквизитов объектов не подходит: хранить двоичные данные в базе можно только через хранилище значения.

Программная загрузка изображения: код для формы

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

На форме создайте реквизит АдресКартинки (тип Строка), поле картинки с путём к данным АдресКартинки и команду ЗагрузитьКартинку.

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

&НаКлиенте
Процедура ЗагрузитьКартинкуЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
	Если Не Результат Тогда
		Возврат; // пользователь отменил выбор
	КонецЕсли;
	АдресКартинки = Адрес;
	Модифицированность = Истина;
КонецПроцедуры

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	Если ТекущийОбъект.Картинка.Получить() <> Неопределено Тогда
		АдресКартинки = ПолучитьНавигационнуюСсылку(ТекущийОбъект.Ссылка, "Картинка");
	КонецЕсли;
КонецПроцедуры

Что здесь важно:

  • 🧷 УникальныйИдентификатор формы привязывает временное хранилище к форме. Закрыли форму без записи, и данные удалятся сами.
  • 🌐 Навигационная ссылка работает и в тонком клиенте, и в веб-клиенте. Тащить двоичные данные на клиент не нужно.
  • 🗜 Сжатие в ХранилищеЗначения для JPG и PNG почти ничего не даёт: эти форматы уже сжаты.

Картинка в макете печатной формы

В макете нарисуйте рисунок-картинку и дайте ему имя, например Логотип. При формировании подставьте данные:

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ДанныеЛоготипа = Организация.Логотип.Получить(); // реквизит типа ХранилищеЗначения
Если ТипЗнч(ДанныеЛоготипа) = Тип("ДвоичныеДанные") Тогда
	ОбластьШапка.Рисунки.Логотип.Картинка = Новый Картинка(ДанныеЛоготипа);
КонецЕсли;
ТабДок.Вывести(ОбластьШапка);

Чтобы логотип не растягивался, в свойствах рисунка в макете поставьте размер картинки «Пропорционально».

Рисунок можно добавить и без заготовки в макете:

Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = БиблиотекаКартинок.ЛоготипКомпании;
Рисунок.Расположить(ТабДок.Область("R1C1:R4C3"));

Картинку из файла на сервере создают конструктором Новый Картинка("D:\Images\logo.png"). Путь должен быть доступен пользователю, от имени которого запущен сервер 1С, а не вашему пользователю Windows.

Почему картинка не отображается: типичные ошибки

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

Как не раздуть базу: оптимизация работы с изображениями

Картинки чаще всего становятся причиной, по которой файловая база внезапно весит 20 ГБ, а выгрузка в DT идёт час.

Простые правила:

  • 📏 Ограничивайте размер на входе. Проверьте ДвоичныеДанные.Размер() и откажитесь от записи, если файл больше, скажем, 2 МБ, с понятным сообщением пользователю.
  • 🖼 Логотипы и печати храните в PNG, фото в JPG. BMP занимает в 5–10 раз больше места при той же картинке.
  • 🧺 Не читайте хранилище в запросах к спискам. Получение поля ХранилищеЗначения в запросе для 5 000 строк тянет все картинки с сервера.
  • 🪶 Для списка с превью храните отдельную маленькую копию (150–200 пикселей) и показывайте только её.
  • 🔗 Показывайте картинку по навигационной ссылке, а не через Получить() с передачей на клиент.

Уменьшенную копию проще подготовить до загрузки, в любом редакторе изображений: пакетное сжатие сотни фото занимает пару минут.

Где ещё хранить изображения: альтернативы реквизиту

Реквизит ХранилищеЗначения в самом объекте прост, но не единственный вариант.

СпособПлюсыМинусы
Реквизит ХранилищеЗначения в объектеПросто, картинка всегда с объектомОбъект «тяжелеет», читается дольше
Присоединённые файлы (БСП)Много файлов на объект, версии, готовый интерфейсНужна БСП в конфигурации
Тома на диске (настройка работы с файлами БСП)База не растёт, файлы лежат в папке сервераПапку нужно включать в резервное копирование отдельно
Отдельный регистр сведений «Объект → картинка»Объект лёгкий, картинку читают только по запросуНужен код записи и чтения
Путь или URL на внешний ресурсБаза не растёт вообщеСсылка ломается при переносе файлов, нет контроля доступа

В типовых конфигурациях хранение файлов в томах включается в разделе Администрирование, в настройках работы с файлами.

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

Фото с камеры в мобильном приложении 1С

В мобильной платформе есть доступ к камере через СредстваМультимедиа. Сначала проверьте, что устройство умеет снимать, затем получите двоичные данные снимка:

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

Дальше запись идёт тем же кодом ПередЗаписьюНаСервере, что и в настольной версии.

Ещё два нюанса мобильной работы:

  • 📶 Снимок современного телефона весит несколько мегабайт. При синхронизации с центральной базой через мобильный интернет это заметно, поэтому проверяйте размер до отправки.
  • 🔐 В разрешениях мобильного приложения должна быть включена работа с камерой, иначе метод не сработает.

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

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

Можно ли вставить картинку в 1С, если нет прав на изменение справочника?
Нет. Загрузка фото в карточку меняет объект. Попросите администратора добавить роль на изменение номенклатуры или загрузить картинку за вас.
Какие форматы картинок понимает 1С?
Платформа 8.3 открывает PNG, JPG, BMP, GIF, ICO и TIFF. Для печатей и логотипов берите PNG, для фото JPG.
Как перенести картинки номенклатуры в другую базу?
Присоединённые файлы переносятся обменом или выгрузкой справочника вместе с файлами. Если файлы лежат в томах, скопируйте и папку томов.
Как выгрузить все картинки номенклатуры в папку?
Только обработкой: она обходит справочник, получает двоичные данные каждого основного изображения и записывает их методом Записать() в файлы с именем по коду товара.
Почему у коллеги картинка видна, а у меня нет?
Чаще всего у вас нет доступа к файлам или к тому, где лежит изображение. Сравните роли пользователей и проверьте, доступна ли папка томов с вашего рабочего места.