1с как запустить приложение
Как запустить программу (приложение) и дождаться окончания её выполнения в 1с 8.3, 8.2
Истина , // Дождаться завершения работы приложения, которое запустили
// Код, находящийся здесь, будет выполнен, после того, как пользователь закроет запущенное приложение
Как запустить программу (приложение), без ожидания окончания её выполнения в 1с 8.3, 8.2
Ложь , // Дождаться завершения работы приложения, которое запустили
// Код, находящийся здесь, будет выполнен, сразу после запуска приложения
Как открыть сайт в браузере по умолчанию в 1с 8.3, 8.2
Как открыть сайт в Internet Explorer из 1с 8.3, 8.2
ProgramFiles = Shell . ExpandEnvironmentStrings ( "%PROGRAMFILES%" ) ;
ЗапуститьПриложение ( ProgramFiles + "\Internet Explorer\iexplore.exe https://okolokompa.com" ) ;
КомандаСистемы ( "start iexplore.exe http:// okolokompa.ru" ) ;
Как открыть файл Word или Excel в 1с 8.3, 8.2
Как открыть папку в проводнике Windows в 1с 8.3, 8.2
WindowsDir = Shell . ExpandEnvironmentStrings ( "%WINDIR%" ) ;
ЗапуститьПриложение ( WindowsDir + "\explorer.exe " "C:\Наша папка" "" ) ;
Как выделить нужный файл в проводнике в 1с 8.3, 8.2
WindowsDir = Shell . ExpandEnvironmentStrings ( "%WINDIR%" ) ;
ЗапуститьПриложение ( WindowsDir + "\explorer.exe /select," "C:\Наша папка\Наш файл.exe" "" ) ;
Как запустить приложение с параметрами в 1с 8.3, 8.2
ЗапуститьПриложение ( "C:\Windows\explorer.exe " "Параметры запуска" "" ) ;
КомандаСистемы ( "start explorer.exe " "Параметры запуска " "" ) ;
Как выполнить команду операционной системы из приложения в 1с 8.3, 8.2
Как получить имя компьютера в 1с 8.3, 8.2
Как получить путь к каталогу исполняемых файлов в 1с 8.3, 8.2
Процедура ПолучаемПутьККаталогуИсполняемыхФайлов 1 С ( )
// Выведет полный путь к папке bin из которой запущена 1с
Как получить путь к каталогу временных файлов в 1с 8.3, 8.2
Как получить путь к каталогу документов пользователя в 1с 8.3, 8.2
Как получить информацию о мониторах (dpi, разрешение) в 1с 8.3, 8.2
Для Каждого Монитор Из ПолучитьИнформациюЭкрановКлиента ( ) Цикл
Строка ( Монитор . Высота ) + " Ширина: " + Строка ( Монитор . Ширина ) ) ;
Как получить путь к рабочему каталогу данных пользователя в 1с 8.3, 8.2
Процедура ПолучаемПутьКРабочемуКаталогуДанныхПользователя ( )
Как узнать текущий язык системы в 1с 8.3, 8.2
Как получить список пользователей операционной системы в 1с 8.3, 8.2
Процедура ПолучаемСписокПользователейОперационнойСистемы ( )
Для Каждого Имя Из Пользователь . Пользовател и Цикл
Поиск по сайту
Okolokompa в Яндекс Дзен
Платформа 1С великолепна, замечательна и просто мощная. Обширный функционал доступен из коробки, а технология внешних компонент делает ее практически безграничной в части расширения возможностей. Но иногда.
Иногда все это не помогает и для достижения результатов, решения задачи - приходиться использовать сторонний софт. И ладно, если бы это были COM-объекты, которые хоть и являются устаревшей технологией, но до сих пор часто используются и даже получили некоторую вторую жизнь с последними событиями. Но есть и другой путь - запуск приложений напрямую из кода встроенного языка.
Сегодня мы поговорим о запуске приложений программным способом. А также о некоторых проблемах и способах их решений под Windows и Linux.
Часть подходов, которые будут описаны ниже, применяются в разработке "Командный интерпретатор для 1С", но скачивать ее для изучения не обязательно. Все есть здесь. Там лишь все это организовано в удобном виде для использования.
Исполни это
Причин, когда такое может понадобиться - много, очень много. Все их рассматривать точно не будем. Остановимся на одном простейшем примере - запуск команды ping, чтобы узнать доступность какого-либо ресурса в сети средствами 1С. Иногда еще ping запускают для эмулирования ожидания (метода Sleep), но мы такое извращение делать не будем :)
Наша задача - запустить какое-либо приложение с параметрами и получить результат его работы. И сделать мы это должны безопасным способом!
Последнее означает, что если запускаемое приложение зависнет, запросит интерактивных действий от пользователя (а на сервере мы ничем ему в этом случае помочь не сможем) или просто будет выполняться дольше выделенного для него времени, то мы должны завершить его работу и продолжить выполнение кода в обычном режиме и обработать исключение. Никому ведь не нужны зависшие сеансы 1С?
Мы рассмотрим несколько решений как для Windows, так и для Linux. И так, поехали.
My Little Windows
По классике, сначала мы сделаем плохо, а потом сделаем хорошо. Прежде чем начать дам несколько служебных функций, которые будут использоваться в примерах ниже.
Решения не идеальные, но простые. Например, там можно найти как сохранить файл в кодировке UTF-8 без BOM, получить путь к файлу PowerShell.exe и др. Решения всегда можно улучшать.
Плохой пример
И так, как обычно выполняется запуск приложений из кода встроенного языка? Правильно - с помощью процедуры "ЗапуститьПриложение()":
Первым параметром передаем строку команды запуска и параметры по необходимости. Во втором устанавливаем каталог, что не обязательно. Третий параметр позволяет дождаться завершения приложения, а четвертый получить код возврата. Обычно если код возврата не равен 0, значит что-то пошло не так.
Вариант рабочий и позволяет запускать большую часть команд и целых скриптов. Комментарии даны исчерпывающие. Используются только штатные возможности платформы 1С для выполнения команд. И это плюс. Но у этого подхода есть и большой минус - низкая надежность и непредсказуемость результата в тех случаях, когда точно не известно, как долго будет команда выполняться и не потребует ли приложение интерактивных действий пользователя. Если интерактивные действия потребуются на стороне сервера, где мы об этом даже и не узнаем, то сеанс 1С может подвиснуть на всегда.
В качестве решения может быть реализация таймаута выполнения команды, но для процедуры "ЗапуститьПриложение" такое реализовать практически невозможно. Можно, конечно, попробовать запустить приложение и ожидать файла-результата какое-то время, но это решит проблему частично. Зависания не будет, но приложение будет запущено и дальше, ожидая внешней команды.
WScript.Shell нас спасет
Мы же в среде Windows. Давайте используем ее средства в виде COM-Объекта "WScript.Shell":
Безопасный запуск команды / скрипта через WScript.ShellВот такая портянка для безопасного запуска приложений.
Если кратко, то для выполнения команды добавили таймаут. По истечении времени выполнения, приложение завершается и вызывается исключение.
Теперь приложение не зависнет и в случае чего мы сможем завершить его работу принудительно.
Мое имя Power, PowerShell
Пойдем дальше и сделаем наше решение более интересным. Что, если нам нужно запустить не простую команду CMD или BAT'ник, а команду или скрипт PowerShell, но на тех же условиях! Для примера опять же оставим запуск бесконечного пинга :)
Еще одна портянка кода, но куда без них.
Принцип тот же самый, что и в примере выше. Отличие находится в области "ПодготовкаСкриптаPowerShell", где выполняется подготовка скрипта PowerShell для запуска и установка необходимых параметров для приложения PowerShell.exe. Иначе параметры безопасности не дадут нормально запустить скрипт. Подробнее об этом читайте на MSDN.
Фактически, теперь можно запускать любые скрипты хоть CMD, хоть PowerShell. А если сильно хочется, то можно и GIT Bash под Windows использовать или даже подсистему WSL под Windows 10. Но все это уже другая история. Осталось поговорить про Linux.
*.nix is my own
Под *.nix привычнее всего использовать bash для выполнения команд. Можно ли использовать bash из встроенного языка платформы 1С? Да, можно. Можно запускать как отдельные команды, так и целые скрипты. При этом получать результат и, что самое главное, делать это безопасно как в примерах выше.
В далеком 2015 году на Mista была поднята тема "Запуск файлов *.sh в самой 1с". Возможно, информация ниже будет ответом на вопрос, т.к. точного ответа так там и нет. Но может быть я не прав :)
Запускаем bash-скрипты
Первое, что нужно понять - в Linux нет COM-объектов. Значит придется обойтись штатными средствами платформы 1С. Выглядеть это будет так:
Здесь мы устанавливаем произвольный текст команды для Bash и выполняем его. В чем то прием аналогичен тому, что мы делали для Windows. Комментарии даны полные, но на паре моментов остановимся подробнее.
Некоторые нюансы
Первое, что может показаться интересным - это вызов "dos2unix" для сформированного ранее файла скрипта. Зачем это нужно? В операционной системе Windows по умолчанию для переноса строк в файлах используется последовательность символов "\r\n" (перевод каретки + перенос строки). В Unix-подобных системах используется только символ переноса строки "\n". Для Windows символ перевода каретки был добавлен для того, чтобы в древние времена можно было отправлять на печать текст без каких-либо особых драйверов. Телетайп навсегда! Этот легаси остался и по сей день и никому не мешает, ну почти.
Нам же он может сильно помешать по двум причинам:
- Несмотря на то, что сервер 1С установлен под Linux - все равно стандартный перенос строки платформа формирует как "\r\n". Даже если для таких классов как "ЗаписьТекста" или "ТекстовыйДокумент" устанавливать символ переноса строки другой (например, Симполв.ПС или по коду символа переноса строки равному 10), то платформа все равно использует символ перевода каретки.
- Еще может быть ситуация, когда текст команды для выполнения передается с клиента под управлением Windows на сервер под Linux и символы перевода каретки будут там присутствовать.
Мешать они будут потому что Bash не понимает что с ними делать. Если в файле скрипта будет содержаться символ "\r", то мы получим ошибку:
Вот, например, обсуждение подобной проблемы. Так вот, с помощью команды "dos2unix" можно убрать все символы, несовместимые содержимым скрипта Bash и сделать его корректным. На скриншоте ниже показан пример преобразования содержимого скрипта. (Да, я использую Notepad++ даже в Linux, если Вы его узнали).
Конечно, тут есть минус - пакет "dos2unix" должен быть установлен на сервер. Сделать это проще простого. Вот так это, например, выглядит для Ubuntu:
Но это не единственная особенность. Для того, чтобы ограничить время выполнения команды мы используем штатные возможности - команду timeout. С ее помощью мы можем указать сколько времени выделяется для выполнения команды / скрипта.
В примере выше мы выполняем некоторый скрипт с таймаутом 10 секунд. Подробнее смотрите мануал :)
Теперь Вы можете запускать приложения, скрипты или команды с помощью Bash из Linux безопасным способом.
Скрытая угроза
Частным случаем запуска процессов небезопасным образом является использование COM-объектов. Не все COM-объекты порождают процессы, которые нужно контролировать. Но, например, всеми любимые Word и Excel, которые часто до сих пор ставят на сервера, делают именно так. Они запускают соответствующий процесс "word.exe" или "excel.exe" и дальше управляют им. Не говоря уже про чистоту использования лицензий (эта тема касалась здесь), это еще и не всегда безопасно с точки зрения работы этих приложений.
Тут все просто - в момент создания объекта документа для его обработки как-раз и создается процесс "word.exe". После завершения всех необходимых действий, метод "Quit" закрывает приложение и все работает как надо. Но что, если в момент выполнения алгоритма заполнения произойдет ошибка? Правильно, метод "Quit" не будет выполнен и процесс Word'а останется "висеть". Конечно, можно попытаться обезопасить себя как это рекомендует стандарт разработки 1С и добавить "попытку":
Тут мы пытаемся закрыть приложение и освободить все связанные ресурсы. Часть кейсов это решит, но, к сожалению, не все. Если, например, в момент работы с COM-объектом возникнет не исключение, а падение рабочего процесса, то никакие действия по освобождению ресурсов выполнены не будут и процесс останется висеть в памяти до перезагрузки сервера / компьютера. Ну или пока не будет "убит" принудительно.
К сожалению, при непредвиденном завершении рабочего процесса мы особо ничего не можем сделать для контроля завершения всех запущенных процессов из кода встроенного языка. Все-таки это нештатная ситуация и решать ее можно только нештатными средствами. Почти все "костыли" по этой теме дают сбои в той или иной степени.
А у Вас на сервере бывают ситуации с десятком запущенный процессов "excel.exe"? :)
Альтернативные подходы
В качестве многоточия для этой темы хотел бы упомянуть и альтернативные способы решения проблем с освобождением ресурсов запущенных из 1С процессов:
- Организовать bat/ps/bash скрипт, который будет ночью "убивать" определенные процессы. Например, те же "excel.exe". Костыль? Да. Работает? Да.
- Сохранять в базе 1С (например, в регистре сведений) информацию о запущенных процессах (идентификатор процесса, имя и др.). Ночью или в другое время запускать регл. задание, которое будет проверять завершение этих процессов. Костыль? Да. Работает? Да.
- Перезагружать сервер с периодичностью в несколько дней. О сколько проблем можно решить! :) Костыль? Да. Работает? Да :)))
Список можно продолжать и дальше. Но возможно правильным вариантом будет - поиск решения задач иным способом, а не запуском сторонних процессов. Если такое, конечно, возможно.
Удачи, друзья!
Всем чистого кода, хороших решений и меньше "костылей"! До следующих встреч!
А как Вы работаете со сторонними процессами из 1С?
Другие ссылки
-
- инструмент для выполнения команд CMD / PowerShell из 1С
Авторские разработки
Транслятор запросов 1С в SQL - инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.
Просмотр и анализ структуры базы данных (отчет на СКД) - отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.
Просмотр и анализ журнала регистрации (отчет на СКД) - отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.
История работы пользователей (отчет на СКД) - отчет для просмотра истории работы пользователей (СКД, просмотр для любого пользователя).
Экспорт журнала регистрации. Набор инструментов (приложения + исходный код) - набор инструментов для экспорта данных журнала регистрации во внешние хранилища для Windows и Linux. Готовые приложения и исходный код.
Путеводитель по истории релизов - отчет по истории выпуска релизов продуктов фирмы "1С" и анализа информации по обновлениям.
-
Помощник работы с идентификаторами объектов - инструмент для расширенного анализа идентификаторов объектов.
Анализ производительности APDEX (бесплатный) - отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.
Обозреватель криптографии - отчет для просмотра доступных провайдеров и сертификатов криптографии на сервере и клиенте.
Пакетная выгрузка / загрузка внешних отчетов и обработок - пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.
Мастер полнотекстового поиска - набор инструментов для работы с полнотекстовым индексом платформы 1С. Стандартные и расширенные возможности.
Командный интерпретатор для 1С - инструмент для выполнения команд CMD / PowerShell из 1С
Безопасность запуска приложений
Область применения: управляемое приложение, обычное приложение.
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), необходимо:
Запуск приложений из 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С. Кто может дать пример НачатьЗапускПриложения()? НЕ могу понять как использовать. Раньше было все просто - ЗапуститьПриложение("С:\\1.txt") и запускался блокнот. Включать режим совместимости синхронных вызовов не хочу.
ЛюбойФайл = "С:\\1.txt";
Оповещение = Новый ОписаниеОповещения("ЗапускПриложения", ЭтотОбъект);
НачатьЗапускПриложения(Оповещение. Истина);
А что дальше?
Что нужно писать в процедуре ЗапускПриложения(), какие параметры?
НачатьЗапускПриложения(<ОписаниеОповещения>, <СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>)
Параметры:
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
Тип: Строка.
Задает текущий каталог запускаемого приложения.
Истина - дожидаться завершения запущенного приложения перед продолжением работы.
Значение по умолчанию: Ложь.
Описание:
Начинает запуск внешнего приложения либо открытие файла с использованием ассоциированного с ним приложения.
Тонкий клиент, веб-клиент, толстый клиент.
<ДождатьсяЗавершения> - тот самый параметр
(5) Хотя, это я ошибся. Попробовал сейчас - всё работает корректно и без явного указания экзешника. Вы просто неправильно понимаете смысл процедуры в описании оповещения - она вызывается не при запуске, а при завершении. Вот там и удаляйте свой файл.
(5) А для чего тогда служит параметр, дождать завершения? Вроде раньше, процедура ЗапуститьПриложение(), отрабатывала как я описал выше (вспомнил пример, где я запускал mp3 файл.). На самом деле я запуская картинку, могу запустить пдф файл.
(6)Как я понимаю смысл - открылась картинка. я ее посмотрел. Закрыл. и вот тут я должен удалить файл. Но отчкаостанова в отладчике не отрабатывает. У меня как "НачатьЗапускПриложения(ЗапускПриложения, ЛюбойФайл,, Истина);", отработала. Файл открылся и тут же переходим в Процедура ЗапускПриложения(КодВозврата, ДополнительныйПараметр) Экспорт
(8) Нет, вы ошибаетесь. Процедура вызывается при закрытии.
(8) После закрытия файла, я в эту процедуру не попадаю. У меня в вызываемой процедуре
Первый параметр пустой. Может по этому я не попадаю в нее после закрытия файла?
(10) Я буквально дословно проверил на вашем примере - всё попадает.
На самом деле, это способ помочь финансированию здравоохранению за счет автомобилистов. Каждая справка - платная, очевидно, что объем работы врача при приеме такого "пациента" на порядок меньше чем с реальным больным, а денежки идут.
(13) хватит по интернетам лазить, работать давай. Понаоткрывают кучу окон, а потом парятся :)
(12) Вот пример
Первый параметр у меня пустой. Не могу понять почему. И как только открылся файл. Я разу попал в нижнюю процедуру. Может платформа баговая
(16) :D это уже смешно. У меня все тоже. У меня в коде нет ошибок? :D. Может параметры конфигурации не такие? Я в чистой базе это пишу.
(17) Аналогично. В чистой базе все работает.
Сделайте в процедуре ЗапускПриложения Сообщить("Закрылось").
Я так понимаю, если первый параметр истина, то будет отрабатывать после закрытия. Но у меня первый параметр = неопределено.
Читайте также: