Автоматизация · 10 мин
Как запустить скрипт из 1С: практическое руководство
Как запустить скрипт из 1С: запуск внешних обработок, командной строки, bat-файлов и PowerShell через WScript.Shell. Примеры кода, ошибки и проверка результата.
Под «запуском скрипта из 1С» обычно понимают три разные задачи: открыть внешнюю обработку или отчёт (файл .epf/.erf), выполнить код из внешнего файла с расширением .bsl, либо запустить из кода 1С внешнюю программу — bat-файл, скрипт PowerShell, Python или утилиту командной строки. Способ выбирается в зависимости от того, что именно нужно выполнить и где работает код: на клиенте или на сервере.
В тонком и толстом клиенте доступны разные инструменты. На клиенте можно использовать объект WScript.Shell и команду ЗапуститьПриложение, на сервере — только серверные механизмы, причём интерактивный запуск приложений там ограничен. В веб-клиенте запуск внешних программ на компьютере пользователя по соображениям безопасности практически недоступен.
Ниже разобраны рабочие варианты с примерами кода, условиями применения и типичными ошибками. Все примеры приведены для управляемых форм и актуальных версий платформы 1С:Предприятие 8.3.
Определите, какой именно скрипт нужно запустить
Прежде чем писать код, уточните тип задачи. От этого зависит и инструмент, и место выполнения. Ошибка на этом шаге — самая частая причина того, что «скрипт не запускается»: например, попытка выполнить .bsl-файл как обработку или запустить bat-файл на сервере, где нет нужных прав.
Как выбрать способ запуска
Отдельно учитывайте контекст исполнения. Директивы &НаКлиенте и &НаСервере определяют, какие объекты доступны: WScript.Shell создаётся только там, где установлена соответствующая компонента ОС, то есть обычно на клиентском компьютере под Windows.
Запуск внешней обработки или отчёта (.epf, .erf)
Самый простой интерактивный способ — меню Файл → Открыть в клиентском приложении. Укажите файл обработки, и она откроется как обычная форма. Если пункт недоступен, проверьте, что у пользователя есть право «Интерактивное открытие внешних обработок и отчётов», а в свойствах конфигурации не запрещено открытие внешних файлов.
Программный запуск из кода выглядит так:
&НаСервере
Процедура ЗапуститьОбработкуНаСервере()
Обработка = ВнешниеОбработки.Создать("C:\Обработки\МояОбработка.epf", Ложь);
Обработка.ВыполнитьКоманду("ОсновноеДействие");
КонецПроцедуры
Второй параметр метода Создать отвечает за использование безопасного режима. Если обработка должна открыть форму пользователю, вместо создания объекта на сервере используйте на клиенте глобальный контекст: открытие формы внешней обработки через ПолучитьФорму недоступно напрямую — сначала подключите обработку через ВнешниеОбработки.Создать с передачей данных между клиентом и сервером, либо подключите её в справочник «Дополнительные отчеты и обработки», если используется БСП.
Выполнение кода из файла .bsl
Файлы .bsl — это обычные текстовые файлы с кодом на встроенном языке. Платформа не исполняет их как самостоятельные программы: код нужно прочитать и передать в оператор Выполнить. Это мощный, но опасный механизм, потому что выполняемый код получает полные права текущего сеанса.
&НаСервере
Функция ВыполнитьСкриптИзФайла(ПутьКФайлу)
Текст = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);
КодСкрипта = Текст.Прочитать();
Текст.Закрыть();
Результат = Неопределено;
Выполнить(КодСкрипта);
Возврат Результат;
КонецФункции
Оператор Выполнить работает только на сервере и недоступен в безопасном режиме. Если скрипт должен возвращать значение, договоритесь о соглашении: например, скрипт присваивает результат переменной с заранее известным именем, а вызывающий код читает её через Вычислить.
Запуск скриптов ОС: bat, cmd, PowerShell
Для запуска скриптов операционной системы из клиентского кода чаще всего используют COM-объект WScript.Shell. Он позволяет запустить команду, дождаться завершения и получить код возврата:
&НаКлиенте
Процедура ВыполнитьBatФайл(Команда)
Shell = Новый COMОбъект("WScript.Shell");
КодВозврата = Shell.Run("cmd.exe /c """ + Команда + """", 0, Истина);
Если КодВозврата <> 0 Тогда
Сообщить("Скрипт завершился с ошибкой, код: " + КодВозврата);
КонецЕсли;
КонецПроцедуры
Параметры Run: первый — командная строка, второй — режим окна (0 — скрытое), третий — ожидание завершения. Если нужно запустить PowerShell-скрипт, команду формируют так:
cmd.exe /c powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\sync.ps1"
Обратите внимание на политику выполнения PowerShell: по умолчанию запуск .ps1-файлов может быть запрещён, и параметр -ExecutionPolicy Bypass обходит это ограничение для конкретного вызова. На сервере вместо COM-объекта используйте метод ЗапуститьПриложение с ожиданием завершения, но помните, что он выполняется от имени учётной записи агента сервера 1С — у неё должны быть права на каталог скрипта и все используемые ресурсы.
cmd.exe /c powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\backup.ps1" > C:\Scripts\log.txt 2>&1Передача параметров и получение результата
Скрипту почти всегда нужно передать данные: путь к файлу, номер документа, дату. Параметры дописываются в командную строку, при этом каждый параметр, содержащий пробелы, оборачивается в кавычки. В bat-файле они доступны как %1, %2 и так далее, в PowerShell — через массив $args или именованные параметры param().
Для возврата результата есть три рабочих варианта. Первый — код возврата: ноль означает успех, ненулевое значение — ошибку. Второй — запись вывода в лог-файл через перенаправление (> файл 2>&1) и последующее чтение этого файла из 1С. Третий — обмен через промежуточный файл в согласованном формате, например JSON, если нужно передать структурированные данные.
Как проверить результат
Равен 0 — скрипт отработал штатно
Ненулевой код — читайте лог и текст ошибки
Создан, содержит ожидаемые записи и время выполнения
Отсутствует или пуст — команда не дошла до выполнения
Объект создан или изменён в ожидаемом виде
Изменений нет — проверяйте пути, права и параметры
Автоматический запуск по расписанию
Если скрипт должен выполняться регулярно без участия пользователя, используйте регламентное задание. Создайте его в конфигураторе, назначьте расписание и вынесите вызов внешней программы в серверную процедуру. В файловой базе регламентные задания выполняются только пока запущен сеанс с соответствующей настройкой, в клиент-серверной — агентом сервера.
Альтернатива — запускать саму 1С из планировщика задач Windows с параметром /Execute, указав внешнюю обработку, которая выполнит нужные действия и завершит сеанс. Этот вариант удобен, когда логика уже оформлена в виде .epf и не требует изменения конфигурации.
- 1Оформите логику в общем серверном модуле или внешней обработке
- 2Создайте регламентное задание и задайте расписание
- 3Укажите пользователя, от имени которого выполняется задание
- 4Добавьте запись в лог или журнал регистрации для контроля
- 5Запустите задание вручную и проверьте результат и код возврата
Типичные ошибки и их устранение
Ещё одна частая ситуация — блокировка антивирусом. Запуск cmd.exe или powershell.exe из процесса 1С может считаться подозрительным. Если скрипт внезапно перестал работать после обновления защитного ПО, проверьте журнал антивируса и добавьте проверенный сценарий в исключения, согласовав это с администратором безопасности.
Что важно запомнить
Сначала определите тип скрипта и место выполнения — клиент или сервер. Внешние обработки открывают через Файл → Открыть или ВнешниеОбработки.Создать, скрипты ОС — через WScript.Shell с ожиданием и проверкой кода возврата. Всегда логируйте результат и не выполняйте непроверенный код через Выполнить().
Частые вопросы
Можно ли запустить скрипт из 1С в веб-клиенте?
Запуск внешних программ на компьютере пользователя из веб-клиента заблокирован браузерной моделью безопасности. Рабочий вариант — выполнить скрипт на сервере через серверный вызов, а пользователю вернуть только результат. Либо организовать обмен через файлы или веб-сервис, который запустит скрипт вне сеанса 1С.
Почему WScript.Shell не создаётся и возникает ошибка?
Объект создаётся только в клиентском контексте под Windows. Проверьте директиву компиляции — в &НаСервере этот код не сработает. Также создание COM-объектов может блокироваться антивирусом или политиками безопасности; проверьте журнал защитного ПО.
Как дождаться окончания работы скрипта перед продолжением кода?
В методе Run объекта WScript.Shell установите третий параметр в Истина — вызов вернёт управление только после завершения процесса. При использовании ЗапуститьПриложение аналогично включайте режим ожидания завершения, иначе 1С продолжит выполнение параллельно со скриптом.
Как передать в bat-файл параметры с пробелами и русскими буквами?
Каждый параметр заключайте в двойные кавычки. Для кириллицы сохраните bat-файл в кодировке OEM 866 или добавьте в начало команду chcp 1251 / chcp 6501 в зависимости от кодировки файла — иначе русские буквы в путях могут исказиться.
Безопасно ли использовать Выполнить() для .bsl-файлов?
Только если файл находится в защищённом каталоге, доступном ограниченному кругу администраторов, и его содержимое проверено. Код через Выполнить() получает полные права сеанса и может изменить или удалить любые данные. Для пользовательских сценариев безопаснее оформить логику внешней обработкой.
Скрипт работает вручную, но не работает из регламентного задания. В чём причина?
Чаще всего дело в правах и окружении: регламентное задание выполняется от имени учётной записи агента сервера, у которой другие сетевые диски, переменные среды и права. Замените подключённые диски на UNC-пути (\\сервер\ресурс) и проверьте доступ этой учётной записи ко всем каталогам скрипта.