Картинки в базе 1С: от одной фотографии до тысячи товаров
Содержание
Чтобы загрузить фото в 1С, откройте карточку нужного объекта (товара, сотрудника, контрагента), щёлкните по области картинки или по кнопке со скрепкой и выберите файл на диске. Для одной-двух картинок этого хватает. Для сотен фото нужна обработка, которая разложит файлы по карточкам сама.
Главная проблема обычно не в кнопке, а в последствиях: база распухает на гигабайты, фото с iPhone не отображается, а пакетная загрузка привязывает картинки не к тем товарам. Все три беды решаются до загрузки: выбором места хранения, сжатием и правильными именами файлов.
Где в 1С хранятся фотографии и что выбрать до загрузки
В типовых конфигурациях на платформе 8.3 (Бухгалтерия 3.0, ЗУП 3.1, Управление торговлей 11, КА, ERP) картинки живут в одном из двух мест:
- 📎 Присоединённые файлы. Отдельный справочник файлов, привязанных к владельцу: товару, документу, контрагенту. У одного товара может быть десяток файлов, одно из них назначается основным изображением.
- 🗄️ Реквизит типа
ХранилищеЗначения. Так хранят данные в доработанных и самописных конфигурациях: картинка лежит прямо в записи объекта.
Сами двоичные данные файла можно держать двумя способами:
| Где лежит файл | Плюсы | Минусы |
|---|---|---|
| В информационной базе | Попадает в выгрузку .dt и в бэкап базы, ничего не теряется | База растёт: 5 000 фото по 2 МБ — это плюс 10 ГБ |
| В томах на диске | База остаётся компактной, фото не тормозят обновление | Папку томов нужно бэкапить отдельно и выдать к ней права |
Переключить хранение можно в разделе Администрирование → Общие настройки, группа про присоединённые файлы: там включается хранение в томах и задаются сами тома. Решите это до массовой загрузки. Перенести уже загруженные файлы из базы в тома можно, но на большой базе это часы работы.
Если фото товаров нужно только для сайта и каталога, а в документах они не печатаются, тома на диске почти всегда выгоднее.
Как загрузить фото вручную через карточку объекта
Ручной способ работает во всех типовых конфигурациях одинаково по логике, отличается только место картинки на форме.
Фото товара в номенклатуре
- Откройте
Справочники → Товары и услуги → Номенклатура(Бухгалтерия 3.0) или разделНСИ и администрирование, ссылка «Номенклатура» (Управление торговлей 11). - Откройте карточку товара.
- Щёлкните по пустой области картинки в карточке. Если её нет, нажмите кнопку со скрепкой (присоединённые файлы).
- Выберите файл на диске. Можно перетащить файл мышью прямо в список присоединённых файлов.
- Если файлов несколько, отметьте главный как основное изображение командой в списке файлов.
- Нажмите
Записать и закрыть.
Фото сотрудника в ЗУП
В ЗУП 3.1 фотография привязана к физическому лицу. Откройте Кадры → Сотрудники, карточку сотрудника и щёлкните по месту под фотографию в шапке. Выберите файл, запишите карточку. Это же фото увидят все организации, где работает человек.
Скан или фото к документу
К любому документу (реализации, поступлению, авансовому отчёту) фото чека или накладной прикрепляется кнопкой со скрепкой в командной панели. Файл виден в списке документа значком скрепки, его можно открыть из журнала, не заходя в документ.
| Конфигурация | Что фотографируем | Где загружать |
|---|---|---|
| Бухгалтерия 3.0 | Товар, скан документа | Карточка номенклатуры, скрепка в документе |
| Управление торговлей 11 | Товар, несколько ракурсов | Карточка номенклатуры, присоединённые файлы |
| ЗУП 3.1 | Сотрудник | Карточка сотрудника, область фото |
| Любая типовая | Скан договора, чека | Скрепка в документе или справочнике |
Программная загрузка: ПоместитьФайл и временное хранилище
Если вы делаете свою форму или доработку, картинку нужно передать с компьютера пользователя на сервер. Синхронный ПоместитьФайл() в новых конфигурациях не используют: там запрещены модальные вызовы. Берут асинхронный НачатьПомещениеФайла.
Пример для формы с реквизитом объекта Фото типа ХранилищеЗначения и реквизитом формы АдресКартинки (строка) для поля картинки:
&НаКлиенте
Процедура ЗагрузитьФото(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат; // пользователь отменил выбор
КонецЕсли;
СохранитьФотоНаСервере(Адрес);
КонецПроцедуры
&НаСервере
Процедура СохранитьФотоНаСервере(Адрес)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
Объект.Фото = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
Модифицированность = Истина;
КонецПроцедуры
Чтобы показать сохранённое фото при открытии формы, в ПриСозданииНаСервере достаньте данные из хранилища и положите их во временное хранилище:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбъектЗначение = РеквизитФормыВЗначение("Объект");
ДанныеФото = ОбъектЗначение.Фото.Получить();
Если ДанныеФото <> Неопределено Тогда
АдресКартинки = ПоместитьВоВременноеХранилище(ДанныеФото, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
Поле картинки на форме привязывайте к строковому реквизиту с адресом во временном хранилище, а не к самому хранилищу значения. Иначе картинка не отобразится.
В типовых конфигурациях на БСП не пишите в хранилище напрямую. Используйте программный интерфейс подсистемы работы с файлами, например РаботаСФайлами.ДобавитьФайл() с параметрами из РаботаСФайлами.ПараметрыДобавленияФайла(). Тогда файл ляжет туда, куда настроено хранение, том или база, и появится в списке присоединённых файлов.
Как загрузить фото в 1С пачкой: из папки, Excel, XML и JSON
Сотни фотографий вручную не грузят. Нужен признак, по которому программа сопоставит файл и карточку. Надёжнее всего — артикул или код в имени файла: A-1025.jpg, A-1025_2.jpg.
Из папки по имени файла
Логика обработки:
- Найти файлы в каталоге:
НайтиФайлы(Каталог, "*.jpg"). - Взять из имени
Файл.ИмяБезРасширенияартикул, отрезав суффикс после_. - Найти номенклатуру по артикулу запросом.
- Прочитать файл
Новый ДвоичныеДанные(Файл.ПолноеИмя)и добавить как присоединённый файл. - Записать в журнал, какие файлы не нашли пары.
Файлы = НайтиФайлы(Каталог, "*.jpg");
Для Каждого Файл Из Файлы Цикл
Артикул = Файл.ИмяБезРасширения;
Позиция = СтрНайти(Артикул, "_");
Если Позиция > 0 Тогда
Артикул = Лев(Артикул, Позиция - 1);
КонецЕсли;
Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
Если Товар.Пустая() Тогда
Сообщить(СтрШаблон("Нет товара с артикулом %1 (файл %2)", Артикул, Файл.Имя));
Продолжить;
КонецЕсли;
ДвоичныеДанные = Новый ДвоичныеДанные(Файл.ПолноеИмя);
// дальше — добавление присоединённого файла к Товар
КонецЦикла;
Код с НайтиФайлы выполняется там, где запущен: на сервере он ищет папку на сервере 1С. Для клиент-серверной базы кладите фото в сетевую папку, к которой есть доступ у пользователя службы сервера 1С, или читайте файлы на клиенте.
Из Excel
Стандартная команда загрузки из файла в списке номенклатуры переносит таблицу (наименования, артикулы, цены), но картинки из ячеек Excel не забирает. Рабочая схема такая: в колонке таблицы пишут имя файла или ссылку на фото, а саму загрузку картинок делает обработка из прошлого пункта.
XML (CommerceML) и JSON
- 🛒 Обмен с сайтом по CommerceML. Картинки товаров идут отдельными файлами в папке рядом с XML, а в XML указан путь к ним. Это стандартный формат для интернет-магазинов.
- 🔗 JSON. Фото передают строкой в Base64. На стороне 1С строку превращают в двоичные данные функцией
Base64Значение(Строка).
Внешняя обработка или расширение: что выбрать
| Вариант | Когда подходит | Риски |
|---|---|---|
Внешняя обработка .epf | Разовая загрузка каталога | Нужны права на открытие внешних обработок |
Расширение конфигурации .cfe | Регулярная загрузка, своя кнопка в карточке | Проверять после каждого обновления типовой |
| Правка основной конфигурации | Почти никогда | Снятие с поддержки, сложные обновления |
Для разовой загрузки 3 000 фото хватит внешней обработки: запустили через Файл → Открыть, указали папку, проверили журнал. Если менеджеры добавляют фото каждый день, сделайте расширение с командой «Загрузить фото из папки» на форме списка номенклатуры.
Перед запуском на рабочей базе прогоните обработку на копии. Ошибка в сопоставлении по артикулу разложит фото по чужим товарам, и вычищать их придётся вручную.
Автоматизация: загрузка фото по ссылке и через API
Когда фото лежат у поставщика на сайте, их можно скачивать по ссылке прямо из 1С. Скелет запроса:
Соединение = Новый HTTPСоединение("supplier.example", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/images/A-1025.jpg");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
// добавить к товару как присоединённый файл
КонецЕсли;
Обратное направление — когда внешняя система сама присылает фото в 1С. Для этого публикуют HTTP-сервис на веб-сервере: он принимает JSON с артикулом и картинкой в Base64 и создаёт присоединённый файл.
Расписание даёт регламентное задание: например, раз в ночь проверять папку \\fileserver\photo\inbox, загружать новые фото и переносить обработанные файлы в архив. Так фото не грузятся повторно.
Как подготовить и сжать изображения перед загрузкой
Фото с телефона весит 3–8 МБ. Для карточки товара и печати в прайсе хватает 1200 пикселей по длинной стороне и 150–300 КБ.
Ориентиры:
| Назначение | Размер | Формат | Вес файла |
|---|---|---|---|
| Карточка товара | 1000–1200 px | JPEG, качество 80–85 | 150–300 КБ |
| Фото сотрудника | 400–600 px | JPEG | 50–100 КБ |
| Скан документа | 150–200 dpi | JPEG или PDF | до 1 МБ на лист |
| Логотип для печатных форм | по размеру макета | PNG | до 100 КБ |
Сжать папку целиком удобно бесплатной утилитой ImageMagick. Команда уменьшит все JPEG больше 1200 px и сложит результат в папку out (её нужно создать заранее):
mkdir out
magick mogrify -path out -resize "1200x1200>" -quality 82 *.jpg
Знак > в размере означает «уменьшать только большие». Маленькие картинки останутся как есть.
- 📱 Снимки iPhone в HEIC переведите в JPEG: 1С отображает BMP, GIF, JPEG, PNG, TIFF, ICO, SVG, WMF и EMF.
- 🧹 Метаданные EXIF (геолокация, модель камеры) при сжатии лучше убирать: добавьте ключ
-strip. - 🔤 Имена файлов давайте латиницей без пробелов: меньше проблем при обмене с сайтом.
Почему фото не загружается в 1С: ошибки и решения
Ещё две ситуации, которые путают с ошибками:
- 🌐 Веб-клиент не даёт выбрать файл. Проверьте, не блокирует ли браузер всплывающие окна для адреса базы. Для части операций с файлами браузеру нужно расширение для работы с файлами, программа предложит его установить.
- 👥 Фото видно у одного пользователя и не видно у другого. Скорее всего, у второго нет прав на просмотр присоединённых файлов. Проверьте группу доступа пользователя.
Частые вопросы
Сколько фото можно прикрепить к одному товару?
Можно ли загрузить фото в 1С с телефона?
Попадут ли фото в выгрузку .dt?
.dt не входят, папку томов копируют отдельно.Как вывести фото товара в печатную форму?
Чем заменить ПоместитьФайл в новых конфигурациях?
НачатьПомещениеФайла с описанием оповещения. В платформе 8.3.18 и новее есть и ПоместитьФайлНаСерверАсинх.