Разработка и Конфигурация · 11 мин
Как из 1С запустить приложение
Как запустить внешнее приложение из 1С: ЗапуститьПриложение, КомандаСистемы, ShellExecute. Примеры кода, ожидание завершения, ошибки и безопасность.
Из встроенного языка 1С можно запускать любые внешние программы: открывать Excel с готовым файлом, вызывать архиватор, запускать скрипты командной строки или сторонние утилиты обмена данными. Для этого платформа предоставляет несколько механизмов — от простого объекта «ЗапуститьПриложение» до COM-объекта WScript.Shell, и выбор зависит от того, нужно ли дождаться завершения программы, получить код возврата и где выполняется код — на клиенте или на сервере.
Основная сложность у начинающих разработчиков — различие между клиентским и серверным контекстом. Команда, выполненная на сервере, запустит приложение на сервере, а не на компьютере пользователя, и чаще всего это не то, что требуется. Кроме того, в тонком и веб-клиенте действуют ограничения безопасности: запуск внешних программ может требовать подтверждения пользователя или быть вовсе заблокирован настройками.
Ниже разобраны рабочие способы запуска приложений с примерами кода, различия клиентского и серверного выполнения, обработка кодов возврата и типичные ошибки, из-за которых «ничего не происходит» после вызова команды.
Какие способы запуска приложений есть в 1С
Платформа 1С:Предприятие 8 предлагает три основных механизма запуска внешних программ, и у каждого своя область применения. Неправильный выбор метода — самая частая причина того, что код «отрабатывает без ошибок», но приложение не открывается или открывается не там.
Сравнение способов запуска
Глобальный метод платформы. Работает на клиенте (толстый, тонкий, веб-клиент с ограничениями). Поддерживает ожидание завершения и код возврата. Основной способ для интерактивных сценариев.
Выполняет команду ОС. Доступна на сервере и в толстом клиенте. Подходит для фоновых заданий и серверных обработок, но запускает процесс на стороне сервера.
COM-объект Windows. Даёт доступ к окружению, реестру, скрытому запуску. Работает только там, где доступны COM-объекты — в толстом клиенте и на Windows-сервере.
Метод ЗапуститьПриложение() — универсальный выбор для клиентского кода. Он умеет ждать завершения процесса, возвращать код возврата и работать с указанием рабочего каталога. Метод КомандаСистемы() исторически используется на сервере: например, регламентное задание выгружает данные и вызывает внешнюю утилиту для отправки файла. Объект WScript.Shell применяют, когда нужны возможности, которых нет у штатных методов: запуск без окна, чтение переменных окружения, работа с ярлыками.
Запуск приложения методом ЗапуститьПриложение
Базовый синтаксис метода: ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодВозврата). Все параметры, кроме первого, необязательны. Строка команды содержит полный путь к исполняемому файлу и, при необходимости, аргументы. Путь с пробелами обязательно заключается в кавычки — во встроенном языке кавычки внутри строки удваиваются.
// Простой запуск Блокнота
ЗапуститьПриложение("notepad.exe");
// Открытие файла в Excel с ожиданием закрытия
КодВозврата = Неопределено;
СтрокаКоманды = """C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"" ""D:\Отчеты\Продажи.xlsx""";
ЗапуститьПриложение(СтрокаКоманды, , Истина, КодВозврата);
Если КодВозврата = 0 Тогда
Сообщить("Файл закрыт, программа завершилась штатно");
КонецЕсли;Параметр «ДождатьсяЗавершения» со значением Истина блокирует выполнение кода 1С до тех пор, пока внешняя программа не закроется. Это нужно, когда следующий шаг зависит от результата: например, архиватор должен закончить упаковку перед отправкой файла. Учтите, что в это время сеанс пользователя «зависает» — для длительных операций лучше выносить вызов в фоновое задание или предупреждать пользователя.
Четвёртый параметр — переменная, в которую платформа поместит код возврата процесса. По соглашению ноль означает успешное завершение, ненулевые значения — ошибки, но конкретные коды зависят от запускаемой программы, поэтому сверяйтесь с её документацией.
Запуск через оболочку cmd
Если нужно выполнить встроенную команду командной строки (copy, dir, del) или пакетный файл со сложной логикой, запускайте интерпретатор cmd.exe с ключом /c (выполнить и завершить) или /k (выполнить и оставить окно открытым). Это же способ обойти проблемы с перенаправлением вывода и конвейерами.
ЗапуститьПриложение("cmd /c ""C:\Обмен\upload.bat"" > ""C:\Обмен\log.txt"""");Запуск на сервере через КомандаСистемы
Метод КомандаСистемы(СтрокаКоманды) доступен в серверном контексте и в толстом клиенте. Типовой сценарий — регламентное задание, которое формирует файл выгрузки и вызывает внешнюю программу обработки: конвертер, утилиту шифрования, клиент SFTP. Код возврата метод возвращает как результат вызова.
// Серверная процедура: вызов внешней утилиты
КодВозврата = КомандаСистемы("""C:\Tools\converter.exe"" /in:""D:\Export\data.xml""");
Если КодВозврата <> 0 Тогда
ВызватьИсключение "Внешняя утилита завершилась с ошибкой, код " + КодВозврата;
КонецЕсли;Критически важно понимать: процесс запускается на сервере 1С:Предприятия под учётной записью службы агента сервера (обычно USR1CV8). У этой учётной записи свои права, своё окружение и нет доступа к сетевым дискам, подключённым у пользователя. Если утилита обращается к сетевым ресурсам, используйте UNC-пути вида \\server\share и убедитесь, что учётная запись службы имеет туда доступ.
Запуск через WScript.Shell и особые сценарии
COM-объект WScript.Shell создаётся через Новый COMОбъект("WScript.Shell") и даёт методы Run и Exec. Метод Run позволяет управлять видимостью окна (второй параметр: 0 — скрытое окно) и ожиданием завершения (третий параметр — Истина). Это стандартный способ запустить консольную утилиту без мелькания чёрного окна командной строки.
Shell = Новый COMОбъект("WScript.Shell");
// 0 — скрытое окно, Истина — ждать завершения
КодВозврата = Shell.Run("""C:\Tools\pack.exe"" /silent", 0, Истина);Ограничение подхода очевидно: COM-объекты недоступны в тонком и веб-клиенте, а на сервере под Linux их не существует. Поэтому код с WScript.Shell нужно оборачивать в проверки контекста или держать в отдельных модулях, вызываемых только в толстом клиенте. Для новых разработок предпочтительнее штатный ЗапуститьПриложение, который работает кроссплатформенно.
Открытие файла ассоциированной программой
Если нужно просто показать пользователю файл (PDF, картинку, документ), не обязательно знать путь к программе просмотра. Используйте метод ЗапуститьПриложение с указанием только файла или глобальный метод ПерейтиПоНавигационнойСсылке / ФайловаяСистемаКлиент.ОткрытьФайл (в свежих версиях платформы) — система сама выберет ассоциированное приложение.
Ограничения в тонком и веб-клиенте
В тонком клиенте запуск внешних приложений возможен, но платформа может запрашивать у пользователя подтверждение на выполнение операции с файловой системой — это штатное поведение механизма защиты от опасных действий. Если у пользователя отключены интерактивные запросы, а вызов требует подтверждения, команда завершится ошибкой.
В веб-клиенте ограничения жёстче: доступ к локальной файловой системе и запуск процессов возможны только через расширение работы с файлами, и пользователь должен его установить и разрешить. Публикуя решение, рассчитанное на веб-клиент, закладывайте альтернативный сценарий — например, выгрузку файла через браузер с последующим ручным открытием.
Частые ошибки и их диагностика
Классическая ситуация: вызов выполнен, исключения нет, но программа не открылась. В подавляющем большинстве случаев причина — неправильный путь (пробелы без кавычек, отсутствие файла) или контекст выполнения: код написан в серверной процедуре, а разработчик ждёт окно на своём компьютере, хотя процесс стартовал на сервере.
Для диагностики сначала проверьте строку команды вручную: скопируйте её и выполните через Win+R или cmd на том же компьютере и под той же учётной записью, где работает код 1С. Если команда вручную работает, а из 1С нет — проблема в контексте, правах или блокировке защитой платформы.
Как проверить результат
Процесс виден в диспетчере задач на нужном компьютере
Процесса нет — проверяйте путь и права
0 или ожидаемое программой значение
Ненулевой код — смотрите документацию утилиты и её журнал
Файл создан/обновлён, данные обработаны
Файл не изменился — проверяйте рабочий каталог и аргументы
Как выбрать способ
FAQ
Почему ЗапуститьПриложение не выдаёт ошибку, но программа не открывается?
Чаще всего код выполняется на сервере, а вы ждёте окно на клиенте — процесс реально запущен, но на серверной машине. Проверьте директивы компиляции процедуры (НаКлиенте/НаСервере). Вторая причина — неверный путь: проверьте его запуском вручную через командную строку.
Как передать в запускаемую программу параметры?
Аргументы дописываются в строку команды после пути к исполняемому файлу через пробел. Каждый аргумент, содержащий пробелы, обрамляется кавычками, а кавычки внутри строки встроенного языка удваиваются. Формат аргументов (ключи, разделители) определяется документацией запускаемой программы.
Можно ли запустить приложение из 1С на Linux-сервере?
Да, КомандаСистемы работает на сервере под Linux и выполняет команду через системную оболочку. Учитывайте специфику: прямые слеши в путях, чувствительность к регистру имён файлов, права пользователя, под которым работает сервер 1С, и отсутствие COM-объектов.
Как дождаться завершения программы, не блокируя интерфейс пользователя?
Вынесите вызов в фоновое задание: запустите длительную операцию через ДлительныеОперации или ФоновыеЗадания, а в форме покажите индикатор выполнения. После завершения задания оповестите пользователя и обработайте результат. Прямой вызов с ожиданием в клиентской процедуре блокирует сеанс.
Почему в тонком клиенте появляется окно с предупреждением об опасном действии?
Это штатная защита платформы от опасных действий: запуск приложений и работа с файловой системой требуют подтверждения. Пользователь может разрешить действие в диалоге, а администратор — настроить профили безопасности или отключить защиту для доверенной конфигурации, осознанно принимая риски.
Как запустить приложение от имени другого пользователя Windows?
Штатные методы 1С не поддерживают смену учётных данных. Используйте запуск через cmd с утилитой runas (потребуется интерактивный ввод пароля или сохранённые учётные данные) либо настройте запуск службы/задания планировщика Windows под нужной учётной записью и вызывайте его из 1С.
Что важно запомнить
На клиенте используйте ЗапуститьПриложение с ожиданием и кодом возврата, на сервере — КомандаСистемы с учётом прав учётной записи службы. Всегда заключайте пути с пробелами в кавычки, проверяйте контекст выполнения кода и не передавайте в строку команды непроверенные данные пользователя.