Как найти и изменить код общей команды в 1С, если не срабатывают точки останова

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

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

Поиск модуля общей команды в дереве метаданных

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

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

Обычно в таких модулях располагается предопределенная процедура ОбработкаКоманды. Рассмотрим типичный пример кода, который встречается в конфигурациях на базе БСП:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    // Запуск замера времени для оценки производительности (APDEX)
    ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, "ОбщаяФорма.ДокументыПоДоговору");
    
    // Открытие целевой формы с передачей параметров
    ОткрытьФорму("ОбщаяФорма.ДокументыПоДоговору",
        Новый Структура("Договор", ПараметрКоманды),
        ПараметрыВыполненияКоманды.Источник,
        ПараметрыВыполненияКоманды.Уникальность,
        ПараметрыВыполненияКоманды.Окно,
        ПараметрыВыполненияКоманды.НавигационнаяСсылка);
        
КонецПроцедуры

Если вы нашли этот код, но точка останова на строке ОткрытьФорму не срабатывает, переходим к следующему этапу анализа.

Настройка отладки на сервере и проверка протоколов

Одной из самых частых причин «нерабочих» точек останова является отсутствие связи между предметом отладки (сеансом пользователя) и конфигуратором. Выясним основные причины:

1. Отладка на сервере. Если база работает в клиент-серверном варианте, выполнение кода может переходить с клиента на сервер (например, в процедурах ПриСозданииНаСервере или при вызове серверных функций модуля команды). Если на сервере 1С не включен режим отладки (параметр -debug), то точки останова в серверном коде будут игнорироваться. Рассмотрим необходимость включения отладки на стороне сервера приложений.

2. Протокол отладки. Начиная с версии платформы 8.3.14, 1С поддерживает два протокола: TCP/IP и HTTP. Проанализируем настройки: перейдите в Сервис — Настройки — Отладка. Если выбран протокол HTTP, убедитесь, что адрес отладчика указан верно и порт не блокируется брандмауэром. Часто переключение на старый добрый TCP/IP решает проблему внезапного «исчезновения» точек останова.

3. Список предметов отладки. Иногда автоматическое подключение не срабатывает. Зайдите в меню Отладка — Подключение. Убедитесь, что ваш сеанс (Тип «Тонкий клиент» или «Сеанс сервера») находится в списке подключенных. Если нет — выделите его в списке доступных и нажмите «Подключить».

Использование замера производительности для поиска кода

Если визуальный поиск в конфигураторе не помогает, и вы не уверены, тот ли это модуль, воспользуемся проверенным инструментом — Замером производительности. Это отличный способ увидеть «карту» выполнения кода.

Разберем по шагам, как это сделать:

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

В открывшемся окне вы увидите список всех процедур и функций, которые были вызваны. Проанализируем колонку «Модуль». Это позволит вам точно определить, какая ОбщаяКоманда или какой ОбщийМодуль сработал в момент нажатия кнопки. Если в списке нет вашей процедуры ОбработкаКоманды, значит, система использует другой механизм (например, подключаемые команды БСП).

Влияние расширений конфигурации

В современных системах (КА 2.4, ERP) многие функции выносятся в расширения. Проанализируем ситуацию: если общая команда была заимствована в расширение и там создан метод с аннотацией &Вместо, то код в основной конфигурации выполняться не будет.

Важные моменты при работе с расширениями:

Принудительная остановка через паузу

Если вы уверены, что отладка включена, но точка все равно игнорируется, применим метод «Паузы». Рассмотрим этот алгоритм:

  1. Подготовьте систему к нажатию кнопки (откройте нужную форму).
  2. В конфигураторе нажмите кнопку Остановить (иконка с синими полосками паузы) в панели отладки.
  3. Нажмите кнопку команды в предприятии.

Если отладка в принципе доступна для этого сеанса, 1С прервет выполнение на первой же исполняемой строке кода. Это позволит вам по шагам (клавиша F11) проследить весь путь вызова — от ядра системы до модуля вашей команды.

Проблема динамического обновления

Нельзя забывать и о «демоническом» (динамическом) обновлении. Если вы правили код модуля команды и обновляли конфигурацию базы данных динамически, возможна ситуация, когда сеанс пользователя продолжает исполнять старую версию скомпилированного кода, в которой просто нет вашей точки останова.

Рассмотрим решение: необходимо полностью завершить все сеансы пользователей и выполнить процедуру Обновить конфигурацию базы данных (F7) в монопольном режиме. Также крайне полезно очистить локальный кэш пользователя на рабочем месте, где производится отладка.

Особенности механизма подключаемых команд (БСП)

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

В этом случае платформа динамически определяет, какой модуль вызвать. Если вы столкнулись с такой архитектурой, ставьте точку останова в указанном общем модуле и отслеживайте значение переменной ИмяКоманды или ОписаниеКоманды. Это поможет вам выйти на истинный исполняемый модуль.

Используя комплексный подход — от настройки параметров сервера до замера производительности — мы всегда сможем найти «потерявшийся» код и успешно внести изменения в работу общих команд системы.

← На главную