Как найти кнопку и её код на форме журнала документов в 1С?

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

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

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

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

  1. Расширения конфигурации (Configuration Extensions): форма или общий модуль могут быть заимствованы в расширение. В расширении кнопка может быть добавлена визуально в редакторе заимствованной формы либо программно через перехват событий с помощью аннотаций &Перед, &После или &Вместо. При этом в основной конфигурации форма остается нетронутой.
  2. Команды метаданных (Общие команды и команды объектов): разработчик может создать команду в ветке ОбщиеКоманды или в подчиненной ветке Команды конкретного документа/обработки. В свойствах команды задается тип параметра и группа командной панели (например, Панель действий или Командная панель формы). Платформа автоматически внедряет кнопку команды в командную панель журналов и списков.
  3. Подключаемые команды библиотеки стандартных подсистем (БСП): во многих типовых конфигурациях (1С:КА, 1С:ERP, 1С:УТ) командные панели формируются динамически при вызове инициализации БСП. Источниками команд могут выступать модули менеджеров, общие переопределяемые модули или дополнительные внешние обработки из справочника ДополнительныеОтчетыИОбработки.
  4. Программное создание элементов интерфейса: кнопка может создаваться динамически в обработчиках ПриСозданииНаСервере или через вызовы процедур общих модулей, куда контекст формы передается как параметр:
    
    НоваяКнопка = Элементы.Добавить("КнопкаЗагрузить", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);
    НоваяКнопка.Заголовок = "Загрузить";
    НоваяКнопка.ИмяКоманды = "КомандаЗагрузить";
    

Методы локализации скрытой кнопки и ее алгоритмов

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

  1. Остановка по требованию (Отладка → Остановить):

    Если нажатие кнопки открывает диалоговое окно (например, выбор каталога или файла через ДиалогВыбораФайла), выполним следующие действия:

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

  2. Анализ через стек вызовов:

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

    Откроем окно Стек вызовов (главное меню Отладка → Окна → Стек вызовов). В списке вызовов проанализируем всю иерархию от исходной клиентской процедуры расширения или формы до текущего модуля.

  3. Замер производительности для поиска клиентского кода:

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

    В конфигураторе включим Отладка → Замер производительности. В режиме предприятия нажмем кнопку, выполним выбор файла и дождемся завершения операции. Выключим замер. В открывшейся таблице отсортируем строки по модулям — в списке сразу отобразятся клиентские процедуры, сработавшие при клике.

Как проверить состав установленных расширений

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

Разберем порядок проверки расширений:

  1. Перейдем в меню Конфигурация → Расширения конфигурации.
  2. Если в списке присутствуют расширения, откроем дерево метаданных каждого из них двойным кликом.
  3. Проверим ветки Документы, Журналы документов, Общие команды и Общие модули внутри расширения.
  4. Для запуска поиска по расширению активируем окно его метаданных и вызовем Глобальный поиск, выбрав область поиска «Конфигурация расширения».

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

← На главную