Справочники и Данные · 12 мин
Как вытащить картинки из 1С: практическое руководство
Как извлечь картинки из 1С: сохранение из карточки номенклатуры, выгрузка всех изображений обработкой, работа с хранилищем значений и типичные ошибки.
Картинки в 1С чаще всего хранятся в справочнике «Номенклатура» как присоединённые файлы или внутри реквизита типа «Хранилище значения». Задача вытащить их возникает при переезде на новую конфигурацию, подготовке каталога для сайта, синхронизации с маркетплейсом или банальном резервном копировании. Способ извлечения зависит от того, как именно картинки попали в базу и какая у вас конфигурация — Управление торговлей, ERP, Комплексная автоматизация или самописная.
В типовых конфигурациях на БСП (Библиотека стандартных подсистем) изображения хранятся в справочнике присоединённых файлов, например «НоменклатураПрисоединенныеФайлы», а физически лежат либо в томах на диске, либо в базе данных. В старых или упрощённых решениях картинка может быть записана прямо в реквизит объекта в виде двоичных данных. От этого и зависит, хватит ли вам штатных кнопок или понадобится обработка.
Ниже разобраны все рабочие варианты: от сохранения одной картинки мышкой до массовой выгрузки тысяч файлов встроенным языком. Для каждого способа указаны условия применения, ограничения и способ проверить результат.
Определяем, где именно хранятся картинки
Прежде чем что-то выгружать, выясните механизм хранения — от этого зависит весь дальнейший путь. Откройте карточку номенклатуры с изображением и посмотрите, как оно выведено. Если картинка показывается в отдельной форме «Присоединённые файлы» или на вкладке с файлами — это стандартный механизм БСП, и файлы можно извлекать штатно.
Если изображение просто отображается в поле на форме без списка файлов, скорее всего оно лежит в реквизите типа «Хранилище значения». Проверить это можно через конфигуратор: найдите справочник и посмотрите состав реквизитов. Реквизит с типом «ХранилищеЗначения» и названием вроде «ФайлКартинки», «Изображение» или «ДанныеКартинки» подтвердит догадку.
Третий вариант — файлы хранятся в томах на диске, а в базе лежат только ссылки. Это видно в настройках: «Администрирование» → «Работа с файлами» → «Хранить файлы в томах на диске». В этом случае картинки физически уже лежат в файловой системе, и задача сводится к их корректному копированию с привязкой к номенклатуре.
Файлы извлекаются штатно через «Сохранить как» или обработкой
Нужна обработка или запрос, читающий двоичные данные
Проверьте папку тома — картинки уже доступны как файлы
Сохраняем одну картинку из карточки
Самый простой сценарий — нужно вытащить несколько изображений вручную. Откройте карточку номенклатуры, перейдите к списку присоединённых файлов (ссылка «Файлы» или «Изображения» в панели навигации). Выделите нужный файл и нажмите «Ещё» → «Сохранить как…» либо кнопку сохранения на панели. Укажите папку — файл запишется на диск с исходным именем и расширением.
В некоторых конфигурациях картинку можно открыть двойным щелчком — она откроется во внешней программе просмотра, откуда тоже доступно сохранение. Если изображение отображается только в поле формы без списка файлов, попробуйте правый клик по нему: в ряде форм доступен пункт «Сохранить картинку».
Ручной способ оправдан при десятках картинок. Если речь о сотнях и тысячах позиций, ручное сохранение превратится в многодневную рутину с высоким риском пропустить файлы или перепутать принадлежность к товару — переходите к массовым методам.
Массовая выгрузка присоединённых файлов штатными средствами
В конфигурациях на БСП присоединённые файлы можно выгрузить пакетно. Откройте форму списка присоединённых файлов (через карточку владельца или общий список «Файлы» в разделе администрирования), выделите нужные строки с помощью Ctrl или Shift и используйте «Ещё» → «Сохранить как…». Платформа предложит выбрать каталог и сохранит все выделенные файлы разом.
Ограничение этого подхода — имена файлов. В базе они могут называться как угодно, включая дубли и неинформативные названия вроде «image1.jpg». После выгрузки привязку к номенклатуре придётся восстанавливать вручную, если имена не содержат артикул. Поэтому перед массовой выгрузкой проверьте, как называются файлы, и при необходимости сначала приведите имена к виду «артикул.jpg».
- 1Откройте список присоединённых файлов нужного справочника
- 2Отберите строки отбором или выделите вручную через Ctrl/Shift
- 3Нажмите «Ещё» → «Сохранить как…» и укажите пустую папку
- 4Дождитесь окончания копирования и сверьте количество файлов с числом выделенных строк
- 5Проверьте несколько файлов случайной выборкой: открываются ли они и соответствуют ли товару
Копируем файлы напрямую из томов хранения
Если в настройках включено хранение файлов в томах на диске, картинки уже лежат в файловой системе — обычно в подкаталогах с разбивкой по датам или хешам. Путь к томам виден в справочнике «Тома хранения файлов». Достаточно скопировать содержимое тома средствами операционной системы.
Сложность в том, что имена файлов в томе часто нечитаемы: платформа сохраняет их с уникальными идентификаторами, а расширение может отсутствовать. Чтобы восстановить связь «файл — товар», потребуется выгрузить из базы таблицу соответствия: ссылка на номенклатуру, относительный путь к файлу в томе, исходное имя и расширение. Эти данные есть в справочнике присоединённых файлов, и их можно вывести через консоль запросов или универсальный отчёт.
Работайте с томом только в режиме чтения и копируйте файлы, а не перемещайте их. Удаление или переименование файлов в томе приведёт к тому, что 1С перестанет открывать картинки в карточках, и восстановить структуру будет сложно.
Выгружаем картинки из хранилища значений обработкой
Когда изображения лежат в реквизите «Хранилище значения», штатных кнопок сохранения нет — нужна обработка на встроенном языке. Логика проста: обойти элементы справочника, получить значение реквизита методом Получить(), проверить, что это двоичные данные, и записать их в файл через Записать().
Пример минимального кода для обхода номенклатуры и сохранения картинок в каталог:
Каталог = "D:\Images\";
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Данные = Выборка.ХранилищеКартинки.Получить();
Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
ИмяФайла = Каталог + Выборка.Артикул + ".jpg";
Данные.Записать(ИмяФайла);
КонецЕсли;
КонецЦикла;Обратите внимание на три момента. Во-первых, имя реквизита в вашей конфигурации может отличаться — уточните его в конфигураторе. Во-вторых, расширение файла лучше брать из данных, а не задавать жёстко: если в базе лежат и JPG, и PNG, единое расширение испортит часть файлов. В-третьих, в имени файла недопустимы символы вроде «/», «\», «:» — артикулы нужно очищать от них перед записью, иначе получите ошибку.
Если прав на конфигуратор и запуск внешних обработок у вас нет, попросите администратора или программиста 1С выполнить выгрузку. Это задача на 15–30 минут работы, и она безопасна: обработка только читает данные и ничего не меняет в базе.
Выгружаем картинки вместе с данными через обмен
Если конечная цель — перенести картинки на сайт, в другую 1С или в каталог, часто удобнее не извлекать файлы по одному, а использовать механизмы обмена. Типовая выгрузка товаров в CommerceML включает изображения: при формировании файла обмена картинки складываются в подкаталог import_files рядом с XML-файлом, а внутри XML прописывается связь товара с файлом.
Для этого в Управлении торговлей откройте обмен с сайтом, настройте отбор нужной номенклатуры и выполните выгрузку в каталог на диске вместо отправки на сайт. В результате вы получите структурированный набор: файлы изображений плюс XML с артикулами, наименованиями и путями к картинкам. Это готовый материал для импорта в любую систему.
Альтернатива — универсальный обмен данными в формате XML (EnterpriseData) или выгрузка через конвертацию данных, если перенос идёт между двумя базами 1С. В обоих случаях двоичные данные картинок переносятся вместе с объектами, и отдельное извлечение файлов не требуется.
Сравнение способов извлечения
Подходит для единичных картинок; не масштабируется, легко ошибиться в принадлежности файла
Десятки и сотни файлов без программирования; имена файлов могут быть неинформативными
Быстро для больших объёмов; требуется таблица соответствия файлов и товаров
Полный контроль над именами и структурой; нужны права и минимальные навыки
Картинки сразу с привязкой к товарам для сайта; работает только в типовых конфигурациях
Проверяем результат и исправляем типичные проблемы
После выгрузки сверьте количество полученных файлов с количеством позиций, у которых есть изображения. Расхождение обычно означает одно из трёх: у части товаров картинки действительно нет, файлы с одинаковыми именами перезаписали друг друга, либо часть данных не является изображениями (в хранилище могли сохранить что угодно).
Проверьте случайную выборку файлов: откройте их в просмотрщике и убедитесь, что изображение соответствует товару, чей артикул указан в имени. Если файл не открывается, посмотрите его реальный формат — расширение могло быть назначено неверно. Признаки: JPG начинается с байтов FF D8, PNG — с сигнатуры «PNG», видимой в любом hex-просмотрщике.
Отдельная проблема — дубли имён. Если у двух товаров одинаковый артикул (что бывает при нестрогом учёте), второй файл перезапишет первый молча. Добавляйте в имя файла уникальный идентификатор, например код элемента справочника, чтобы исключить потери.
Как проверить результат выгрузки
Совпадает с числом позиций, имеющих изображения
Файлов меньше — ищите дубли имён или пустые реквизиты
Изображение открывается и соответствует товару
Файл не открывается или показывает чужой товар
Размеры в разумных пределах, отличаются между файлами
Много файлов нулевого размера — данные в реквизите пустые
Картинки в карточках 1С открываются как раньше
Карточки потеряли изображения — затронуты тома или данные
FAQ
Можно ли вытащить картинки из 1С без прав администратора?
Да, если речь о ручном сохранении: для кнопки «Сохранить как» у присоединённого файла достаточно обычных прав пользователя на чтение номенклатуры. А вот запуск внешних обработок, доступ к томам хранения и консоли запросов требуют расширенных прав — тут без администратора не обойтись.
Почему после выгрузки часть файлов не открывается?
Чаще всего неверно назначено расширение: в хранилище значений формат не зафиксирован, и под одним реквизитом могут лежать JPG, PNG и BMP. Определите реальный формат по сигнатуре файла и переименуйте. Реже причина в том, что в реквизите сохранены не двоичные данные, а, например, строка с путём — тогда метод хранения нужно пересмотреть.
Как выгрузить картинки сразу с привязкой к артикулам?
Самый надёжный путь — обработка, которая формирует имя файла из артикула или кода номенклатуры, либо типовая выгрузка CommerceML, где связь товара и файла прописывается в XML. Простое копирование из томов такой привязки не даёт, её придётся восстанавливать отдельной таблицей соответствия.
Картинки хранятся в базе — она сильно раздута. Что делать?
Выгрузите изображения обработкой в файловую систему, затем переведите базу на хранение файлов в томах на диске и загрузите картинки обратно уже как присоединённые файлы с хранением в томах. Это стандартная практика снижения размера базы. Все операции выполняйте только после полной резервной копии.
Можно ли вытащить картинки из 1С:Розницы или УНФ так же?
Да, обе конфигурации построены на БСП и используют механизм присоединённых файлов, поэтому работают сохранение из карточки, пакетное «Сохранить как» и выгрузка через обмен. Отличия только в названиях разделов меню и составе реквизитов — логика извлечения та же.
Что делать, если в карточке картинка есть, а в списке присоединённых файлов пусто?
Значит, изображение хранится не как присоединённый файл, а в реквизите типа «Хранилище значения» либо подтягивается из связанного справочника (например, из карточки основного изображения). Уточните в конфигураторе, откуда форма берёт картинку, и выгружайте данные именно из этого источника.
Что важно запомнить
Сначала определите способ хранения картинок: присоединённые файлы, хранилище значений или тома на диске. Единичные изображения сохраняйте вручную, массовые — пакетным сохранением, обработкой или обменом CommerceML. Имена файлов формируйте из артикула с очисткой недопустимых символов, из томов файлы только копируйте, а перед массовыми операциями делайте резервную копию.