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

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

Как добавить команду в 1С: подробная инструкция для конфигуратора

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

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

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

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

Что такое команда в 1С и где она используется

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

Команды формы делятся на стандартные (Записать, Провести, Перечитать — их формирует платформа) и пользовательские, которые добавляет разработчик. Пользовательская команда появляется в списке команд формы, но чтобы пользователь её увидел, её нужно вывести в элементы формы — в командную панель, кнопку или контекстное меню.

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

Подготовка: где и с какими правами добавлять команду

Для прямого изменения конфигурации нужна роль с правом «Администрирование» и «Обновление конфигурации базы данных», а конфигурация должна быть снята с полной поддержки поставщика или открыта для изменений. Если конфигурация типовая и обновляется автоматически, прямое изменение приведёт к потере доработки при следующем обновлении.

Безопасная альтернатива — расширение конфигурации. В конфигураторе: «Конфигурация → Расширения конфигурации → Создать». В расширение заимствуют нужную форму и добавляют команду в неё — типовая конфигурация при этом не меняется, а обновления проходят штатно.

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

Добавление команды в форму через конфигуратор

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

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

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

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

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

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

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

&НаКлиенте

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

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

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

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

&НаСервере

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Остатки.Номенклатура КАК Номенклатура,

| Остатки.КоличествоОстаток КАК Количество

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки";

Объект.Товары.Загрузить(Запрос.Выполнить().Выгрузить());

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

Обратите внимание: в серверной процедуре данные объекта доступны через «Объект», а не через «ЭтаФорма.Объект» напрямую в некоторых контекстах — зависит от типа формы. После загрузки табличной части установите «Модифицированность = Истина», если платформа не сделала это автоматически.

bsl
&НаКлиенте
Процедура МояКоманда(Команда)
    ПоказатьПредупреждение(, "Команда выполнена");
КонецПроцедуры

Вывод команды на форму: кнопка, меню, панель

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

Альтернативный путь: добавьте в дерево элементов новую кнопку (правый клик → «Добавить → Кнопка»), а затем в свойствах кнопки укажите «ИмяКоманды» — выберите созданную команду из списка. Это удобно, когда нужна кнопка в конкретном месте формы, например рядом с табличной частью.

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

Программное создание команды без изменения конфигурации

В управляемой форме команду можно создать кодом — в обработчике «ПриСозданииНаСервере». Это полезно в расширениях и внешних обработках, когда заранее неизвестно, сколько команд понадобится (например, кнопка для каждого вида операции).

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

НоваяКоманда = Команды.Добавить("ПоказатьОстаток");

НоваяКоманда.Действие = "ПоказатьОстаток";

НоваяКоманда.Заголовок = "Показать остаток";

Кнопка = Элементы.Добавить("КнопкаПоказатьОстаток", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);

Кнопка.ИмяКоманды = "ПоказатьОстаток";

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

Ограничение подхода: действие команды задаётся строкой с именем процедуры, поэтому опечатка проявится только в момент нажатия. Проверяйте такие кнопки вручную после каждого изменения модуля.

Команды объекта и общие команды

Команды объекта метаданных добавляются не в форму, а в сам объект: в конфигураторе правый клик по документу → «Команды» (или вкладка «Команды» в палитре свойств объекта). Такая команда автоматически появляется в командной панели форм списка и объекта, если у неё заполнен обработчик в модуле менеджера объекта.

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

Общие команды (ветка «Общие → Общие команды») размещаются в командном интерфейсе подсистем. Чтобы пользователь увидел общую команду, включите её в состав функциональных опций или подсистем и проверьте видимость в панели разделов. Это стандартный способ вывести, например, кнопку открытия внешней обработки в интерфейс прикладного решения.

Сравнение способов добавления команды

Команда формы в конфигураторе

Подходит для точечной кнопки на конкретной форме. Требует изменения конфигурации или расширения.

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

Когда действие нужно и в списке, и в карточке объекта. Обработчик в модуле менеджера.

Программное создание

Для динамических кнопок в расширениях и обработках. Не видна в редакторе формы, сложнее отлаживать.

Общая команда

Для действий уровня всего прикладного решения, выводится в панель разделов через подсистемы.

Проверка результата и типичные ошибки

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

Если кнопка не появилась, проверьте по порядку: перенесена ли команда в дерево элементов; не скрыта ли родительская группа; нет ли функциональной опции, отключающей видимость; обновлена ли конфигурация базы данных; работаете ли вы в той базе, которую изменяли (частая ситуация при нескольких контурах).

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

Типичные ошибки
01
Команда создана, но не перенесена в дерево элементов — кнопка не отображается на форме
02
Прямое изменение типовой конфигурации вместо расширения — доработка теряется при обновлении
03
Обработчик объявлен &НаКлиенте, а внутри обращение к базе данных — ошибка компиляции или выполнения
04
Опечатка в имени процедуры при программном назначении действия — ошибка только при нажатии кнопки
05
Не установлено «Изменяет сохраняемые данные» — форма не фиксирует модифицированность, данные теряются при закрытии
Контрольные точки

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

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

Видна в ожидаемом месте, заголовок соответствует заданному

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

Кнопки нет — команда не в дереве элементов или скрыта группа

Нажатие кнопки
Норма

Обработчик выполняется, данные формы меняются

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

Ошибка о неопределённой процедуре — имя или директива обработчика неверны

Сохранение
Норма

После записи документа изменения остаются в базе

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

Данные пропадают — обработчик менял только представление, а не объект

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

Изменения сохраняются после штатного обновления

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

Доработка исчезла — изменения вносились напрямую, а не через расширение

Ограничения и безопасная работа

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

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

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

Итог

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

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

Частые вопросы

Почему команда есть в списке команд, но кнопки на форме нет?

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

Можно ли добавить команду, не снимая конфигурацию с поддержки?

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

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

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

Обработчик выдаёт ошибку «процедура не определена», хотя она есть в модуле. Что не так?

Проверьте три вещи: точное совпадение имени процедуры с именем в свойстве «Действие», наличие параметра «Команда» в объявлении процедуры и директиву компиляции — клиентская команда не вызовет процедуру, объявленную только &НаСервереБезКонтекста без клиентской обёртки.

Как добавить команду в командную панель табличной части?

В дереве элементов найдите таблицу, раскройте её и добавьте кнопку в её командную панель (а не в командную панель формы). Тогда в обработчике будет доступен контекст текущей строки через «Элементы.ИмяТаблицы.ТекущиеДанные».

Нужно ли обновлять конфигурацию базы данных после добавления команды формы?

Изменение формы объекта требует обновления конфигурации базы данных (F7), так как форма хранится в метаданных. Без обновления пользователи увидят старую версию формы. В файловой базе обновление проходит быстро, в клиент-серверной планируйте его с учётом работающих пользователей.