Добавляем свою кнопку в командную панель формы в Конфигураторе

· 9 мин

Содержание

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

Ниже — порядок работы для платформы 8.3 с интерфейсом «Такси» и управляемыми формами. Пример универсальный: подойдёт для формы документа, справочника, обработки или отчёта.

Что нужно сделать до открытия формы

Сначала определите, где будет жить кнопка. От этого зависит, какую форму вы открываете и можно ли вообще её менять.

Проверьте три вещи:

  • 🔑 Вы запускаете Конфигуратор с правами администратора базы. Без ролей, дающих доступ к конфигурированию, пункт меню Конфигурация будет недоступен.
  • 🧩 Конфигурация типовая и стоит на поддержке. Прямая правка формы заблокирована, пока вы не включите возможность изменения.
  • 💾 Вы работаете в копии базы, а не в рабочей.

Не правьте типовую форму в рабочей базе без резервной копии. Выгрузите информационную базу в .dt (меню Администрирование → Выгрузить информационную базу) и работайте в копии.

Если конфигурация на поддержке, откройте Конфигурация → Поддержка → Настройка поддержки и разрешите изменение нужного объекта. После этого форма перестанет быть «замком» и встанет на «снятие с поддержки» с последующим слиянием при обновлениях. Для типовых решений такой путь неудобен: каждое обновление придётся объединять вручную. Альтернатива — расширение конфигурации (Конфигурация → Расширения конфигурации, доступно с платформы 8.3.6). В расширении вы перехватываете форму, добавляете команду и кнопку, а типовая конфигурация остаётся нетронутой.

Где в дереве искать форму

В окне конфигурации разверните Конфигурация и найдите объект: Документы, Справочники, Обработки, Отчёты. У объекта откройте ветку Формы, затем двойным щелчком — нужную форму. Откроется редактор: слева — дерево и закладки, справа — визуальный макет формы.

Для списка документа нужна ФормаСписка, для карточки — ФормаДокумента или ФормаЭлемента. Это разные формы, и кнопка, добавленная в одну, во второй не появится.

Как создать команду формы

Команда — это действие, за которым стоит процедура. Кнопка лишь отображает команду на форме и запускает её.

  1. В редакторе формы перейдите на закладку Команды (справа вверху, рядом с Элементы и Реквизиты).
  2. Нажмите зелёный плюс Добавить.
  3. В палитре свойств, которая откроется справа, заполните поля команды.

Важные свойства команды:

СвойствоЧто задаётПример
ИмяИдентификатор для кода, без пробеловПроверитьСумму
ЗаголовокПодпись для пользователяПроверить сумму
ДействиеИмя процедуры-обработчикаПроверитьСумму
ПодсказкаТекст при наведении мышиСверить итог с табличной частью
КартинкаЗначок на кнопкеиз общей библиотеки картинок
ОтображениеКак показывать кнопкутолько картинка, только текст, картинка с текстом

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

Заголовок пишите короткими глаголами: «Заполнить», «Проверить», «Выгрузить». Длинная подпись разъедет панель на узком экране.

Размещаем кнопку на командной панели

Команда сама по себе на форме не видна. Нужно создать элемент-кнопку, привязанный к команде.

Способ 1. Перетаскивание

  1. Перейдите на закладку Элементы.
  2. В дереве найдите элемент Командная панель. У формы объекта она есть по умолчанию: платформа создаёт её автоматически и кладёт туда стандартные кнопки (Записать, Провести, Печать и т.д.).
  3. Перетащите команду с закладки Команды мышью на нужную позицию внутри этого элемента.

Платформа создаст кнопку формы с именем, совпадающим с именем команды, и свяжет её через свойство ИмяКоманды.

Способ 2. Через контекстное меню

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

Если нужна отдельная группа кнопок — добавьте Группа → Командная панель и перетащите кнопки внутрь. Получится самостоятельный блок, например над табличной частью, а не в общей шапке формы.

Куда именно встанет кнопка

На порядок влияют две вещи: позиция в дереве элементов и свойство Расположение в командной панели. Оно задаёт, где кнопка появится на форме:

  • в самой командной панели — виден всегда;
  • в подменю Ещё — прячется в «Все действия», если место заканчивается;
  • автоматически — платформа решает по ширине.

Для редко нужных действий ставьте второй вариант: панель не перегружается. Для основной операции — первый.

Свойства кнопки, которые стоит проверить

Кнопка формы имеет собственные свойства, отдельные от команды. Откройте палитру свойств, выделив кнопку в дереве Элементы.

  • 🏷 Заголовок — если оставить пустым, берётся заголовок команды.
  • 🖼 Отображение — картинка, текст или оба.
  • 👁 Видимость — виден ли элемент изначально.
  • ✋ Доступность — можно ли нажать.
  • 🔘 Вид — обычная кнопка, кнопка командной панели или гиперссылка.

Для командной панели выбирайте вид «кнопка командной панели»: тогда она выглядит как стандартная кнопка панели, а не как отдельная прямоугольная кнопка внутри формы.

Один и тот же Заголовок у двух кнопок на одной форме не запрещён, но пользователь запутается. Различайте подписи.

Пишем обработчик команды

Откройте модуль формы (закладка Модуль внизу редактора или двойной щелчок по команде). Платформа уже создала заготовку, если вы воспользовались лупой в поле Действие:

&НаКлиенте
Процедура ПроверитьСумму(Команда)
	// сюда помещается код
КонецПроцедуры

Минимальный рабочий пример, который показывает пользователю сообщение:

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

Первым параметром стоит запятая вместо обработчика оповещения: мы его не используем. Если нужен не диалог, а строка в окне сообщений, используйте Сообщить("Текст").

Работа с данными: клиент и сервер

Клиентская процедура не читает базу напрямую. Для расчётов вызывайте серверную процедуру.

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

&НаКлиенте
Процедура ПересчитатьИтог(Команда)
	ПересчитатьИтогНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПересчитатьИтогНаСервере()
	Объект.СуммаДокумента = Объект.Товары.Итог("Сумма");
КонецПроцедуры

Объект формы доступен на сервере, поэтому изменения попадут в форму сразу. Записывать документ в базу не нужно, пока пользователь сам не нажмёт Записать.

Если вам нужно вызвать процедуру из общего модуля, добавьте её в общий модуль с флагом Клиент или Сервер и обращайтесь по имени. Не вызывайте серверный общий модуль из клиентской процедуры напрямую: платформа выдаст ошибку компиляции.

Если процедура ничего не делает на клиенте, но вы пометили её &НаКлиенте, а внутри обращаетесь к базе, при запуске получите сообщение вроде «Поле объекта не обнаружено» или ошибку контекста. Переносите такую работу в &НаСервере.

Открыть другую форму по кнопке

Часто кнопка нужна, чтобы открыть обработку или отчёт. Для этого используйте ОткрытьФорму:

&НаКлиенте
Процедура ОткрытьОбработку(Команда)
	ОткрытьФорму("Обработка.МояОбработка.Форма");
КонецПроцедуры

Полное имя формы смотрите в дереве конфигурации: оно собирается из вида объекта, его имени и слова Форма (или имени конкретной формы). Опечатка в имени приведёт к ошибке при нажатии, а не при сборке: компилятор строку не проверяет.

Как скрыть или отключить кнопку

Иногда кнопка нужна не всем или не всегда. Управлять ей можно программно через коллекцию Элементы.

Скрыть кнопку:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Элементы.ПересчитатьИтог.Видимость = РольДоступна("МояРоль");
КонецПроцедуры

Здесь ПересчитатьИтог — имя именно кнопки в дереве элементов, а не команды. Если вы при перетаскивании переименовали кнопку, обращаться нужно по новому имени.

Сделать недоступной: Элементы.ПересчитатьИтог.Доступность = Ложь;. Кнопка остаётся на панели, но серая и не нажимается.

Где вызывать код:

  • 📌 ПриСозданииНаСервере — для условий, не меняющихся за сеанс (роль пользователя, настройки).
  • 📌 ПриОткрытии и события реквизитов — когда зависит от данных документа (например, нельзя нажимать, пока документ не записан).
  • 📌 ПриЧтенииНаСервере — если состояние зависит от того, какой объект открыт.

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

Скрытие без кода

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

Если нужно разрешить команду только одной группе пользователей, надёжнее всего ограничить сам объект правами, а видимость кнопки сделать вторым уровнем — чтобы человек не видел недоступное.

Проверка и отладка кнопки

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

Что проверять:

  1. Кнопка видна на нужной форме и в нужном месте панели.
  2. Подпись читается целиком.
  3. Нажатие вызывает процедуру: при необходимости поставьте точку останова (F9) в первой строке обработчика.
  4. Условия видимости работают для обычного пользователя, а не только для администратора. Запустите отладку под нужным пользователем — в параметрах запуска отладки выберите его.

Если кнопки нет на форме, проверьте порядок:

СимптомВероятная причинаЧто сделать
Кнопки нет вообщеПравили не ту форму (список вместо документа)Откройте форму, которую видите в программе
Кнопка есть в Конфигураторе, в программе нетНе обновлена конфигурация базы или правка в расширении, которое не подключеноОбновите конфигурацию БД, проверьте расширение
Кнопка сераяГде-то выставлено Доступность = ЛожьНайдите присвоение в модуле формы
Нажатие ничего не делаетВ поле Действие пусто или имя процедуры не совпадаетПроверьте связку команды и процедуры
Ошибка при нажатииСерверная логика в клиентской процедуреВынесите вызов в &НаСервере

Если форма пользовательская, а не конфигурационная, изменить её состав можно прямо в режиме 1С:Предприятие через Ещё → Изменить форму. Но так вы только расставите существующие команды: новую команду с логикой без Конфигуратора не создать.

Сочетание клавиш и картинка для кнопки

Две мелочи делают кнопку заметно удобнее, и обе настраиваются на самой команде.

Свойство Сочетание клавиш позволяет вызвать действие без мыши. Выбирайте комбинации с Ctrl и Shift, которые не заняты стандартными действиями формы: например, Ctrl+Shift+P вместо привычных Ctrl+S или F9. Если сочетание уже закреплено за другой командой, платформа сообщит о конфликте при проверке конфигурации.

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

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

Можно ли добавить кнопку в командную панель без Конфигуратора?
Только выбрать из уже существующих команд формы через Ещё → Изменить форму в режиме 1С:Предприятие. Новую команду с собственным кодом создают в Конфигураторе.
Чем команда формы отличается от кнопки?
Команда — это действие и его обработчик. Кнопка — элемент формы, который показывает команду пользователю. Одну команду можно вывести несколькими кнопками в разных местах.
Как добавить кнопку в командную панель списка?
Откройте форму списка (ФормаСписка), создайте команду и перетащите на элемент Командная панель формы или на панель самой таблицы списка. Кнопка из формы документа в списке не появится.
Почему после правки кнопка пропала у других пользователей?
Они работают с базой, где конфигурация ещё не обновлена, либо у них открыт старый сеанс. Обновите конфигурацию БД, попросите перезапустить программу.
Как удалить созданную кнопку?
Удалите элемент в дереве Элементы, затем при желании — саму команду на закладке Команды и её процедуру в модуле. Если удалить только кнопку, команда останется в списке команд формы.
Нужно ли записывать документ после нажатия кнопки?
Нет, если вы просто меняете данные формы. Запись происходит отдельно, когда пользователь нажимает Записать или вы вызываете Записать() в коде явно.
Перед передачей изменений пользователям
Выполнено: 0 / 5