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

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

Как открыть модуль кнопки в 1С

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

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

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

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

Где вообще находится «модуль кнопки»

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

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

Как открыть обработчик кнопки через палитру свойств

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

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

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

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

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

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

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

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

Как найти код кнопки в обычной форме

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

Если кнопка находится на командной панели, а не на самой форме, выделите сначала панель, затем конкретную кнопку в ней — свойства кнопки откроются так же. У кнопок командной панели часто заполнено свойство «Действие» со стандартным значением (например, «Записать и закрыть»); такие кнопки не имеют пользовательского кода.

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

Как найти процедуру, если вы не знаете, где кнопка

Иногда форма большая, и кнопку проще найти через код, чем наоборот. В этом случае работает глобальный поиск по конфигурации: меню «Правка — Глобальный поиск» или сочетание Ctrl+Shift+F. Введите предполагаемое имя процедуры или часть текста, который выводит кнопка (например, текст сообщения об ошибке, который вы видите при нажатии).

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

Маршрут решения

Как выбрать способ поиска

Кнопка видна на форме и выделяется мышьюИспользуйте палитру свойств и лупу у события «Нажатие» или у команды
Кнопка привязана к команде формыОткройте вкладку «Команды» в редакторе формы и ищите обработчик в событии «Действие»
Кнопку найти не удаётся или форма большаяИспользуйте глобальный поиск (Ctrl+Shift+F) по имени процедуры или тексту сообщения
Нажатие есть, а кода в модуле формы нетПроверьте, не вызывает ли обработчик процедуру из общего модуля, и не является ли команда стандартной

Почему переход к модулю может не работать

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

Вторая причина — динамически созданная кнопка. Если кнопка добавляется на форму программно (кодом в модуле), её не будет в редакторе формы, и искать нужно по коду создания: поиском по словам Элементы.Добавить или Новый КнопкаФормы в модуле формы.

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

Частые ошибки при работе с обработчиками кнопок

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

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

Как проверить, что вы открыли нужный код

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

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

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

Имя процедуры в модуле
Норма

Совпадает со значением в поле события кнопки или команды

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

Имена различаются — обработчик не привязан

Остановка отладчика при нажатии
Норма

Выполнение останавливается внутри процедуры

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

Остановки нет — код не вызывается или находится в другом модуле

Директива компиляции
Норма

Директива соответствует контексту (например, &НаКлиенте для клиентской логики)

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

Обращение к серверным данным из клиентской процедуры вызывает ошибку

Итог

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

Модуль кнопки — это процедура в модуле формы, связанная с кнопкой через событие «Нажатие» или через команду. Быстрее всего перейти к ней лупой в палитре свойств. Если обработчика нет — проверьте стандартную команду, общий модуль и расширения конфигурации. Изменения делайте на копии базы.

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

Нажал лупу у события «Нажатие», а модуль не открылся. Почему?

Скорее всего, у кнопки нет собственного обработчика: она привязана к стандартной команде или к команде формы. Проверьте свойство «ИмяКоманды» и ищите обработчик в событии «Действие» самой команды на вкладке «Команды» редактора формы.

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

Нет. Просмотр и редактирование кода возможны только в конфигураторе. В режиме предприятия можно лишь выполнить действие кнопки и посмотреть результат, а для диагностики — запустить отладку из конфигуратора.

Кнопка есть на форме, но в редакторе формы её не видно. Где она?

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

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

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

Переименовал процедуру-обработчик, и кнопка перестала работать. Что делать?

Имя процедуры должно совпадать со значением в поле события. Откройте свойства кнопки (или команды) и обновите имя в событии «Нажатие»/«Действие» либо верните процедуре прежнее имя. После этого обновите конфигурацию базы данных и проверьте работу.

Где искать код, если кнопка вызывает длинную цепочку процедур?

Начните с обработчика нажатия и двигайтесь по вызовам: в конфигураторе можно встать на имя вызываемой процедуры и нажать F12 (переход к определению). Так вы последовательно пройдёте всю цепочку, включая вызовы общих модулей.