Как программно запустить внешний файл, программу или bat-скрипт из 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки в среде 1С:Предприятие часто возникает необходимость взаимодействия с внешним окружением. Это может быть запуск консольной утилиты для обработки данных, открытие документа Word или Excel, выполнение скрипта автоматизации или запуск обычного исполняемого файла .exe. В данной статье мы подробно рассмотрим, какие инструменты предоставляет платформа для решения этих задач, проанализируем различия между методами и разберем продвинутые способы управления внешними процессами.

Метод 1: Использование встроенной функции ЗапуститьПриложение

Самый простой и распространенный способ запустить файл — воспользоваться встроенной функцией ЗапуститьПриложение(). Этот метод универсален и работает как в старых версиях (7.7), так и в современных редакциях платформы 8.3. Основная задача этой функции — передать операционной системе команду на открытие файла приложением, которое ассоциировано с данным расширением в Windows.

Рассмотрим простейший пример запуска текстового файла:


// Пример для 1С 8.3
ПолноеИмяФайла = "C:\Temp\Report.txt";
ЗапуститьПриложение(ПолноеИмяФайла);

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


// Использование explorer для надежности запуска
ИмяФайла = "C:\Scripts\Update.bat";
ЗапуститьПриложение("explorer " + ИмяФайла);

Важный нюанс: Функция ЗапуститьПриложение является асинхронной (неуправляемой). Это означает, что 1С просто «дает команду» операционной системе и сразу переходит к выполнению следующей строки кода, не дожидаясь, пока запущенная программа закроется.

Метод 2: КомандаСистемы — работа с консолью

Для версии 1С 7.7 и обычных форм 8.x существует метод КомандаСистемы(). Его отличие заключается в том, что он имитирует ввод команды в командную строку (CMD). Это удобно, когда нам нужно выполнить внутренние команды Windows, такие как copy, del или запустить скрипт с перенаправлением вывода.

Разберем пример создания и запуска bat-файла через этот метод:


// Пример для 1С 7.7
КомандаСистемы("C:\my_script.bat");

Однако у этого метода есть существенный минус: при его вызове на мгновение (или на все время работы скрипта) появляется черное окно консоли, что может смущать пользователя. Если вам требуется скрытый запуск, лучше рассмотреть использование COM-объектов.

Метод 3: Продвинутое управление через WScript.Shell

Если ваша задача требует контроля над процессом (например, нужно дождаться окончания работы внешней программы или скрыть окно запуска), стандартных функций 1С будет недостаточно. В этом случае мы воспользуемся возможностями Windows Script Host, создав объект WScript.Shell.

Рассмотрим синтаксис метода Run(Command, WindowStyle, WaitOnReturn):

  1. Command: Строка запуска (путь к файлу и параметры).
  2. WindowStyle: Определяет вид окна (0 — скрытое, 1 — обычное, 3 — развернутое).
  3. WaitOnReturn: Булево значение. Если Истина, 1С будет ждать завершения программы.

Посмотрим на практический пример реализации запуска с ожиданием:


// Пример для 8.3 (Windows-клиент)
WshShell = Новый COMОбъект("WScript.Shell");
ПутьКФайлу = """C:\Program Files\MyTool\tool.exe"" /param1";
КодВозврата = WshShell.Run(ПутьКФайлу, 0, Истина);

Если КодВозврата = 0 Тогда
    Сообщить("Программа успешно завершила работу");
Иначе
    Сообщить("Программа завершилась с ошибкой. Код: " + КодВозврата);
КонецЕсли;

В этом примере мы использовали параметр 0, чтобы скрыть окно, и Истина, чтобы алгоритм 1С не продолжался до тех пор, пока tool.exe не закроется. Это критически важно, если следующая строка кода должна считывать результат работы этой программы.

Метод 4: Работа с временными файлами и хранилищем значений

В современных конфигурациях (УПП, ERP, БП) файлы часто хранятся не на диске, а внутри базы данных в объектах типа ХранилищеЗначения. Рассмотрим алгоритм действий для открытия такого файла:

  1. Извлекаем двоичные данные из хранилища.
  2. Записываем их во временный файл на диске пользователя.
  3. Запускаем полученный файл.

Проанализируем программный код для этой задачи:


// 1. Получаем данные (например, из реквизита справочника)
ДвоичныеДанные = СправочникОбъект.ФайлХранилище.Получить();

Если ДвоичныеДанные <> Неопределено Тогда
    // 2. Формируем путь во временном каталоге
    ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
    
    Попытка
        ДвоичныеДанные.Записать(ИмяФайла);
        
        // 3. Запускаем через системное приложение (для 8.3.15+)
        ЗапуститьСистемноеПриложение(ИмяФайла);
    Исключение
        Сообщить("Не удалось сохранить или открыть файл: " + ОписаниеОшибки());
    КонецПопытки;
КонецЕсли;

Особенности и типичные ошибки

При реализации запуска внешних файлов мы часто сталкиваемся со специфическими проблемами ОС. Разберем наиболее важные из них.

Проблема путей с пробелами. Если путь к файлу содержит пробелы (например, C:\My Documents\file.bat), операционная система может неправильно интерпретировать команду. Чтобы этого избежать, путь всегда нужно заключать в кавычки. В языке 1С для этого используются двойные кавычки внутри строки:


Команда = """" + ПутьКФайлу + """"; // Результат будет: "C:\My Documents\file.bat"

Кроссплатформенность. Помните, что WScript.Shell и .bat файлы работают только в среде Windows. Если ваш сервер 1С или клиент работает на Linux, вам придется использовать системные команды этой ОС, например xdg-open для открытия файлов или прямые вызовы bash-скриптов через ЗапуститьПриложение.

Права доступа. При запуске исполняемых файлов из 1С, процесс наследует права пользователя, от имени которого запущен клиент (или сервер, если запуск идет на стороне сервера). Если программе требуются права администратора, запуск может завершиться ошибкой без объяснения причин. В таких случаях мы рекомендуем проверять наличие прав доступа к целевому каталогу и самому файлу.

Веб-клиент. Работа в браузере накладывает серьезные ограничения. Прямой запуск WScript.Shell невозможен из-за политик безопасности. В этом случае необходимо использовать расширение работы с файлами 1С, которое потребует от пользователя подтверждения на установку и выполнение операций.

Выясним, какой метод выбрать именно вам: если нужно просто «показать» файл пользователю — используйте ЗапуститьПриложение. Если нужно выполнить служебную операцию скрыто и дождаться результата — ваш выбор WScript.Shell.

← На главную