Картинки товаров и файлы-фото в базе 1С: вручную, пакетом и программно

· 10 мин

Содержание

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

Выбор простой. До 20–30 изображений — руками через карточку. Больше — внешняя обработка на встроенном языке или готовая обработка из каталога решений. Картинки лежат на сайте или у поставщика — загрузка по ссылке через HTTP. Всё сказанное ниже относится к типовым конфигурациям на платформе 8.3 с интерфейсом «Такси»: Бухгалтерии 3.0, Управлению торговлей 11, Комплексной автоматизации и ERP. Они построены на общей библиотеке, поэтому механизм файлов у них один.

Подготовка фото перед загрузкой в 1С

Половина проблем с картинками появляется ещё до загрузки. Пять минут на подготовку файлов избавляют от ручной переделки.

Форматы

Платформа 1С:Предприятие 8.3 показывает в полях картинок форматы:

  • 🖼️ JPG/JPEG — основной выбор для фото товаров;
  • 🖼️ PNG — для схем, логотипов, изображений с прозрачным фоном;
  • 🖼️ GIF, BMP, TIFF, ICO, SVG, WMF, EMF — поддерживаются, но для каталога товаров обычно не нужны.

Фото с iPhone в формате HEIC прикрепить как файл можно, но в карточке товара оно не отобразится. Такие файлы перед загрузкой переведите в JPG.

Размер и вес

Каждая картинка хранится целиком, сжатия «на лету» нет. 2000 товаров по 5 МБ — это 10 ГБ в базе и в каждой резервной копии.

Практичные ориентиры для карточки товара:

ПараметрОриентирЗачем
Сторона изображения800–1200 pxХватает для карточки и печати прайса
Вес файла100–300 КББаза и копии не разбухают
ФорматJPG, качество 80–85%Разницу на глаз не видно
Цветовая модельRGBCMYK-файлы из типографии могут отображаться с искажением цвета

Пакетно уменьшить фото можно любым графическим редактором с режимом пакетной обработки, например бесплатным IrfanView или XnConvert.

Имена файлов

Для массовой загрузки имя файла — единственная связь между фото и товаром. Договоритесь о правиле заранее:

  1. Имя файла = артикул или код товара: A-1024.jpg.
  2. Несколько фото одного товара — с суффиксом: A-1024_1.jpg, A-1024_2.jpg.
  3. Без пробелов в начале и в конце, без символов / \ : * ? " < > |.
  4. Расширение в нижнем регистре: обработки часто сравнивают строку .jpg и не узнают .JPG.

Перед загрузкой выгрузите список номенклатуры с артикулами в Excel и сверьте с именами файлов. Пустые и задвоенные артикулы лучше исправить сразу.

Как добавить картинку в карточку товара вручную

Это штатный способ, который есть в любой типовой конфигурации на библиотеке стандартных подсистем.

Основное изображение номенклатуры

  1. Откройте Справочники → Товары и услуги → Номенклатура (в Бухгалтерии 3.0) или НСИ и администрирование → Номенклатура (в Управлении торговлей 11) и двойным щелчком откройте нужный товар.
  2. В карточке слева или сверху есть область под изображение. Щёлкните по ней.
  3. Выберите файл на диске и подтвердите.
  4. Запишите элемент: Записать или Записать и закрыть.

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

КонфигурацияГде список номенклатурыЧто делает клик по картинке
Бухгалтерия 3.0Справочники → Товары и услуги → НоменклатураВыбор файла, он становится основным изображением
УТ 11, КА, ERPНСИ и администрирование → НоменклатураВыбор или замена основного изображения из присоединённых файлов

Несколько фото у одного товара

Дополнительные изображения, сертификаты и инструкции добавляют как присоединённые файлы:

  1. В карточке найдите команду со значком скрепки — она открывает список файлов элемента.
  2. Нажмите Добавить и выберите файл с диска. Можно выделить сразу несколько файлов.
  3. Файлы можно и перетащить мышью из проводника прямо в список.
  4. Чтобы сделать другое фото главным, выберите его как основное изображение через клик по картинке в карточке.

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

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

Пакетная загрузка изображений готовой обработкой

Когда фото сотни, ручной путь отнимает дни. Логика пакетной загрузки всегда одна:

  1. Обработка читает папку с файлами.
  2. По имени файла ищет товар — по артикулу, коду или наименованию.
  3. Добавляет файл к найденному товару как присоединённый.
  4. Если основного изображения ещё нет — назначает его.
  5. Выводит протокол: что загружено, что не нашлось.

