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


#0 by vadymdymdym
Доброго времени суток, форумчане. Столкнулся с интересной проблемой. Имеется табличный документ и кнопка "Сохранить как". Задача: по нажатию кнопки вывести диалоговое окно сохранения файла со всеми возможными форматами, в какие только можно сохранить табличный документ и... собственно, сохранить. Казалось бы - задача элементарная. Загвоздка в том, что хочется сделать красиво. Чтобы это к тому же еще и в веб-клиенте работало. А там, как вы все прекрасно понимаете не работают синхронные методы (про подключение расширения работы с файлами молчу, т.к. это не проблема. Подключил). Т.е. метод Выбрать ДиалогаВыбораФайла не работает. Вместо него работает метод Показать. Ну и какая разница - спросите Вы? А разница вот в чем. Дело в том, что сохраняемые форматы табличного документа очень обширны. Так например, сохранить в формате html можно аж тремя способами (HTML3, 4 и 5), а расширение у всех одно. Т.е. когда я на выходе функции получу МассивИменФайлов (а я получу только его), то получив первый элемент массива (мой сохраняемый файл) я буду иметь ТОЛЬКО ЛИШЬ РАСШИРЕНИЕ файла (допустим, тот же htm), но я никак не смогу узнать какой же тип файла выбрал пользователь (HTML3, 4 или 5). Когда я использовал метод Выбрать я просто на выходе проверял индекс фильтра и по нем определял тип. Но сейчас на выходе я имею только лишь имена сохраняемых файлов. Вопрос - как решить эту головоломку. Я нашел частично решение. В дополнительные параметры обработки оповещения я передаю САМ ДИАЛОГВЫБОРАФАЙЛА. В обработке оповещения считываю индекс фильтра и вроде как все ОК. Так вот - ни хрена не работает это в веб-клиенте. ДиалогВыбораФайла считывается в обработке оповещения, но индекс фильтра ВСЕГДА РАВЕН НУЛЮ, ХОТЬ ТЫ ТРЕСНИ. Кто-нибудь сталкивался? Если нет - придется поступить как в БСП - самому рисовать форму сохранения файла
#1 by Сияющий в темноте
в веб клиенте код 1с транслируется в джаваскипт,и некоторые вещи могут теряться,т.к.реально показывается не диалог выбора файла,а его некоторое подобие,написанное в отдельной форме,и никто не заботился,чтобы передавать обратно параметры,используемые при вызове диалога
#2 by Cyberhawk
"В дополнительные параметры обработки оповещения я передаю САМ ДИАЛОГВЫБОРАФАЙЛА. В обработке оповещения считываю индекс фильтра" // Ну так в ДП передавай не ДВФ, а то, что ты из него потом планируешь использовать
#3 by vadymdymdym
Да понятно, что транслируется, однако, диалог выбора файла - это все-таки окно операционной системы, которое можно вызвать практически из любого языка программирования. Что собственно и делает метод Выбрать или Показать. А асинхронность метода заключается в том, что срабатывает некий триггер по окончании, куда можно передать любой параметр. Этот параметр даже никуда не транслируется, не переходит на сервер, а остается в памяти в виде некой объектной переменной, которая потом может быть считана в вышеуказанном триггере (ну как там в переводе на JavaScript будет не знаю. Я не спец. в веб-мастерстве). Может это глюк веб-клиента, или глюк браузера (испробовано в Google Chrome)
#4 by vadymdymdym
Я планирую использовать индекс фильтра. Вы предлагаете мне передать индекс фильтра из диалога выбора файла, который еще НЕ ПОКАЗАН ПОЛЬЗОВАТЕЛЮ? И что я получу на выходе? Тот же индекс фильтра, что и передал))
#5 by Cyberhawk
Давай демо-пример
#6 by vadymdymdym
Давайте, очень жду. Самому интересно, как это будет выглядеть))))
#7 by Сияющий в темноте
в веб клиенте диалог выбора файла реализован по-другому,и никто не обещал,что в асинхронном методе все будет сохраняться попробуй поменять индекс до открытия диалога очень похоже,что структура просто копируется и используется,а назад не возвращается
#8 by Сияющий в темноте
если взять windows структуру openfilename,то она кардинально отличается от того,что предлагает 1с,поэтому,обратно,в структуру 1с никто и ничего не транслирует а вызов функции выбора файла возвращается после того,как диалог закрыт,правда,там есть возможность получения данных через обратный вызов,но это уже сложнее,чем в 1с
#9 by Cyberhawk
Сливаешься или прикалываешься?
#10 by vadymdymdym
Не сливаюсь и не прикалываюсь. Я просто не понимаю что вы от меня хотите?))
#11 by vadymdymdym
Менял. На выходе получаю тот же индекс, что был и до открытия, как я предполагал. Похоже, что Вы правы. ДиалогВыбораФайла копируется, используется а назад не возвращается. Я получаю тот же ДВФ, что был и до открытия
#12 by vadymdymdym
Да это понятное дело, 1С сама использует openfilename, а нам сует несколько другой объект или тот же, но обернутый в свою одежку, так сказать. Но то, что это окно операционной системы а не 1С-ное не оставляет сомнений никаких))
#13 by Cyberhawk
Чтоб ты выложил обработку, а лучше ссылку на веб-базу, где будет видно, чего ты там хочешь
#14 by МимохожийОднако
Посмотри в типовой бухгалтерии 3.0 общую форму Печать документов.
#15 by vadymdymdym
Хорошая идея. Однако, это первое, что мне пришло в голову и что, собственно говоря, я сделал)). 1С-ники просто обошли эту проблему тем, что они сами нарисовали диалоговую форму сохранения файла, где они предлагают разные расширения, которые даже подсвечены пиктограмками, а вместо выбора файла предлагают выбор каталога (там-то проблем с расширением нет). Эта сторона фокуса мне понятна. Если совсем приспичит - конечно я так и сделаю. Но дело в том, что во-первых, я уже настроился, нарисовал код, который мне предлагает диалог выбора файла, во-вторых, форму ради этого рисовать лень (признаюсь честно). Пока что я обошел проблему так: я предлагаю РАЗЛИЧНЫЕ варианты расширения, а когда пользователь выбирает спорное расширение (ну тот же самый htm допустим), я высвечиваю выбор из списка вариантов на это расширение (HTML3, 4 или 5). Не очень хорошее решение, и если закидаете камнями - пойму))
#16 by vadymdymdym
Я вроде бы описал мою проблему достаточно подробно. Описание не нуждается в коде)). Ну хорошо, я сейчас попробую воссоздать вам ситуацию кодом: Надеюсь, достаточно понятно теперь?))
#17 by patya
> ДВФ.ИндексФильтра="HTML3|*.htm|HTML4|*.htm|HTML5|*,htm"; ИндексФильтра - число. Неудивительно, что у тебя не работает.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С