Отдел продаж:

Как скачать файлы из 1С?

Как скачать один прикрепленный файл?

У вас есть документ, к которому вы когда то прикрепляли файлы. Теперь появилась необходимость скачать файлы из 1С на компьютер. Возникает вопрос – как это сделать? На самом деле ответ простой – перейти на вкладку Файлы, выбрать нужный файл, нажать правой кнопкой мыши и выбрать пункт “Сохранить как..”. Появится диалог сохранения файла, где нужно указать имя сохраняемого файла и каталог.

Скачать файлы из 1С, Сохранить как...

Возможно, уже на этом моменте кто-то нашел ответ на свой вопрос в данной статье. Если это так, то рады были вам помочь. Если вам нужна консультация по работе в 1С или у вас возникли какие то проблемы в работе программы, вы можете обратиться по телефону в шапке сайта. Наша компания работает удаленно, поэтому можем помочь вам в любой части России. Кроме того, у нас вы можете приобрести продукцию 1С. С перечнем услуг и ценами вы можете ознакомиться по ссылке.

Ну а для всех остальных “едем дальше”.

Что делать, если нужно скачать несколько файлов?

А что, если к документу прикреплено много файлов и скачать файлы из 1С по одному уже не представляется возможным? Или, может, вы получаете файлы запросом, как тогда из набора данных скачать файлы на компьютер? Хотя для каждого из вариантов код будет немного отличаться, мы постараемся разобрать их все и донести суть.

Получение списка файлов

Для начала опишем функцию получения списка присоединенных файлов. В качестве аргумента функции выступает ссылка на документ или справочник, к которому присоединены файлы. Возвращает функция массив, который содержит список присоединенных файлов.

&НаСервереБезКонтекста
Функция СписокПрисоединенныхФайлов(ВладелецФайла)

	СписокФайлов = Новый Массив;
	РаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(ВладелецФайла, СписокФайлов); 
	
	Возврат СписокФайлов;
	
КонецФункции // ()

А как получить файлы, которые не привязаны ни к какому документу или справочнику? Сделать это можно с помощью запроса. Ниже приведен пример кода получения файлов, которые разместили в какой-то папке справочника Файлы.

Запрос = Новый Запрос;
Запрос.Текст = 
	"ВЫБРАТЬ
	|	Файлы.Ссылка КАК Файл,
	|	Файлы.Представление КАК ИмяФайла,
	|	Файлы.Расширение КАК РасширениеФайла
	|ИЗ
	|	Справочник.Файлы КАК Файлы
	|ГДЕ
	|	Файлы.ВладелецФайла = &ВладелецФайла";

Запрос.УстановитьПараметр("ВладелецФайла", Справочники.ПапкиФайлов.НайтиПоНаименованию("Имя папки"));
РезультатЗапроса = Запрос.Выполнить();

Описание основных процедур и функций

Теперь можно приступать к описанию самих процедур и функций сохранения файлов. Итак, у нас будут две основные процедуры – СохранитьКак() и СкачатьВсеФайлы(). В первом случае мы сохраняем на компьютер текущий файл, во втором сохраняем все полученные файлы.

&НаКлиенте
Процедура СохранитьКак(Команда)	

	ТекущиеДанные = Элементы.АВ_ПрисоединенныеФайлы.ТекущиеДанные;
	СохрнаитьФайлы(ТекущиеДанные.ВладелецФайла, ТекущиеДанные.Ссылка);

КонецПроцедуры
&НаКлиенте
Процедура СкачатьВсеФайлы(Команда)

	СохрнаитьФайлы(Объект.Ссылка);

КонецПроцедуры

И в первом и во втором случае мы передаем в функцию СохранитьФайлы() ссылку на документ, к которому привязаны файлы. Если файлы не привязаны ни к какому документу, то в функцию можно ничего не передавать. При сохранении одного присоединенного файла передается еще и ссылка на сам файл. Ну а теперь опишем саму функцию сохранения файлов – СохранитьФайлы().

Для начала укажем каталог сохранения файла. Для этого будем использовать диалог выбора файла. Сохранять файлы будем не в корень выбранного каталога, а создавать еще свой каталог с именем владельца файла. Если у вас файл не привязан ни к какому документу или справочнику, можно придумать свое название для подкаталога.

РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога; 
ДиалогОткрытия = Новый ДиалогВыбораФайла(РежимДиалога); 
ДиалогОткрытия.Каталог = ""; 
ДиалогОткрытия.МножественныйВыбор = Ложь; 
ДиалогОткрытия.Заголовок = "Выберите каталог для сохранения файлов"; 

Если ДиалогОткрытия.Выбрать() Тогда 
	ПутьККаталогу = СтрШаблон("%1\%2", ДиалогОткрытия.Каталог, Строка(ВладелецФайла));
        // альтернативный вариант, если хотите сохранять в корень выбранного каталога
	//ПутьККаталогу = ДиалогОткрытия.Каталог;
КонецЕсли;  
...

Теперь необходимо получить список файлов, которые мы будем сохранять на компьютер. Для этого мы вначале получим массив ссылок файлов, превратим в двоичные данные, а затем поместим их во временное хранилище. Для этого опишем функцию ФайлыДляСохранения(). Возвращать она будет массив адресов файлов во временном хранилище. В случае, когда мы сохраняем один файл, в функцию уже передаем ссылку на файл. Если же сохраняем все файлы, то передаем ссылку на владельца файла. Если же файлы не имеют владельца, то можно получить их запросом. Выше описан пример подобной функции. Итак, приведем описание функции.

&НаСервереБезКонтекста
Функция ФайлыДляСохранения(ВладелецФайла, СсылкаНаФайл = Неопределено)
	
	АдресаВременныхФайлов = Новый Массив;
	
	СписокФайлов = Новый Массив;
	
        // в этом месте можно получить файлы запросом, если нет владельца
	Если СсылкаНаФайл <> Неопределено Тогда
		СписокФайлов.Добавить(СсылкаНаФайл); 
	Иначе 
		СписокФайлов = СписокПрисоединенныхФайлов(ВладелецФайла); //Функция описана выше в статье
	КонецЕсли;
	
	Для каждого Файл Из СписокФайлов Цикл
		ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(Файл);
		Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор);
		ИмяФайла = СтрШаблон("%1.%2", Файл.Наименование, Файл.Расширение);
		АдресаВременныхФайлов.Добавить(Новый Структура("Адрес, ИмяФайла", Адрес, ИмяФайла));	
	КонецЦикла;
	
	Возврат АдресаВременныхФайлов;
		
КонецФункции

Снова возвращаемся к процедуре СохранитьФайлы(). Мы получили адреса файлов во временном хранилище. Теперь их нужно получить из временного хранилища и записать. Для удобства пользователя можно вывести сообщение об удачном сохранении файлов с указанием каталога. Итак, процедура СохрнаитьФайлы() будет выглядеть следующим образом.

&НаКлиенте
Процедура СохрнаитьФайлы(ВладелецФайла, СсылкаНаФайл = Неопределено)

	РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога; 
	ДиалогОткрытия = Новый ДиалогВыбораФайла(РежимДиалога); 
	ДиалогОткрытия.Каталог = ""; 
	ДиалогОткрытия.МножественныйВыбор = Ложь; 
	ДиалогОткрытия.Заголовок = "Выберите каталог для сохранения файлов"; 

	Если ДиалогОткрытия.Выбрать() Тогда 
		ПутьККаталогу = СтрШаблон("%1\%2", ДиалогОткрытия.Каталог, Строка(ВладелецФайла));
	КонецЕсли;  
	
	ФайлыДляСохранения = ФайлыДляСохранения(ВладелецФайла, СсылкаНаФайл);
	
	Для каждого Файл Из ФайлыДляСохранения Цикл 
		ИмяФайла = СтрШаблон("%1\%2", ПутьККаталогу, Файл.ИмяФайла);
		ПолучитьИзВременногоХранилища(Файл.Адрес).Записать(ИмяФайла);
	КонецЦикла;
	
	Сообщение = СтрШаблон("Файлы сохранены по адресу %1", ПутьККаталогу);
	Сообщить(Сообщение);	

КонецПроцедуры

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *