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