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