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

Разработка и Конфигурация · 11 мин

Как в 1С выполнить команду: способы и примеры

Как выполнить команду в 1С: метод Выполнить(), консоль кода, внешние обработки, командная строка запуска. Примеры кода, риски и проверка результата.

Фраза «выполнить команду в 1С» может означать несколько разных задач: запустить произвольный фрагмент кода на встроенном языке, вызвать команду формы или объекта, выполнить обработку из файла либо запустить саму платформу с параметрами из командной строки операционной системы. У каждого сценария свой инструмент, свои ограничения и свои риски.

Чаще всего под «выполнением команды» понимают вызов метода Выполнить() или работу в консоли кода — эти способы позволяют исполнить произвольный алгоритм без изменения конфигурации. Это удобно для разового исправления данных, тестирования функции или диагностики, но требует аккуратности: код выполняется с правами текущего пользователя и может изменить реальные данные базы.

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

Что именно нужно выполнить: определяем задачу

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

Также важен контекст исполнения: код может выполняться на клиенте или на сервере, в файловой или клиент-серверной базе, под пользователем с полными или ограниченными правами. Метод, который отлично работает в толстом клиенте на локальной базе, может быть недоступен в тонком или веб-клиенте.

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

Как выбрать действие

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

Метод Выполнить(): запуск кода из строки

Глобальный метод Выполнить(СтрокаКода) исполняет переданный текст как фрагмент программы на встроенном языке. Это основной способ динамического выполнения команд внутри самой 1С. Пример:

ТекстКода = "Сообщить(""Команда выполнена"");";

Выполнить(ТекстКода);

Если нужно получить результат вычисления, а не просто выполнить действие, используйте ОценитьВыражение("2 + 2") — аналог функции Вычислить(), возвращающий значение выражения. Метод Выполнить() ничего не возвращает, он предназначен именно для действий.

Важное ограничение: в тонком и веб-клиенте метод Выполнить() недоступен из соображений безопасности — он работает в толстом клиенте и на сервере. Если код должен исполняться в клиент-серверном режиме, вызов размещают в серверной процедуре общего модуля с признаком «Сервер».

Консоль кода: выполнение команд без конфигуратора

Консоль кода — это внешняя обработка (.epf), которая открывается в режиме «Предприятие» и позволяет ввести произвольный текст программы и выполнить его кнопкой. Это самый практичный способ разовой команды: не нужно менять конфигурацию, достаточно прав на запуск внешних обработок.

Порядок действий типовой: скачайте или используйте имеющуюся в организации консоль кода, откройте её через меню «Файл → Открыть», введите код, выберите режим исполнения (на клиенте или на сервере, если обработка это поддерживает) и нажмите «Выполнить». Результат обычно выводится в окно сообщений или в специальное поле.

Порядок действий
  1. 1
    Откройте базу в режиме 1С:Предприятие под пользователем с достаточными правами
  2. 2
    Откройте консоль кода: Файл → Открыть → выберите файл обработки .epf
  3. 3
    Введите код, например: Сообщить(ТекущаяДатаСеанса());
  4. 4
    Нажмите «Выполнить» и проверьте вывод в окне сообщений
  5. 5
    Для кода, меняющего данные, сначала оберните изменения в транзакцию или выполните на копии базы

Пример полезной разовой команды — массовое изменение реквизита:

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ ПометкаУдаления");

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(Строка(Выборка.Ссылка));

КонецЦикла;

Такой код только читает данные и безопасен. Любую выборку сначала прогоняйте в режиме «только просмотр» через Сообщить(), и лишь убедившись, что список объектов верный, добавляйте запись изменений.

Выполнение команды формы и объекта

Если под «командой» понимается команда интерфейса — кнопка на форме, стандартная команда «Провести», «Записать» — её можно вызвать программно. Для формы доступен вызов обработчика команды напрямую: если команда называется КомандаПечать и её обработчик — процедура КомандаПечать(Команда), достаточно вызвать эту процедуру из другого кода формы.

Для объектов (документов, справочников) стандартные команды заменяются методами: вместо команды «Провести» вызывается Объект.Записать(РежимЗаписиДокумента.Проведение), вместо «Записать» — Объект.Записать(). Это надёжнее, чем эмуляция нажатий кнопок, и работает без открытия формы.

В управляемых формах есть также метод формы ЭтаФорма.КоманднаяПанель и возможность программно вызвать команду через ВыполнитьКоманду() в некоторых контекстах расширений, но базовый и переносимый путь — прямой вызов процедур и методов объекта.

Запуск команды через командную строку Windows

Отдельный класс задач — выполнить действие в 1С извне: из планировщика задач, bat-файла или скрипта администратора. Для этого исполняемый файл платформы запускается с параметрами. Типовые варианты:

1cv8.exe ENTERPRISE /F"ПутьКБазе" /N"Пользователь" /P"Пароль" /Execute"ПутьКОбработке.epf"

