Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: ЗапуститьПриложение() - ?

v7: ЗапуститьПриложение() - ?
Я
   MWWRuza
 
25.03.21 - 01:10
Добрый день!
Вопрос возможно глупый, но что-то я в тупике...

Как ЗапуститьПриложение(), если нужно просто открыть файл(XML внутри, правильный), браузером на просмотр, если файл без расширения, соответственно, не ассоциирован ни с одной программой?

Это просмотр документа в УТМ ЕГАИС. Была, и всегда работала, такая процедура:

Процедура ОткрытьXMLизСписка()
    Если СписокДокументов.ТекущаяСтрока() > 0 Тогда
        ЗапуститьПриложение(СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока()));
    КонецЕсли;    
КонецПроцедуры

Строки списка - это URL адреса документов в УТМ.
Пока УТМ был версии 3.Х и ранее, все работало - при щелчке мышки на строке списка, открывалась XML с помощью IE, на просмотр, в "удобо-читаемом" виде.
Но, после обновления УТМ на версию 4.Х, это работать перестало - вместо открытия файлов, тот-же IE стал их скачивать!
Как я понял, это происходит по тому, что по этим УРЛам, файлы без расширения "XML" хранятся, и ИЕ просто не понимает, что с ними делать...
Как принудительно указать, что файл надо открывать как файл "*.xml", тем же ИЕ, просто на просмотр без скачки - ?
Может как-то через КомандаСистемы() - ?
Но, как тогда правильно строку команды написать-?
Так:
КомандаСистемы("start iexplore.exe "+ СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока()));
тоже не работает, открывает окно "управление загрузками", по сути опять скачивать пытается, только по другому...

PS Можно конечно решить через скачку во временную папку, переименование(добавление расширения), и потом открытие...
Но, неужели нет более простого варианта?
   MWWRuza
 
1 - 25.03.21 - 02:33
Я конечно сделал так:
Процедура ОткрытьXMLизСписка() 
    Если СписокДокументов.ТекущаяСтрока() > 0 Тогда 
        DOM = ЗагрузитьDOM(СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока()));
        ИмяФайл = КаталогВременныхФайлов() + "1.xml";
        DOM.Save(ИмяФайл);
        ЗапуститьПриложение(ИмяФайл);
    КонецЕсли;    
КонецПроцедуры 

Функция "ЗакрузитьDOM(URL)" у меня есть в конфигурации, на ней весь обмен с ЕГАИС построен.
Работает, в принципе - нормально.
Но, просто это какие-то "костыли"... Наверняка есть какой-то более простой способ.
   acanta
 
2 - 25.03.21 - 02:37
Наверняка есть старая смоленская дорога.  Зато без костылей.
   rphosts
 
3 - 25.03.21 - 03:51
(0) клюшечники... значит ещё живы!
Вот смотри, каждому типу файлов может быть сопоставлено в окнах дефолтовое приложение для открытия... дальше дорога понятна?
   big
 
4 - 25.03.21 - 05:08
Установи XMLNotepad от Microsoft, а смотреть хмл осликом это рвать себе мозг и здоровье )))
   andrewalexk
 
5 - 25.03.21 - 08:07
(3) :)
халва халва
   Kigo_Kigo
 
6 - 25.03.21 - 08:19
Попробуй открывать нотепад++
   MWWRuza
 
7 - 25.03.21 - 12:58
(3) дальше дорога понятна?

Нет, не понятна... Как определить тип файла, если у него отсутствует расширение, просто имя, абракадабра типа GUID, и нет расширения совсем ??? Там, где файлы "*.xml" и так все работает, как раз по Вашей "дороге", а как сопоставить дефолтовое приложение неизвестному типу файла - не понятно.

Естественно, Нотепад++ установлен, XMLNotepad тоже можно установить, и скорее всего будет работать через КомандаСистемы(), если его явно прописать...
И возможно, это будет даже удобнее... Только это всем ставить придется. В принципе, эта опция, так, вспомогательная, особо и не нужна, в основном только мне, когда что-то надо непосредственно в хмл посмотреть... Так, для пользователей там все парсится в документы 1С, они никогда вручную хмл и не открывают... Но, хотел понять, как сам принцип работает, как можно заставить из командной строки открывать с помощью IE файл неизвестного типа(точнее, структура у него известная и правильная, только расширение отсутствует, поэтому винда не может его автоматом сопоставить с приложением для открытия, и просто начинает скачивать)...
   Kigo_Kigo
 
8 - 25.03.21 - 13:38
(7) Так нотепад++ откроет любую куйню в виде текста, а если он сам узнает формат - так отроет в том который умеет читать, а если не сможет октроет его текстом, в этом и есть его плюс в отличии от ИЕ
   Fram
 
9 - 25.03.21 - 13:48
(0) это должны поправить на стороне сервера. Когда они отправляют этот файл должны были установить заголовок Content-Type: text/xml
   Fram
 
10 - 25.03.21 - 13:52
(9) + ну и Content-Disposition: "inline" не помешает
   MWWRuza
 
11 - 25.03.21 - 14:21
(9) это должны поправить на стороне сервера.

Согласен... Но, сервер, это ФСРАР УТМ вер. 4.2... Мы там ничего поменять не сможем.
   MWWRuza
 
12 - 25.03.21 - 14:24
+(11) В предыдущих версиях, все работало.

В принципе, да и фиг с ним - через загрузку DOM и сохранение во временный файл, после чего открытие как и раньше, через ЗапуститьПриложение(этот временный файл) работает, и ладно...
   MWWRuza
 
