К статье
Практический материал

Разработка и Конфигурация · 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. 1
    Поместите файл на сервере во временное хранилище или передайте путь, доступный клиенту
  2. 2
    На клиенте получите файл через НачатьПолучениеФайлаССервера во временный каталог
  3. 3
    Вызовите ФайловаяСистемаКлиент.ОткрытьФайл с локальным путём
  4. 4
    Проверьте, что файл открылся в ожидаемой программе
  5. 5
    Удалите временный файл после закрытия, если он содержит конфиденциальные данные

КомандаСистемы — запуск на сервере

Когда запуск должен произойти на сервере 1С (например, в регламентном задании ночной обработки), используется КомандаСистемы(). Метод выполняет команду операционной системы сервера и возвращает код завершения.

&НаСервере

Процедура ВыполнитьОбмен()

КодВозврата = КомандаСистемы("C:\Scripts\exchange.bat");

Если КодВозврата <> 0 Тогда

ЗаписьЖурналаРегистрации("Обмен", УровеньЖурналаРегистрации.Ошибка, , ,

"Скрипт завершился с кодом " + КодВозврата);

КонецЕсли;

КонецПроцедуры

Учтите: команда выполняется под учётной записью агента сервера 1С (обычно USR1CV8), поэтому у этой учётной записи должны быть права на исполняемый файл, рабочий каталог и сетевые ресурсы. Отсутствие прав — самая частая причина «молчаливого» неуспеха.

Типичные ошибки и их устранение

Большинство проблем при запуске файлов из 1С сводится к нескольким повторяющимся сценариям. Проверяйте их в первую очередь.

  • Ошибка «Файл не обнаружен» — путь указан относительно клиента, а код выполняется на сервере (или наоборот). Проверьте директиву компиляции процедуры.
  • Ничего не происходит без ошибки — у учётной записи сервера нет прав, либо антивирус заблокировал запуск. Смотрите журнал событий Windows.
  • Ошибка о синхронных вызовах — в конфигурации запрещён синхронный режим, а используется ЗапуститьПриложение. Перейдите на асинхронный метод.
  • Команда разваливается на части — путь с пробелами не заключён в кавычки.
  • Окно программы открывается и сразу закрывается — программа завершилась с ошибкой, но код возврата не проверяется.
Типичные ошибки
01
Запуск серверного пути с клиента: файл лежит на диске сервера, а открыть его пытаются на компьютере пользователя — получают «файл не найден»
02
Игнорирование кода возврата: программа падает, а обработка считает операцию успешной и продолжает работу с несуществующим результатом
03
Конкатенация пользовательского ввода в строку команды: риск выполнения произвольных команд и порчи данных
04
Использование ЗапуститьПриложение в новом коде: ошибки при отключённой синхронности и невозможность работы в веб-клиенте

Проверка результата запуска

Успешный вызов метода не гарантирует, что программа отработала правильно. Контролируйте результат по нескольким признакам.

Контрольные точки

Как проверить результат

Код возврата в оповещении
Норма

0 (для большинства программ — успешное завершение)

Тревожный признак

Ненулевое значение или отсутствие вызова оповещения

Файл результата на диске
Норма

Файл создан, имеет ожидаемый размер и свежую дату изменения

Тревожный признак

Файл отсутствует, нулевого размера или со старой датой

Журнал регистрации
Норма

Есть информационная запись о запуске и завершении

Тревожный признак

Записи об ошибках или полное отсутствие записей

Процесс в диспетчере задач
Норма

Процесс появился и завершился через разумное время

Тревожный признак

Процесс завис или не появился вовсе

Для длительных операций полезно записывать в журнал регистрации время старта, строку команды и код возврата — это сокращает диагностику с часов до минут, когда пользователь сообщает, что «ничего не сработало».

FAQ: частые вопросы о запуске файлов из 1С

Как запустить файл из 1С в веб-клиенте?

Прямой запуск программ в веб-клиенте запрещён браузерной моделью безопасности. Доступен только вариант открытия файла через ФайловаяСистемаКлиент.ОткрытьФайл при установленном расширении работы с файлами — файл скачивается и открывается ассоциированной программой. Произвольные exe запустить нельзя.

Почему НачатьЗапускПриложения не вызывает оповещение?

Чаще всего процедура оповещения не объявлена с ключевым словом Экспорт или указано неверное имя. Также проверьте, что форма не закрыта до завершения запуска — оповещение привязано к модулю формы, и после её уничтожения вызов не произойдёт.

Можно ли запустить файл на компьютере пользователя из серверного кода?

Нет, напрямую нельзя: серверный код выполняется на сервере. Нужно передать файл или команду на клиент (например, через оповещение или результат фонового задания) и выполнить запуск уже в клиентской процедуре.

Как дождаться завершения запущенной программы?

Передайте в НачатьЗапускПриложения четвёртым параметром Истина — оповещение сработает после завершения процесса, и в него придёт код возврата. Без этого флага приложение запускается параллельно, и момент завершения отследить штатно нельзя.

Что делать, если антивирус блокирует запуск из 1С?

Проверьте журналы антивируса и добавьте доверенный каталог с исполняемым файлом в исключения, предварительно убедившись в подлинности файла. Не отключайте защиту целиком и не добавляйте в исключения каталоги с временными файлами пользователей.

Как передать программе несколько файлов сразу?

Зависит от самой программы: одни принимают список файлов параметрами через пробел (каждый путь в кавычках), другие — файл-список или маску. Изучите документацию запускаемой программы и сначала проверьте строку команды вручную в cmd, а потом переносите её в код 1С.

Итог

Что важно запомнить

Для клиентского запуска используйте асинхронный НачатьЗапускПриложения, для открытия документов — ФайловаяСистемаКлиент.ОткрытьФайл, для серверных задач — КомандаСистемы с белым списком команд. Всегда проверяйте код возврата, заключайте пути в кавычки и не подставляйте пользовательский ввод в строку команды.