1с запуститьприложение с параметрами
Запуск приложений из 1С:Предприятия 8.x
Платформа 1С:Предприятие 8.x позволяет выполнять запуск сторонних приложений встроенными средствами. Например, если нужно запустить браузер для открытия ссылки, то достаточно написать следующий программный код:
Таким же способом можно выполнять запуск любого другого приложения, явно указав путь к исполняемому EXE-файлу.
После выполнения этой строчки кода будет запущено стандартное приложение Windows - "Блокнот".
Использовать этот метод глобального контекста больше имеет смысл на стороне клиента (тонкого или толстого), так как в абсолютном большинстве случаев после запуска приложения работать с ним из 1С:Предприятия не представляется возможным. Т.е. после открытия браузера обрабатывать его события или получать из него данные платформа не сможет.
Но выполнять взаимодейтсвие с запущенным таким способом приложением все же можно! Например, выполнив запуск ожидаем когда запущенное приложение сформирует ответный файл и затем читаем его. Если использовать метод "ЗапуститьПриложение()", то нам придется проверять наличие ответного файла в цикле и в случае появления доступа к этому файлу - обработать его.
Рациональней было бы запустить приложение, дождаться завершения его выполнения и затем выполнить все необходимые действия. А если запуск выполняется на клиентской машине, то показывать окно приложения вообще может оказаться не обязательно.
Для этих целей можно использовать COM-объект "WScript.Shell":
А) - команда системы (путь к исполняемому файлу или любая другая команда в формате DOS).
Б) - вариант показа окна приложения. Указывать не обязательно. Возможные значения:
1 - Активизирует и показывает окно. Если окно минимизировано или максимизировано, система восстанавливает его к оригинальному размеру и положению. Используется при первом открытии окна программы.
2 - Активизирует окно в свернутом режиме.
3 - Активизирует окно и разворачивает на весь экран.
4 - Показывает окно в его новом размере и положении. Активным остается текущее окно.
5 - Активизирует окно и показывает его в текущем размере.
6 - Минимизирует окно и активизирует следующее на панеле задач.
7 - Показывает окно как минимизированное. Активное окно остается активным.
8 - Показывает окно в его текущем состоянии. Активное окно остается активным.
9 - Активизирует и показывает окно. Если окно минимизировано или максимизировано, система восстанавливает его к оригинальному размеру и положению. Используется для восстановления минимизированного окна.
10 - показывает окно в том-же состоянии, что и окно вызывающей программы.
В) - нужно ли ожидать завершения команды: 0 - не нужно ждать завершения выполнения команды, 1 - ждать окончания выполнения команды.
Вот так выглядит запуск приложения "Блокнот" этим способом:
Но опять же, ожидания завершения работы приложения не будет. Для этого третий параметр нужно выставить в значение 1.
Пример использования COM-объекта "WScript.Shell" можно посмотреть в обработке "Yandex.Wordstat", где с его помощью запускается утилита отправки JSON-запроса через Yandex.API.
Минусом второго способа является его не универсальность, ведь работа COM-объекта возможна только для случаев, когда платформа (или сервер 1С:Предприятия) запущены под управлением операционной системы Windows.
Скажите, пжл, как программно определить, запущена ли 1С в режиме польз?
СП помнит.
Не забудь про всякие консоли, регламентные задания, конфигуратор и прочую хрень.
Почему тут нет кнопки - голосовать за закрытие темы?
то ес мы во прям из нашег сеанс хоти узна - а выполняетс ли это во самы код, который выполняетс?
(11) Потому что сеанс конфигуратора — это не сеанс в режиме 1С:Предприятия. Как и консоль кластера, регламентные задания и т. д.
2(16) вам не кажется ли, что если вы программно что-то выполняется, то это уже выполняется в предприятии, и стало быть 1С запущена в режиме пользователя?
хотите изобрести настоящий искусственный интеллект - чтобы программа обладала рефлексией и думала над вопросом "А существую ли я на самом деле? Или просто снюсь бабочке?"
2 (23) ну не знаю у меня безо всяких закрывает все окна 1с
2(23) это оттого что нужно писать tskill:
tskill 1Cv8* /A
но это сработает только в том случае если у вас все пользователи работают в терминале
но самое смешное что этот код закроет и ваш сеанс тоже. а вам так нужно?
taskkill в этом плане более универсальная - позволит завершить процессы и на удаленных компах, но вам нужно знать имена компов на которых работают ваши пользователи
Здравствуйте, Живой Ископаемый!
Перед обменом нужно, как я понимаю, чтобы пользователей в базе не было. Как раз мое 1сПредприятие (польз "obmen") я и спрашиваю как закрыть (это к (26)).
У нас пользователи не в терминале работают и я тоже, спасибо, учту.
Сейчас попробую сделать, как Вы советуете.
TaskKill /F /IM 1cv8.exe - закрылось без вопроса, спасибо Вам огромное
наша задача состоит в том, чтобы угадать какой результат в каком случае? призы будут?
во 2 случае только код в кону загружается, и даже из конф для обновления 1сПредпр не запускается - остается "!" в конф-ре
"только код" - это я после выполнения случая2 захожу в конфигуратор и вижу что код заменился на новый и стоит в окне конф-ра "!"; те видимо сработала только первая строка батника,
"только код" - данные не загрузились
2(40) мучайтесь дальше. никто вас такую без фотки не пожалеет
я это уже объяснял в одной из позапрошлых веток.. с тех пор причина та же
(44) я не поняла, скажите, пжл, еще 1 раз, если не затруднит
2(45) нет, не просите вы помочь.. вы сообщаете ничего не значащие замечания о работе какого-то припадочного скрипта.
Кстати, в (30) - предположение "Перед обменом нужно, как я понимаю, чтобы пользователей в базе не было" - абсолютно ложное. могут быть. Пользователей быть не должно только в том случае, если пришли изменения конфы, при чем такие, которые меняют структуру. Если же просто поменялся код модуля - то пусть будут, ничего страшного нет
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Планируется в версии мобильной платформы 8.3.18
На текущий момент единственный способ запустить мобильное приложение, созданное на мобильной платформе 1С (или мобильный клиент 1С), не нажимая непосредственно на иконку приложения – через PUSH или локальное уведомление.
В версии мобильной платформы 8.3.18 появится возможность запускать мобильное приложение "1С:Предприятия" (приложение, созданное на мобильной платформе 1С, или мобильный клиент 1С) из другого мобильного приложения или с использованием некоторого URL.
Эта возможность может потребоваться для решения различных задач интеграции мобильных приложений (как внешних приложений и сервисов с мобильными приложениями 1С, так и мобильных приложений 1С между собой).
В частности, появятся новые возможности:
Вызов конкретной функции мобильного приложения из другого приложения.
Возможность использовать некоторый URL для того, чтобы открыть мобильное приложение на конкретном объекте или функции.
Примеры сценариев использования новой функциональности:
Пользователю присылается в Документообороте (например, в письме, или через Систему взаимодействия) ссылка на документ в Клиенте ЭДО. При нажатии на ссылку запускается мобильное приложение "Клиент ЭДО" и открывается требуемый объект.
Для реализации возможности вызова мобильного приложения из другого приложения, используются глубинные ссылки (deep linking) и механизм глубинного связывания. Глубинная ссылка - это URL, который указывает на какой-то ресурс на сайте или в приложении. А глубинное связывание - это механизм, который позволит мобильной операционной системе связать URL и мобильное приложение, установленное на устройстве.
Глубинная ссылка может быть сформирована двумя способами:
С использованием собственной схемы (например, myfuncapp://). В этом случае URL для вызова будет иметь вид myfuncapp://comand?params.
В модуле приложения добавлена возможность реализации нового обработчика:
ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка) |
Пример использования механизма
После установки на мобильное устройство приложение регистрирует в мобильной операционной системе глубинные ссылки, которое оно (приложение) может обрабатывать.
Когда пользователь выполняет переход по глубинной ссылке, мобильная операционная система определяет, какое приложение обрабатывает эту ссылку.
Найденное приложение запускается, и используемая глубинная ссылка передается в это приложение для разбора самим приложением.
В мобильном приложении срабатывает обработчик события ОбработкаПереходаПоНавигационнойСсылке, который и получает на вход глубинную ссылку, которая привела к запуску мобильного приложения.
Запуск мобильного приложения 1С в Android через механизм намерений (intent)
При запуске мобильного приложения 1С через URL мы можем передавать дополнительные параметры только в строковом виде. К тому же существует ограничение на длину URL (оно зависит от конкретной версии ОС).В ОС Android мы дополнительно поддержали возможность запуска мобильных приложений 1С из других приложений через механизм намерений (intent). Это позволяет передавать в приложение различные типы данных (например, массивы), что увеличивает объем передаваемой в приложение информации.
Запуск = Новый ЗапускПриложенияМобильногоУстройства("android.intent.action.VIEW",
"myappfunc://testPath?key1 key2", СтроковыйПараметр);
Если Запуск.ПоддерживаетсяЗапуск() Тогда
- В настоящий момент поддерживается только действие android.intent.action.VIEW.
- Схема myappfunc:// должна быть указана как поддерживаемая для ОС Android в собираемом мобильном приложении.
- Числовой параметр с идентификатором key1 передается непосредственно в URL глубинной ссылки.
- Строковый параметр key2 передается путем явного указания параметра в списке дополнительных данных объекта, описывающего вызов намерения.
Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке,
СтандартнаяОбработка)
Безопасность запуска приложений
Область применения: управляемое приложение, обычное приложение.
1. При запуске внешней программы из кода требуется составлять строку запуска таким образом, чтобы она собиралась только из проверенных частей.
Если одна из частей, из которых собирается строка запуска, содержит данные, полученные из базы данных, из поля ввода на форме или прочитаны из хранилища настроек, то перед запуском программы требуется проверить, являются ли запуск безопасным. Безопасными считаются такие строковые данные, которые не содержат в себе следующие символы: "$", "`", "|", "||" ";", "&", "&&".
Данное требование распространяется на все способы запуска программы, в том числе:
- КомандаСистемы (<СтрокаКоманды>, <ТекущийКаталог>)
- ЗапуститьПриложение (<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>) ;
- НачатьЗапускПриложения (<ОписаниеОповещения>, <СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>);
- ПерейтиПоНавигационнойСсылке (<НавигационнаяСсылка>);
- Использование COM объектов " Wscript.Shell " и " Shell.Application ".
2. При использовании Библиотеки стандартных подсистем для запуска внешних программ требуется использовать следующий программный интерфейс:
2.1. Для того чтобы открыть проводник с фокусировкой на указанном файле, использовать процедуру ФайловаяСистемаКлиент.ОткрытьПроводник .
Например:
2.2. Для того чтобы открыть файл в программе просмотра, ассоциированной с расширением файла, использовать процедуру ФайловаяСистемаКлиент.ОткрытьФайл . Она исключает запуск исполняемых файлов (например, *.exe, *.bin, *.apk).
Например:
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://1c.ru");
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("e1cib/navigationpoint/startpage"); // начальная страница.
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("mailto:[email protected]");
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("skype:echo123?call");
В то же время, для открытия проводника или файла в программе просмотра не следует формировать ссылку по протоколу file://, для этого следует использовать одну из процедур: ОткрытьПроводник (см. п. 2.1) или ОткрытьФайл (см. п. 2.2).
2.4. Для того чтобы:
- запускать файлы на исполнение (например, *.exe, *bat),
- использовать системные команды (например, ping, tracert или traceroute, обращаться к rac-клиенту),
- выполнять команды на сервере,
- а также получать код возврата и значения потоков вывода (stdout) и ошибок (stderr)
следует использовать ФайловаяСистемаКлиент.ЗапуститьПрограмму (в клиентском коде) и ФайловаяСистема.ЗапуститьПрограмму (в серверном коде).
Например:
Пример запуска с ожиданием завершения и получения кода возврата:
ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;
Результат = ФайловаяСистема.ЗапуститьПрограмму(
"ping 127.0.0.1 -n 5", ПараметрыЗапускаПрограммы);
КодВозврата = Результат.КодВозврата;
ПотокВывода = Результат.ПотокВывода;
ПотокОшибок = Результат.ПотокОшибок;
3. Для выполнения команды, требующей запуск внешней программы в режиме наивысших прав (например, в ОС Windows - с отображением запроса повышения прав UAC), необходимо:
Читайте также: