Разработка и Конфигурация · 10 мин
Как из 1С запустить файл: рабочие способы и примеры кода
Как запустить файл из 1С: ЗапуститьПриложение, НачатьЗапускПриложения, КомандаСистемы. Примеры кода для тонкого и веб-клиента, обработка ошибок и безопасность.
Задача запустить внешний файл из 1С возникает постоянно: открыть PDF-счёт, выполнить скрипт обмена, стартовать программу выгрузки банка или просто показать пользователю документ Word. В зависимости от версии платформы, типа клиента (тонкий, толстый, веб) и места выполнения кода (клиент или сервер) применяются разные методы, и выбор неправильного — самая частая причина «неработающего» запуска.
В платформе 1С:Предприятие 8.3 есть три основных механизма: ЗапуститьПриложение() (устаревший, но рабочий синхронный вызов), НачатьЗапускПриложения() (современный асинхронный метод) и КомандаСистемы() (выполнение команды ОС, в основном на сервере). Дополнительно существуют методы для открытия файлов по ассоциации — через ФайловаяСистемаКлиент или глобальный контекст.
Ниже разобраны все способы с готовыми примерами кода, указаны ограничения каждого варианта, типичные ошибки и способы проверить, что запуск действительно произошёл. Материал ориентирован на разработчиков и администраторов, работающих с управляемыми формами.
Какой способ выбрать: сравнение методов запуска
Прежде чем писать код, определите три условия: где выполняется код (клиент или сервер), какой клиент используется, и нужно ли дожидаться завершения запущенной программы. От ответов зависит выбор метода.
| Метод | Где работает | Особенности |
|---|---|---|
| НачатьЗапускПриложения | Тонкий, толстый клиент | Асинхронный, рекомендуемый, есть код возврата |
| ЗапуститьПриложение | Толстый клиент, режим синхронности | Устаревший, блокирует интерфейс |
| ФайловаяСистемаКлиент.ОткрытьФайл | Тонкий, толстый, веб-клиент | Открывает файл ассоциированной программой |
| КомандаСистемы | Сервер, толстый клиент | Выполнение команды ОС, риски безопасности |
Сравнение вариантов
Основной вариант для управляемых форм на клиенте. Поддерживает ожидание завершения и код возврата. Не работает в веб-клиенте.
Лучший выбор, если нужно просто показать пользователю документ (PDF, Excel, картинку). Работает даже в веб-клиенте через расширение работы с файлами.
Подходит для серверных фоновых задач: скрипты обмена, архивация. Требует жёсткого контроля параметров из-за риска инъекций.
НачатьЗапускПриложения — современный способ
Метод НачатьЗапускПриложения() — рекомендуемый платформой способ запуска внешних программ и файлов на клиенте. Он асинхронный: результат (код возврата) приходит в процедуру-оповещение, поэтому интерфейс не зависает.
Минимальный пример запуска программы:
&НаКлиенте
Процедура ЗапуститьПрограмму(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект);
НачатьЗапускПриложения(Оповещение, "notepad.exe", , Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗапускаПриложения(КодВозврата, ДопПараметры) Экспорт
Если КодВозврата = 0 Тогда
Сообщить("Программа завершилась успешно");
Иначе
Сообщить("Код возврата: " + КодВозврата);
КонецЕсли;
КонецПроцедуры
Параметры метода: описание оповещения, строка команды, рабочий каталог (необязательно), признак ожидания завершения. Если четвёртый параметр — Ложь или не указан, приложение запускается параллельно, и код возврата будет недоступен.
Запуск файла с параметрами
Чтобы передать программе аргументы, добавьте их в строку команды, заключая пути с пробелами в кавычки:
СтрокаКоманды = """C:\Tools\converter.exe"" /input:""C:\Документы\отчёт.xlsx"" /silent";
НачатьЗапускПриложения(Оповещение, СтрокаКоманды);
ЗапуститьПриложение — устаревший синхронный метод
Метод ЗапуститьПриложение() остался для совместимости. Он блокирует выполнение до завершения программы (если указан признак ожидания) и требует, чтобы в конфигурации был разрешён синхронный режим вызовов. В типовых конфигурациях с отключённой синхронностью вызов приведёт к ошибке.
// Работает только при разрешённых синхронных вызовах
ЗапуститьПриложение("notepad.exe C:\Temp\readme.txt", , Истина);
Использовать его в новом коде не стоит: платформа выдаёт предупреждения, а в веб-клиенте метод недоступен вовсе. Если вы встретили его в старом коде — плановая замена на НачатьЗапускПриложения займёт несколько минут.
Открытие файла программой по умолчанию
Когда задача — не запустить конкретную программу, а показать пользователю файл (PDF, Excel, картинку, текст), правильнее открыть его ассоциированным приложением. Для этого предназначен метод ФайловаяСистемаКлиент.ОткрытьФайл() (в старых релизах — ОткрытьФайл() через глобальный контекст или ПерейтиПоНавигационнойСсылке).
&НаКлиенте
Процедура ОткрытьДокумент(Команда)
ФайловаяСистемаКлиент.ОткрытьФайл("C:\Отчеты\Счет123.pdf");
КонецПроцедуры
Этот способ работает и в веб-клиенте (при установленном расширении работы с файлами), что делает его единственным универсальным вариантом для открытия документов пользователем. Если файл находится на сервере, его сначала нужно поместить во временное хранилище и получить на клиенте через НачатьПолучениеФайлаССервера.
- 1Поместите файл на сервере во временное хранилище или передайте путь, доступный клиенту
- 2На клиенте получите файл через НачатьПолучениеФайлаССервера во временный каталог
- 3Вызовите ФайловаяСистемаКлиент.ОткрытьФайл с локальным путём
- 4Проверьте, что файл открылся в ожидаемой программе
- 5Удалите временный файл после закрытия, если он содержит конфиденциальные данные
КомандаСистемы — запуск на сервере
Когда запуск должен произойти на сервере 1С (например, в регламентном задании ночной обработки), используется КомандаСистемы(). Метод выполняет команду операционной системы сервера и возвращает код завершения.
&НаСервере
Процедура ВыполнитьОбмен()
КодВозврата = КомандаСистемы("C:\Scripts\exchange.bat");
Если КодВозврата <> 0 Тогда
ЗаписьЖурналаРегистрации("Обмен", УровеньЖурналаРегистрации.Ошибка, , ,
"Скрипт завершился с кодом " + КодВозврата);
КонецЕсли;
КонецПроцедуры
Учтите: команда выполняется под учётной записью агента сервера 1С (обычно USR1CV8), поэтому у этой учётной записи должны быть права на исполняемый файл, рабочий каталог и сетевые ресурсы. Отсутствие прав — самая частая причина «молчаливого» неуспеха.
Типичные ошибки и их устранение
Большинство проблем при запуске файлов из 1С сводится к нескольким повторяющимся сценариям. Проверяйте их в первую очередь.
- Ошибка «Файл не обнаружен» — путь указан относительно клиента, а код выполняется на сервере (или наоборот). Проверьте директиву компиляции процедуры.
- Ничего не происходит без ошибки — у учётной записи сервера нет прав, либо антивирус заблокировал запуск. Смотрите журнал событий Windows.
- Ошибка о синхронных вызовах — в конфигурации запрещён синхронный режим, а используется ЗапуститьПриложение. Перейдите на асинхронный метод.
- Команда разваливается на части — путь с пробелами не заключён в кавычки.
- Окно программы открывается и сразу закрывается — программа завершилась с ошибкой, но код возврата не проверяется.
Проверка результата запуска
Успешный вызов метода не гарантирует, что программа отработала правильно. Контролируйте результат по нескольким признакам.
Как проверить результат
0 (для большинства программ — успешное завершение)
Ненулевое значение или отсутствие вызова оповещения
Файл создан, имеет ожидаемый размер и свежую дату изменения
Файл отсутствует, нулевого размера или со старой датой
Есть информационная запись о запуске и завершении
Записи об ошибках или полное отсутствие записей
Процесс появился и завершился через разумное время
Процесс завис или не появился вовсе
Для длительных операций полезно записывать в журнал регистрации время старта, строку команды и код возврата — это сокращает диагностику с часов до минут, когда пользователь сообщает, что «ничего не сработало».
FAQ: частые вопросы о запуске файлов из 1С
Как запустить файл из 1С в веб-клиенте?
Прямой запуск программ в веб-клиенте запрещён браузерной моделью безопасности. Доступен только вариант открытия файла через ФайловаяСистемаКлиент.ОткрытьФайл при установленном расширении работы с файлами — файл скачивается и открывается ассоциированной программой. Произвольные exe запустить нельзя.
Почему НачатьЗапускПриложения не вызывает оповещение?
Чаще всего процедура оповещения не объявлена с ключевым словом Экспорт или указано неверное имя. Также проверьте, что форма не закрыта до завершения запуска — оповещение привязано к модулю формы, и после её уничтожения вызов не произойдёт.
Можно ли запустить файл на компьютере пользователя из серверного кода?
Нет, напрямую нельзя: серверный код выполняется на сервере. Нужно передать файл или команду на клиент (например, через оповещение или результат фонового задания) и выполнить запуск уже в клиентской процедуре.
Как дождаться завершения запущенной программы?
Передайте в НачатьЗапускПриложения четвёртым параметром Истина — оповещение сработает после завершения процесса, и в него придёт код возврата. Без этого флага приложение запускается параллельно, и момент завершения отследить штатно нельзя.
Что делать, если антивирус блокирует запуск из 1С?
Проверьте журналы антивируса и добавьте доверенный каталог с исполняемым файлом в исключения, предварительно убедившись в подлинности файла. Не отключайте защиту целиком и не добавляйте в исключения каталоги с временными файлами пользователей.
Как передать программе несколько файлов сразу?
Зависит от самой программы: одни принимают список файлов параметрами через пробел (каждый путь в кавычках), другие — файл-список или маску. Изучите документацию запускаемой программы и сначала проверьте строку команды вручную в cmd, а потом переносите её в код 1С.
Что важно запомнить
Для клиентского запуска используйте асинхронный НачатьЗапускПриложения, для открытия документов — ФайловаяСистемаКлиент.ОткрытьФайл, для серверных задач — КомандаСистемы с белым списком команд. Всегда проверяйте код возврата, заключайте пути в кавычки и не подставляйте пользовательский ввод в строку команды.