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