Как найти программно добавленные кнопки и их обработчики в управляемых формах 1С

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

При работе с типовыми конфигурациями на платформе 1С:Предприятие 8.3, такими как «ERP Управление предприятием» или «Комплексная автоматизация 2.4», разработчики часто сталкиваются с ситуацией, когда в режиме «1С:Предприятие» на форме присутствуют кнопки, которых совершенно не видно в конфигураторе. Это создает трудности при необходимости изменить логику работы или найти ошибку в обработчике. Разберем подробно, где искать «невидимые» кнопки и как определить код, который выполняется при их нажатии.

Причина отсутствия кнопок в конфигураторе

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

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

Способ 1: Использование замера производительности

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

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

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

Способ 2: Глобальный поиск по имени команды или заголовку

Если мы нашли имя команды (например, через свойства элемента в режиме «Изменить форму»), воспользуемся глобальным поиском. Нажмем Ctrl + Shift + F.

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

Если поиск по имени команды не дал результатов, попробуем поискать по Заголовку (тексту на кнопке). Рассмотрим пример программного добавления:


НовыйЭлемент = Элементы.Добавить("КнопкаВыгрузки", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);
НовыйЭлемент.ИмяКоманды = "КомандаВыгрузитьДанные";
НовыйЭлемент.Заголовок = "Выгрузить в Excel";

Поиск строки "Выгрузить в Excel" позволит найти место создания элемента формы.

Способ 3: Механизм подключаемых команд БСП

В ERP 2.4 и КА 2.4 большинство кнопок в группах «Отчеты», «Печать» и «Заполнение» управляются централизованно. Выясним, где искать их описание. Проверим Модуль менеджера соответствующего объекта (например, справочника «Номенклатура»).

Ищем процедуру ПриОпределенииКомандПодключаемых. Типовой код выглядит примерно так:


Процедура ПриОпределенииКомандПодключаемых(Команды) Экспорт
    // Добавление команды печати этикеток
    Команда = Команды.Добавить();
    Команда.Представление = НСтр("ru = 'Печать этикеток'");
    Команда.Идентификатор = "ПечатьЭтикетокСпециальная";
    Команда.Порядок = 10;
    // ... прочие настройки
КонецПроцедуры

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

Способ 4: Проверка расширений конфигурации

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

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

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

Способ 5: Отладка через «Остановку по ошибке» и «Паузу»

Если замер производительности кажется слишком сложным, используем метод прерывания:

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

Рассмотрим пример анализа коллекции элементов в табло отладчика:


Для Каждого Элемент Из ЭтаФорма.Элементы Цикл
    Если ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
        Сообщить("Найдена кнопка: " + Элемент.Имя + ", Команда: " + Элемент.ИмяКоманды);
    КонецЕсли;
КонецЦикла;

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

Заключение

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

← На главную