В типовых Бухгалтерии и Управлении торговлей отдельной штатной команды «загрузить фото из папки» нет. Штатная загрузка данных из файла в списке номенклатуры работает с таблицами (наименования, артикулы, цены), а картинки не переносит.

Варианты:

  • 📦 Готовая обработка из каталога решений партнёров — выбирайте ту, что явно поддерживает вашу конфигурацию и номер релиза. Перед запуском проверьте её на копии базы.
  • 🛠️ Своя внешняя обработка — около 40 строк кода, пример ниже. Её легко подстроить под своё правило имён.
  • 🤝 Программист 1С — если нужно разнести фото ещё и по характеристикам или сериям.

Открывают внешнюю обработку через Файл → Открыть (меню с тремя полосками в левом верхнем углу). Если база ругается на безопасность, внешнюю обработку нужно разрешить: в Бухгалтерии 3.0 это раздел Администрирование → Печатные формы, отчёты и обработки.

Перед пакетной загрузкой
Выполнено: 0 / 5

Загрузка фото из внешних источников: сайт, поставщик, интернет-магазин

Часто фото у вас нет на диске: они лежат на сайте поставщика или в интернет-магазине. Есть три сценария.

Прайс поставщика со ссылками на фото

Поставщик присылает Excel, где у каждого товара есть ссылка на изображение. Порядок такой:

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

Скачивание по ссылке делается штатными объектами HTTPСоединение и HTTPЗапрос:

&НаСервере
Функция СкачатьКартинку(Сервер, ПутьНаСервере)
	Соединение = Новый HTTPСоединение(Сервер, 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
	Запрос = Новый HTTPЗапрос(ПутьНаСервере);
	Ответ = Соединение.Получить(Запрос);
	Если Ответ.КодСостояния = 200 Тогда
		Возврат Ответ.ПолучитьТелоКакДвоичныеДанные();
	КонецЕсли;
	Возврат Неопределено;
КонецФункции

Здесь Сервер — домен без https:// (например, example.com), а ПутьНаСервере — остаток ссылки (/img/A-1024.jpg). Таймаут 30 секунд не даст обработке зависнуть на «мёртвой» ссылке.

Обмен с интернет-магазином

Обмен по формату CommerceML передаёт изображения отдельными файлами рядом с XML: они лежат в каталоге import_files, а в XML у товара указан путь к картинке. Если интернет-магазин настроен на обмен в обе стороны, картинки приходят вместе с товарами. Если приходят только товары без фото — проверьте в настройках обмена на стороне сайта, выгружаются ли изображения.

Синхронизация между базами 1С

Между типовыми конфигурациями (например, УТ 11 → Бухгалтерия 3.0) присоединённые файлы по стандартным правилам обмена обычно не передаются. Картинки в таком случае загружают отдельно в ту базу, где они реально нужны: чаще всего это торговая база, из которой печатают прайсы и выгружают сайт.

Программная загрузка картинок через двоичные данные

Код ниже — основа внешней обработки для пакетной загрузки. Он работает в конфигурациях на библиотеке стандартных подсистем версии 3.x, где в общем модуле РаботаСФайлами есть функции ПараметрыДобавленияФайла и ДобавитьФайл. Если в вашей конфигурации их нет, откройте этот модуль в конфигураторе и посмотрите, как называется функция добавления файла.

На форме обработки нужен реквизит Каталог (строка) — путь к папке с фото.

&НаСервере
Процедура ЗагрузитьНаСервере()

	Файлы = НайтиФайлы(Объект.Каталог, "*.*", Ложь);
	Загружено = 0;

	Для Каждого Файл Из Файлы Цикл

		Расширение = НРег(Файл.Расширение);
		Если Расширение <> ".jpg" И Расширение <> ".jpeg" И Расширение <> ".png" Тогда
			Продолжить;
		КонецЕсли;

		Артикул = СокрЛП(Файл.ИмяБезРасширения);
		Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
		Если Товар.Пустая() Тогда
			Сообщить("Не найден товар с артикулом " + Артикул);
			Продолжить;
		КонецЕсли;

		Данные = Новый ДвоичныеДанные(Файл.ПолноеИмя);
		Адрес = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор);

		ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
		ПараметрыФайла.ВладелецФайлов = Товар;
		ПараметрыФайла.ИмяБезРасширения = Файл.ИмяБезРасширения;
		ПараметрыФайла.РасширениеБезТочки = Сред(Расширение, 2);
		ПараметрыФайла.ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения();

		СсылкаНаФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, Адрес);

		Если Не ЗначениеЗаполнено(Товар.ФайлКартинки) Тогда
			ТоварОбъект = Товар.ПолучитьОбъект();
			ТоварОбъект.ФайлКартинки = СсылкаНаФайл;
			ТоварОбъект.Записать();
		КонецЕсли;

		Загружено = Загружено + 1;

	КонецЦикла;

	Сообщить("Загружено файлов: " + Формат(Загружено, "ЧН=0; ЧГ=0"));

