Есть выгрузка изображений из номенклатуры, выгружается общим списком, подскажите как можно сделать что б выгрузка была с папками, т.е. иерархию сохранить
Вот выгрузка сплошняком
Если СокрЛП(КаталогИзображений)="" Тогда
Предупреждение("Выберите каталог для сохранения файлов.");
Возврат;
КонецЕсли;
СоздатьКаталог(КаталогИзображений);
Запрос=Новый Запрос("
|ВЫБРАТЬ
| Объект КАК Номенклатура,
| Объект.Код КАК Код,
| Хранилище,
| ВЫБОР КОГДА Объект.ОсновноеИзображение=Ссылка ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ЭтоОсновное
|ИЗ
| Справочник.ХранилищеДополнительнойИнформации
|ГДЕ
| Объект ССЫЛКА Справочник.Номенклатура
|УПОРЯДОЧИТЬ ПО Объект");
Выборка=Запрос.Выполнить().Выбрать();
ФормаПроцесса=ПолучитьФорму("ФормаПроцесса");
ФормаПроцесса.Заголовок="Выполняется выгрузка...";
Всего=Выборка.Количество();
ФормаПроцесса.ЭлементыФормы.ИндикаторПроцесса.МаксимальноеЗначение=Всего;
н=0;
СчДопИзображений=0;
ПоследняяНоменклатура=Неопределено;
ФормаПроцесса.Открыть();
Пока Выборка.Следующий() Цикл
ОбработкаПрерыванияПользователя();
н=н+1;
Если н=1 ИЛИ Цел(н/10)=н/10 ИЛИ н=Всего Тогда
ФормаПроцесса.ЭлементыФормы.ИндикаторПроцесса.Значение=н;
ФормаПроцесса.ЭлементыФормы.ТекущийЭлемент.Заголовок=Выборка.Номенклатура;
КонецЕсли;
Если ТолькоОсновныеИзображения И НЕ Выборка.ЭтоОсновное Тогда
Продолжить;
КонецЕсли;
Если НЕ Выборка.ЭтоОсновное Тогда
Если ПоследняяНоменклатура<>Выборка.Номенклатура Тогда
СчДопИзображений=1;
Иначе
СчДопИзображений=СчДопИзображений+1;
КонецЕсли;
ПоследняяНоменклатура=Выборка.Номенклатура;
КонецЕсли;
ИмяФайла=СокрЛП(Выборка.Код)+?(Выборка.ЭтоОсновное,"","("+СчДопИзображений+")")+РасширениеФайлов;
Файл=Выборка.Хранилище.Получить();
Если Файл<>Неопределено Тогда
Файл.Записать(КаталогИзображений+"\"+ИмяФайла);
Сообщить("Записан файл: "+ИмяФайла,СтатусСообщения.Информация);
Иначе
Сообщить("Изображение отсутствует в хранилище! "+Выборка.Номенклатура,СтатусСообщения.Внимание);
КонецЕсли;
КонецЦикла;
ФормаПроцесса.Закрыть();
Возможности проверить нет, так что инфа не 100%. В запрос вставьте строку
|ИТОГИ ПО
| Номенклатура ИЕРАРХИЯ
|ИТОГИ ПО
| Номенклатура ИЕРАРХИЯ
bereznoy, я сейчас отвечу на новый вопрос, вы напишете "ну ладно, это сделаю, а дальше вот мне ещё надо..."?
Вот так выгружает все папки общим списком, как сделать что б выгружалось как в иерархии (в папке подпака и т.д.)
З = Новый Запрос;
З.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА";
Каталоги = З.Выполнить();
Папки = Каталоги.Выбрать();
Пока Папки.Следующий() Цикл
Если Папки.Группа = Истина Тогда
КаталогНаДиске = Новый Файл(Папки.Наименование);
Если НЕ КаталогНаДиске.Существует() Тогда
СоздатьКаталог(Папки.Наименование);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Все сделал, конечно знаю что некорректно, долго выполняется, медленно, но делает то что мне надо, пока так выкрутился, если у кого то появятся оптимизирующие советы, подскажите
Если СокрЛП(КаталогИзображений)="" Тогда
Предупреждение("Выберите каталог для сохранения файлов.");
Возврат;
КонецЕсли;
//СоздатьКаталог(КаталогИзображений);
Запрос=Новый Запрос("ВЫБРАТЬ
| ХранилищеДополнительнойИнформации.Объект КАК Номенклатура,
| ХранилищеДополнительнойИнформации.Объект.Артикул КАК Код,
| ХранилищеДополнительнойИнформации.Хранилище,
| ВЫБОР
| КОГДА ХранилищеДополнительнойИнформации.Объект.ОсновноеИзображение = ХранилищеДополнительнойИнформации.Ссылка
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоОсновное,
| ХранилищеДополнительнойИнформации.Объект.Ссылка КАК Тов
|ИЗ
| Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
|ГДЕ
| ХранилищеДополнительнойИнформации.Объект ССЫЛКА Справочник.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| ХранилищеДополнительнойИнформации.Объект");
Карт=Запрос.Выполнить();
/////////////////////////////////////////////////////////////////////////////////////////////
З = Новый Запрос;
З.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Папка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА";
Каталоги = З.Выполнить();
Папки = Каталоги.Выбрать();
Пока Папки.Следующий() Цикл
Если ЗначениеЗаполнено(Папки.Папка.Родитель)=0 Тогда
//Корень
КаталогНаДиске0 = Новый Файл(КаталогИзображений+"\"+СокрЛП(Папки.Папка.Наименование));
Если НЕ КаталогНаДиске0.Существует() Тогда
СоздатьКаталог(КаталогИзображений+"\"+СокрЛП(Папки.Папка.Наименование));
//Загружаем картинки
СчДопИзображений=0;
ПоследняяНоменклатура=Неопределено;
Изображение = Карт.Выбрать();
Пока Изображение.Следующий() Цикл
Если Изображение.Тов.Родитель = Папки.Папка Тогда
Если ТолькоОсновныеИзображения И НЕ Изображение.ЭтоОсновное Тогда
Продолжить;
КонецЕсли;
Если НЕ Изображение.ЭтоОсновное Тогда
Если ПоследняяНоменклатура<>Изображение.Номенклатура Тогда
СчДопИзображений=1;
Иначе
СчДопИзображений=СчДопИзображений+1;
КонецЕсли;
ПоследняяНоменклатура=Изображение.Номенклатура;
КонецЕсли;
ИмяФайла=СокрЛП(Изображение.Код)+?(Изображение.ЭтоОсновное,"","("+СчДопИзображений+")")+РасширениеФайлов;
Файл=Изображение.Хранилище.Получить();
Если Файл<>Неопределено Тогда
Файл.Записать(КаталогИзображений+"\"+СокрЛП(Папки.Папка.Наименование)+"\"+ИмяФайла);
Иначе
Сообщить("Изображение отсутствует в хранилище! "+Изображение.Номенклатура,СтатусСообщения.Внимание);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Папки1 = Каталоги.Выбрать();
Пока Папки1.Следующий() Цикл
Если ЗначениеЗаполнено(Папки1.Папка.Родитель)=1 И ЗначениеЗаполнено(Папки1.Папка.Родитель.Родитель)=0 Тогда
//Первый уровень
КаталогНаДиске1 = Новый Файл(КаталогИзображений+"\"+СокрЛП(Папки1.Папка.Родитель)+"\"+СокрЛП(Папки1.Папка.Наименование));
Если НЕ КаталогНаДиске1.Существует() Тогда
СоздатьКаталог(КаталогИзображений+"\"+СокрЛП(Папки1.Папка.Родитель)+"\"+СокрЛП(Папки1.Папка.Наименование));
//Загружаем картинки
СчДопИзображений=0;
ПоследняяНоменклатура=Неопределено;
Изображение1 = Карт.Выбрать();
Пока Изображение1.Следующий() Цикл
Если Изображение1.Тов.Родитель = Папки1.Папка Тогда
Если ТолькоОсновныеИзображения И НЕ Изображение1.ЭтоОсновное Тогда
Продолжить;
КонецЕсли;
Если НЕ Изображение1.ЭтоОсновное Тогда
Если ПоследняяНоменклатура<>Изображение1.Номенклатура Тогда
СчДопИзображений=1;
Иначе
СчДопИзображений=СчДопИзображений+1;
КонецЕсли;
ПоследняяНоменклатура=Изображение1.Номенклатура;
КонецЕсли;
ИмяФайла=СокрЛП(Изображение1.Код)+?(Изображение1.ЭтоОсновное,"","("+СчДопИзображений+")")+РасширениеФайлов;
Файл=Изображение1.Хранилище.Получить();
Если Файл<>Неопределено Тогда
Файл.Записать(КаталогИзображений+"\"+СокрЛП(Папки1.Папка.Родитель)+"\"+СокрЛП(Папки1.Папка.Наименование)+"\"+ИмяФайла);
Иначе
Сообщить("Изображение отсутствует в хранилище! "+Изображение1.Номенклатура,СтатусСообщения.Внимание);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Папки2 = Каталоги.Выбрать();
Пока Папки2.Следующий() Цикл
Если ЗначениеЗаполнено(Папки2.Папка.Родитель.Родитель)=1 Тогда
//Второй уровень
КаталогНаДиске2 = Новый Файл(КаталогИзображений+"\"+СокрЛП(Папки2.Папка.Родитель.Родитель.Наименование)+"\"+СокрЛП(Папки2.Папка.Родитель.Наименование)+"\"+СокрЛП(Папки2.Папка.Наименование));
Если НЕ КаталогНаДиске2.Существует() Тогда
СоздатьКаталог(КаталогИзображений+"\"+СокрЛП(Папки2.Папка.Родитель.Родитель.Наименование)+"\"+СокрЛП(Папки2.Папка.Родитель.Наименование)+"\"+СокрЛП(Папки2.Папка.Наименование));
//Загружаем картинки
СчДопИзображений=0;
ПоследняяНоменклатура=Неопределено;
Изображение2 = Карт.Выбрать();
Пока Изображение2.Следующий() Цикл
Если Изображение2.Тов.Родитель = Папки2.Папка Тогда
Если ТолькоОсновныеИзображения И НЕ Изображение2.ЭтоОсновное Тогда
Продолжить;
КонецЕсли;
Если НЕ Изображение2.ЭтоОсновное Тогда
Если ПоследняяНоменклатура<>Изображение2.Номенклатура Тогда
СчДопИзображений=1;
Иначе
СчДопИзображений=СчДопИзображений+1;
КонецЕсли;
ПоследняяНоменклатура=Изображение2.Номенклатура;
КонецЕсли;
ИмяФайла=СокрЛП(Изображение2.Код)+?(Изображение2.ЭтоОсновное,"","("+СчДопИзображений+")")+РасширениеФайлов;
Файл=Изображение2.Хранилище.Получить();
Если Файл<>Неопределено Тогда
Файл.Записать(КаталогИзображений+"\"+СокрЛП(Папки2.Папка.Родитель.Родитель.Наименование)+"\"+СокрЛП(Папки2.Папка.Родитель.Наименование)+"\"+СокрЛП(Папки2.Папка.Наименование)+"\"+ИмяФайла);
Иначе
Сообщить("Изображение отсутствует в хранилище! "+Изображение2.Номенклатура,СтатусСообщения.Внимание);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua