Кнопка «Закрыть», «Записать» или «Создать» на форме: добавляем стандартную команду в 1С
Содержание
Стандартная команда в управляемой форме уже написана платформой: «Записать», «Закрыть», «Создать» в списке, «Обновить». Выводить её на командную панель не нужно программировать: достаточно создать в форме кнопку и привязать к ней нужную команду. Это делается в Конфигураторе, в редакторе формы, на вкладке «Команды». Пользователь без прав разработчика может сделать похожее прямо в режиме 1С:Предприятие через настройку формы.
Ниже: как найти список доступных стандартных команд, как поставить кнопку в нужное место панели, как настроить её вид, что делать, если команды нет в списке или кнопка не работает . Речь об управляемых формах платформы 8.3 с интерфейсом «Такси». Обычные формы (режим совместимости со старыми конфигурациями) устроены иначе и здесь не разбираются.
Какие стандартные команды есть у формы и у таблицы
Стандартные команды делятся на две группы, и от этого зависит, где вы их ищете.
- 📄 Команды формы. Относятся к форме целиком: «Закрыть», «Записать», «Записать и закрыть», «Провести», «Провести и закрыть», «Обновить». Какие именно доступны, зависит от типа формы. Например, «Провести» есть только у документов.
- 📋 Команды таблицы или списка. Относятся к конкретному реквизиту формы типа «Таблица» или «Динамический список»: «Добавить», «Скопировать», «Изменить», «Удалить», «Найти», перемещение строк вверх и вниз, сортировка, вывод списка, выбор всех строк.
Набор команд таблицы тоже не фиксирован. Для динамического списка справочника есть «Создать» и «Скопировать», а у табличной части документа вместо этого «Добавить». Кнопки сортировки появляются, только если у таблицы разрешена сортировка. Поэтому не удивляйтесь, если в списке нет команды, которую вы видели в соседней форме: она может зависеть от свойств таблицы.
Не перебирайте команды вслепую. Откройте форму в Конфигураторе и сразу смотрите на вкладку «Команды»: там перечислено ровно то, что платформа допускает для этой формы.
Где посмотреть имена
Каждая стандартная команда имеет служебное имя. Оно понадобится, если вы будете добавлять кнопки программно. Формат такой:
- для формы:
Form.StandardCommand.Close; - для таблицы:
Form.Item.Список.StandardCommand.Add, гдеСписок— имя таблицы на форме.
Часть Form.Item.Список — это путь к элементу формы, а не название реквизита из модуля. Если вы переименовали таблицу, команды с прежним путём перестанут находиться.
Добавляем кнопку через редактор формы в Конфигураторе
Это основной способ. Сначала откройте форму: в дереве конфигурации найдите объект (справочник, документ, обработку), раскройте ветку «Формы» и дважды щёлкните по нужной форме. Откроется редактор с несколькими вкладками: «Элементы», «Реквизиты», «Команды», «Параметры» и другие.
Шаг 1. Найдите командную панель
Перейдите на вкладку «Элементы». В её дереве может уже быть группа «Командная панель» (она обычно создаётся автоматически и называется ФормаКоманднаяПанель). Если панели нет, создайте группу: правой кнопкой по корню дерева, «Добавить», тип «Командная панель». У таблицы своя панель: она видна как вложенный элемент ТаблицаКоманднаяПанель внутри самой таблицы.
Обратите внимание на свойство «Автозаполнение». Если оно включено, платформа сама кладёт в панель стандартные кнопки по набору прав и типа формы. Тогда добавлять «Закрыть» и «Записать» вручную не нужно, и вы только запутаете форму дублями. Выключайте автозаполнение, когда хотите полностью управлять составом панели.
Шаг 2. Откройте вкладку «Команды»
Переключитесь на вкладку «Команды» и найдите раздел «Стандартные команды» (его может не быть, если у формы нет подходящих команд). Раскройте его: вы увидите команды формы и, отдельным узлом, команды каждой таблицы.
Шаг 3. Перетащите команду на панель
Есть два рабочих приёма.
- Выделите нужную команду в списке и перетащите её мышью на элемент «Командная панель» на вкладке «Элементы». Кнопка создаётся автоматически, команда уже подставлена.
- Выделите саму панель, нажмите «Добавить» и выберите тип «Кнопка формы». Затем в свойствах кнопки в поле «Имя команды» (в панели свойств обычно «Команда») выберите из выпадающего списка нужную стандартную команду.
Первый способ быстрее, второй позволяет сразу выбрать позицию: кнопка встаёт после выделенного элемента.
Шаг 4. Проверьте вид и положение
Сохраните форму и запустите конфигурацию в режиме отладки (или просто откройте базу в режиме 1С:Предприятие, если конфигурация для вас не файловая и разработка идёт на тестовой копии). Откройте форму и проверьте, что кнопка на месте и работает.
⚠️ Любые правки конфигурации делайте только в тестовой копии базы. Изменение формы в рабочей конфигурации на поддержке снимает объект с поддержки и усложняет обновление.
Свойства кнопки, которые определяют её вид
После добавления кнопки откройте её свойства (двойной щелчок). Ниже те, что чаще всего приходится менять.
| Свойство | На что влияет | Типичный выбор |
|---|---|---|
| Заголовок | Текст, который видит пользователь | Оставить стандартный или сократить до одного слова |
| Отображение | Картинка, текст или оба сразу | Для частых команд — картинка и текст |
| Картинка | Значок слева от текста | Подставляется автоматически для стандартных команд |
| Вид | Обычная кнопка, гиперссылка, кнопка командной панели | Для панели — «Кнопка командной панели» |
| Расположение в командной панели | Показывать на самой панели или убрать в подменю «Ещё» | Для редких команд — в подменю |
| Видимость, Доступность | Скрыть или заблокировать кнопку | Управляйте из кода, если зависит от данных |
| Подсказка | Текст при наведении | Короткая фраза, что именно делает кнопка |
Порядок кнопок
Кнопки идут в том порядке, в каком стоят в дереве элементов. Чтобы поменять местами, выделите кнопку и используйте стрелки вверх и вниз над деревом или перетащите её мышью. Группы внутри панели (например, «Печать», «Заполнить») переставляются так же.
Не выводите на панель всё подряд. На узком экране лишние кнопки уходят в «Ещё», и главная команда может оказаться спрятанной вместе с остальными.
Что делать, если нужной команды нет в списке
Это самая частая причина обращений. Разберите по порядку.
- Команда относится к другому элементу. Команды таблицы показываются в списке только для таблиц, которые есть на форме. Если таблицу удалили или переименовали, её команды пропали вместе с ней.
- Не включено свойство, которое порождает команду. Например, команды перемещения строк появляются при включённом свойстве таблицы, разрешающем их, а кнопка «Изменить» — когда допускается редактирование.
- Тип формы не поддерживает команду. «Провести» нельзя вывести на форме справочника: проведения у него нет.
- Команда уже есть в панели через автозаполнение. Отключите автозаполнение или не добавляйте дубль.
- Форма открыта в режиме просмотра чужого объекта. Если объект на поддержке без возможности изменения, редактор формы открывается только для чтения. Сначала включите возможность изменения для объекта.
Проверьте эти пункты по порядку, начиная с первых двух.
Свой обработчик вместо стандартного: когда нужен
Стандартную команду платформа выполняет сама. Но бывает, что нужно добавить действие до или после, например проверить заполнение перед закрытием или спросить подтверждение. Менять саму стандартную команду нельзя. Есть два пути.
Перехватить событие формы
Для «Записать» и «Закрыть» у формы есть события: ПередЗаписью, ПослеЗаписи, ПередЗакрытием. Они срабатывают и при нажатии вашей кнопки, и при закрытии формы крестиком. Это самый чистый вариант: логика в одном месте.
Сделать свою команду
Если нужно именно новое действие под своей кнопкой, создайте на вкладке «Команды» собственную команду. У неё есть свойство «Действие» — это имя процедуры в модуле формы, которая вызывается при нажатии. Внутри процедуры можно вызвать стандартное поведение. Например, закрыть форму после своей проверки:
&НаКлиенте
Процедура МояКомандаЗакрыть(Команда)
Если Не ПроверкаПройдена() Тогда
Возврат;
КонецЕсли;
Закрыть();
КонецПроцедуры
Процедура ПроверкаПройдена() здесь ваша; она должна быть описана в модуле и вернуть Истина или Ложь. Метод Закрыть() вызывает обычное закрытие формы.
Привяжите эту команду к кнопке тем же способом, что и стандартную: перетащите на панель либо выберите в свойстве «Команда». Стандартную кнопку «Закрыть» при этом уберите, иначе у пользователя будет два пути закрытия.
Добавляем стандартную команду из кода
Иногда состав панели зависит от прав или режима запуска. Тогда кнопку создают при открытии формы, в обработчике ПриСозданииНаСервере. Принцип такой: создаёте элемент типа «Кнопка формы» в группе панели и присваиваете ему имя команды.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Кнопка = Элементы.Добавить("КнопкаЗакрыть", Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель);
Кнопка.ИмяКоманды = "Form.StandardCommand.Close";
КонецПроцедуры
Здесь Элементы.ФормаКоманднаяПанель — группа панели, которая должна быть на форме. Имя группы проверьте в дереве элементов вашей формы: если у вас оно другое, подставьте своё. Программно созданные кнопки не сохраняются в конфигурации и существуют только пока форма открыта.
⚠️ Не создавайте кнопку с именем, которое уже занято на форме: платформа выдаст ошибку, и форма не откроется.
Настройка панели в режиме 1С:Предприятие без Конфигуратора
Пользователь может поменять состав панели у себя, не обращаясь к программисту. Эта настройка личная: она не влияет на других и не меняет конфигурацию.
- Откройте нужную форму.
- В меню «Ещё» (три точки в правом верхнем углу формы) выберите «Изменить форму».
- В открывшемся окне настройки найдите дерево элементов формы. В нём раскройте командную панель.
- Отметьте галочками кнопки, которые нужно показывать, снимите с лишних. Порядок меняется стрелками.
- Нажмите «ОК».
Если пункта «Изменить форму» нет, проверьте права: настройка форм входит в отдельное право пользователя, которое администратор может отключить.
Чтобы вернуть всё как было, в том же окне есть кнопка сброса настроек на стандартные. Сброс затрагивает только эту форму.
Если пользователь жалуется, что «пропала кнопка Создать», сначала загляните в «Изменить форму»: часто кнопку просто скрыли случайно, и конфигурацию трогать не нужно.
Типичные сбои и их причины
| Что видите | Вероятная причина | Что сделать |
|---|---|---|
| Кнопка есть, но серая | Команда недоступна в текущем состоянии: например, «Провести» в уже проведённом документе | Проверьте логику; свойство «Доступность» можно переопределить |
| Кнопка не видна на панели | Расположение — подменю «Ещё», либо слишком узкое окно | Поменяйте расположение, увеличьте окно |
| Две одинаковые кнопки | Включено автозаполнение, и та же команда добавлена вручную | Отключите автозаполнение либо удалите ручную кнопку |
| Ошибка при открытии формы | Кнопка ссылается на команду таблицы, которую удалили или переименовали | Выберите команду заново в свойствах кнопки |
| После обновления кнопка пропала | Типовая форма заменилась, ручные правки слетели | Перенесите правки через расширение либо повторите после сравнения |
| Команда есть в списке, но кнопка ничего не делает | Привязан не тот элемент: команда другой таблицы | Проверьте путь в имени команды |
Расширения вместо правки типовой формы
Если форма типовая и находится на поддержке, правильнее вынести изменение в расширение конфигурации. Расширения появились в платформе 8.3.6. В расширении вы «заимствуете» форму и в заимствованной копии добавляете кнопку. После обновления типовой конфигурации расширение остаётся на месте, и сравнивать ничего не нужно. Загрузка расширения и «Обновить конфигурацию БД» — отдельные шаги, не забывайте про второй.