← Назад к вопросам

Выгрузка картинок номенклатуры в каталоги

2.0 Middle🔥 121 комментариев
#Интеграции и обмены

Условие

Напишите обработку, которая выгружает картинки номенклатуры в каталоги на диске.

Требования:

  • Фильтр по группе номенклатуры
  • Выгружать только номенклатуру с остатками > 0
  • Создавать папки по названиям групп номенклатуры
  • Имя файла — наименование номенклатуры

Структура результата

Выгрузка/
├── Электроника/
│   ├── Телевизор.jpg
│   └── Ноутбук.jpg
└── Мебель/
    ├── Стол.jpg
    └── Стул.jpg

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Обзор задачи

Нужно создать обработку для выгрузки картинок номенклатуры в структурированные папки. Это практическая задача на работу с файловой системой, запросами к БД и регистрами остатков в 1С.

Решение 1: Основная процедура

Процедура ВыгрузитьКартинкиНоменклатуры(ПапкаНаДиске = "C:\\Выгрузка", ВыбраннаяГруппа = Неопределено)
    
    СоздатьПапку(ПапкаНаДиске);
    ТаблицаНоменклатуры = ПолучитьНоменклатуруСОстатками(ВыбраннаяГруппа);
    
    Для каждого СтрокаНом Из ТаблицаНоменклатуры Цикл
        Попытка
            НазваниеГруппы = СтрокаНом.НазваниеГруппы;
            ПапкаГруппы = ПапкаНаДиске + ОС.ПолучитьРазделительПути() + НазваниеГруппы;
            
            Если НЕ ПроверитьСуществованиеПапки(ПапкаГруппы) Тогда
                СоздатьПапку(ПапкаГруппы);
            КонецЕсли;
            
            ВыгрузитьКартинкиДляНоменклатуры(СтрокаНом.Ссылка, СтрокаНом.Наименование, ПапкаГруппы);
            
        Исключение
            Сообщить("Ошибка: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
    
КонецПроцедуры

Решение 2: Получение номенклатуры с остатками

Функция ПолучитьНоменклатуруСОстатками(ВыбраннаяГруппа = Неопределено)
    
    ТекстЗапроса = "Выбрать
        |    Н.Ссылка, Н.Наименование, Н.ГруппаНоменклатуры,
        |    Г.Наименование Как НазваниеГруппы,
        |    СУММА(Остатки.ОстатокНа) Как Остаток
        |Из Справочник.Номенклатура Как Н
        |    Левое Соединение Справочник.ГруппыНоменклатуры Как Г
        |        На Н.ГруппаНоменклатуры = Г.Ссылка
        |    Левое Соединение РегистрНакопления.НаличиеТовара.СрезПоследних(Текущая Дата()) Как Остатки
        |        На Н.Ссылка = Остатки.Номенклатура";
    
    Если ВыбраннаяГруппа <> Неопределено Тогда
        ТекстЗапроса = ТекстЗапроса + " Где Н.ГруппаНоменклатуры = Параметр1";
    КонецЕсли;
    
    ТекстЗапроса = ТекстЗапроса + " Группировать По Н.Ссылка, Н.Наименование, Н.ГруппаНоменклатуры, Г.Наименование
        | Имеющие СУММА(Остатки.ОстатокНа) > 0";
    
    Запрос = Новый Запрос(ТекстЗапроса);
    РезультатЗапроса = Запрос.Выполнить();
    Возврат РезультатЗапроса.Выгрузить();
    
КонецФункции

Решение 3: Выгрузка картинок товара

Процедура ВыгрузитьКартинкиДляНоменклатуры(НоменклатураСсылка, НаименованиеНоменклатуры, ПапкаГруппы)
    
    Номенклатура = НоменклатураСсылка.ПолучитьОбъект();
    
    Если Номенклатура.Картинки.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Для Индекс = 0 По Номенклатура.Картинки.Количество() - 1 Цикл
        КартинкаСтрока = Номенклатура.Картинки[Индекс];
        ДвоичныеДанные = КартинкаСтрока.Картинка.ПолучитьДанные();
        
        ИмяФайла = НаименованиеНоменклатуры + ".jpg";
        ПолныйПуть = ПапкаГруппы + ОС.ПолучитьРазделительПути() + ИмяФайла;
        
        ДвоичныеДанные.Записать(ПолныйПуть);
        Сообщить("Выгружен: " + ПолныйПуть);
    КонецЦикла;
    
КонецПроцедуры

Решение 4: Служебные функции

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

Функция ПроверитьСуществованиеПапки(ПапкаНаДиске)
    Возврат (Новый Файл(ПапкаНаДиске)).Существует();
КонецФункции

Использование

ВыгрузитьКартинкиНоменклатуры("C:\\Выгрузка", Неопределено);

Ключевые моменты

  • Фильтр по остаткам через СрезПоследних
  • Создание папок по названиям групп
  • Выгрузка картинок через ПолучитьДанные().Записать()
  • Обработка ошибок через Попытка-Исключение
Выгрузка картинок номенклатуры в каталоги | PrepBro