Разработка и Конфигурация · 11 мин
Как добавить фото в форму 1С
Как добавить фото в форму 1С: хранение картинок в справочнике, вывод на форму элемента и в список, настройка в конфигураторе и типовых конфигурациях.
Фотографии товаров, сотрудников или объектов учёта делают работу в 1С нагляднее: менеджер видит товар при подборе, кадровик — фото сотрудника в карточке. Способ добавления зависит от того, какая у вас ситуация: типовая конфигурация с уже предусмотренным механизмом картинок или самописная/дорабатываемая конфигурация, где фото нужно вывести самостоятельно.
В типовых решениях (1С:Управление торговлей, 1С:ERP, 1С:ЗУП и др.) механизм хранения изображений обычно уже встроен — достаточно прикрепить файл к элементу справочника. Если же вы разрабатываете или дорабатываете конфигурацию, потребуется добавить реквизит для хранения картинки и вывести её на форму в конфигураторе.
Ниже разобраны оба сценария: работа пользователя в типовой конфигурации и настройка формы разработчиком, а также типичные ошибки и проверка результата.
Как фото хранится в 1С: основные подходы
Прежде чем выводить картинку на форму, нужно понять, где она будет физически храниться. От этого зависит и способ отображения, и влияние на размер базы.
Существует три распространённых подхода. Первый — хранение двоичных данных изображения непосредственно в реквизите типа «ХранилищеЗначения» внутри объекта (например, в справочнике «Номенклатура»). Второй — хранение файлов в присоединённых файлах через подсистему работы с файлами БСП (Библиотека стандартных подсистем), как сделано в большинстве типовых конфигураций. Третий — хранение файлов на диске или в сетевом каталоге, а в базе — только путь к файлу.
Хранение в базе надёжнее с точки зрения целостности и резервного копирования, но увеличивает размер базы. Хранение на диске экономит место в базе, однако требует отдельной заботы о доступности каталога, правах доступа и резервном копировании файлов.
Сравнение вариантов хранения
Простая реализация, всё в одной базе. Подходит для небольшого числа картинок; при большом объёме раздувает базу.
Стандарт типовых конфигураций: версионирование, тома хранения, подписанные файлы. Требует наличия БСП в конфигурации.
База не растёт, но нужно следить за доступностью каталога и копировать файлы отдельно. Риск «битых» ссылок.
Добавление фото в типовой конфигурации без программирования
В типовых решениях на базе БСП (1С:Управление торговлей, 1С:ERP, 1С:Комплексная автоматизация, 1С:ЗУП) механизм изображений уже встроен. Разберём на примере карточки номенклатуры.
Откройте карточку товара в справочнике «Номенклатура». Найдите область изображения — обычно это рамка с надписью вроде «Изображение отсутствует» или иконка картинки в левой части формы. Щёлкните по этой области или по гиперссылке рядом с ней и выберите файл с диска. После выбора картинка отобразится в карточке и сохранится вместе с элементом.
Аналогично работают фото сотрудников в 1С:ЗУП (в карточке физического лица) и изображения в других справочниках. Если область изображения не видна, проверьте настройки: в некоторых конфигурациях показ картинок в списке и карточке включается в настройках раздела или через кнопку «Ещё» — «Изменить форму».
Если кнопки добавления нет
Отсутствие области изображения обычно означает одно из двух: либо у пользователя нет прав на добавление присоединённых файлов, либо в конфигурации для этого объекта механизм не предусмотрен. Права проверяются у администратора (роли «Добавление изменение файлов» и подобные). Если механизма нет — потребуется доработка в конфигураторе, описанная ниже.
- 1Откройте карточку элемента справочника (товар, сотрудник, контрагент)
- 2Найдите область изображения или гиперссылку «Добавить изображение»
- 3Щёлкните по области и выберите файл картинки с диска
- 4Дождитесь отображения миниатюры в форме
- 5Запишите и закройте карточку, затем откройте её повторно и убедитесь, что фото на месте
Добавление реквизита для хранения фото в конфигураторе
Если вы дорабатываете конфигурацию, первый шаг — создать место хранения картинки. Откройте конфигуратор, найдите нужный справочник или документ и добавьте реквизит.
Классический вариант — реквизит с типом «ХранилищеЗначения», например с именем «ДанныеКартинки». В него при загрузке будет помещаться объект «Картинка» или двоичные данные файла. Дополнительно часто добавляют строковый реквизит для имени файла или расширения, чтобы корректно сохранять и выгружать изображение.
Альтернатива без изменения структуры объекта — реквизит формы типа «Строка», в который помещается навигационная ссылка на двоичные данные (метод ПоместитьВоВременноеХранилище или ПолучитьНавигационнуюСсылку). Такой подход используется, когда картинка лежит в отдельном регистре сведений или в присоединённых файлах, а форма лишь показывает её по ссылке.
Вывод картинки на форму элемента
После создания реквизита откройте форму элемента в конфигураторе. Перетащите реквизит из панели реквизитов в дерево элементов формы. Для строкового реквизита с адресом картинки установите у элемента формы вид «Поле картинки» — именно этот вид умеет отображать изображение по адресу во временном хранилище или навигационной ссылке.
Теперь нужен код, который при открытии формы помещает картинку во временное хранилище и подставляет адрес в реквизит формы. Типовой приём — в обработчике «ПриСозданииНаСервере» получить двоичные данные из хранилища значений объекта и вызвать ПоместитьВоВременноеХранилище, а результат присвоить строковому реквизиту формы.
Для загрузки новой картинки пользователем добавьте команду формы «Загрузить картинку» и в её обработчике используйте диалог выбора файла или метод НачатьПомещениеФайла (в тонком и веб-клиенте работа с файловой системой идёт только через асинхронные методы помещения файлов).
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если НЕ Объект.ДанныеКартинки.Получить() = Неопределено Тогда
АдресКартинки = ПоместитьВоВременноеХранилище(
Объект.ДанныеКартинки.Получить(), УникальныйИдентификатор);
КонецЕсли;
КонецПроцедурыОбратите внимание: обработчики, работающие с реквизитом объекта, должны выполняться на сервере (директива &НаСервере), а интерактивный выбор файла — на клиенте с последующей передачей данных на сервер.
Показ фото в списке и в форме подбора
Картинка в карточке — только половина задачи: часто фото нужно видеть прямо в списке товаров или в форме подбора. Для этого в динамическом списке или таблице формы добавляют колонку с видом «Поле картинки» и заполняют её адресами изображений.
Простой способ — создать регистр сведений, связывающий элемент справочника с картинкой, и в запросе динамического списка получать навигационную ссылку на двоичные данные. В типовых конфигурациях показ изображений в списке номенклатуры уже реализован и включается настройкой формы списка.
Учтите производительность: отображение картинок в длинном списке заметно замедляет прокрутку, особенно если изображения большие. Практическая рекомендация — хранить уменьшенные копии (миниатюры) для списков и полноразмерные изображения для карточек.
Частые ошибки и как их избежать
Большинство проблем при выводе фото в 1С связаны с несколькими повторяющимися причинами. Знание их заранее экономит часы отладки.
Первая группа ошибок — неправильный вид элемента формы: если вместо «Поле картинки» оставить обычное поле ввода, на форме отобразится строка адреса вместо изображения. Вторая — попытка обратиться к файловой системе напрямую в тонком или веб-клиенте: методы вроде Новый Картинка("C:\фото.jpg") там не сработают, нужен асинхронный перенос файла на сервер. Третья — хранение картинки в реквизите формы без сохранения в объект: после закрытия формы изображение пропадает.
Проверка результата
После настройки пройдите полный цикл: загрузите фото, запишите элемент, закройте и заново откройте карточку. Изображение должно отображаться сразу, без дополнительных действий. Проверьте работу в том клиенте, которым пользуются сотрудники: поведение в толстом, тонком и веб-клиенте может отличаться.
Дополнительно убедитесь, что фото видят пользователи с ограниченными правами, а не только администратор, и что при обмене данными (если используется синхронизация между базами) изображения переносятся корректно.
Как проверить результат
Фото отображается сразу после открытия
Область пустая или показывает адрес строкой
Загрузка и показ работают как в толстом клиенте
Ошибки при выборе файла, картинка не грузится
Пользователь видит и может добавить фото
Кнопка недоступна, ошибка прав доступа
Прирост умеренный, формы не тормозят
База резко выросла, списки прокручиваются с задержкой
FAQ
Можно ли добавить фото в форму списка без доработки конфигурации?
В типовых конфигурациях на базе БСП — да: показ изображений в списке номенклатуры включается настройкой формы без программирования. В самописной конфигурации без реквизита для картинки и колонки с видом «Поле картинки» обойтись нельзя — потребуется доработка в конфигураторе.
Какие форматы изображений поддерживает 1С?
Объект «Картинка» в платформе работает с распространёнными растровыми форматами: JPEG, PNG, BMP, GIF и некоторыми другими. На практике предпочтительны JPEG для фотографий и PNG для изображений с прозрачностью — они дают хороший баланс качества и размера.
Почему фото видно у администратора, но не у менеджера?
Причина почти всегда в правах: у роли пользователя нет доступа к присоединённым файлам или к регистру/реквизиту, где хранится изображение. Проверьте роли, связанные с работой с файлами, и права на сам объект-хранитель картинки.
Как массово загрузить фото для большого списка товаров?
Используйте обработку массовой загрузки: в типовых конфигурациях есть штатные механизмы загрузки изображений из каталога с сопоставлением файлов по артикулу или наименованию. Если такой обработки нет, её пишут в конфигураторе: цикл по файлам каталога, помещение каждого во временное хранилище и запись в реквизит соответствующего элемента.
Фото пропало после переноса базы на другой сервер. Что случилось?
Если изображения хранились в файлах на диске, а в базе — только пути, то при переносе ссылки стали указывать на недоступный каталог. Перенесите каталог с файлами и проверьте настройку томов хранения. При хранении внутри базы (ХранилищеЗначения, присоединённые файлы в базе) такой проблемы не возникает.
Можно ли вывести фото в печатную форму документа?
Да. В макете печатной формы добавляется область с картинкой, а в коде формирования печатного документа изображение извлекается из хранилища и вставляется методом вывода области с картинкой. Важно заранее задать размер области, чтобы фото не искажало вёрстку документа.
Что важно запомнить
В типовых конфигурациях фото добавляется через область изображения в карточке без программирования. При доработке нужен реквизит-хранилище, поле картинки на форме и серверный код помещения данных во временное хранилище. Уменьшайте изображения перед загрузкой, проверяйте права пользователей и делайте резервную копию перед изменением конфигурации.