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

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

Как сделать кнопку в 1С конфигураторе

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

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

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

Где создаётся кнопка: форма, команда, элемент

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

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

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

Пошаговое создание кнопки на форме

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

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

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

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

Обработчик кнопки: клиент и сервер

Когда вы нажимаете кнопку создания обработчика в палитре свойств команды, платформа добавляет в модуль формы процедуру с директивой &НаКлиенте. Это значит, что код выполнится на компьютере пользователя. Такой обработчик подходит для простых действий: открыть другую форму, показать предупреждение, задать вопрос, изменить видимость элементов.

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

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

&НаКлиенте

Процедура ЗаполнитьТовары(Команда)

ЗаполнитьТоварыНаСервере();

ПоказатьОповещениеПользователя("Табличная часть заполнена");

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

&НаСервере

Процедура ЗаполнитьТоварыНаСервере()

// здесь запрос или обход данных и заполнение Объект.Товары

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

Кнопки в командной панели и стандартные команды

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

Кроме собственных команд, в командную панель можно вытащить стандартные команды объекта — например, «Провести и закрыть» у документа. Для этого в свойстве «ИмяКоманды» кнопки выберите стандартную команду из выпадающего списка. Так вы управляете составом кнопок, не написав ни строки кода.

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

Где разместить кнопку

Командная панель формы

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

Кнопка рядом с полем или в группе

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

Подменю «Ещё»

Подходит для редких операций. Включается свойством «Только во всех действиях», не занимает место на панели.

Настройка внешнего вида и поведения кнопки

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

Свойства можно менять программно из модуля формы. Например, скрыть кнопку до выполнения условия: Элементы.ПечатьСчета.Видимость = Ложь;. Обращение к элементу идёт по имени элемента формы, а не по имени команды — это частая путаница у новичков. Имя элемента платформа генерирует автоматически при перетаскивании команды, но его можно поменять на осмысленное.

Для управления доступностью кнопки в зависимости от данных удобнее использовать функциональные опции или условное оформление формы, но в простых случаях достаточно кода в обработчике ПриОткрытии или ПослеЗаписи. Не переусердствуйте с динамическим скрытием: пользователь должен понимать, почему кнопка исчезла.

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

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

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

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

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

Кнопка через расширение конфигурации

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

Внутри расширения добавление кнопки ничем не отличается от обычной работы: та же закладка «Команд», то же перетаскивание в дерево элементов. Обработчики пишутся в модуле формы расширения с аннотациями &После, &Вместо или &ИзменениеИКонтроль при перехвате существующих процедур. Новая команда и её обработчик создаются полностью в расширении без перехвата.

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

Контрольные точки

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

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

Отображается в нужном месте, заголовок и картинка корректны

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

Кнопки нет — команда не добавлена в дерево элементов или расширение неактивно

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

Выполняется нужное действие без сообщений об ошибках

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

Ничего не происходит — нет обработчика; ошибка компиляции — смешаны клиент и сервер

Права пользователей
Норма

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

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

У пользователя ошибка доступа — не хватает прав на объекты, к которым обращается серверный код

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

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

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

Почему кнопка не появляется на форме после создания команды?

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

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

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

Чем отличается кнопка на обычной форме от управляемой?

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

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

В палитре свойств элемента кнопки есть свойство «СочетаниеКлавиш», где выбирается комбинация, например Ctrl+Shift+P. Убедитесь, что выбранное сочетание не пересекается со стандартными комбинациями платформы, иначе поведение будет непредсказуемым.

Кнопка работает у администратора, но не у пользователя. В чём причина?

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

Итог

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

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