1.
G_102345487146519347193
15.10.24 07:36 Сейчас в теме
Всем привет, подскажите пожалуйста, какие методы нужно использовать и как построить код, чтобы человек на клиенте выбрал каталог и выгрузил все изображения из справочника. В коде я изображения получаю из Хранилища Значений и приходит от туда двоичные значения. Пробовал метод записать использовать, но не понимаю как организовать путь Каталога. Не ругайтесь если я чего то не понимаю, можно дать ссылки на литературу которая поможет решить вопрос. Я пишу функцию, в которой пишу запрос для получения двоичных данных картинки, после циклом добавляю значения в массив и возращаю массив в процедуру на клиенте. 2) Тут я должен по нажатию кнопки, открыть каталог для выбора сохранения, и я так понимаю от выбранного пути меняется переменная "Путь", но вот сам метод записать двоичных данных строиться циклом? То есть я обхожу массив и каждый его элемент и формирую запись по выбранному пути ?
&НаСервере
Функция ВыгрузитьНаДиск()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 2
| 0 КАК Расширение,
| 0 КАК Ссылка,
| 0 КАК ДанныеФайла
|ИЗ 0
| КАК 0
Результат = Запрос.Выполнить().Выбрать();
КоллекцияКартинок = новый Массив;
Пока Результат.Следующий() Цикл
СтруктураФайла = новый Структура;
СтруктураФайла.Вставить("Данные",Результат.ДанныеФайла);
СтруктураФайла.Вставить("Наименование", Строка(Результат.Ссылка));
СтруктураФайла.Вставить("Расширение",Результат.Расширение);
КоллекцияКартинок.Добавить(СтруктураФайла);
КонецЦикла;
Возврат КоллекцияКартинок;
КонецФункции
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
КоллекцияКартинок = ВыгрузитьНаДиск();
// Отказываемся от стандартной обработки процедуры
СтандартнаяОбработка = Ложь;
// Создаем диалог выбора каталога и указываем для чего он будет использоваться
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
// Задаем фильтр доступных расширений файлов для выбора
//Диалог.Фильтр = НСтр("ru=’Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx’"); // это если выбор файла, а не каталога
// Задаем текст заголовка окна выбора
Диалог.Заголовок = НСтр("ru=’Выберите каталог для сохранения’");
// Создаем объект ОписаниеОповещения, который будет передан в метод Показать
ОповещениеЗавершения = Новый ОписаниеОповещения("ВыборФайлаЗавершение", ЭтотОбъект, КоллекцияКартинок);
// Открываем окно выбора файла
Диалог.Показать(ОповещениеЗавершения);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение(ВыбранныеФайлы, КоллекцияКартинок) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
//Сообщить("Каталог не выбран");
Возврат;
КонецЕсли;
ПутьКаталога = Результат[0];
Для каждого Файл из КоллекцияКартинок Цикл
Файл.Записать( СтрШаблон("%1/%2.%3",ПутьКаталога,Файл.Наименование,Файл.Расширение);
КонецЦикла;
Если КоллекцияКартинок.Количество() Тогда
ПоказатьОповещениеПользователя("Успешно сохранены картинки!",,ПутьКаталога,БиблиотекаКартинок.СформироватьОтчет)№
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВыгрузитьНаДиск()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 2
| 0 КАК Расширение,
| 0 КАК Ссылка,
| 0 КАК ДанныеФайла
|ИЗ 0
| КАК 0
Результат = Запрос.Выполнить().Выбрать();
КоллекцияКартинок = новый Массив;
Пока Результат.Следующий() Цикл
СтруктураФайла = новый Структура;
СтруктураФайла.Вставить("Данные",Результат.ДанныеФайла);
СтруктураФайла.Вставить("Наименование", Строка(Результат.Ссылка));
СтруктураФайла.Вставить("Расширение",Результат.Расширение);
КоллекцияКартинок.Добавить(СтруктураФайла);
КонецЦикла;
Возврат КоллекцияКартинок;
КонецФункции
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
КоллекцияКартинок = ВыгрузитьНаДиск();
// Отказываемся от стандартной обработки процедуры
СтандартнаяОбработка = Ложь;
// Создаем диалог выбора каталога и указываем для чего он будет использоваться
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
// Задаем фильтр доступных расширений файлов для выбора
//Диалог.Фильтр = НСтр("ru=’Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx’"); // это если выбор файла, а не каталога
// Задаем текст заголовка окна выбора
Диалог.Заголовок = НСтр("ru=’Выберите каталог для сохранения’");
// Создаем объект ОписаниеОповещения, который будет передан в метод Показать
ОповещениеЗавершения = Новый ОписаниеОповещения("ВыборФайлаЗавершение", ЭтотОбъект, КоллекцияКартинок);
// Открываем окно выбора файла
Диалог.Показать(ОповещениеЗавершения);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение(ВыбранныеФайлы, КоллекцияКартинок) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
//Сообщить("Каталог не выбран");
Возврат;
КонецЕсли;
ПутьКаталога = Результат[0];
Для каждого Файл из КоллекцияКартинок Цикл
Файл.Записать( СтрШаблон("%1/%2.%3",ПутьКаталога,Файл.Наименование,Файл.Расширение);
КонецЦикла;
Если КоллекцияКартинок.Количество() Тогда
ПоказатьОповещениеПользователя("Успешно сохранены картинки!",,ПутьКаталога,БиблиотекаКартинок.СформироватьОтчет)№
КонецЕсли;
КонецПроцедуры