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

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

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

Как добавить команду формы в 1С через конфигуратор: создание команды, обработчик, вывод на форму, команды глобального командного интерфейса и типичные ошибки.

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

Работа выполняется в конфигураторе и не требует изменения типовых модулей, если команда добавляется в расширение или в собственную форму. Понадобятся базовые навыки: умение открыть форму объекта в дереве конфигурации и написать простую процедуру на языке 1С. Весь цикл — от создания команды до проверки кнопки в пользовательском режиме — занимает несколько минут.

Ниже разобран полный сценарий: создание команды в редакторе формы, написание обработчика, размещение кнопки в командной панели, работа с глобальными командами, параметризация и проверка результата. Отдельно описаны типичные ошибки, из-за которых кнопка не появляется или не срабатывает.

Где создаются команды формы и какие виды существуют

В управляемом приложении 1С различает несколько видов команд. Команды формы создаются внутри конкретной формы и доступны только в ней. Команды объекта (например, команды документа или справочника) задаются на вкладке «Командный интерфейс» объекта и попадают в панель навигации или меню «Создать на основании». Глобальные команды определяются в общем модуле или в командном интерфейсе конфигурации и доступны из разделов приложения.

Выбор вида зависит от задачи. Если действие относится к одному экрану — например, кнопка «Заполнить по остаткам» в документе — достаточно команды формы. Если действие должно запускаться из списка документов и из карточки, лучше использовать команду объекта с параметром, в который платформа передаст ссылку на выбранный элемент.

Пошаговое создание команды формы в конфигураторе

Откройте конфигуратор, найдите нужный объект (документ, справочник, обработку) и двойным щелчком откройте его форму. Если формы нет, создайте её через кнопку с лупой у свойства «Основная форма» — конструктор предложит тип формы и набор реквизитов.

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

В палитре свойств команды заполните ключевые поля: «Заголовок» (текст на кнопке), «Картинка» (иконка из библиотеки картинок), «Отображение» (авто, картинка, текст или оба варианта), «Сочетание клавиш» (например, Ctrl+Shift+Z) и «Подсказка». Свойство «Действие» пока оставьте пустым — обработчик создаётся на следующем шаге.

Порядок действий
  1. 1
    Откройте форму объекта в конфигураторе
  2. 2
    Перейдите на вкладку «Команды» → «Команды формы» и нажмите «Добавить»
  3. 3
    Задайте имя, заголовок, картинку и при необходимости сочетание клавиш
  4. 4
    Создайте обработчик действия через кнопку с лупой у свойства «Действие»
  5. 5
    Перетащите команду из списка в дерево элементов формы — в командную панель или группу кнопок
  6. 6
    Обновите конфигурацию базы данных (F7) и проверьте кнопку в режиме предприятия

Написание обработчика команды

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

Типовой шаблон обработчика выглядит так:

&НаКлиенте

Процедура ЗаполнитьПоОстаткам(Команда)

ЗаполнитьПоОстаткамНаСервере();

Элементы.Товары.Обновить();

КонецПроцедуры

&НаСервере

Процедура ЗаполнитьПоОстаткамНаСервере()

Документ = РеквизитФормыВЗначение("Объект");

// логика заполнения табличной части

ЗначениеВРеквизитФормы(Документ, "Объект");

КонецПроцедуры

Обратите внимание на директивы компиляции: &НаКлиенте и &НаСервере определяют контекст выполнения. В серверной процедуре недоступны элементы формы и диалоги, в клиентской — прямые запросы к базе. Нарушение этого правила — самая частая причина ошибок «Процедура или функция с указанным именем не определена» при вызове.

Вывод кнопки на форму и настройка видимости

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

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

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

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

Кнопка на форме
Норма

Кнопка видна в командной панели и нажимается

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

Кнопки нет — команда не перетащена в дерево элементов

Срабатывание обработчика
Норма

Код выполняется, результат виден на форме

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

Ничего не происходит или ошибка — проверьте директивы и имена процедур

Обновление конфигурации
Норма

F7 выполнено без ошибок, изменения видны в режиме предприятия

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

Конфигурация базы данных не обновлена — кнопка отсутствует у пользователей

Команды с параметрами и глобальные команды

Когда действие должно работать с выбранным объектом — например, печатная форма, открывающаяся из списка документов, — используйте команду объекта или глобальную команду с параметром. У команды в палитре свойств установите «Тип параметра команды» (например, ДокументСсылка.РеализацияТоваровУслуг). Платформа сама передаст в обработчик ссылку на выделенный в списке элемент.

Обработчик такой команды размещается в общем модуле или в модуле менеджера объекта и получает параметр:

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Экспорт

// ПараметрКоманды — ссылка или массив ссылок на выбранные объекты

КонецПроцедуры

Свойство «Режим использования параметра» определяет, передаётся одна ссылка или массив при множественном выборе. Если команда должна принимать несколько выделенных строк списка, установите режим «Множественный» — иначе платформа передаст только текущую строку.

Сравнение вариантов

Команда формы

Подходит для действий внутри одного экрана. Ограничение: недоступна из других форм и списков.

Команда объекта

Подходит для действий над документом или элементом справочника из карточки и списка. Требует настройки параметра команды.

Глобальная команда

Подходит для действий уровня всей подсистемы (открыть обработку, отчёт). Не привязана к конкретным данным без параметра.

Типичные ошибки и ограничения

Наиболее частая проблема — кнопка создана, но не видна пользователю. Причины: команда не перетащена в дерево элементов; кнопка попала в подменю «Ещё» из-за нехватки места в командной панели; у пользователя нет прав на объект, к которому обращается обработчик. Проверяйте видимость под учётной записью с теми же правами, что у конечного пользователя.

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

Типичные ошибки
01
Команда создана, но не добавлена в дерево элементов — кнопка не отображается на форме
02
Код записи данных размещён в клиентском обработчике — ошибка компиляции или недоступность контекста
03
Использование модальных вызовов вместо асинхронных — код не работает в тонком и веб-клиенте
04
Имя команды изменено после написания обработчика — кнопка перестаёт вызывать процедуру
05
Забыто обновление конфигурации базы данных — пользователи не видят изменений

FAQ

Как добавить команду формы без изменения типовой конфигурации?

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

Почему кнопка команды попала в меню «Ещё»?

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

Как назначить команде горячие клавиши?

В палитре свойств команды заполните поле «Сочетание клавиш», выбрав комбинацию из списка (например, Ctrl+Shift+S). Убедитесь, что сочетание не пересекается со стандартными командами формы, иначе сработает только одна из них.

Можно ли выполнить команду на сервере без клиентской процедуры?

Да. При создании обработчика выберите вариант «На сервере» — платформа создаст процедуру с директивой &НаСервере, и нажатие кнопки сразу вызовет серверный код. Однако из такой процедуры нельзя открыть другую форму или показать диалог пользователю.

Как передать в команду несколько выделенных строк списка?

У команды объекта установите «Режим использования параметра» в значение «Множественный». В обработчик ОбработкаКоманды тогда придёт массив ссылок, который можно обойти в цикле и обработать каждый документ.

Команда работает у разработчика, но не у пользователя. Что проверить?

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

Итог

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

Команда формы создаётся на вкладке «Команды» редактора формы, связывается с обработчиком через свойство «Действие» и обязательно перетаскивается в дерево элементов. Для работы с данными используйте серверный контекст, для типовых конфигураций — расширения, а результат всегда проверяйте под правами конечного пользователя после обновления конфигурации базы данных.