1с начатьпомещениефайла
В своих статьях ‘1с выбор файла / каталога’ и ‘1с загрузка из excel УФ’ я использовал обычное чтение файлов на клиенте, через полученные к ним пути. Сегодня же хочу сделать еще одну заметку, о том как можно работать с файлами в 1с, но уже через метод глобального контекста ‘начатьпомещениефайла’.
Данный вариант является практически единственным решением получения файлов в веб-клиенте. Давайте выберем на клиенте файл формата ‘xls’ и поместим его во временное хранилище:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
&НаКлиенте Процедура Команда_Начатьпомещениефайла(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыбранныеФайлы", ЭтаФорма); ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите файл: "; ДиалогОткрытияФайла.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx"; НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ОбработатьВыбранныеФайлы(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт Если ПомещенныеФайлы = Неопределено Тогда Возврат; КонецЕсли; Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл КонецЦикла; КонецПроцедуры |
Как видим в результате выполнения всего лишь одного метода ‘НачатьПомещениеФайлов‘ мы получаем диалог выбора файла (файлов), помещение выбранного файла (файлов) во временное хранилище и процедуру (описание оповещение), в результате которого нам доступны параметры помещенных во временное хранилище файлов:
Ну а теперь давайте прочитаем данные из нашего файла на сервере. для этого с начала получим его из временного хранилища, а затем запишем в каталог временных файлов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
&НаКлиенте Процедура Команда_Начатьпомещениефайла(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыбранныеФайлы", ЭтаФорма); ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите файл: "; ДиалогОткрытияФайла.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx"; НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ОбработатьВыбранныеФайлы(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт Если ПомещенныеФайлы = Неопределено Тогда Возврат; КонецЕсли; Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл ПрочитатьФайлНаСервере(ПереданныйФайл.Хранение, ПереданныйФайл.Имя); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПрочитатьФайлНаСервере(п_Адрес, п_ИмяФайла) Если НЕ ЭтоАдресВременногоХранилища(п_Адрес) Тогда Возврат; КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(п_Адрес); ПутьКНашемуФайлу = КаталогВременныхФайлов() + п_ИмяФайла; ДвоичныеДанные.Записать(ПутьКНашемуФайлу); //теперь на сервер по данному пути можем с ним работать "ПутьКНашемуФайлу" КонецПроцедуры |
Т.е. по сути мы просто взяли файл с клиента и через временное хранилище передали его на сервер в каталог временных файлов пользователя. И теперь на сервере при наличии на excel можем считать с него данные. О том как это просто можно сделать смотри здесь.
После того как мы проделали с файлом нужные действия, не забываем его удалить (если он нам больше не нужен):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
&НаКлиенте Процедура ПрочитатьФайлНаСервере(п_Адрес, п_ИмяФайла) Если НЕ ЭтоАдресВременногоХранилища(п_Адрес) Тогда Возврат; КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(п_Адрес); ПутьКНашемуФайлу = КаталогВременныхФайлов() + п_ИмяФайла; ДвоичныеДанные.Записать(ПутьКНашемуФайлу); //теперь на сервер по данному пути можем с ним работать "ПутьКНашемуФайлу" //Читаем его из excel, а после этого удаляем: УдалитьФайлы(ПутьКНашемуФайлу); КонецПроцедуры |
Вот так можно легко работать с файлами, помещенные во временное хранилище и при необходимости перегонять их на сервер.
Данный метод можно использовать и без интерактивного взаимодействия с пользователем (диалог выбора файлов) если у нас уже есть пути к файлам. Вместо диалога передаем массив помещаемых файлов, а параметр ‘Интерактивно’ устанавливаем в ‘Ложь’.
Важный нюанс: элементами массива помещаемых файлов должен быть ‘Новый ОписаниеПередаваемогоФайла’:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
&НаКлиенте Процедура Команда_НачататьПомещениеФайла2(Команда) ПомещаемыеФайлы = Новый Массив; ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла("C:\Users\DVasilev\Desktop\Изм площади.xlsx")); ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла("C:\Users\DVasilev\Desktop\Копия Пример Формула.xlsx")); ДополнительныеПараметры = Новый Структура; ОписаниеОповещения = Новый ОписаниеОповещения("ПолучениеФайловПослеПомещенияФайлов", ЭтотОбъект, ДополнительныеПараметры); НачатьПомещениеФайлов(ОписаниеОповещения, ПомещаемыеФайлы, , Ложь, ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ПолучениеФайловПослеПомещенияФайлов(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт Если ПомещенныеФайлы = Неопределено Тогда РезультатЗагрузки = Ложь; Иначе РезультатЗагрузки = Истина; Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл КонецЦикла; КонецЕсли; КонецПроцедуры |
Вот такая интересная на мой взгляд получилась заметка. Если понравилось палец вверх! Всем удачи. Подписывайся в телегу и следи за новостями! Удачи!
Так же прочитайте заметку как передать файл с клиента на сервер:
https://craft1c.ru/peredaem-fajjl-s-klienta-na-server/
Там, в отличии от этой статьи, используется как раз таки метод из заголовка “начатьпомещениефайла”!