Запуск исполняемых файлов или скриптов на стороне сервера по инициативе мобильного пользователя — это классическая задача интеграции. Поскольку мобильное устройство и сервер находятся в разных физических и программных средах, прямой вызов системных команд невозможен. Разберем подробно, как выстроить архитектуру этого процесса, какие методы использовать и с какими подводными камнями можно столкнуться.
Проанализируем ситуацию: мобильное приложение 1С работает на смартфоне, а .bat-файл находится на физическом сервере или компьютере, где установлена серверная часть 1С. Напряжать кнопку в мобильном интерфейсе и ожидать, что файл «магически» запустится на сервере, нельзя. Нам необходимо передать команду через сеть.
Рассмотрим основной механизм реализации:
HTTP-сервис. Именно он будет принимать «сигнал» от мобильного приложения.HTTPЗапрос, который отправляется на URL нашего сервиса.POST или GET), внутри которого вызывается команда запуска файла.Для непосредственного запуска файла в среде 1С используется метод ЗапуститьПриложение. Выясним особенности его синтаксиса, которые критически важны для серверного выполнения. Глобальный контекст позволяет использовать этот метод практически в любом типе соединения, включая серверное.
Посмотрим на пример кода, который должен быть размещен в модуле HTTP-сервиса на стороне сервера:
Процедура ЗапуститьСкриптНаСервере()
ИмяФайла = "C:\Scripts\my_process.bat";
КаталогВыполнения = "C:\Scripts\";
// Четвертый параметр (Истина) заставляет 1С ждать завершения работы скрипта
КодВозврата = 0;
ЗапуститьПриложение(ИмяФайла, КаталогВыполнения, Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
ЗаписатьЛогОшибки("Скрипт завершился с ошибкой. Код: " + КодВозврата);
КонецЕсли;
КонецПроцедуры
Разберем параметры подробнее:
.bat-файлу. Рекомендуется использовать только абсолютные пути.Истина, серверный поток 1С будет «висеть» до тех пор, пока .bat-файл не закроется. Это полезно, если результат работы скрипта нужен для дальнейшей логики.Нужно четко понимать, что серверный код выполняется под учетной записью службы «Агент сервера 1С» (обычно это USR1CV8). Проанализируем последствия этого факта:
Отсутствие графического интерфейса: Серверные процессы работают в изолированной «Сессии 0». Это означает, что даже если в коде 1С запуск прошел успешно, вы не увидите черное окно консоли на мониторе сервера. Любая попытка .bat-файла вывести диалоговое окно или сообщение приведет к тому, что скрипт «зависнет», ожидая реакции пользователя, которую никто не сможет дать.
Права доступа: Пользователь USR1CV8 должен иметь права «Чтение и выполнение» на папку со скриптом и на все ресурсы, к которым этот скрипт обращается. Если ваш .bat-файл копирует файлы на сетевой диск, помните: у службы 1С этот диск может быть не подключен. В таких случаях всегда используйте UNC-пути (например, \\ServerName\SharedFolder\).
Часто программисты сталкиваются с тем, что скрипт не находит файлы из-за кириллицы в путях. Выясним причину: 1С передает строки в кодировке UTF-8, а командная строка Windows (CMD) по умолчанию ожидает OEM-кодировку (CP866 для русской Windows).
Чтобы избежать проблем, выполним следующие рекомендации:
.bat-файл в кодировке OEM (CP866).chcp 65001 (это переключит консоль в режим UTF-8).Поскольку мы не видим окно консоли, отладка превращается в «слепую» работу. Рассмотрим, как сделать процесс прозрачным. Самый эффективный способ — перенаправление вывода скрипта в текстовый файл.
Изменим строку запуска в 1С следующим образом:
КомандаЗапуска = "cmd /c C:\Scripts\start.bat > C:\Logs\output.txt 2>&1";
ЗапуститьПриложение(КомандаЗапуска, "C:\Scripts\", Истина);
Здесь > C:\Logs\output.txt записывает стандартный вывод в файл, а 2>&1 добавляет туда же сообщения об ошибках. После выполнения 1С может прочитать этот файл и вернуть текст ошибки обратно в мобильное приложение для отображения пользователю.
Если задача сложнее, чем просто копирование файлов, рекомендуем рассмотреть замену .bat на PowerShell (файлы .ps1). Это мощный инструмент, который лучше обрабатывает ошибки и имеет более предсказуемый синтаксис. Запуск из 1С будет выглядеть так:
Команда = "powershell.exe -ExecutionPolicy Bypass -File ""C:\Scripts\Action.ps1""";
ЗапуститьПриложение(Команда, , Истина);
Параметр -ExecutionPolicy Bypass позволяет игнорировать ограничения системы на запуск неподписанных скриптов, что часто необходимо в серверной среде.
Резюмируем: Для запуска .bat-файла из мобильного приложения создайте HTTP-сервис в основной базе, используйте метод ЗапуститьПриложение на сервере, обеспечьте права доступа для пользователя службы 1С и обязательно настройте логирование в файл для возможности отладки.