КонецПроцедуры

Что важно в этом коде:

  • 🔎 НайтиПоРеквизиту возвращает первый найденный элемент. При задвоенных артикулах фото попадёт только к одному из товаров — поэтому дубли чистят заранее.
  • 🧩 Фото с суффиксом _1, _2 этот вариант не найдёт. Отрежьте суффикс перед поиском: СтрРазделить(Артикул, "_")[0].
  • 🖼️ Основное изображение назначается, только если его не было. Существующие картинки код не перезаписывает.
  • 🔁 Повторный запуск добавит файлы ещё раз. Для повторов удалите из папки уже загруженное или добавьте проверку.

Если нужен свой реквизит с картинкой

В доработанных и самописных конфигурациях картинку иногда хранят прямо в реквизите типа ХранилищеЗначения:

ТоварОбъект.Картинка = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных(9));
ТоварОбъект.Записать();

Чтобы показать её на форме, двоичные данные кладут во временное хранилище, а адрес выводят в поле картинки:

АдресКартинки = ПоместитьВоВременноеХранилище(Объект.Ссылка.Картинка.Получить(), УникальныйИдентификатор);

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

Клиент-серверная база: где лежит папка

В клиент-серверном варианте НайтиФайлы выполняется на сервере 1С и ищет папку на его диске, а не на вашем компьютере. Путь C:\Фото указывает на диск сервера.

Решения:

  1. Положите фото в сетевую папку и укажите путь вида \\fileserver\photo\.
  2. Дайте право чтения этой папки пользователю, под которым работает служба сервера 1С (по умолчанию USR1CV8).
  3. Либо передавайте файлы с клиента: выбор файлов в диалоге и помещение их во временное хранилище методом ПоместитьФайлыАсинх (платформа с номером не ниже 8.3.18), а дальше та же серверная процедура.

Где хранить тысячи изображений: база или тома на диске

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

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

  1. Откройте Администрирование → Общие настройки, блок про присоединённые файлы.
  2. Выберите хранение файлов в томах на диске.
  3. Создайте том: укажите сетевой путь к папке и при желании лимит размера.
  4. Уже загруженные файлы можно перенести в тома: в списке томов есть команда переноса файлов из базы.
Способ храненияПлюсыМинусы
В информационной базеОдна копия базы — всё внутри, ничего не потеряетсяБаза и копии растут, .dt выгружается дольше
В томах на дискеБаза лёгкая, копии быстрыеПапку тома нужно бэкапить отдельно и синхронно с базой

При хранении в томах резервная копия базы без копии папки тома — неполная. Восстановите базу без тома, и все картинки станут «битыми» ссылками.

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

Ошибки при загрузке изображений и что с ними делать

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

Если фото загрузились, но не видны другим пользователям, проверьте права: просмотр присоединённых файлов тоже регулируется профилями групп доступа.

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

Можно ли загрузить картинки сразу с ценами из Excel?
Штатная загрузка из таблицы переносит наименования, артикулы и цены, но не изображения. Фото грузят отдельной обработкой по артикулу после загрузки номенклатуры.
Попадут ли картинки в прайс-лист и на сайт?
Да, если в печатной форме прайса включён вывод изображений и в настройках обмена с сайтом включена выгрузка картинок. Используется основное изображение товара.
Как удалить ненужное фото?
Откройте список присоединённых файлов товара и пометьте файл на удаление. Физически он удалится при удалении помеченных объектов.
Сколько места займут 5000 фото?
При весе 200 КБ — около 1 ГБ. При исходных 5 МБ — около 25 ГБ, поэтому фото стоит уменьшать заранее.
Можно ли загружать фото в файловую базу так же, как в серверную?
Да. В файловом варианте серверный код выполняется на вашем компьютере, поэтому подходит и локальный путь к папке.