|
v7: ЗапуститьПриложение() - ? | ☑ | ||
---|---|---|---|---|
0
MWWRuza
гуру
25.03.21
✎
01:10
|
Добрый день!
Вопрос возможно глупый, но что-то я в тупике... Как ЗапуститьПриложение(), если нужно просто открыть файл(XML внутри, правильный), браузером на просмотр, если файл без расширения, соответственно, не ассоциирован ни с одной программой? Это просмотр документа в УТМ ЕГАИС. Была, и всегда работала, такая процедура: Процедура ОткрытьXMLизСписка() Если СписокДокументов.ТекущаяСтрока() > 0 Тогда ЗапуститьПриложение(СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока())); КонецЕсли; КонецПроцедуры Строки списка - это URL адреса документов в УТМ. Пока УТМ был версии 3.Х и ранее, все работало - при щелчке мышки на строке списка, открывалась XML с помощью IE, на просмотр, в "удобо-читаемом" виде. Но, после обновления УТМ на версию 4.Х, это работать перестало - вместо открытия файлов, тот-же IE стал их скачивать! Как я понял, это происходит по тому, что по этим УРЛам, файлы без расширения "XML" хранятся, и ИЕ просто не понимает, что с ними делать... Как принудительно указать, что файл надо открывать как файл "*.xml", тем же ИЕ, просто на просмотр без скачки - ? Может как-то через КомандаСистемы() - ? Но, как тогда правильно строку команды написать-? Так: КомандаСистемы("start iexplore.exe "+ СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока())); тоже не работает, открывает окно "управление загрузками", по сути опять скачивать пытается, только по другому... PS Можно конечно решить через скачку во временную папку, переименование(добавление расширения), и потом открытие... Но, неужели нет более простого варианта? |
|||
1
MWWRuza
гуру
25.03.21
✎
02:33
|
Я конечно сделал так:
Процедура ОткрытьXMLизСписка() Если СписокДокументов.ТекущаяСтрока() > 0 Тогда DOM = ЗагрузитьDOM(СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока())); ИмяФайл = КаталогВременныхФайлов() + "1.xml"; DOM.Save(ИмяФайл); ЗапуститьПриложение(ИмяФайл); КонецЕсли; КонецПроцедуры Функция "ЗакрузитьDOM(URL)" у меня есть в конфигурации, на ней весь обмен с ЕГАИС построен. Работает, в принципе - нормально. Но, просто это какие-то "костыли"... Наверняка есть какой-то более простой способ. |
|||
2
acanta
25.03.21
✎
02:37
|
Наверняка есть старая смоленская дорога. Зато без костылей.
|
|||
3
rphosts
25.03.21
✎
03:51
|
(0) клюшечники... значит ещё живы!
Вот смотри, каждому типу файлов может быть сопоставлено в окнах дефолтовое приложение для открытия... дальше дорога понятна? |
|||
4
big
25.03.21
✎
05:08
|
Установи XMLNotepad от Microsoft, а смотреть хмл осликом это рвать себе мозг и здоровье )))
|
|||
5
andrewalexk
25.03.21
✎
08:07
|
(3) :)
халва халва |
|||
6
Kigo_Kigo
25.03.21
✎
08:19
|
Попробуй открывать нотепад++
|
|||
7
MWWRuza
гуру
25.03.21
✎
12:58
|
(3) дальше дорога понятна?
Нет, не понятна... Как определить тип файла, если у него отсутствует расширение, просто имя, абракадабра типа GUID, и нет расширения совсем ??? Там, где файлы "*.xml" и так все работает, как раз по Вашей "дороге", а как сопоставить дефолтовое приложение неизвестному типу файла - не понятно. Естественно, Нотепад++ установлен, XMLNotepad тоже можно установить, и скорее всего будет работать через КомандаСистемы(), если его явно прописать... И возможно, это будет даже удобнее... Только это всем ставить придется. В принципе, эта опция, так, вспомогательная, особо и не нужна, в основном только мне, когда что-то надо непосредственно в хмл посмотреть... Так, для пользователей там все парсится в документы 1С, они никогда вручную хмл и не открывают... Но, хотел понять, как сам принцип работает, как можно заставить из командной строки открывать с помощью IE файл неизвестного типа(точнее, структура у него известная и правильная, только расширение отсутствует, поэтому винда не может его автоматом сопоставить с приложением для открытия, и просто начинает скачивать)... |
|||
8
Kigo_Kigo
25.03.21
✎
13:38
|
(7) Так нотепад++ откроет любую куйню в виде текста, а если он сам узнает формат - так отроет в том который умеет читать, а если не сможет октроет его текстом, в этом и есть его плюс в отличии от ИЕ
|
|||
9
Fram
25.03.21
✎
13:48
|
(0) это должны поправить на стороне сервера. Когда они отправляют этот файл должны были установить заголовок Content-Type: text/xml
|
|||
10
Fram
25.03.21
✎
13:52
|
(9) + ну и Content-Disposition: "inline" не помешает
|
|||
11
MWWRuza
гуру
25.03.21
✎
14:21
|
(9) это должны поправить на стороне сервера.
Согласен... Но, сервер, это ФСРАР УТМ вер. 4.2... Мы там ничего поменять не сможем. |
|||
12
MWWRuza
гуру
25.03.21
✎
14:24
|
+(11) В предыдущих версиях, все работало.
В принципе, да и фиг с ним - через загрузку DOM и сохранение во временный файл, после чего открытие как и раньше, через ЗапуститьПриложение(этот временный файл) работает, и ладно... |
|||
13
MWWRuza
гуру
25.03.21
✎
14:29
|
HTTP запросом, напрямую, эти "кривые"(неопределенного типа) в DOM грузятся, а кто curl пользуется, может сохранять файлы с расширением...
Конечно, это "костыли", но против системы не попрешь :( |
|||
14
big
26.03.21
✎
05:24
|
(13) Хмм... А разве из WinHttp вы не можете сохранить в любой (нужного имени) файл? А вообще как файл получаете, как не сохранив его из ResponseText или ResponseStream?
Я в ЕГАИС-е очень быстро отказался от WinHttp и перешёл на curl. Как вы остатки получаете? 1С не зависает? |
|||
15
MWWRuza
гуру
26.03.21
✎
12:05
|
(14) Данные получаю через стрим, сразу в DOM, который потом парсю, без сохранения в файл. Файл потом, сохраняю в резервное хранилище при удалении документа из УТМ при желании. Но, чаще всего и этого не делаю, он сам удаляется по истечении срока хранения. Если кому-то понадобится повторно данные ТТН, ее всегда можно перезапросить из ЕГАИС, ИД для этого хранится в доке 1С.
1С не зависает, т.к. анализируется размер данных, и в случае превышения 540 кБ, используется автоматически curl, скачивается файлом и так-же грузится в DOM из файла. Дальнейший парсинг DOM ничем не отличается для обеих вариантов, независимо от способа загрузки. PS Я все это делал почти пять лет назад, и с тех пор, это много где работает... Переделывать, достаточно сложно. Хотя, конечно, если бы сейчас эту задачу понадобилось решать "с нуля", возможно я бы делал по другому. "А разве из WinHttp вы не можете сохранить в любой (нужного имени) файл?" - да, наверное может. Надо подумать, тогда не нужно будет в DOM грузить... Хотя, для этого у меня все есть, а тут придется писать отдельную процедуру... Лениво... Да и цель, не оправдывает средства, это вспомогательная, очень редко используемая функция. Скорее только мне для отладки и нужная... Вроде нормально и так работает, пусть работает. PS Я и тему то создавал, чисто для того, что-бы понять, есть ли возможность написать командную строку, что-бы осел открывал файл неизвестного типа принудительно как XML, а не начинал его скачивать. |
|||
16
victuan1
28.03.21
✎
15:28
|
(0) Вот я тоже эту проблему поимел.
|
|||
17
victuan1
28.03.21
✎
15:30
|
А если попробовать:
ЗапуститьПриложение("notepad++.exe "+ИмяФайла) или ЗапуститьПриложение("iexplore.exe "+ИмяФайла) ? |
|||
18
MWWRuza
гуру
28.03.21
✎
16:29
|
Да можно попробовать разобраться... Просто я для "боевых конфигураций" уже переделал через DOM, глобальная процедура:
Процедура ОткрытьXMLнаПросмотр(УРЛ) Экспорт DOM = ЗагрузитьDOM(УРЛ); ИмяФайл = КаталогВременныхФайлов() + "1.xml"; DOM.Save(ИмяФайл); ЗапуститьПриложение(ИмяФайл); КонецПроцедуры Из всех мест, где раньше было: ЗапуститьПриложение(СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока())); переписал на ОткрытьXMLнаПросмотр(СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока())); Работает нормально... А так: ЗапуститьПриложение("iexplore.exe "+ИмяФайла) пробовал в самом начале, что-то не заработало... Видимо, там все-таки синтаксис немного другой, не так все просто... |
|||
19
Arbuz
29.03.21
✎
12:48
|
(18) Да всё там просто. Путь до исполняемого файла с учётом пробелов, кавычек и всяких там слэшей. Путь до параметров с тем же учётом. между ними пробел.
|
|||
20
Злопчинский
29.03.21
✎
13:23
|
(19) вот и выросло поколение, которое не знает что такое командная строка и кто такой Фигурнов...
|
|||
21
MWWRuza
гуру
29.03.21
✎
13:31
|
(19) Вот так: "C:\Program Files\Internet Explorer\iexplore.exe" C:\Temp\WayBill_v4
Из командной строки работает. Надо из 1С попробовать. |
|||
22
MWWRuza
гуру
29.03.21
✎
13:34
|
Только вместо этого"C:\Temp\WayBill_v4" будет УРЛ...
Вроде пробовал когда первый раз с этим столкнулся, качать начинает. Когда файл, даже без расширения, открывает. Когда УРЛ - начинает скачивать... |
|||
23
MWWRuza
гуру
29.03.21
✎
13:35
|
И как експлоеру объяснить, что качать его не надо, а надо просто открыть как ХМЛ - не понятно.
|
|||
24
Злопчинский
29.03.21
✎
14:57
|
как ты урл откроешь как иксемель?!
|
|||
25
Злопчинский
29.03.21
✎
14:58
|
(21) если файл подсунуть то может попробовать явным образом указать в строке file:\\.... вместо голого урла
|
|||
26
MWWRuza
гуру
01.04.21
✎
20:44
|
(24) А что такого? По ссылке УРЛ лежит XML файл, в предыдущей версии УТМ файлы были с расширением, и метод ЗапуститьПриложение(УРЛ), прекрасно открывал XML на просмотр, приложением, которое ассоциировано в винде для этого типа файлов. Вообще никаких проблем с этим не было.
В новой версии, файлы остались теми-же, структура внутри нормальная, только имя не содержит расширения. Вот винда и не знает, какое приложение надо запускать. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |