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

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

Как в 1С назначить кнопку на форме

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

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

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

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

Где назначается кнопка: формы, команды и обработчики

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

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

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

Как добавить кнопку через конфигуратор

Откройте конфигуратор, найдите нужный объект (документ, справочник, обработка) и откройте его основную форму. Если формы нет, создайте новую через конструктор. Редактор формы содержит три ключевые области: дерево элементов, список реквизитов и вкладку команд.

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

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

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

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

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

&НаКлиенте

Процедура ОчиститьТовары(Команда)

Если Объект.Товары.Количество() = 0 Тогда

Возврат;

КонецЕсли;

Объект.Товары.Очистить();

Модифицированность = Истина;

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

Если действие требует обращения к базе — например, запроса к остаткам или записи другого объекта, — добавьте серверную процедуру и вызовите её из клиентской:

&НаКлиенте

Процедура ЗаполнитьОстатки(Команда)

ЗаполнитьОстаткиНаСервере();

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

&НаСервере

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

// запрос и заполнение табличной части

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

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

Как добавить кнопку через расширение, не меняя типовую конфигурацию

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

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

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

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

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

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

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

Способы добавить кнопку

Изменение конфигурации

Подходит для собственных и уже доработанных конфигураций. Минус — осложняет обновление типовых решений.

Расширение конфигурации

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

Дополнительные отчеты и обработки (БСП)

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

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

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

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

Если кнопка видна, но не работает, откройте модуль формы и выполните проверку синтаксиса (Конфигурация → Проверка конфигурации). Отсутствие обработчика, несовпадение имени процедуры с именем команды или ошибка компиляции из-за неверной директивы «&НаКлиенте»/«&НаСервере» — типовые причины молчащей кнопки.

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

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

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

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

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

Кнопки нет или она скрыта в подменю «Ещё» без необходимости

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

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

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

Ничего не происходит или возникает ошибка платформы

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

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

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

Под пользователем без административных прав кнопка недоступна или падает с ошибкой

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

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

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

Почему кнопка попала в подменю «Ещё»?

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

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

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

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

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

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

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

Что делать, если после обновления конфигурации кнопка пропала?

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

Итог

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

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