← Назад к вопросам
Выгрузка картинок номенклатуры в каталоги
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:\\Выгрузка", Неопределено);
Ключевые моменты
- Фильтр по остаткам через СрезПоследних
- Создание папок по названиям групп
- Выгрузка картинок через ПолучитьДанные().Записать()
- Обработка ошибок через Попытка-Исключение