При доработке типовых и нетиповых конфигураций программисты нередко сталкиваются с ситуацией: в режиме 1С:Предприятие на форме журнала или списка документов отображается кнопка (например, «Загрузить» или «Обработать»), однако при открытии этой же формы в конфигураторе визуально кнопки нет, а поиск по модулю формы и модулю менеджера не дает результатов. Разберем по шагам, какими механизмами платформы 1С:Предприятие 8.3 может быть добавлена такая кнопка и как быстро локализовать связанный с ней программный код.
Проанализируем ситуацию: в управляемом интерфейсе состав элементов формы формируется динамически. Платформа предоставляет несколько независимых механизмов, позволяющих вывести команду на форму без прямого редактирования дерева элементов основной формы объекта:
&Перед, &После или &Вместо. При этом в основной конфигурации форма остается нетронутой.ОбщиеКоманды или в подчиненной ветке Команды конкретного документа/обработки. В свойствах команды задается тип параметра и группа командной панели (например, Панель действий или Командная панель формы). Платформа автоматически внедряет кнопку команды в командную панель журналов и списков.ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере или через вызовы процедур общих модулей, куда контекст формы передается как параметр:
НоваяКнопка = Элементы.Добавить("КнопкаЗагрузить", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);
НоваяКнопка.Заголовок = "Загрузить";
НоваяКнопка.ИмяКоманды = "КомандаЗагрузить";
Рассмотрим подробнее инструменты платформы, позволяющие точно определить, где находится обработчик нажатия кнопки и цепочка вызываемых процедур.
Если нажатие кнопки открывает диалоговое окно (например, выбор каталога или файла через ДиалогВыбораФайла), выполним следующие действия:
В конфигураторе в меню выберем Отладка → Остановить (или используем комбинацию клавиш). После этого перейдем в работающий сеанс «1С:Предприятие» и нажмем интересующую нас кнопку. Платформа прервет выполнение клиентского кода на первой же инструкции, и конфигуратор автоматически откроет модуль с курсором на выполняемой строке.
Если нам известно имя серверной функции или общего модуля, куда передаются считанные данные, установим точку останова в этой функции. Запустим сценарий загрузки в пользовательском режиме. Когда отладчик остановится на точке:
Откроем окно Стек вызовов (главное меню Отладка → Окна → Стек вызовов). В списке вызовов проанализируем всю иерархию от исходной клиентской процедуры расширения или формы до текущего модуля.
Если код выполняется быстро и точку останова поставить некуда, воспользуемся замером производительности:
В конфигураторе включим Отладка → Замер производительности. В режиме предприятия нажмем кнопку, выполним выбор файла и дождемся завершения операции. Выключим замер. В открывшейся таблице отсортируем строки по модулям — в списке сразу отобразятся клиентские процедуры, сработавшие при клике.
Выясним причину, почему глобальный поиск конфигуратора часто не находит код, расположенный в расширениях. При стандартном поиске область охватывает только основную конфигурацию, если расширение не открыто отдельно.
Разберем порядок проверки расширений:
Документы, Журналы документов, Общие команды и Общие модули внутри расширения.Использование данных методов позволяет быстро выявить происхождение любых элементов интерфейса и перейти к отладке их исходного кода.