1cv8.exe DESIGNER /F"ПутьКБазе" /N"Администратор" /UpdateDBCfg

Первый пример открывает базу в режиме «Предприятие» и запускает указанную внешнюю обработку. Второй запускает конфигуратор и обновляет конфигурацию базы данных. Для клиент-серверных баз вместо /F используется /S"Сервер\ИмяБазы".

При автоматизации через командную строку избегайте хранения паролей в открытом виде в скриптах, к которым имеют доступ посторонние. Также учитывайте, что запуск обработки через /Execute выполняется в интерактивном сеансе — для полностью фоновых задач в клиент-серверном режиме лучше подходят регламентные задания.

bash
1cv8.exe ENTERPRISE /F"D:\Bases\Trade" /N"Оператор" /Execute"D:\Tools\Console.epf" /DisableStartupDialogs

Безопасный режим и ограничения прав

Даже если синтаксис команды верен, выполнение может блокироваться безопасным режимом или правами. Внешние обработки по умолчанию открываются в безопасном режиме, где запрещены операции с файловой системой, COM-объектами и привилегированный режим. Признак проблемы — ошибка вида «Операция не разрешена в безопасном режиме».

Кроме того, метод Выполнить() исполняет код с правами текущего пользователя: попытка записать объект, на который нет прав, завершится ошибкой нарушения прав доступа. В серверном коде это можно обойти через УстановитьПривилегированныйРежим(Истина), но делать это следует осознанно — привилегированный режим отключает все проверки прав.

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

Проверка результата выполнения

После выполнения команды убедитесь, что она действительно отработала и дала ожидаемый эффект. Минимальный набор проверок: отсутствие ошибок в окне сообщений, ожидаемые изменения в данных, отсутствие «зависших» фоновых процессов при серверном выполнении.

Для массовых изменений полезно зафиксировать состояние «до» и «после»: например, количество обработанных объектов через запрос до запуска и после. Если код выполнялся в транзакции и завершился ошибкой, изменения откатываются автоматически — но только если вы использовали НачатьТранзакцию() / ЗафиксироватьТранзакцию() корректно.

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

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

Окно сообщений после выполнения
Норма

Нет ошибок, выведены ожидаемые сообщения

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

Текст ошибки компиляции или нарушения прав — код не выполнился

Данные после команды записи
Норма

Запросом видны именно те объекты, что планировалось изменить

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

Изменений нет или затронуты лишние объекты

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

Есть записи о сеансе и действиях без ошибок

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

Ошибки доступа или обрывы сеанса

Код возврата при запуске из командной строки
Норма

Процесс завершился без ошибок, действие видно в базе

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

Процесс завис или закрылся сразу — проверьте параметры запуска

FAQ: частые вопросы о выполнении команд в 1С

Чем Выполнить() отличается от ОценитьВыражение()?

Выполнить() исполняет фрагмент кода (операторы, циклы, присваивания) и ничего не возвращает. ОценитьВыражение() вычисляет одно выражение и возвращает его значение — это аналог устаревшей функции Вычислить(). Если нужен результат — используйте ОценитьВыражение(), если действие — Выполнить().

Почему Выполнить() выдаёт ошибку в тонком клиенте?

Метод недоступен в тонком и веб-клиенте по соображениям безопасности — это ограничение платформы. Решение: перенести вызов в серверную процедуру общего модуля с признаком «Сервер» и вызывать её с клиента, либо выполнять код в толстом клиенте.

Как выполнить код на сервере из режима Предприятие?

Используйте консоль кода, поддерживающую серверное исполнение, либо создайте общий модуль с признаками «Сервер» и «Вызов сервера» и поместите туда процедуру, которую затем вызывайте из клиентского кода. В файловой базе разделение клиент/сервер формально сохраняется, но выполняется в одном процессе.

Можно ли отменить выполненную команду?

Автоматической отмены нет. Откат возможен только если изменения выполнялись в явной транзакции, которая ещё не зафиксирована, или путём восстановления из резервной копии. Поэтому код, меняющий данные, запускают сначала на копии базы, а в рабочей — после проверки выборки объектов.

Как запустить обработку по расписанию без открытия 1С вручную?

В клиент-серверном режиме используйте регламентные задания — они выполняются на сервере автоматически. В файловом режиме регламентные задания требуют запущенного сеанса, поэтому на практике применяют планировщик Windows с запуском 1cv8.exe и параметром /Execute, указывающим на файл обработки.

Что делать, если внешняя обработка не выполняет код и молча закрывается?

Проверьте, не открыта ли она в безопасном режиме с запрещёнными операциями, посмотрите журнал регистрации на предмет ошибок и убедитесь, что у пользователя есть право «Интерактивное открытие внешних обработок». Также полезно запустить ту же обработку в толстом клиенте — там сообщения об ошибках обычно информативнее.

Итог

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

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