Как посмотреть программный код кнопки в командной панели управляемой формы 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработчики 1С при анализе чужих конфигураций или типовых решений часто сталкиваются с ситуацией, когда на командной панели формы присутствует кнопка, но при ее выделении окно Свойства остается практически пустым. В разделе «События» нет никаких привязанных процедур, привычный переход по клавише F12 («Перейти к определению») не работает, и становится совершенно непонятно, какой именно программный код выполняется при нажатии этой кнопки. Особенно часто это происходит с кнопками вызова подсистем Библиотеки стандартных подсистем (БСП), такими как «Присоединенные файлы», «Отчеты», «История изменений» и другие.

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

Почему не работает клавиша F12 и пустое окно свойств?

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

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

Классификация команд и кнопок на форме

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

  1. Стандартные команды платформы. К ним относятся кнопки типа «Записать», «Провести», «Закрыть», «Установить пометку удаления» и т. д. Код этих команд зашит непосредственно в ядре платформы 1С:Предприятие. Вы не сможете физически открыть и посмотреть этот код. Однако их выполнение можно перехватить. Для этого используются стандартные события самой управляемой формы (например, ПередЗаписью, ПриЗаписи) или динамического списка (например, ПередУдалением).
  2. Локальные команды формы. Эти команды создаются вручную разработчиком на вкладке «Команды» -> «Команды формы» конкретного объекта. Их обработчики всегда располагаются в модуле этой же управляемой формы (процедуры с директивой выполнения &НаКлиенте). В свойствах такой кнопки обязательно заполнено поле «Имя команды», а у самой команды заполнено свойство «Действие», откуда по нажатию на лупу можно мгновенно перейти в код формы.
  3. Глобальные (общие) команды и параметризуемые команды объектов. Это именно тот случай, который вызывает больше всего вопросов. Такие команды создаются в ветке дерева метаданных Общие -> Общие команды либо в ветке конкретных объектов (например, Справочники -> [ИмяСправочника] -> Команды). Код их выполнения всегда содержится в отдельном объекте — Модуле команды. Окно свойств такой кнопки на форме не содержит локальных событий, так как управление передается глобальному обработчику.

Как устроена автоматическая параметризация глобальных команд

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

Работает это следующим образом:

Пошаговая инструкция по поиску кода на примере кнопки «Присоединенные файлы»

Рассмотрим практическую задачу: нам нужно вытащить код кнопки «Присоединенные файлы» (или «Присоединенные файлы к объекту») из чужой конфигурации. Это типовой функционал БСП. Разберем этот процесс по шагам.

Шаг 1. Поиск команды в дереве метаданных конфигурации

Поскольку на форме мы не можем перейти к коду напрямую, откроем дерево конфигурации в левой панели. Перейдем по пути: Общие -> Общие команды. Найдем команду с именем ПрисоединенныеФайлы (или ПрисоединенныеФайлыКОбъекту).

Шаг 2. Открытие модуля команды

Нажмите правой кнопкой мыши по найденной общей команде в дереве метаданных и выберите пункт «Открыть модуль команды». Перед нами откроется текстовый редактор кода.

Шаг 3. Анализ предопределенной процедуры-обработчика

В модуле общей команды всегда присутствует стандартная предопределенная процедура ОбработкаКоманды. Она выглядит следующим образом:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    // ПараметрКоманды содержит ссылку на объект, для которого вызвана команда
    // ПараметрыВыполненияКоманды содержат контекст формы-отправителя
    
    РаботаСФайламиКлиент.ОткрытьФормуПрисоединенныхФайлов(ПараметрКоманды, ПараметрыВыполненияКоманды);
    
КонецПроцедуры

Шаг 4. Переход к основной программной логике (БСП)

В модуле команды обычно содержится лишь перенаправление вызова в специализированный общий модуль (в данном случае РаботаСФайламиКлиент). И вот здесь уже полноценно работает клавиша F12! Установим курсор на имя метода ОткрытьФормуПрисоединенныхФайлов и нажмем F12. Платформа перенесет нас в общий модуль, где мы сможем детально изучить алгоритм открытия форм, работы с хранилищем и прикрепления файлов.

Как перехватить выполнение стандартной команды?

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

Рассмотрим пример перехвата записи объекта на форме с помощью создания локального обработчика событий:


&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	
	// Здесь мы можем внедрить свой код проверки перед стандартной записью
	Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
		ПоказатьПредупреждение(, "Необходимо заполнить организацию!");
		Отказ = Истина; // Прерываем стандартное действие платформы
	КонецЕсли;
	
КонецПроцедуры

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

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

← На главную