Разработчики 1С при анализе чужих конфигураций или типовых решений часто сталкиваются с ситуацией, когда на командной панели формы присутствует кнопка, но при ее выделении окно Свойства остается практически пустым. В разделе «События» нет никаких привязанных процедур, привычный переход по клавише F12 («Перейти к определению») не работает, и становится совершенно непонятно, какой именно программный код выполняется при нажатии этой кнопки. Особенно часто это происходит с кнопками вызова подсистем Библиотеки стандартных подсистем (БСП), такими как «Присоединенные файлы», «Отчеты», «История изменений» и другие.
В этой статье мы подробно разберем, как устроен командный интерфейс в управляемом приложении 1С, выясним причины такого поведения платформы и научимся быстро находить исполняемый код для кнопки любого типа.
Для начала проанализируем поведение конфигуратора 1С. Клавиша F12 предназначена исключительно для работы в текстовом редакторе модулей. С ее помощью можно перейти к объявлению переменной, процедуры или функции. Элемент формы (кнопка) в визуальном редакторе является объектом метаданных (интерфейсным элементом), у него нет прямого текстового объявления, поэтому нажать F12 на самой кнопке в форме невозможно.
Пустое окно свойств в разделе событий означает, что данная кнопка связана с командой, обработчик которой назначен не локально на уровне этой формы, а глобально на уровне всей конфигурации или конкретного объекта метаданных. Платформа 1С разделяет команды на несколько видов, и поведение окна свойств напрямую зависит от этого разделения.
Чтобы быстро находить код любой кнопки, мы должны четко понимать, к какому типу команд она относится. Рассмотрим три основные категории:
ПередЗаписью, ПриЗаписи) или динамического списка (например, ПередУдалением).
&НаКлиенте). В свойствах такой кнопки обязательно заполнено поле «Имя команды», а у самой команды заполнено свойство «Действие», откуда по нажатию на лупу можно мгновенно перейти в код формы.
Общие -> Общие команды либо в ветке конкретных объектов (например, Справочники -> [ИмяСправочника] -> Команды). Код их выполнения всегда содержится в отдельном объекте — Модуле команды. Окно свойств такой кнопки на форме не содержит локальных событий, так как управление передается глобальному обработчику.
Выясним причину, по которой кнопки появляются на форме «сами по себе» и требуют передачи определенных параметров (например, ссылки на текущую строку или родителя динамического списка). Это механизм глобальных параметризуемых команд.
Работает это следующим образом:
ОпределяемыйТип.ВладелецФайлов, объединяющий десятки объектов).Элементы.Список.ТекущиеДанные.Ссылка) и автоматически передает эту ссылку в качестве параметра в модуль команды.Рассмотрим практическую задачу: нам нужно вытащить код кнопки «Присоединенные файлы» (или «Присоединенные файлы к объекту») из чужой конфигурации. Это типовой функционал БСП. Разберем этот процесс по шагам.
Шаг 1. Поиск команды в дереве метаданных конфигурации
Поскольку на форме мы не можем перейти к коду напрямую, откроем дерево конфигурации в левой панели. Перейдем по пути: Общие -> Общие команды. Найдем команду с именем ПрисоединенныеФайлы (или ПрисоединенныеФайлыКОбъекту).
Шаг 2. Открытие модуля команды
Нажмите правой кнопкой мыши по найденной общей команде в дереве метаданных и выберите пункт «Открыть модуль команды». Перед нами откроется текстовый редактор кода.
Шаг 3. Анализ предопределенной процедуры-обработчика
В модуле общей команды всегда присутствует стандартная предопределенная процедура ОбработкаКоманды. Она выглядит следующим образом:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// ПараметрКоманды содержит ссылку на объект, для которого вызвана команда
// ПараметрыВыполненияКоманды содержат контекст формы-отправителя
РаботаСФайламиКлиент.ОткрытьФормуПрисоединенныхФайлов(ПараметрКоманды, ПараметрыВыполненияКоманды);
КонецПроцедуры
Шаг 4. Переход к основной программной логике (БСП)
В модуле команды обычно содержится лишь перенаправление вызова в специализированный общий модуль (в данном случае РаботаСФайламиКлиент). И вот здесь уже полноценно работает клавиша F12! Установим курсор на имя метода ОткрытьФормуПрисоединенныхФайлов и нажмем F12. Платформа перенесет нас в общий модуль, где мы сможем детально изучить алгоритм открытия форм, работы с хранилищем и прикрепления файлов.
Проанализируем еще одну важную ситуацию: что делать, если кнопка является стандартной (например, кнопка «Записать и закрыть»), и нам нужно посмотреть или изменить логику ее работы? Напрямую залезть в код платформы мы не можем, но мы можем перехватить это событие в модуле управляемой формы.
Рассмотрим пример перехвата записи объекта на форме с помощью создания локального обработчика событий:
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
// Здесь мы можем внедрить свой код проверки перед стандартной записью
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
ПоказатьПредупреждение(, "Необходимо заполнить организацию!");
Отказ = Истина; // Прерываем стандартное действие платформы
КонецЕсли;
КонецПроцедуры
Таким образом, даже не имея прямого доступа к коду стандартной кнопки, мы полностью контролируем логику работы системы через события элементов и самой формы.
Используя предложенные методы классификации кнопок и понимание принципов параметризации команд, вы сможете быстро ориентироваться в структуре любой незнакомой конфигурации 1С и мгновенно находить нужные участки кода.