Просто публикую пример. Он позволит вам работать с загрузкой файлов на сервер через веб-клиент, не устанавливая дополнений в браузер. То есть, ваша 1С в данном случае становится абсолютно кросс-платформенной. Кажется, данные методы появились в 8.3.9, однако, начиная с 8.3.16 они стали обязательными для работы в веб-клиенте, и модальные окна теперь запрещены в веб-клиенте окончательно, даже если разрешение модальности указано в настройках конфигурации. Так-же приложу видео с пояснениями. Файл в этом примере помещается не в файловую систему, а в базу данных в регистр сведений, который имеет такой вид:

реквизит «ЗагруженныеДанные», имеет тип «ХранилищеЗначения», реквизит «ДатаЗагрузки» — тип «ДатаИВремя», оно же является ключевым полем.
И код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
&НаКлиенте Процедура ЗагрузитьФайл(Команда) перем ссылкаНаФайл,ПутьКФайлу; #Если не ВебКлиент тогда диалог = новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Выберите файл для загрузки"; фильтр = "Файл Эксель 2008 (*.xlsx)|*.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 |
&НаКлиенте процедура ПриЗавершенииЗагрузки ( ОписаниеПомещенногоФайла,ДополнительныеПараметры) Экспорт поместитьФайл (ОписаниеПомещенногоФайла.Адрес,ОписаниеПомещенногоФайла.СсылкаНаФайл.Имя,ОписаниеПомещенногоФайла.СсылкаНаФайл.Расширение); КонецПроцедуры &НаКлиенте процедура ХодЗагрузки (ПомещаемыйФайл,Помещено,ОтказОтПомещенияФайла,ДополнительныеПараметры) Экспорт Состояние("Выполнено "+Строка(Помещено)+"%"); КонецПроцедуры &НаКлиенте процедура ПриНачалеЗагрузки ( ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт КонецПроцедуры &НаСервере процедура поместитьФайл (адрес,имя,расширение) текДанные = ПолучитьИзВременногоХранилища(адрес); менеджерЗаписи = РегистрыСведений.ФайловоеХранилище.СоздатьМенеджерЗаписи(); менеджерЗаписи.ДатаЗагрузки = ТекущаяДата(); менеджерЗаписи.ЗагруженныеДанные = новый ХранилищеЗначения(текДанные); менеджерЗаписи.ИмяФайла = имя; менеджерЗаписи.РасширениеФайла = расширение; менеджерЗаписи.Записать(истина); КонецПроцедуры |
Всего доброго!
Как асинхронно загружать файлы с сервера без установки дополнений в браузер — в следующей статье.
Небыло времени статью сд:
http://www.homeclub.top/?p=744