Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Диалог выбора файла в веб-клиенте

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

&НаКлиенте
Процедура СохранитьФайл()
    ДВФ = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    //описываю разные свойства ДВФ

    ДВФ.ИндексФильтра="HTML3|*.htm|HTML4|*.htm|HTML5|*,htm";
    ДВФ.Показать(Новый ОписаниеОповещения("СохранитьФайлЗавершение",ЭтотОбъект));
КонецПроцедуры

&НаКлиенте
Процедура СохранитьФайлЗавершение(МассивФайлов,ДополнительныеПараметры) Экспорт
    Если МассивФайлов<>Неопределено Тогда
        ИмяФайла=МассивФайлов.Получить(0);
        //итак, я получил имя файла и даже расширение, но я хрен его знает какой именно тип файла выбрал пользователь. HTML3, 4 или 5. Как мне узнать???

    КонецЕсли;
КонецПроцедуры

Надеюсь, достаточно понятно теперь?))
   patya
 
17 - 09.01.18 - 13:37
(16) > ДВФ.ИндексФильтра="HTML3|*.htm|HTML4|*.htm|HTML5|*,htm";

ИндексФильтра - число. Неудивительно, что у тебя не работает.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует