К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как добавить фото в форму 1С

Как добавить фото в форму 1С: хранение картинок в справочнике, вывод на форму элемента и в список, настройка в конфигураторе и типовых конфигурациях.

Фотографии товаров, сотрудников или объектов учёта делают работу в 1С нагляднее: менеджер видит товар при подборе, кадровик — фото сотрудника в карточке. Способ добавления зависит от того, какая у вас ситуация: типовая конфигурация с уже предусмотренным механизмом картинок или самописная/дорабатываемая конфигурация, где фото нужно вывести самостоятельно.

В типовых решениях (1С:Управление торговлей, 1С:ERP, 1С:ЗУП и др.) механизм хранения изображений обычно уже встроен — достаточно прикрепить файл к элементу справочника. Если же вы разрабатываете или дорабатываете конфигурацию, потребуется добавить реквизит для хранения картинки и вывести её на форму в конфигураторе.

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

Как фото хранится в 1С: основные подходы

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

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

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

Сравнение вариантов хранения

ХранилищеЗначения в реквизите

Простая реализация, всё в одной базе. Подходит для небольшого числа картинок; при большом объёме раздувает базу.

Присоединённые файлы (БСП)

Стандарт типовых конфигураций: версионирование, тома хранения, подписанные файлы. Требует наличия БСП в конфигурации.

Файлы на диске, путь в базе

База не растёт, но нужно следить за доступностью каталога и копировать файлы отдельно. Риск «битых» ссылок.

Добавление фото в типовой конфигурации без программирования

В типовых решениях на базе БСП (1С:Управление торговлей, 1С:ERP, 1С:Комплексная автоматизация, 1С:ЗУП) механизм изображений уже встроен. Разберём на примере карточки номенклатуры.

Откройте карточку товара в справочнике «Номенклатура». Найдите область изображения — обычно это рамка с надписью вроде «Изображение отсутствует» или иконка картинки в левой части формы. Щёлкните по этой области или по гиперссылке рядом с ней и выберите файл с диска. После выбора картинка отобразится в карточке и сохранится вместе с элементом.

Аналогично работают фото сотрудников в 1С:ЗУП (в карточке физического лица) и изображения в других справочниках. Если область изображения не видна, проверьте настройки: в некоторых конфигурациях показ картинок в списке и карточке включается в настройках раздела или через кнопку «Ещё» — «Изменить форму».

Если кнопки добавления нет

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

Добавление фото в типовой карточке
  1. 1
    Откройте карточку элемента справочника (товар, сотрудник, контрагент)
  2. 2
    Найдите область изображения или гиперссылку «Добавить изображение»
  3. 3
    Щёлкните по области и выберите файл картинки с диска
  4. 4
    Дождитесь отображения миниатюры в форме
  5. 5
    Запишите и закройте карточку, затем откройте её повторно и убедитесь, что фото на месте

Добавление реквизита для хранения фото в конфигураторе

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

Классический вариант — реквизит с типом «ХранилищеЗначения», например с именем «ДанныеКартинки». В него при загрузке будет помещаться объект «Картинка» или двоичные данные файла. Дополнительно часто добавляют строковый реквизит для имени файла или расширения, чтобы корректно сохранять и выгружать изображение.

Альтернатива без изменения структуры объекта — реквизит формы типа «Строка», в который помещается навигационная ссылка на двоичные данные (метод ПоместитьВоВременноеХранилище или ПолучитьНавигационнуюСсылку). Такой подход используется, когда картинка лежит в отдельном регистре сведений или в присоединённых файлах, а форма лишь показывает её по ссылке.

Вывод картинки на форму элемента

После создания реквизита откройте форму элемента в конфигураторе. Перетащите реквизит из панели реквизитов в дерево элементов формы. Для строкового реквизита с адресом картинки установите у элемента формы вид «Поле картинки» — именно этот вид умеет отображать изображение по адресу во временном хранилище или навигационной ссылке.

Теперь нужен код, который при открытии формы помещает картинку во временное хранилище и подставляет адрес в реквизит формы. Типовой приём — в обработчике «ПриСозданииНаСервере» получить двоичные данные из хранилища значений объекта и вызвать ПоместитьВоВременноеХранилище, а результат присвоить строковому реквизиту формы.

Для загрузки новой картинки пользователем добавьте команду формы «Загрузить картинку» и в её обработчике используйте диалог выбора файла или метод НачатьПомещениеФайла (в тонком и веб-клиенте работа с файловой системой идёт только через асинхронные методы помещения файлов).

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

Обратите внимание: обработчики, работающие с реквизитом объекта, должны выполняться на сервере (директива &НаСервере), а интерактивный выбор файла — на клиенте с последующей передачей данных на сервер.

Показ фото в списке и в форме подбора

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

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

Учтите производительность: отображение картинок в длинном списке заметно замедляет прокрутку, особенно если изображения большие. Практическая рекомендация — хранить уменьшенные копии (миниатюры) для списков и полноразмерные изображения для карточек.

Частые ошибки и как их избежать

Большинство проблем при выводе фото в 1С связаны с несколькими повторяющимися причинами. Знание их заранее экономит часы отладки.

Первая группа ошибок — неправильный вид элемента формы: если вместо «Поле картинки» оставить обычное поле ввода, на форме отобразится строка адреса вместо изображения. Вторая — попытка обратиться к файловой системе напрямую в тонком или веб-клиенте: методы вроде Новый Картинка("C:\фото.jpg") там не сработают, нужен асинхронный перенос файла на сервер. Третья — хранение картинки в реквизите формы без сохранения в объект: после закрытия формы изображение пропадает.

Типичные ошибки
01
Элемент формы с видом «Поле ввода» вместо «Поле картинки» — вместо фото видна строка адреса
02
Прямая работа с диском в тонком клиенте — код падает или молча не выполняется; используйте НачатьПомещениеФайла
03
Картинка помещена только в реквизит формы, но не записана в объект — после переоткрытия фото исчезает
04
Загрузка полноразмерных фото без сжатия — база растёт, формы тормозят
05
Изменения в конфигураторе без копии базы — риск потери данных при неудачной реструктуризации

Проверка результата

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

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

Контрольные точки

Как проверить результат

Повторное открытие карточки
Норма

Фото отображается сразу после открытия

Тревожный признак

Область пустая или показывает адрес строкой

Работа в тонком/веб-клиенте
Норма

Загрузка и показ работают как в толстом клиенте

Тревожный признак

Ошибки при выборе файла, картинка не грузится

Права обычного пользователя
Норма

Пользователь видит и может добавить фото

Тревожный признак

Кнопка недоступна, ошибка прав доступа

Размер базы после загрузки партии фото
Норма

Прирост умеренный, формы не тормозят

Тревожный признак

База резко выросла, списки прокручиваются с задержкой

FAQ

Можно ли добавить фото в форму списка без доработки конфигурации?

В типовых конфигурациях на базе БСП — да: показ изображений в списке номенклатуры включается настройкой формы без программирования. В самописной конфигурации без реквизита для картинки и колонки с видом «Поле картинки» обойтись нельзя — потребуется доработка в конфигураторе.

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

Объект «Картинка» в платформе работает с распространёнными растровыми форматами: JPEG, PNG, BMP, GIF и некоторыми другими. На практике предпочтительны JPEG для фотографий и PNG для изображений с прозрачностью — они дают хороший баланс качества и размера.

Почему фото видно у администратора, но не у менеджера?

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

Как массово загрузить фото для большого списка товаров?

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

Фото пропало после переноса базы на другой сервер. Что случилось?

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

Можно ли вывести фото в печатную форму документа?

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

Итог

Что важно запомнить

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