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

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

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

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

Привязка кнопки к процедуре в 1С — базовая задача при доработке форм: документов, справочников, обработок. Механизм зависит от типа формы. В управляемых формах (режим «Такси» и современные конфигурации) кнопка связывается с командой формы, а команда — с процедурой-обработчиком в модуле формы. В обычных формах связь устанавливается напрямую через свойство «Действие» в палитре свойств кнопки.

Ниже разобраны оба сценария с конкретными шагами в конфигураторе, примеры кода обработчиков, а также частые ошибки, из-за которых кнопка отображается, но нажатие ничего не делает или вызывает ошибку «Процедура не обнаружена». Инструкция ориентирована на платформу 1С:Предприятие 8.3.

Определите тип формы: управляемая или обычная

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

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

Большинство современных конфигураций (УТ 11, ERP, БП 3.0) работают в режиме управляемого приложения, поэтому далее основной сценарий описан для управляемых форм. Если конфигурация старая и запускается в обычном приложении, переходите к соответствующему разделу.

Привязка кнопки в управляемой форме через команду

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

Порядок действий в редакторе формы:

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

Пример созданного обработчика в модуле формы:

&НаКлиенте

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

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

ОбновитьОтображениеДанных();

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

&НаСервере

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

Объект.Склад = Справочники.Склады.НайтиПоНаименованию("Основной");

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

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

Куда добавить кнопку: командная панель, группа, табличная часть

Место размещения влияет на доступность и контекст кнопки. Команда, перетащенная в общую командную панель формы, доступна всегда. Кнопка в командной панели табличной части обычно оперирует текущей строкой — в обработчике её получают через Элементы.ИмяТаблицы.ТекущиеДанные.

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

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

Привязка кнопки в обычной форме

В обычной форме механизм прямее: кнопка ссылается на процедуру модуля напрямую через свойство «Действие».

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

Имя процедуры формируется из имени кнопки и события «Нажатие». Если переименуете кнопку после создания обработчика, связь не разорвётся, но для порядка лучше переименовать и процедуру, и значение свойства «Действие».

Команда объекта вместо команды формы

Если кнопка должна выполнять типовую логику объекта (например, «Провести», «Записать», печать), не обязательно создавать свою команду. В управляемой форме доступны стандартные команды: их список открывается в редакторе формы через «Команды → Глобальные команды» или через свойство «ИмяКоманды» у кнопки.

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

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

Способы привязки кнопки

Команда формы + обработчик в модуле

Основной способ для управляемых форм. Гибко, но требует писать код обработчика.

Стандартная команда объекта

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

Свойство «Действие» в обычной форме

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

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

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

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

Вторая типичная ситуация — обращение к серверным данным из клиентского обработчика без серверного вызова. Если в процедуре с директивой &НаКлиенте использовать запрос или обращение к менеджеру объекта напрямую, компиляция модуля завершится ошибкой. Решение — вынести серверную логику в отдельную процедуру с директивой &НаСервере и вызывать её из клиентской.

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

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

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

Кнопка видна в нужном месте формы и активна

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

Кнопки нет или она серая при выполненных условиях доступности

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

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

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

Сообщение «Процедура не обнаружена» или ошибка компиляции

Код в модуле
Норма

Директивы &НаКлиенте/&НаСервере соответствуют логике

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

Серверные вызовы внутри клиентской процедуры

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

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

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

Почему кнопка есть, но при нажатии ничего не происходит?

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

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

Да, в управляемой форме в обработчике ПриСозданииНаСервере можно создать команду через Команды.Добавить() и элемент кнопки через Элементы.Добавить(), задав ему ИмяКоманды. Это основной способ при доработке форм через расширения, когда прямое изменение формы нежелательно.

Как передать в процедуру данные текущей строки табличной части?

В клиентском обработчике обратитесь к Элементы.ИмяТабличнойЧасти.ТекущиеДанные — это объект с полями текущей строки. Перед использованием проверяйте, что он не равен Неопределено, иначе при пустой таблице возникнет ошибка.

Чем отличается обработчик «НаКлиенте» от «НаСервере» при создании действия команды?

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

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

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

Итог

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

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