|
Диалог выбора файла в веб-клиенте | ☑ | ||
---|---|---|---|---|
0
vadymdymdym
09.12.17
✎
17:12
|
Доброго времени суток, форумчане. Столкнулся с интересной проблемой. Имеется табличный документ и кнопка "Сохранить как". Задача: по нажатию кнопки вывести диалоговое окно сохранения файла со всеми возможными форматами, в какие только можно сохранить табличный документ и... собственно, сохранить. Казалось бы - задача элементарная. Загвоздка в том, что хочется сделать красиво. Чтобы это к тому же еще и в веб-клиенте работало. А там, как вы все прекрасно понимаете не работают синхронные методы (про подключение расширения работы с файлами молчу, т.к. это не проблема. Подключил). Т.е. метод Выбрать() ДиалогаВыбораФайла не работает. Вместо него работает метод Показать(). Ну и какая разница - спросите Вы? А разница вот в чем. Дело в том, что сохраняемые форматы табличного документа очень обширны. Так например, сохранить в формате html можно аж тремя способами (HTML3, 4 и 5), а расширение у всех одно. Т.е. когда я на выходе функции получу МассивИменФайлов (а я получу только его), то получив первый элемент массива (мой сохраняемый файл) я буду иметь ТОЛЬКО ЛИШЬ РАСШИРЕНИЕ файла (допустим, тот же htm), но я никак не смогу узнать какой же тип файла выбрал пользователь (HTML3, 4 или 5). Когда я использовал метод Выбрать() я просто на выходе проверял индекс фильтра и по нем определял тип. Но сейчас на выходе я имею только лишь имена сохраняемых файлов. Вопрос - как решить эту головоломку.
Я нашел частично решение. В дополнительные параметры обработки оповещения я передаю САМ ДИАЛОГВЫБОРАФАЙЛА. В обработке оповещения считываю индекс фильтра и вроде как все ОК. Так вот - ни хрена не работает это в веб-клиенте. ДиалогВыбораФайла считывается в обработке оповещения, но индекс фильтра ВСЕГДА РАВЕН НУЛЮ, ХОТЬ ТЫ ТРЕСНИ. Кто-нибудь сталкивался? Если нет - придется поступить как в БСП - самому рисовать форму сохранения файла |
|||
1
Сияющий в темноте
09.12.17
✎
17:41
|
в веб клиенте код 1с транслируется в джаваскипт,и некоторые вещи могут теряться,т.к.реально показывается не диалог выбора файла,а его некоторое подобие,написанное в отдельной форме,и никто не заботился,чтобы передавать обратно параметры,используемые при вызове диалога
|
|||
2
Cyberhawk
09.12.17
✎
17:45
|
"В дополнительные параметры обработки оповещения я передаю САМ ДИАЛОГВЫБОРАФАЙЛА. В обработке оповещения считываю индекс фильтра" // Ну так в ДП передавай не ДВФ, а то, что ты из него потом планируешь использовать
|
|||
3
vadymdymdym
09.12.17
✎
17:48
|
(1) Да понятно, что транслируется, однако, диалог выбора файла - это все-таки окно операционной системы, которое можно вызвать практически из любого языка программирования. Что собственно и делает метод Выбрать() или Показать(). А асинхронность метода заключается в том, что срабатывает некий триггер по окончании, куда можно передать любой параметр. Этот параметр даже никуда не транслируется, не переходит на сервер, а остается в памяти в виде некой объектной переменной, которая потом может быть считана в вышеуказанном триггере (ну как там в переводе на JavaScript будет не знаю. Я не спец. в веб-мастерстве). Может это глюк веб-клиента, или глюк браузера (испробовано в Google Chrome)
|
|||
4
vadymdymdym
09.12.17
✎
17:49
|
(2) Я планирую использовать индекс фильтра. Вы предлагаете мне передать индекс фильтра из диалога выбора файла, который еще НЕ ПОКАЗАН ПОЛЬЗОВАТЕЛЮ? И что я получу на выходе? Тот же индекс фильтра, что и передал))
|
|||
5
Cyberhawk
09.12.17
✎
17:52
|
(4) Давай демо-пример
|
|||
6
vadymdymdym
09.12.17
✎
17:59
|
(5) Давайте, очень жду. Самому интересно, как это будет выглядеть))))
|
|||
7
Сияющий в темноте
09.12.17
✎
18:45
|
в веб клиенте диалог выбора файла реализован по-другому,и никто не обещал,что в асинхронном методе все будет сохраняться
попробуй поменять индекс до открытия диалога очень похоже,что структура просто копируется и используется,а назад не возвращается |
|||
8
Сияющий в темноте
09.12.17
✎
18:51
|
если взять windows структуру openfilename,то она кардинально отличается от того,что предлагает 1с,поэтому,обратно,в структуру 1с никто и ничего не транслирует
а вызов функции выбора файла возвращается после того,как диалог закрыт,правда,там есть возможность получения данных через обратный вызов,но это уже сложнее,чем в 1с |
|||
9
Cyberhawk
09.12.17
✎
20:02
|
(6) Сливаешься или прикалываешься?
|
|||
10
vadymdymdym
08.01.18
✎
13:20
|
(9) Не сливаюсь и не прикалываюсь. Я просто не понимаю что вы от меня хотите?))
|
|||
11
vadymdymdym
08.01.18
✎
13:22
|
(7) Менял. На выходе получаю тот же индекс, что был и до открытия, как я предполагал. Похоже, что Вы правы. ДиалогВыбораФайла копируется, используется а назад не возвращается. Я получаю тот же ДВФ, что был и до открытия
|
|||
12
vadymdymdym
08.01.18
✎
13:25
|
(8) Да это понятное дело, 1С сама использует openfilename, а нам сует несколько другой объект или тот же, но обернутый в свою одежку, так сказать. Но то, что это окно операционной системы а не 1С-ное не оставляет сомнений никаких))
|
|||
13
Cyberhawk
08.01.18
✎
14:01
|
(10) Чтоб ты выложил обработку, а лучше ссылку на веб-базу, где будет видно, чего ты там хочешь
|
|||
14
Мимохожий Однако
08.01.18
✎
14:05
|
Посмотри в типовой бухгалтерии 3.0 общую форму Печать документов.
|
|||
15
vadymdymdym
09.01.18
✎
09:34
|
(14)Хорошая идея. Однако, это первое, что мне пришло в голову и что, собственно говоря, я сделал)). 1С-ники просто обошли эту проблему тем, что они сами нарисовали диалоговую форму сохранения файла, где они предлагают разные расширения, которые даже подсвечены пиктограмками, а вместо выбора файла предлагают выбор каталога (там-то проблем с расширением нет). Эта сторона фокуса мне понятна. Если совсем приспичит - конечно я так и сделаю. Но дело в том, что во-первых, я уже настроился, нарисовал код, который мне предлагает диалог выбора файла, во-вторых, форму ради этого рисовать лень (признаюсь честно). Пока что я обошел проблему так: я предлагаю РАЗЛИЧНЫЕ варианты расширения, а когда пользователь выбирает спорное расширение (ну тот же самый htm допустим), я высвечиваю выбор из списка вариантов на это расширение (HTML3, 4 или 5). Не очень хорошее решение, и если закидаете камнями - пойму))
|
|||
16
vadymdymdym
09.01.18
✎
09:43
|
(13) Я вроде бы описал мою проблему достаточно подробно. Описание не нуждается в коде)). Ну хорошо, я сейчас попробую воссоздать вам ситуацию кодом:
&НаКлиенте Процедура СохранитьФайл() ДВФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); //описываю разные свойства ДВФ ДВФ.ИндексФильтра="HTML3|*.htm|HTML4|*.htm|HTML5|*,htm"; ДВФ.Показать(Новый ОписаниеОповещения("СохранитьФайлЗавершение",ЭтотОбъект)); КонецПроцедуры &НаКлиенте Процедура СохранитьФайлЗавершение(МассивФайлов,ДополнительныеПараметры) Экспорт Если МассивФайлов<>Неопределено Тогда ИмяФайла=МассивФайлов.Получить(0); //итак, я получил имя файла и даже расширение, но я хрен его знает какой именно тип файла выбрал пользователь. HTML3, 4 или 5. Как мне узнать??? КонецЕсли; КонецПроцедуры Надеюсь, достаточно понятно теперь?)) |
|||
17
patya
09.01.18
✎
13:37
|
(16) > ДВФ.ИндексФильтра="HTML3|*.htm|HTML4|*.htm|HTML5|*,htm";
ИндексФильтра - число. Неудивительно, что у тебя не работает. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |