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

Автоматизация · 10 мин

Как запустить скрипт из 1С: практическое руководство

Как запустить скрипт из 1С: запуск внешних обработок, командной строки, bat-файлов и PowerShell через WScript.Shell. Примеры кода, ошибки и проверка результата.

Под «запуском скрипта из 1С» обычно понимают три разные задачи: открыть внешнюю обработку или отчёт (файл .epf/.erf), выполнить код из внешнего файла с расширением .bsl, либо запустить из кода 1С внешнюю программу — bat-файл, скрипт PowerShell, Python или утилиту командной строки. Способ выбирается в зависимости от того, что именно нужно выполнить и где работает код: на клиенте или на сервере.

В тонком и толстом клиенте доступны разные инструменты. На клиенте можно использовать объект WScript.Shell и команду ЗапуститьПриложение, на сервере — только серверные механизмы, причём интерактивный запуск приложений там ограничен. В веб-клиенте запуск внешних программ на компьютере пользователя по соображениям безопасности практически недоступен.

Ниже разобраны рабочие варианты с примерами кода, условиями применения и типичными ошибками. Все примеры приведены для управляемых форм и актуальных версий платформы 1С:Предприятие 8.3.

Определите, какой именно скрипт нужно запустить

Прежде чем писать код, уточните тип задачи. От этого зависит и инструмент, и место выполнения. Ошибка на этом шаге — самая частая причина того, что «скрипт не запускается»: например, попытка выполнить .bsl-файл как обработку или запустить bat-файл на сервере, где нет нужных прав.

Маршрут решения

Как выбрать способ запуска

Нужно открыть файл .epf или .erf (внешняя обработка или отчёт)Используйте Файл → Открыть или программно ВнешниеОбработки.Создать(ПутьКФайлу)
Нужно выполнить код из текстового файла .bslЗагрузите текст и выполните через Выполнить(ТекстКода) — только на сервере и с осторожностью
Нужно запустить bat, cmd, PowerShell или Python-скриптИспользуйте WScript.Shell.Run или ЗапуститьПриложение с указанием рабочего каталога
Код должен работать на сервере без участия пользователяИспользуйте регламентное задание и серверный вызов внешней программы, проверив права учётной записи агента сервера

Отдельно учитывайте контекст исполнения. Директивы &НаКлиенте и &НаСервере определяют, какие объекты доступны: 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
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. 1
    Оформите логику в общем серверном модуле или внешней обработке
  2. 2
    Создайте регламентное задание и задайте расписание
  3. 3
    Укажите пользователя, от имени которого выполняется задание
  4. 4
    Добавьте запись в лог или журнал регистрации для контроля
  5. 5
    Запустите задание вручную и проверьте результат и код возврата

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

Типичные ошибки
01
Запуск bat-файла на сервере с путём C:\ — сервер не видит локальные диски клиента; используйте сетевые пути или выполняйте код на клиенте
02
Отсутствие ожидания завершения — 1С продолжает работу, а скрипт ещё выполняется; включайте параметр ожидания
03
Пробелы в путях без кавычек — команда разваливается на части; всегда оборачивайте пути в кавычки
04
Выполнение кода через Выполнить() в безопасном режиме — оператор недоступен; отключайте безопасный режим осознанно
05
Игнорирование кода возврата — ошибки скрипта остаются незамеченными; всегда проверяйте результат и ведите лог

Ещё одна частая ситуация — блокировка антивирусом. Запуск 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-пути (\\сервер\ресурс) и проверьте доступ этой учётной записи ко всем каталогам скрипта.