Сохранение файла на сервере с диалогом выбора, без расширения работы с файлами

1. Екатерина Малюгина (andadra) 19.05.17 15:33 Сейчас в теме
Здравствуйте! Нашла много похожих тем, но те методы не работают.
Самописная конфигурация. Хотим обновиться до 8.3.10, но там запрещен модальный режим. Ок - будем отказываться. Вопрос, предупреждение, все это оказалось легким. Сложность с ПолучитьФайл(). В веб клиенте требует расширения для работы с файлами. А с этим большие косяки. Можно ли как то написать без расширения?
Ответы
2. Сергей Сячин (SyachinS) 19.05.17 15:51 Сейчас в теме
(1) Косяка никакого нет, все работает в Google Chrome, Firefox. Без расширения написать не получится - для этого оно и нужно - работает стабильно. Делаете диалог выбора, настраиваете, потом через НачатьПомещениеФайла обрабатываете.
3. Екатерина Малюгина (andadra) 19.05.17 15:55 Сейчас в теме
(2) В программе 1С "Договрчики" есть возможность открывать без расширения. Но я не могу разобраться в том коде(

А можете привести пример? У меня на internet exploler отработало отлично, а в мозиле ошибка. Использование синхронных вызовов запрещено. Возможно нужно в браузере настройку выполнить. Но клиентов у базы около 200. И если они в момент позвонят и скажут, что тут ошибка у нас это не устроит руководство
4. Анатолий Лукьянов (KazanKokos) 10 19.05.17 15:59 Сейчас в теме
Но тут вроде тоже требуется расширение:
&OnClient

Procedure ChoosingFileProcessing(FileName, Parameters) Export

    If FileName<>Undefined Then

        Object.FileName = AdditionalObjects.GetFileName(FileName);

        

        #If Not WebClient Then 

­

            Digdata = New BinaryData(FileName);

            SendFileToServer(BinaryData);

        #Else

­

            SendingFiles = New Array;

            SendingFiles.Add(New TransferableFileDescription(FileName, ""));

            SendedFiles = New Array;

            If Not SendFiles(SendingFiles, SendedFiles, , 

                                        False, UUID) Then

                Message("Error sending file: " + ErrorDescription());    

            Else

                SendFileToServer(SendedFiles, True);

              EndIf;    

        #EndIf                                                                 

­

    EndIf;    

EndProcedure

­

&OnServer

Procedure SendFileToServer(Datas, CalledFromWeb = False)        

    If CalledFromWeb Then

        FileAddress = Datas[0].Location;

        BinaryData = GetFromTempStorage(FileAddress);

    Else

        BinaryData = Datas;

    EndIf;

­

    Obj = FormAttributeToValue("Object");

    Obj.Storage = New ValueStorage(BinaryData);

    Obj.Size = BinaryData.Size();

    If Not ValueIsFilled(Obj.Description) Then 

        Obj.Description = Obj.FileName;

    EndIf;        

    Obj.AddingDate = CurrentDate();

    Obj.Write();

    ValueToFormAttribute(Obj, "Object");                   

EndProcedure
...Показать Скрыть
5. Сергей Сячин (SyachinS) 19.05.17 17:57 Сейчас в теме
(3) Делайте асинхронно все, установка расширения нужна однократно на каждом компьютере. На счет реализации в веб клиенте без расширения - плохо себе это представляю, хотя не работал с указанной вами конфигурацией - если отправите конфигурацию - могу разобраться и поделиться с вами.
Пример:

&НаКлиенте
Процедура ПоказатьВыборФайла(Владелец,ФормаВыбора) Экспорт
	#Если Не ВебКлиент Тогда
		Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
		Диалог.Фильтр = "Файл изображения|*.bmp;*.jpg;*.jpeg;*.png";
		Диалог.Заголовок = "Выберите файл с изображением...";
		Диалог.МножественныйВыбор = Ложь;
		Диалог.ПроверятьСуществованиеФайла = Истина;
		Оповещение = Новый ОписаниеОповещения("ВыборФайла",ФункцииКлиент,Новый Структура("ФормаВыбора,Владелец",ФормаВыбора,Владелец));
		Диалог.Показать(Оповещение);
	#Иначе
		Оповещение = Новый ОписаниеОповещения("ПомещениеФайла",ФункцииКлиент,Новый Структура("ФормаВыбора,Владелец",ФормаВыбора,Владелец));	
		НачатьПомещениеФайла(Оповещение,,,Истина,ФормаВыбора.УникальныйИдентификатор);
	#КонецЕсли
КонецПроцедуры

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

&НаКлиенте
Процедура ПомещениеФайла(ФайлВыбран,АдресФайла,ВыбранноеИмяФайла,Данные) Экспорт
	Если ФайлВыбран Тогда
		ИмяФайла = Сред(ВыбранноеИмяФайла,СтрНайти(ВыбранноеИмяФайла,"\",НаправлениеПоиска.СКонца)+1);
		ДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайла);
		Изображение = ФункцииСервер.ЗаписатьФайл(ДанныеФайла,ИмяФайла,Данные.Владелец);
		Оповестить("Добавление изображения",Изображение,Данные.ФормаВыбора);
	Иначе
		ПоказатьПредупреждение(,"Вы не выбрали файл.",5,"Предупреждение");	
	КонецЕсли;
КонецПроцедуры
...Показать Скрыть
6. Екатерина Малюгина (andadra) 23.05.17 08:33 Сейчас в теме
Решено, все как говорится "проще пареной репы".

&НаКлиенте
Процедура ЗагрузитьДокументыНажатие(Элемент)
	ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаЗагрузкиФайлов", ЭтаФорма);
    НачатьПомещениеФайла(ОписаниеОповещения,,,Истина,УникальныйИдентификатор);
КонецПроцедуры

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


НачатьПомещениеФайлов использует расширение, а НачатьПомещениеФайла не использует, все очень просто, пользуйтесь)
7. Екатерина Малюгина (andadra) 23.05.17 12:39 Сейчас в теме
Попытку лучше убрать. Она там вообще ни к чему
8. lefthander lefthander (lefthander) 23.05.17 12:45 Сейчас в теме
(6)
НачатьПомещениеФайлов и НачатьПомещениеФайла

В первом случае можно несколько файлов, во втором только один.
Ситуация когда надо 15-40 файлов не прогнозируется? Если да то какое время на загрузку 40 файлов?
9. Екатерина Малюгина (andadra) 23.05.17 13:24 Сейчас в теме
(8)Не прогнозируется. НачатьПомещениеФайлов вызывает расширение. Расширение для меня - это всегда "косяки". Так работает и отлично
Оставьте свое сообщение