При работе с типовыми конфигурациями на платформе 1С:Предприятие 8.3, такими как «ERP Управление предприятием» или «Комплексная автоматизация 2.4», разработчики часто сталкиваются с ситуацией, когда в режиме «1С:Предприятие» на форме присутствуют кнопки, которых совершенно не видно в конфигураторе. Это создает трудности при необходимости изменить логику работы или найти ошибку в обработчике. Разберем подробно, где искать «невидимые» кнопки и как определить код, который выполняется при их нажатии.
В современных конфигурациях интерфейс перестал быть статичным. Вместо того чтобы рисовать каждую кнопку вручную, разработчики используют механизмы Библиотеки стандартных подсистем (БСП) или программное создание элементов. Проанализируем основные причины, почему кнопки не видны в визуальном редакторе:
ПриСозданииНаСервере или вызываемых из нее подпроцедурах.ОбщаяКоманда.Это самый быстрый и надежный метод, если кнопка физически существует в интерфейсе и ее можно нажать. Проанализируем по шагам, как найти обработчик через замер:
В открывшемся окне замера проанализируем колонку «Исходный текст». Нам нужно искать строки, которые относятся к модулям формы, модулям менеджера или общим модулям с префиксом Клиент или Сервер. Двойной клик по строке с максимальным временем выполнения или по знакомым именам процедур перенесет нас прямо к коду обработчика.
Если мы нашли имя команды (например, через свойства элемента в режиме «Изменить форму»), воспользуемся глобальным поиском. Нажмем Ctrl + Shift + F.
В поле поиска введем имя команды. Важный нюанс: в настройках области поиска обязательно выберем пункт «Везде», включая «Расширения конфигурации». Часто разработчики ищут только в основной конфигурации, забывая, что доработка может быть скрыта в слое расширения.
Если поиск по имени команды не дал результатов, попробуем поискать по Заголовку (тексту на кнопке). Рассмотрим пример программного добавления:
НовыйЭлемент = Элементы.Добавить("КнопкаВыгрузки", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);
НовыйЭлемент.ИмяКоманды = "КомандаВыгрузитьДанные";
НовыйЭлемент.Заголовок = "Выгрузить в Excel";
Поиск строки "Выгрузить в Excel" позволит найти место создания элемента формы.
В ERP 2.4 и КА 2.4 большинство кнопок в группах «Отчеты», «Печать» и «Заполнение» управляются централизованно. Выясним, где искать их описание. Проверим Модуль менеджера соответствующего объекта (например, справочника «Номенклатура»).
Ищем процедуру ПриОпределенииКомандПодключаемых. Типовой код выглядит примерно так:
Процедура ПриОпределенииКомандПодключаемых(Команды) Экспорт
// Добавление команды печати этикеток
Команда = Команды.Добавить();
Команда.Представление = НСтр("ru = 'Печать этикеток'");
Команда.Идентификатор = "ПечатьЭтикетокСпециальная";
Команда.Порядок = 10;
// ... прочие настройки
КонецПроцедуры
Если команда определена здесь, то ее обработчик обычно находится в общем модуле, указанном в параметрах команды, либо вызывается через стандартный обработчик формы Подключаемый_ВыполнитьКоманду.
Проанализируем ситуацию, когда в основной конфигурации форма выглядит стандартно, а в расширении в нее добавлены элементы. Чтобы увидеть их в конфигураторе:
Справочники.Номенклатура.Формы.ФормаСписка).Именно здесь вы увидите добавленные кнопки, выделенные цветом расширения (обычно сиреневым или желтым). Обработчики таких кнопок будут находиться в модуле формы внутри расширения.
Если замер производительности кажется слишком сложным, используем метод прерывания:
ПриСозданииНаСервере, поставить там точку останова и внимательно изучить коллекцию Элементы.Рассмотрим пример анализа коллекции элементов в табло отладчика:
Для Каждого Элемент Из ЭтаФорма.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
Сообщить("Найдена кнопка: " + Элемент.Имя + ", Команда: " + Элемент.ИмяКоманды);
КонецЕсли;
КонецЦикла;
Этот фрагмент кода можно временно вставить в процедуру ПриОткрытии или выполнить в консоли отладки, чтобы точно узнать имя программно созданной кнопки и привязанной к ней команды.
Мы рассмотрели основные методики поиска скрытых элементов управления. Помните, что в сложных системах уровня ERP визуальное проектирование форм часто уступает место динамическому построению интерфейса. Использование глобального поиска по всем расширениям и замера производительности — это два самых мощных инструмента в арсенале разработчика 1С, позволяющих найти ответ даже в самом запутанном коде.