Разработка и Конфигурация · 12 мин
Как сделать кнопку в 1С конфигураторе
Как добавить кнопку на форму в 1С конфигураторе: создание команды, обработчики на клиенте и сервере, кнопки командной панели и типовые ошибки новичков.
Кнопка в управляемой форме 1С — это не самостоятельный объект, а отображение команды. Поэтому вся работа строится в три шага: создать команду формы, перетащить её в дерево элементов формы и написать обработчик на встроенном языке. Поняв эту связку один раз, вы сможете добавлять кнопки в любые формы — документов, справочников, обработок.
Ниже разобран полный цикл: от открытия формы в конфигураторе до проверки работы кнопки в режиме предприятия. Отдельно рассмотрены кнопки командной панели, вызов серверных процедур, изменение свойств кнопки из кода и типичные ошибки, из-за которых кнопка не отображается или не выполняет действие.
Где создаётся кнопка: форма, команда, элемент
В управляемом интерфейсе 1С кнопка жёстко связана с командой. Команда описывает действие (что должно произойти), а элемент формы типа «Кнопка» только показывает эту команду пользователю. Из-за этого нельзя просто «нарисовать» кнопку на форме, как в визуальных редакторах других сред разработки.
Работа ведётся в редакторе формы, который открывается двойным щелчком по форме объекта в дереве конфигурации. Окно редактора состоит из двух ключевых областей: вверху — дерево элементов формы (визуальная структура), внизу или на закладках — реквизиты и команды. Если вы ищете, куда нажать, чтобы появилась кнопка, — начинайте именно с закладки «Команды».
Важно различать команды формы и глобальные команды объекта (например, команды документа). Команды формы живут только внутри конкретной формы и подходят для кнопок, работающих с данными этой формы. Глобальные команды объекта выводятся в панель навигации и командную панель автоматически.
Пошаговое создание кнопки на форме
Откройте конфигуратор, найдите нужный объект (например, документ или справочник), разверните ветку «Формы» и откройте основную форму. Если формы нет, создайте её через контекстное меню «Добавить» — конструктор предложит тип формы и набор реквизитов по умолчанию.
Перейдите на закладку «Команды» → «Команды формы» и нажмите «Добавить». Задайте имя команды латиницей без пробелов, например ПечатьСчета. В свойстве «Заголовок» укажите текст, который увидит пользователь, например «Печать счёта». При желании выберите картинку из стандартной библиотеки — она отобразится на кнопке.
Теперь перетащите созданную команду мышью из списка команд в дерево элементов формы — в то место, где должна стоять кнопка: внутрь группы, рядом с полями или в командную панель. Платформа автоматически создаст элемент типа «Кнопка» и свяжет его с командой через свойство «ИмяКоманды».
- 1Откройте нужную форму объекта в конфигураторе
- 2На закладке «Команды» добавьте новую команду формы, задайте имя и заголовок
- 3Перетащите команду в дерево элементов формы в нужную позицию
- 4В палитре свойств команды создайте обработчик действия (кнопка с лупой у свойства «Действие»)
- 5Напишите код обработчика в модуле формы
- 6Обновите конфигурацию базы данных (F7) и проверьте кнопку в режиме предприятия
Обработчик кнопки: клиент и сервер
Когда вы нажимаете кнопку создания обработчика в палитре свойств команды, платформа добавляет в модуль формы процедуру с директивой &НаКлиенте. Это значит, что код выполнится на компьютере пользователя. Такой обработчик подходит для простых действий: открыть другую форму, показать предупреждение, задать вопрос, изменить видимость элементов.
Если кнопка должна читать или изменять данные в базе — например, создать документ, пересчитать итоги, выполнить запрос, — потребуется серверный вызов. Из клиентского обработчика вызовите процедуру с директивой &НаСервере, объявленную в том же модуле формы. Помните: серверная процедура не имеет доступа к интерфейсу, она работает только с данными.
Пример пары обработчиков: клиентская процедура вызывает серверную, которая заполняет табличную часть, а затем клиентская часть сообщает пользователю о результате. Такое разделение — обязательное требование управляемых форм, и попытка обратиться к базе данных напрямую из клиентского кода приведёт к ошибке компиляции модуля.
&НаКлиенте
Процедура ЗаполнитьТовары(Команда)
ЗаполнитьТоварыНаСервере();
ПоказатьОповещениеПользователя("Табличная часть заполнена");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТоварыНаСервере()
// здесь запрос или обход данных и заполнение Объект.Товары
КонецПроцедуры
Кнопки в командной панели и стандартные команды
Командная панель — это полоса вверху формы, где размещаются кнопки «Записать», «Провести», «Создать» и другие действия. Чтобы добавить туда свою кнопку, перетащите команду формы в ветку «КоманднаяПанель» дерева элементов. Кнопки в командной панели обычно показываются с картинкой и работают как основные действия формы.
Кроме собственных команд, в командную панель можно вытащить стандартные команды объекта — например, «Провести и закрыть» у документа. Для этого в свойстве «ИмяКоманды» кнопки выберите стандартную команду из выпадающего списка. Так вы управляете составом кнопок, не написав ни строки кода.
Для кнопок в командной панели полезно свойство «Только во всех действиях»: если его включить, кнопка прячется в подменю «Ещё» и не загромождает панель. Редко используемые действия логично убирать туда, оставляя на виду только основные операции.
Где разместить кнопку
Подходит для основных действий над объектом целиком: провести, заполнить, напечатать. Всегда на виду, но место ограничено.
Подходит для локальных действий: подобрать товар в табличную часть, очистить конкретное поле. Размещается перетаскиванием команды в нужную группу.
Подходит для редких операций. Включается свойством «Только во всех действиях», не занимает место на панели.
Настройка внешнего вида и поведения кнопки
Внешний вид кнопки управляется через палитру свойств элемента формы. Основные свойства: «Заголовок» (текст на кнопке), «Картинка» (значок), «Отображение» (только картинка, только текст или вместе), «Важность» (выделение основной кнопки), «Доступность» и «Видимость». Для кнопки по умолчанию, которую пользователь нажимает чаще всего, установите свойство «КнопкаПоУмолчанию» — она сработает при нажатии Enter.
Свойства можно менять программно из модуля формы. Например, скрыть кнопку до выполнения условия: Элементы.ПечатьСчета.Видимость = Ложь;. Обращение к элементу идёт по имени элемента формы, а не по имени команды — это частая путаница у новичков. Имя элемента платформа генерирует автоматически при перетаскивании команды, но его можно поменять на осмысленное.
Для управления доступностью кнопки в зависимости от данных удобнее использовать функциональные опции или условное оформление формы, но в простых случаях достаточно кода в обработчике ПриОткрытии или ПослеЗаписи. Не переусердствуйте с динамическим скрытием: пользователь должен понимать, почему кнопка исчезла.
Сразу переименовывайте элемент кнопки во что-то читаемое — например, «КнопкаПечатьСчета» вместо автоматического «ПечатьСчета». Когда в форме десяток кнопок, а имена элементов совпадают с именами команд, поиск нужного обращения в коде заметно усложняется.
Проверка результата и типичные ошибки
После создания кнопки обновите конфигурацию базы данных клавишей F7 и запустите режим предприятия. Откройте форму и проверьте: кнопка отображается в ожидаемом месте, заголовок читается, нажатие выполняет нужное действие, при серверном вызове нет ошибок прав доступа. Если кнопка не видна — первым делом проверьте, попала ли команда в дерево элементов, а не осталась ли только в списке команд.
Самые частые проблемы: обработчик не создан (кнопка нажимается, но ничего не происходит), обращение к базе данных из клиентской процедуры (ошибка компиляции), неверное имя элемента при программном обращении (ошибка «Поле объекта не обнаружено»), а также изменения, сделанные в расширении, но не применённые из-за отключённого расширения.
Кнопка через расширение конфигурации
Если конфигурация типовая и находится на поддержке, прямое изменение формы затруднит будущие обновления. Правильный путь — расширение конфигурации: в меню «Конфигурация» выберите «Расширения конфигурации», создайте новое расширение, добавьте в него нужную форму через «Добавить в расширение» и доработайте её там.
Внутри расширения добавление кнопки ничем не отличается от обычной работы: та же закладка «Команд», то же перетаскивание в дерево элементов. Обработчики пишутся в модуле формы расширения с аннотациями &После, &Вместо или &ИзменениеИКонтроль при перехвате существующих процедур. Новая команда и её обработчик создаются полностью в расширении без перехвата.
После сохранения расширения проверьте, что оно активно (флаг «Используется») и его применение не отключено настройками безопасности. В файловых базах и базах с отключённой защитой от опасных действий расширения применяются сразу после обновления конфигурации.
Как проверить результат
Отображается в нужном месте, заголовок и картинка корректны
Кнопки нет — команда не добавлена в дерево элементов или расширение неактивно
Выполняется нужное действие без сообщений об ошибках
Ничего не происходит — нет обработчика; ошибка компиляции — смешаны клиент и сервер
Кнопка работает под учётной записью обычного пользователя, а не только под администратором
У пользователя ошибка доступа — не хватает прав на объекты, к которым обращается серверный код
Частые вопросы
Можно ли добавить кнопку без программирования?
Частично да. Если кнопка должна вызывать стандартную команду объекта (печать, проведение, создание на основании), достаточно перетащить эту команду в дерево элементов формы — код писать не нужно. Для любой нестандартной логики обработчик в модуле формы обязателен.
Почему кнопка не появляется на форме после создания команды?
Команда формы сама по себе не отображается. Её нужно перетащить из списка команд в дерево элементов формы — только тогда платформа создаст элемент «Кнопка». Также проверьте свойство «Видимость» элемента и то, что вы обновили конфигурацию базы данных.
Как сделать кнопку в табличной части документа?
Создайте команду формы, затем перетащите её в командную панель табличной части (ветка таблицы в дереве элементов) или в контекстное меню таблицы. В обработчике обращайтесь к текущей строке через Элементы.Товары.ТекущиеДанные.
Чем отличается кнопка на обычной форме от управляемой?
В обычных формах (режим обычного приложения) кнопка добавляется прямо из панели инструментов на форму, и у неё есть собственный обработчик «Нажатие» без привязки к команде. В управляемых формах кнопка всегда связана с командой. Современные конфигурации работают в режиме управляемого приложения, поэтому основной способ — через команды.
Как назначить кнопке горячую клавишу?
В палитре свойств элемента кнопки есть свойство «СочетаниеКлавиш», где выбирается комбинация, например Ctrl+Shift+P. Убедитесь, что выбранное сочетание не пересекается со стандартными комбинациями платформы, иначе поведение будет непредсказуемым.
Кнопка работает у администратора, но не у пользователя. В чём причина?
Серверный код обработчика обращается к объектам, на которые у пользователя нет прав. Проверьте роли пользователя на чтение и изменение соответствующих справочников и документов. Для отдельных привилегированных операций можно выполнять код в привилегированном режиме через процедуру общего модуля с соответствующим флагом.
Что важно запомнить
Кнопка в управляемой форме 1С создаётся в три шага: команда формы, перетаскивание команды в дерево элементов, обработчик в модуле формы. Клиентский код отвечает за интерфейс, серверный — за данные. Для типовых конфигураций доработку выполняйте через расширение и всегда проверяйте результат под правами обычного пользователя.