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