13 - 25.03.21 - 14:29
HTTP запросом, напрямую, эти "кривые"(неопределенного типа) в DOM грузятся, а кто curl пользуется, может сохранять файлы с расширением...
Конечно, это "костыли", но против системы не попрешь :(
   big
 
14 - 26.03.21 - 05:24
(13) Хмм... А разве из WinHttp вы не можете сохранить в любой (нужного имени) файл? А вообще как файл получаете, как не сохранив его из ResponseText или ResponseStream?

Я в ЕГАИС-е очень быстро отказался от WinHttp и перешёл на curl. Как вы остатки получаете? 1С не зависает?
   MWWRuza
 
15 - 26.03.21 - 12:05
(14) Данные получаю через стрим, сразу в DOM, который потом парсю, без сохранения в файл. Файл потом, сохраняю в резервное хранилище при удалении документа из УТМ при желании. Но, чаще всего и этого не делаю, он сам удаляется по истечении срока хранения. Если кому-то понадобится повторно данные ТТН, ее всегда можно перезапросить из ЕГАИС, ИД для этого хранится в доке 1С.

1С не зависает, т.к. анализируется размер данных, и в случае превышения 540 кБ, используется автоматически curl, скачивается файлом и так-же грузится в DOM из файла.
Дальнейший парсинг DOM ничем не отличается для обеих вариантов, независимо от способа загрузки.

PS Я все это делал почти пять лет назад, и с тех пор, это много где работает... Переделывать, достаточно сложно. Хотя, конечно, если бы сейчас эту задачу понадобилось решать "с нуля", возможно я бы делал по другому.

"А разве из WinHttp вы не можете сохранить в любой (нужного имени) файл?" - да, наверное может. Надо подумать, тогда не нужно будет в DOM грузить... Хотя, для этого у меня все есть, а тут придется писать отдельную процедуру... Лениво... Да и цель, не оправдывает средства, это вспомогательная, очень редко используемая функция. Скорее только мне для отладки и нужная... Вроде нормально и так работает, пусть работает.

PS Я и тему то создавал, чисто для того, что-бы понять, есть ли возможность написать командную строку, что-бы осел открывал файл неизвестного типа принудительно как XML, а не начинал его скачивать.
   victuan1
 
16 - 28.03.21 - 15:28
(0) Вот я тоже эту проблему поимел.
   victuan1
 
17 - 28.03.21 - 15:30
А если попробовать:
ЗапуститьПриложение("notepad++.exe "+ИмяФайла)
или
ЗапуститьПриложение("iexplore.exe "+ИмяФайла)
?
   MWWRuza
 
18 - 28.03.21 - 16:29
Да можно попробовать разобраться... Просто я для "боевых конфигураций" уже переделал через DOM, глобальная процедура:
Процедура ОткрытьXMLнаПросмотр(УРЛ) Экспорт 
    DOM = ЗагрузитьDOM(УРЛ);
    ИмяФайл = КаталогВременныхФайлов() + "1.xml";
    DOM.Save(ИмяФайл);
    ЗапуститьПриложение(ИмяФайл);
КонецПроцедуры

Из всех мест, где раньше было: ЗапуститьПриложение(СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока()));
переписал на ОткрытьXMLнаПросмотр(СписокДокументов.ПолучитьЗначение(СписокДокументов.ТекущаяСтрока())); 

Работает нормально...
А так: ЗапуститьПриложение("iexplore.exe "+ИмяФайла) пробовал в самом начале, что-то не заработало... Видимо, там все-таки синтаксис немного другой, не так все просто...
   Arbuz
 
19 - 29.03.21 - 12:48
(18) Да всё там просто. Путь до исполняемого файла с учётом пробелов, кавычек и всяких там слэшей. Путь до параметров с тем же учётом. между ними пробел.
   Злопчинский
 
20 - 29.03.21 - 13:23
(19) вот и выросло поколение, которое не знает что такое командная строка и кто такой Фигурнов...
   MWWRuza
 
21 - 29.03.21 - 13:31
(19) Вот так: "C:\Program Files\Internet Explorer\iexplore.exe" C:\Temp\WayBill_v4

Из командной строки работает. Надо из 1С попробовать.
   MWWRuza
 
22 - 29.03.21 - 13:34
Только вместо этого"C:\Temp\WayBill_v4" будет УРЛ...
Вроде пробовал когда первый раз с этим столкнулся, качать начинает. Когда файл, даже без расширения, открывает. Когда УРЛ - начинает скачивать...
   MWWRuza
 
23 - 29.03.21 - 13:35
И как експлоеру объяснить, что качать его не надо, а надо просто открыть как ХМЛ - не понятно.
   Злопчинский
 
24 - 29.03.21 - 14:57
как ты урл откроешь как иксемель?!
   Злопчинский
 
25 - 29.03.21 - 14:58
(21) если файл подсунуть то может попробовать явным образом указать в строке file:\\.... вместо голого урла
   MWWRuza
 
26 - 01.04.21 - 20:44
(24) А что такого? По ссылке УРЛ лежит XML файл, в предыдущей версии УТМ файлы были с расширением, и метод ЗапуститьПриложение(УРЛ), прекрасно открывал XML на просмотр, приложением, которое ассоциировано в винде для этого типа файлов. Вообще никаких проблем с этим не было.
В новой версии, файлы остались теми-же, структура внутри нормальная, только имя не содержит расширения. Вот винда и не знает, какое приложение надо запускать.


Список тем форума
Рекламное место пустует  Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.