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