|
Скопировать файл в другую папку. Веб клиент. | ☑ | ||
---|---|---|---|---|
0
antihacker
15.12.16
✎
09:30
|
Всем привет !
Не могу на веб клиенте скопировать полученный файл в другой файл. &НаСервере Функция ВернутьАдресХранилище() ВременныйАдресФайла = ""; Отбор = Новый Структура; Отбор.Вставить("ВладелецФайла", Объект.БизнесПроцесс.Ссылка); Отбор.Вставить("ИмяФайла", СокрЛП(Объект.НазваниеИзмененныйДоговор)); Отбор.Вставить("РазмерФайла", СокрЛП(Объект.РазмерИзмененногоДоговора)); Отбор.Вставить("ТипФайла", ОбщиеФункции.ТипИнформации("Основная")); Отбор.Вставить("АвторФайла", Объект.АвторИзмененийДоговора); //Отбор.Вставить("Период", Объект.ДатаИзмененияДоговора); КлючЗаписиРег = РегистрыСведений.ФайлыДоговоров.Получить(Объект.ДатаИзмененияДоговора,Отбор); ДвоичныеДанные = КлючЗаписиРег.ДвоичныеДанныеФайла.Получить(); ВременныйАдресФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); возврат ВременныйАдресФайла; КонецФункции ФайлИсточник = ВернутьАдресХранилище(); ФайлПриемник = "C:\Users\User1\Documents\888.docx"; КопироватьФайл(ФайлИсточник , ФайлПриемник); Ошибку показывает. А вот так ПолучитьФайл(ВернутьАдресХранилище(),"777.docx", Истина); Файл открываеться. Вообщем мне нужно получить локальный путь скаченного файла, что бы отправиьт обратно в базу на сервере. Что пропутсил ? |
|||
1
Fragster
гуру
15.12.16
✎
09:39
|
если это оба - файлы внутри 1с, то зачем вообще на клиенте что-то делать?
|
|||
2
Fragster
гуру
15.12.16
✎
09:41
|
ну и да - почему до сих пор не на БСП?
|
|||
3
antihacker
15.12.16
✎
09:58
|
Нее есть только один файл на сервере. Клиент себе скачивает и редактирует. Просто не знаю как уловить путь к файлу после открытия, что бы при нажатие на кнопку "Закончить редактирование", скинуть измененную версию в базу.
|
|||
4
Fragster
гуру
15.12.16
✎
10:00
|
печально. слава богу, что в типовых используют БСП, и там нет этих проблем.
|
|||
5
antihacker
15.12.16
✎
10:05
|
Если честно. мне нужно знать как это делается. БСП конечно хорошо. Но я так и не понял как он это делает.
|
|||
6
antihacker
15.12.16
✎
10:52
|
Fragster , а ты пробовал разобраться без БСП ?
|
|||
7
Fragster
гуру
15.12.16
✎
10:56
|
ну так же писал - без расширения для работы с файлами у тебя ничего про файлы клиентского компьютера узнать не получится
|
|||
8
Fragster
гуру
15.12.16
✎
10:56
|
я же писал
|
|||
9
Cyberhawk
15.12.16
✎
10:58
|
Если бы браузеры "из коробки" такое умели, это был бы ахтунг
|
|||
10
antihacker
15.12.16
✎
11:10
|
Fragster , не очень понял про - "ну так же писал - без расширения для работы с файлами у тебя ничего про файлы клиентского компьютера узнать не получится"
Чем расширение тут поможет ? Cyberhawk, но как то люди делают же. Я не говорю про то, что надо уловить момент закрытия ворд файла. Провбовал создать чистый файл и скопирвать туда содержимое из сервера. Но метод Файл.Записать() не работает на веб клиенте (с***а). На этои и тормознул. Эххх все работает у меня на тонком клиенте. Вот на веб клиенте проблема. Одни ограничения. |
|||
11
Cyberhawk
15.12.16
✎
11:24
|
(10) На веб-клиенте нужно использовать расширение для работы с файлами, просто так браузер тебе не даст этого сделать - только через расширение
|
|||
12
antihacker
15.12.16
✎
11:25
|
Ой я думал расширение файла.
Ты про это |
|||
13
antihacker
15.12.16
✎
11:26
|
#Если ВебКлиент Тогда
Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда УстановитьРасширениеРаботыСФайлами(); ПодключитьРасширениеРаботыСФайлами(); КонецЕсли; #КонецЕсли |
|||
14
Cyberhawk
15.12.16
✎
11:29
|
(13) Ну это подготовка к использованию этого расщирения. Начало верное.
|
|||
15
antihacker
15.12.16
✎
12:12
|
ОповещениеВыгрузитьФайлНаКлиент = Новый ОписаниеОповещения("ВыгрузитьФайлНаКлиент", ЭтотОбъект);
НачатьУстановкуРасширенияРаботыСФайлами(ОповещениеВыгрузитьФайлНаКлиент); &НаКлиенте Процедура ВыгрузитьФайлНаКлиент(Результат,Адрес,ВыбранноеИмяФайла,ДополнительныеПараметры) Экспорт сообщить(Результат); сообщить(Адрес); КонецПроцедуры Но сообщить(Результат); сообщить(Адрес); возвращает пустой резултат |
|||
16
antihacker
15.12.16
✎
12:42
|
Синтаксис:
ПолучитьФайл(<Адрес>, <ИмяФайла>, <Интерактивно>) Параметры: <Адрес> (обязательный) Тип: Строка. Расположение данных во временном хранилище или в информационной базе. <ИмяФайла> (необязательный) Тип: Строка. Путь к файлу, в который будут сохранены данные из информационной базы. В неинтерактивном режиме необходимо указать значение параметра, иначе будет вызвано исключение. В интерактивном режиме может быть не задан. Значение по умолчанию: Пустая строка. <Интерактивно> (необязательный) Тип: Булево. Истина - режим, в котором пользователю показывается диалог, в котором он может выбрать действие с получаемым файлом: запустить его или сохранить по выбранному расположению. В веб-клиенте параметр должен быть равен Истина. В противном случае будет сгенерировано сообщение об ошибке. Значение по умолчанию: Истина. Возвращаемое значение: Тип: Булево; Неопределено. Ложь - пользователь отменил операцию сохранения файлов (в интерактивном режиме). В режиме запуска "Веб-клиент" всегда возвращает Неопределено. Описание: Получает файл и сохраняет его в локальную файловую систему пользователя. По умолчанию метод исполняется в интерактивном режиме, то есть когда будет выдано диалоговое окно, позволяющее указать действие с полученным файлом - запустить его или сохранить по указанному пользователем расположению. Доступность: Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент). Вызов метода выполняет обращение к серверу. Примечание: Если используется интерактивный режим, а параметр <ИмяФайла> не указан, то операция открытия файла не доступна. В веб-клиенте код на встроенном языке продолжает выполнение, не дожидаясь окончания загрузки файла. Результат выполнения кэшируется в разрезе значений параметров метода. Если данные в файле были изменены, выполняется обращение к серверу. В интерактивном режиме при открытии полученного файла выполняется проверка наличия приложения, ассоциированного с типом файла. Проверка выполняется по расширению файла. Если подходящее приложение не найдено, то отображается системный диалог выбора приложения для открытия файла. После выбора приложения файл открывается в нем. Отказ от выбора приложения приводит к отмене открытия файла. ЧТО ОЗНАЧАЕТ - "Если данные в файле были изменены, выполняется обращение к серверу." Он обратно на сервер скидывает измененные файлы ? Если да, то куда ? |
|||
17
antihacker
11.01.17
✎
06:12
|
Оказываеться много слов тут.
Решил вот так Как открыть файл для редактирования и обратно скинуть на сервер после редактирования на веб интерфейсе. Открываем вот так. НаКлиенте Процедура КнопкаРедактировать(Команда) #Если ВебКлиент Тогда Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда УстановитьРасширениеРаботыСФайлами(); ПодключитьРасширениеРаботыСФайлами(); КонецЕсли; #КонецЕсли ЛокальныйПутьКФайлу = ОбщиеФункцииКлиент.ВернутьПутьКФайлу(Объект.Номер,Объект.НазваниеИзмененныйДоговор); Если ОбщиеФункцииКлиент.КаталогСуществует(ЛокальныйПутьКФайлу) Тогда Попытка ЗапуститьПриложение(ЛокальныйПутьКФайлу); Исключение сообщить(ОписаниеОшибки()); КонецПопытки; Иначе Попытка ВременныйАдрес = ВернутьАдресХранилище(); ПолучаемыйФайл = Новый ОписаниеПередаваемогоФайла(ЛокальныйПутьКФайлу, ВременныйАдрес); ПолучаемыеФайлы = Новый Массив; ПолучаемыеФайлы.Добавить(ПолучаемыйФайл); ПолученныеФайлы = Новый Массив; Если ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы,ЛокальныйПутьКФайлу, Ложь) Тогда ЗапуститьПриложение(ЛокальныйПутьКФайлу); Объект.ДоговорРедактируеться = Истина; КонецЕсли; Исключение сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецПроцедуры Отредактированный файл скидываем в базу вот так &НаКлиенте Процедура КнопкаСохранить(Команда) #Если ВебКлиент Тогда Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда УстановитьРасширениеРаботыСФайлами(); ПодключитьРасширениеРаботыСФайлами(); КонецЕсли; #КонецЕсли ЛокальныйПутьКФайлу = ОбщиеФункцииКлиент.ВернутьПутьКФайлу(Объект.Номер,Объект.НазваниеИзмененныйДоговор); Попытка Если ОбщиеФункцииКлиент.КаталогСуществует(ЛокальныйПутьКФайлу) Тогда ЗагружаемыйФайл = Новый Файл(ЛокальныйПутьКФайлу); ПомещаемыеФайлы = Новый Массив; ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ЛокальныйПутьКФайлу)); ПомещенныеФайлы = Новый Массив; ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ЭтаФорма.УникальныйИдентификатор); СохранитьВерсиюИсполнителя(ПомещенныеФайлы[0].Хранение,ЛокальныйПутьКФайлу,ЗагружаемыйФайл.Размер()); Объект.ДоговорРедактируеться = Ложь; Иначе сообщить("Редактируемый файл не найден в каталоге !"); КонецЕсли; Исключение сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры Процедура СохранитьВерсиюИсполнителя(вхВременныйАдрес,вхИмяФайла,вхРазмерФайла) Если вхВременныйАдрес <> НеОпределено Тогда //----Ищем в временном хранилище-------------- НайденныйФайлВВременномХранилище=РегистрыСведений.ВременноеХранилищеФайлов.СоздатьНаборЗаписей(); НайденныйФайлВВременномХранилище.Отбор.ВладелецФайла.Установить(Объект.Ссылка); НайденныйФайлВВременномХранилище.Прочитать(); Если НайденныйФайлВВременномХранилище.Количество() = 0 Тогда //Если не существует НовоеИмяФайла = "(V1) " + ОбщиеФункцииСервер.ВернутьИмяФайла(вхИмяФайла); ВремяПериода = ТекущаяДата(); ИмяИсполнителя = ОбщиеФункцииСервер.ТекущийПользователь(); МенеджерЗаписи=РегистрыСведений.ВременноеХранилищеФайлов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Период = ВремяПериода; МенеджерЗаписи.РазмерФайла = Окр((вхРазмерФайла/1024)/1024,3); МенеджерЗаписи.ВладелецФайла= Объект.Ссылка; МенеджерЗаписи.ИмяФайла = НовоеИмяФайла; МенеджерЗаписи.ДвоичныеДанныеФайла=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(вхВременныйАдрес)); МенеджерЗаписи.ТипФайла = ОбщиеФункцииСервер.ТипИнформации("Основная"); МенеджерЗаписи.АвторФайла = ИмяИсполнителя; МенеджерЗаписи.Записать(); Объект.НазваниеДоговораИсполнителя = НовоеИмяФайла; Объект.АвторДоговораИсполнителя = ИмяИсполнителя; Иначе //Если существует, то просто обновляем ВремяПериода = ТекущаяДата(); Для Каждого ТекНайденныйФайлВВременномХранилище Из НайденныйФайлВВременномХранилище Цикл ТекНайденныйФайлВВременномХранилище.Период = ВремяПериода; ТекНайденныйФайлВВременномХранилище.ДвоичныеДанныеФайла=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(вхВременныйАдрес)); ТекНайденныйФайлВВременномХранилище.РазмерФайла = Окр((вхРазмерФайла/1024)/1024,3); КонецЦикла; НайденныйФайлВВременномХранилище.Записать(); КонецЕсли; Объект.ДатаДоговораИсполнителя = ВремяПериода; Объект.РазмерДоговораИсполнителя = Окр((вхРазмерФайла/1024)/1024,3); КонецЕсли; КонецПроцедуры Таким образом все тут решает один оператор. Этот - ПоместитьФайлы. Просто надо уметь передавать ему правильный параметр |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |