Разработка и Конфигурация · 11 мин
Как в 1С выполнить команду: способы и примеры
Как выполнить команду в 1С: метод Выполнить(), консоль кода, внешние обработки, командная строка запуска. Примеры кода, риски и проверка результата.
Фраза «выполнить команду в 1С» может означать несколько разных задач: запустить произвольный фрагмент кода на встроенном языке, вызвать команду формы или объекта, выполнить обработку из файла либо запустить саму платформу с параметрами из командной строки операционной системы. У каждого сценария свой инструмент, свои ограничения и свои риски.
Чаще всего под «выполнением команды» понимают вызов метода Выполнить() или работу в консоли кода — эти способы позволяют исполнить произвольный алгоритм без изменения конфигурации. Это удобно для разового исправления данных, тестирования функции или диагностики, но требует аккуратности: код выполняется с правами текущего пользователя и может изменить реальные данные базы.
Ниже разобраны основные способы выполнения команд и кода в 1С, условия их применения, типичные ошибки и способы проверить результат до того, как изменения станут необратимыми.
Что именно нужно выполнить: определяем задачу
Прежде чем выбирать инструмент, уточните тип задачи. Выполнение произвольного кода на встроенном языке — это одно, вызов команды, уже существующей в конфигурации, — другое, а запуск пакетной операции через командную строку Windows — третье. Смешение этих сценариев — частая причина того, что «команда не срабатывает».
Также важен контекст исполнения: код может выполняться на клиенте или на сервере, в файловой или клиент-серверной базе, под пользователем с полными или ограниченными правами. Метод, который отлично работает в толстом клиенте на локальной базе, может быть недоступен в тонком или веб-клиенте.
Как выбрать действие
Метод Выполнить(): запуск кода из строки
Глобальный метод Выполнить(СтрокаКода) исполняет переданный текст как фрагмент программы на встроенном языке. Это основной способ динамического выполнения команд внутри самой 1С. Пример:
ТекстКода = "Сообщить(""Команда выполнена"");";
Выполнить(ТекстКода);
Если нужно получить результат вычисления, а не просто выполнить действие, используйте ОценитьВыражение("2 + 2") — аналог функции Вычислить(), возвращающий значение выражения. Метод Выполнить() ничего не возвращает, он предназначен именно для действий.
Важное ограничение: в тонком и веб-клиенте метод Выполнить() недоступен из соображений безопасности — он работает в толстом клиенте и на сервере. Если код должен исполняться в клиент-серверном режиме, вызов размещают в серверной процедуре общего модуля с признаком «Сервер».
Консоль кода: выполнение команд без конфигуратора
Консоль кода — это внешняя обработка (.epf), которая открывается в режиме «Предприятие» и позволяет ввести произвольный текст программы и выполнить его кнопкой. Это самый практичный способ разовой команды: не нужно менять конфигурацию, достаточно прав на запуск внешних обработок.
Порядок действий типовой: скачайте или используйте имеющуюся в организации консоль кода, откройте её через меню «Файл → Открыть», введите код, выберите режим исполнения (на клиенте или на сервере, если обработка это поддерживает) и нажмите «Выполнить». Результат обычно выводится в окно сообщений или в специальное поле.
- 1Откройте базу в режиме 1С:Предприятие под пользователем с достаточными правами
- 2Откройте консоль кода: Файл → Открыть → выберите файл обработки .epf
- 3Введите код, например: Сообщить(ТекущаяДатаСеанса());
- 4Нажмите «Выполнить» и проверьте вывод в окне сообщений
- 5Для кода, меняющего данные, сначала оберните изменения в транзакцию или выполните на копии базы
Пример полезной разовой команды — массовое изменение реквизита:
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ ПометкаУдаления");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Ссылка));
КонецЦикла;
Такой код только читает данные и безопасен. Любую выборку сначала прогоняйте в режиме «только просмотр» через Сообщить(), и лишь убедившись, что список объектов верный, добавляйте запись изменений.
Выполнение команды формы и объекта
Если под «командой» понимается команда интерфейса — кнопка на форме, стандартная команда «Провести», «Записать» — её можно вызвать программно. Для формы доступен вызов обработчика команды напрямую: если команда называется КомандаПечать и её обработчик — процедура КомандаПечать(Команда), достаточно вызвать эту процедуру из другого кода формы.
Для объектов (документов, справочников) стандартные команды заменяются методами: вместо команды «Провести» вызывается Объект.Записать(РежимЗаписиДокумента.Проведение), вместо «Записать» — Объект.Записать(). Это надёжнее, чем эмуляция нажатий кнопок, и работает без открытия формы.
В управляемых формах есть также метод формы ЭтаФорма.КоманднаяПанель и возможность программно вызвать команду через ВыполнитьКоманду() в некоторых контекстах расширений, но базовый и переносимый путь — прямой вызов процедур и методов объекта.
Запуск команды через командную строку Windows
Отдельный класс задач — выполнить действие в 1С извне: из планировщика задач, bat-файла или скрипта администратора. Для этого исполняемый файл платформы запускается с параметрами. Типовые варианты:
1cv8.exe ENTERPRISE /F"ПутьКБазе" /N"Пользователь" /P"Пароль" /Execute"ПутьКОбработке.epf"
1cv8.exe DESIGNER /F"ПутьКБазе" /N"Администратор" /UpdateDBCfg
Первый пример открывает базу в режиме «Предприятие» и запускает указанную внешнюю обработку. Второй запускает конфигуратор и обновляет конфигурацию базы данных. Для клиент-серверных баз вместо /F используется /S"Сервер\ИмяБазы".
При автоматизации через командную строку избегайте хранения паролей в открытом виде в скриптах, к которым имеют доступ посторонние. Также учитывайте, что запуск обработки через /Execute выполняется в интерактивном сеансе — для полностью фоновых задач в клиент-серверном режиме лучше подходят регламентные задания.
1cv8.exe ENTERPRISE /F"D:\Bases\Trade" /N"Оператор" /Execute"D:\Tools\Console.epf" /DisableStartupDialogsБезопасный режим и ограничения прав
Даже если синтаксис команды верен, выполнение может блокироваться безопасным режимом или правами. Внешние обработки по умолчанию открываются в безопасном режиме, где запрещены операции с файловой системой, COM-объектами и привилегированный режим. Признак проблемы — ошибка вида «Операция не разрешена в безопасном режиме».
Кроме того, метод Выполнить() исполняет код с правами текущего пользователя: попытка записать объект, на который нет прав, завершится ошибкой нарушения прав доступа. В серверном коде это можно обойти через УстановитьПривилегированныйРежим(Истина), но делать это следует осознанно — привилегированный режим отключает все проверки прав.
Проверка результата выполнения
После выполнения команды убедитесь, что она действительно отработала и дала ожидаемый эффект. Минимальный набор проверок: отсутствие ошибок в окне сообщений, ожидаемые изменения в данных, отсутствие «зависших» фоновых процессов при серверном выполнении.
Для массовых изменений полезно зафиксировать состояние «до» и «после»: например, количество обработанных объектов через запрос до запуска и после. Если код выполнялся в транзакции и завершился ошибкой, изменения откатываются автоматически — но только если вы использовали НачатьТранзакцию() / ЗафиксироватьТранзакцию() корректно.
Как проверить результат
Нет ошибок, выведены ожидаемые сообщения
Текст ошибки компиляции или нарушения прав — код не выполнился
Запросом видны именно те объекты, что планировалось изменить
Изменений нет или затронуты лишние объекты
Есть записи о сеансе и действиях без ошибок
Ошибки доступа или обрывы сеанса
Процесс завершился без ошибок, действие видно в базе
Процесс завис или закрылся сразу — проверьте параметры запуска
FAQ: частые вопросы о выполнении команд в 1С
Чем Выполнить() отличается от ОценитьВыражение()?
Выполнить() исполняет фрагмент кода (операторы, циклы, присваивания) и ничего не возвращает. ОценитьВыражение() вычисляет одно выражение и возвращает его значение — это аналог устаревшей функции Вычислить(). Если нужен результат — используйте ОценитьВыражение(), если действие — Выполнить().
Почему Выполнить() выдаёт ошибку в тонком клиенте?
Метод недоступен в тонком и веб-клиенте по соображениям безопасности — это ограничение платформы. Решение: перенести вызов в серверную процедуру общего модуля с признаком «Сервер» и вызывать её с клиента, либо выполнять код в толстом клиенте.
Как выполнить код на сервере из режима Предприятие?
Используйте консоль кода, поддерживающую серверное исполнение, либо создайте общий модуль с признаками «Сервер» и «Вызов сервера» и поместите туда процедуру, которую затем вызывайте из клиентского кода. В файловой базе разделение клиент/сервер формально сохраняется, но выполняется в одном процессе.
Можно ли отменить выполненную команду?
Автоматической отмены нет. Откат возможен только если изменения выполнялись в явной транзакции, которая ещё не зафиксирована, или путём восстановления из резервной копии. Поэтому код, меняющий данные, запускают сначала на копии базы, а в рабочей — после проверки выборки объектов.
Как запустить обработку по расписанию без открытия 1С вручную?
В клиент-серверном режиме используйте регламентные задания — они выполняются на сервере автоматически. В файловом режиме регламентные задания требуют запущенного сеанса, поэтому на практике применяют планировщик Windows с запуском 1cv8.exe и параметром /Execute, указывающим на файл обработки.
Что делать, если внешняя обработка не выполняет код и молча закрывается?
Проверьте, не открыта ли она в безопасном режиме с запрещёнными операциями, посмотрите журнал регистрации на предмет ошибок и убедитесь, что у пользователя есть право «Интерактивное открытие внешних обработок». Также полезно запустить ту же обработку в толстом клиенте — там сообщения об ошибках обычно информативнее.
Что важно запомнить
Выбор способа зависит от задачи: консоль кода — для разового запуска, Выполнить() — для динамического кода в толстом клиенте и на сервере, командная строка — для внешней автоматизации. Перед выполнением кода, меняющего данные, делайте копию базы и проверяйте выборку объектов, а после — результат по журналу и данным.