Каталог решений - Работа с файлами в 8.3

Работа с файлами в 8.3

Работа с файлами в 8.3

В наличии

Работа с файлами в 8.3(толстый, тонкий и web клиенты)

Категория:

Описание

Время неумолимо идёт вперёд, а платформа 1С 8 бежит ещё быстрей этого времени.

Управляемые формы теперь называются «интерфейс ТАКСИ», модальные окна запрещены, а режим использования синхронных вызовов расширений и внешних компонент наглухо положил работоспособность большинства этих расширений и внешних компонент, и половину старых методов в добавок.

 

В общем, пацаны, дела такие — многие из вас читали статью великолепного Чистова П. о работе с файлами в 8.3

Если Вы ещё этого не сделали — бегом марш! (ссылка)

 

Суть механизма работы с файлами в кратце:

1) На клиенте выбираем файл

2) Пихаем его в чёрный ящик

3) Сохраняем содержимое чёрного ящика на сервере

 

Загвоздка состоит в том, что делать это надо особенно, по-новому и с душой.

Поэтому ваши

ВыбранныйФайл.Существует()

и прочие языческие штучки здесь не прокатят.

 

Итак, поехали!

Вот листинг кода, который позволяет загрузить файл с клиента

ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтаФорма);
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	
НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор);

Нас интересует метод «НачатьПомещениеФайлов«, который, собственно, вызывает диалог выбора файла и помещает этот файл во временное хранилище. Заморачиваться с описанием временного хранилища нет смысла, просто запомните — это то место, куда помещаются все выбранные нами файлы в виде двоичных данных (черный ящик).

&НаКлиенте
Процедура ОбработатьВыборФайла(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт

    Если ПомещенныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл
        ПутьКФайлу = ПереданныйФайл.Имя;
        Запись.ИмяФайла = РазборСтроки(ПутьКФайлу, "\");
        Элементы.ОткрытьФайл.Заголовок = Запись.ИмяФайла;        
        Адрес = ПереданныйФайл.Хранение;
    КонецЦикла;
    
КонецПроцедуры // ()

Понять, что там и как храниться в этом временном хранилище практически невозможно. Можно только обратиться к нашему файлу по навигационной ссылке, которая присваивается автоматически (см. переменную «Адрес«).

Идём дальше.

С тем, что файлы нужно хранить в реквизите или ресурсе с типом «Хранилище значения«, спорить, думаю, никто не будет. Достать файл из временного хранилища и поместить его в реквизит с типом «Хранилище значения» можно след.образом:

Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));

С одним разобрались, теперь второе — как достать файл из этого хранилища значений (которое, напомню, находится на сервере) и сохранить на диск клиента?

Прежде всего, нам надо получить навигационную ссылку на реквизит с типом «Хранилище значения«, куда у нас помещается файл в виде бинарных данных.

Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ИмяРеквизита");

Будьте, внимательны! Эта навигационная ссылка уже не имеет с временным хранилищем ничего общего! Проверить тип навигационной ссылки можно методом

ЭтоАдресВременногоХранилища(Адрес)

По традиции, листинг кода, который вызывает диалог сохранения файла

ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаСохраненияФайлов", ЭтаФорма);
	
Файл = Новый ОписаниеПередаваемогоФайла(ИмяФайла, Адрес);
	
ПолучаемыеФайлы = Новый Массив;
ПолучаемыеФайлы.Добавить(Файл);
	
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	
НачатьПолучениеФайлов(ОписаниеОповещения,ПолучаемыеФайлы, ДиалогОткрытияФайла, Истина);

Значение переменной «Файл» это ещё одна особенность данного способа. Здесь стоит обратить внимание на «ИмяФайла«. Дело в том, что помещая файл во временное хранилище, информация о его имени и расширении теряется. Поэтому не забудьте где-нибудь сохранять корректное имя файла, или хотя бы его расширение, чтобы потом не мучаться с вопросом «А это вордовский документ или мп3?«

Метод «НачатьПолучениеФайлов» аналогичен методу «НачатьПомещениеФайлов«. Просто один открывает диалог для выбора файла, другой же, наоборот, открывает диалог для сохранения файла.

 

В принципе всё.

При использовании данного способа, никакие совместимости модальности и синхронных вызовов в свойствах конфигурации устанавливать не нужно.

Статью писал больше как памятку для себя.

has been added to your cart:
Оформление заказа