Эта статья является продолжением статьи:
1C 8 асинхронная загрузка с веб-клиента без установки расширения для работы с файлами
Происходит без установки дополнительных плагинов и компонентов работы с файлами. Используется так-же новая возможность 1С открывать эксель-файлы своими методами.
Кроме того, мы рассмотрим, как в асинхронном режиме на веб-клиенте, при запрете модальных окон, отображать диалог «Вопрос» и «Предупреждение».
Это продолжение публикации http://www.it.homeclub.top/?p=734 про асинхронну загрузку на сервер.
В конфигурацию добавляем перечисление «СпособыОткрытияФайлов» и регистр сведений «СпособыОткрытияФайлов», как показано на картинке.

Измерение ТипДанныхОтображения имеет тип «Строка (10)».
Ресурс «СпособОткрытияФайла» имеет тип перечисления «СпособыОткрытияФайлов».
Теперь заполним регистр, чтобы указать нашей программе, какие из типов файлов каким способом открывать. Если какой-либо из типов не указан, программа будет выдавать предупреждение, что открыть этот тип файла 1С не может.

Естественно, не забудьте добавить перечисление и регистр в подсистему «Основная»
Далее, при нажатии в форме регистра «ФайловоеХранилище» кнопки «Показать файл» задается вопрос:


Если нажимается «Показать», то 1С пытается отобразить файл своим способом.

Если тип файла не зарегистрирован в регистре «СпособыОткрытияФайлов», то будет выдано предупреждение:

Если же выбирается «Сохранить», то открывается стандартный диалог открытия файла, и файл скачивается методами используемого браузера.
Заметьте, указанный способ абсолютно кросс-платформенный и кросс-браузерный.
Прилагаю видео, поясняющее пример:
Прилагаю код модуля регистрасведений «ФайловоеХранилище», который отображает средствами 1С, или скачивает файл асинхронно на веб-клиент.
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
&НаСервере функция ПоказатьФайлНаСервере(текДан) перем табДок, СпособОткрытияФайла; менеджерзаписи = РегистрыСведений.ФайловоеХранилище.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(менеджерзаписи,текДан); менеджерзаписи.Прочитать(); Если менеджерзаписи.Выбран() тогда тз = "ВЫБРАТЬ | СпособыОткрытияФайлов.ТипДанныхОтображения КАК ТипДанныхОтображения, | СпособыОткрытияФайлов.СпособОткрытияФайла КАК СпособОткрытияФайла |ИЗ | РегистрСведений.СпособыОткрытияФайлов КАК СпособыОткрытияФайлов |ГДЕ | СпособыОткрытияФайлов.ТипДанныхОтображения ПОДОБНО &ТипДанныхОтображения" ; з = новый запрос (тз); з.УстановитьПараметр("ТипДанныхОтображения",менеджерзаписи.РасширениеФайла); рез = з.Выполнить(); Если не рез.Пустой() тогда выборка = рез.Выбрать(); выборка.Следующий(); СпособОткрытияФайла = выборка.СпособОткрытияФайла; иначе //СпособОткрытияФайла = Перечисления.СпособыОткрытияФайлов.КакТаблица возврат неопределено; КонецЕсли; Если СпособОткрытияФайла = Перечисления.СпособыОткрытияФайлов.КакТаблица тогда табДок = новый ТабличныйДокумент; иначе табДок = новый ТекстовыйДокумент; КонецЕсли; текДанныеФайла = менеджерзаписи.ЗагруженныеДанные.Получить(); имяВрем = ПолучитьИмяВременногоФайла(менеджерзаписи.РасширениеФайла); текДанныеФайла.Записать(имяВрем); табДок.Прочитать(имяВрем); табДок.ИспользуемоеИмяФайла = менеджерзаписи.ИмяФайла; возврат табДок; КонецЕсли; возврат неопределено; КонецФункции &НаКлиенте Процедура ПоказатьФайл(Команда) текДан = Элементы.Список.ТекущаяСтрока; текДанные = Элементы.Список.ТекущиеДанные; если текДан<>неопределено тогда ДанныеФайла = получитьФайлИстории(текДан); Если ДанныеФайла <> Неопределено тогда списокКнопокВопроса = новый СписокЗначений (); списокКнопокВопроса.Добавить("Показать","Показать"); списокКнопокВопроса.Добавить("Скачать","Скачать"); списокКнопокВопроса.Добавить("Отмена","Отмена"); оповещение = новый ОписаниеОповещения ("ОбработатьОтветНаВопрос",ЭтотОбъект,ДанныеФайла); ПоказатьВопрос(оповещение,"Выберите действие",списокКнопокВопроса,30,"Показать","Что хотите сделать?","Отмена"); иначе ПоказатьПредупреждение(,"данные не найдены"); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте процедура ОбработатьОтветНаВопрос (РезультатВопроса,ДополнительныеПараметры) экспорт текДан = Элементы.Список.ТекущаяСтрока; текДанные = Элементы.Список.ТекущиеДанные; Если РезультатВопроса = "Показать" тогда табДок = ПоказатьФайлНаСервере(текДан); Если табДок<> неопределено тогда табДок.Показать("Наш файл: "+текДанные.ИмяФайла); иначе ПоказатьПредупреждение(,"Невозможно отобразить файл этого типа "+ Строка(текДанные.РасширениеФайла),20); КонецЕсли; ИначеЕсли РезультатВопроса = "Скачать" тогда времХранилище = ПоместитьВоВременноеХранилище(ДополнительныеПараметры,ЭтаФорма.УникальныйИдентификатор); НачатьПолучениеФайлаССервера(времХранилище,текДанные.ИмяФайла); иначе возврат; КонецЕсли; КонецПроцедуры функция получитьФайлИстории (текСтр) мз = РегистрыСведений.ФайловоеХранилище.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(мз,текСтр); мз.Прочитать(); если мз.Выбран() тогда возврат мз.ЗагруженныеДанные.Получить(); иначе возврат неопределено; КонецЕсли; КонецФункции |
1С 8.3 асинхронная загрузка и открытие файлов на веб-клиенте: 1 комментарий