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

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

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

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

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

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

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

Определяем, где и зачем нужна кнопка

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

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

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

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

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

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

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

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

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

&НаКлиенте

Процедура ЗаполнитьПоУмолчанию(Команда)

ЗаполнитьПоУмолчаниюНаСервере();

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

&НаСервере

Процедура ЗаполнитьПоУмолчаниюНаСервере()

Объект.Комментарий = "Заполнено автоматически";

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

Если действие меняет данные, не забудьте про модифицированность формы и контекст записи: для документа может потребоваться Записать() после изменений. Ошибки в обработчике выводите через Сообщить() или объект СообщениеПользователю, чтобы пользователь видел причину отказа.

Добавляем кнопку программно

Программное создание нужно, когда кнопка появляется по условию (например, только для определённого статуса документа) или когда форма изменяется из расширения без заимствования. Код размещается в обработчике ПриСозданииНаСервере.

&НаСервере

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

Команда = Команды.Добавить("МояКоманда");

Команда.Действие = "Подключаемый_МояКоманда";

Команда.Заголовок = "Моё действие";

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

Кнопка.ИмяКоманды = "МояКоманда";

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

Обработчик при этом должен существовать в модуле формы заранее как процедура с параметром Команда. Имя процедуры указывается строкой в свойстве Действие — платформа вызовет её при нажатии.

Если кнопка создаётся программно в расширении, давайте команде и элементу уникальный префикс (например, Расш1_). Это исключит конфликт имён, если в типовой форме позже появится элемент с похожим именем.
ПЗ
Практическое замечание

Добавляем кнопку через расширение конфигурации

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

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

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

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

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

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

Видимость кнопки
Норма

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

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

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

Нажатие
Норма

Выполняется задуманное действие, данные сохраняются

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

Ошибка платформы или тишина без результата — проверьте обработчик и его директивы

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

После обновления типовой базы кнопка на месте

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

Кнопка исчезла — доработка была сделана в основной конфигурации, а не в расширении

FAQ

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

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

Почему кнопка появилась, но не нажимается (серая)?

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

Как добавить кнопку в подменю «Ещё»?

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

Как назначить кнопке картинку и горячую клавишу?

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

Нужны ли особые права, чтобы пользователь видел новую кнопку?

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

Чем программное добавление кнопки лучше добавления в конфигураторе?

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

Итог

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

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