Разработка и Конфигурация · 9 мин
Как писать команды в 1С: пошаговое руководство для разработчика
Как создавать команды в 1С: команды формы, глобальные и команды объектов. Обработчики, параметры, размещение в панелях и типичные ошибки разработчика.
Команды в 1С — это основной способ связать действие пользователя (кнопку, пункт меню, ссылку) с программным кодом. Любая обработка нажатия «Провести», «Печать» или «Заполнить» в управляемом приложении реализована именно через команду: у неё есть имя, обработчик на встроенном языке и место отображения в интерфейсе.
Разработчики чаще всего работают с тремя видами команд: командами формы, командами объекта конфигурации (справочника, документа, отчёта) и глобальными командами общих модулей. Каждый вид имеет свою область применения, свой контекст выполнения (клиент или сервер) и свои ограничения.
Ошибки при создании команд — типичная причина ситуаций «кнопка есть, но ничего не происходит» или «команда не видна пользователю». Ниже разобраны практические шаги: от создания команды в конфигураторе до проверки её работы и диагностики частых проблем.
Виды команд в 1С и когда какую использовать
Команда формы существует только внутри конкретной формы и доступна только её элементам. Подходит для локальных действий: пересчитать итоги, заполнить табличную часть, открыть связанную форму с отбором. Создаётся на закладке «Команды» редактора формы.
Команда объекта конфигурации (справочника, документа, отчёта, обработки) привязана к метаданным и автоматически появляется в панели действий форм списка и элемента. Именно так реализованы типовые «Создать», «Печать», «Провести». Обработчик такой команды пишется в модуле менеджера объекта или в модуле команды.
Глобальная команда (общая команда) доступна из любого места интерфейса — например, из раздела «Сервис» или командного интерфейса подсистемы. Её обработчик размещается в модуле команды и выполняется на клиенте, откуда при необходимости вызывает серверные процедуры.
Сравнение видов команд
Локальное действие внутри одной формы; не видна другим формам и не попадает в командный интерфейс подсистем.
Действие над объектом метаданных; автоматически появляется в формах списка и элемента, поддерживает параметризацию.
Глобальное действие без привязки к объекту; размещается в командном интерфейсе подсистем, обработчик в модуле команды.
Как создать команду формы пошагово
Откройте форму в конфигураторе и перейдите на закладку «Команды» → «Команды формы». Нажмите «Добавить», задайте имя команды латиницей без пробелов (например, ЗаполнитьПоОстаткам) — по имени будет автоматически сформирован обработчик. В свойствах команды укажите «Заголовок» — именно его увидит пользователь на кнопке.
В свойстве «Действие» нажмите кнопку выбора — конфигуратор создаст в модуле формы процедуру вида &НаКлиенте Процедура ЗаполнитьПоОстаткам(Команда). Директива определяет, где выполняется код: на клиенте доступны форма и диалоги, на сервере — запросы и объектные операции. Для тяжёлой логики создавайте пару процедур: клиентская вызывает серверную.
Чтобы команда появилась в интерфейсе, перетащите её из списка команд в дерево элементов формы — в командную панель, подменю или контекстное меню таблицы. Пока команда не размещена ни в одном элементе, пользователь её не увидит, даже если обработчик написан корректно.
- 1Откройте форму, закладка «Команды» → «Команды формы», нажмите «Добавить»
- 2Введите имя и заголовок команды, при необходимости задайте картинку и подсказку
- 3В свойстве «Действие» создайте обработчик и напишите код с директивами &НаКлиенте / &НаСервере
- 4Перетащите команду в командную панель или подменю в дереве элементов формы
- 5Обновите конфигурацию базы данных и проверьте кнопку в режиме 1С:Предприятие
Команды объекта конфигурации и их параметры
У объектов метаданных команды создаются на закладке «Команды» в окне редактирования объекта. Ключевое свойство — «Тип параметра команды»: если указать ссылку на документ, команда появится в формах этого документа, а в обработчик придёт параметр ПараметрКоманды — ссылка или массив ссылок на выделенные в списке объекты.
Свойство «Режим использования параметра» определяет, передаётся одна ссылка («Одиночный») или массив выделенных элементов («Множественный»). Для массовой печати или групповой обработки выбирайте множественный режим и обрабатывайте параметр как массив — иначе при выделении нескольких строк обработается только одна.
Обработчик команды объекта пишется в модуле команды (кнопка «Модуль команды») или в модуле менеджера объекта в процедуре ОбработкаКоманды. Типовые конфигурации используют менеджер, чтобы вся серверная логика оставалась в одном месте.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Для Каждого Ссылка Из ПараметрКоманды Цикл
Сообщить("Обрабатывается: " + Ссылка);
КонецЦикла;
КонецПроцедурыКонтекст выполнения: клиент и сервер
Главная ошибка начинающих — писать весь код в клиентском обработчике. На тонком и веб-клиенте недоступны прямые запросы к базе, объектные методы записи и многие прикладные типы. Правильный шаблон: клиентская процедура собирает данные формы и вызывает серверную, которая выполняет запросы и возвращает результат.
Используйте директивы &НаСервере для процедур с запросами и &НаКлиенте для работы с формой, оповещениями и диалогами. Директива &НаСервереБезКонтекста быстрее, но не имеет доступа к данным формы — данные нужно передавать параметрами явно.
Размещение команд в интерфейсе и права доступа
Команду можно вывести в командную панель формы, в подменю «Ещё», в контекстное меню таблицы или в командный интерфейс подсистемы (для общих команд). Свойство «Отображение» кнопки управляет видом: надпись, картинка или оба варианта. Для редких и опасных действий убирайте кнопку в «Ещё», чтобы не загромождать панель.
Видимость команды контролируется правами и функциональными опциями. Если у пользователя нет права на объект, с которым связана команда, платформа скроет её автоматически. Для команд формы видимость настраивается вручную — через свойство «Видимость» кнопки или программно в ПриСозданииНаСервере.
Типичные ошибки и их диагностика
Если кнопка не появилась в интерфейсе, проверьте три вещи: размещена ли команда в дереве элементов формы, не отключена ли видимость функциональной опцией, есть ли у пользователя права на связанный объект. Если кнопка есть, но не срабатывает — убедитесь, что в свойстве «ИмяКоманды» кнопки указана именно ваша команда, а не стандартная.
Ошибка «Процедура или функция с указанным именем не определена» означает рассинхрон имени команды и обработчика: переименовали команду, а процедура осталась со старым именем. Пересоздайте обработчик через свойство «Действие» или переименуйте процедуру вручную.
Как проверить работу команды
После изменений обновите конфигурацию базы данных (F7) и запустите отладку (F5). Поставьте точку останова в первой строке обработчика — если выполнение не останавливается, проблема в привязке кнопки к команде, а не в коде.
Проверьте команду под пользователем с ограниченными правами, а не только под администратором: многие проблемы видимости и доступа проявляются только в рабочей роли.
Как проверить результат
Видна в командной панели или подменю «Ещё», заголовок читаемый
Кнопки нет — проверить размещение, права и функциональные опции
Выполняется обработчик, данные изменяются корректно
Ничего не происходит — проверить ИмяКоманды кнопки и имя процедуры
Команда доступна по роли, лишние команды скрыты
Ошибка доступа или отсутствие кнопки — настроить права/видимость
Частые вопросы
Как передать параметр в команду формы?
У команд формы нет механизма параметров, как у команд объектов. Нужные данные берите из реквизитов формы внутри обработчика. Если команду вызывают программно, используйте ЭтаФорма.Команды.ИмяКоманды или вызывайте процедуру напрямую с нужными аргументами.
Почему команда не видна в подсистеме?
Для общих команд проверьте, включена ли команда в состав подсистемы на закладке «Подсистемы» в свойствах команды. Также убедитесь, что сама подсистема видна пользователю и не отключена функциональной опцией.
Чем команда отличается от стандартной команды?
Стандартные команды (Записать, Провести, Перечитать) поставляет платформа, их обработчики переопределяются через события формы, а не через свойство «Действие». Пользовательская команда полностью определяется разработчиком: имя, заголовок, обработчик и место размещения.
Можно ли назначить команде горячую клавишу?
Да, у кнопки формы есть свойство «СочетаниеКлавиш», где выбирается комбинация. Учитывайте, что часть сочетаний зарезервирована платформой и браузером (в веб-клиенте), поэтому после назначения проверяйте срабатывание во всех используемых клиентах.
Как выполнить команду программно из кода?
Для команды формы можно вызвать процедуру-обработчик напрямую, передав Команды.ИмяКоманды в качестве параметра. Для команд объектов обычно вызывают не саму команду, а серверную процедуру с её логикой, вынесенную в общий модуль.
Где писать код печатной формы — в команде или в менеджере?
Правильный подход типовых конфигураций: клиентский обработчик команды только вызывает процедуру модуля менеджера объекта, где формируется табличный документ на сервере. Так логика печати доступна и из других мест программы без дублирования кода.
Что важно запомнить
Команда в 1С = имя + обработчик с правильной директивой контекста + размещение в интерфейсе. Тяжёлый код выносите на сервер и в модули менеджеров, проверяйте видимость по правам и тестируйте под обычным пользователем.