Имя: Пароль:
1C
1C 7.7
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 на просмотр, приложением, которое ассоциировано в винде для этого типа файлов. Вообще никаких проблем с этим не было.
В новой версии, файлы остались теми-же, структура внутри нормальная, только имя не содержит расширения. Вот винда и не знает, какое приложение надо запускать.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан