Что делать, если отладчик 1С не видит форму документа и игнорирует точки останова?

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

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

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

Решение 1. Конфликты и сбои метаданных в расширениях конфигурации

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

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

Для устранения этой проблемы выполним следующие действия:

  1. Откроем конфигуратор и перейдем в меню Конфигурация -> Расширения конфигурации.
  2. Найдем расширение, в котором заимствована или создана проблемная форма документа.
  3. Выясним, вносились ли изменения в эту форму. Если изменения критически важны, предварительно скопируем текст процедур в текстовый файл, чтобы не потерять наработки.
  4. Удалим проблемную форму из расширения конфигурации.
  5. Выполним обновление конфигурации базы данных (клавиша F7).
  6. Заново заимствуем форму документа в расширение и перенесем туда наш программный код.
  7. Запустим отладку заново. В подавляющем большинстве случаев после этого пересоздания связь восстанавливается, и точки останова начинают исправно срабатывать.

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

  1. В конфигураторе включим замер производительности через меню Отладка -> Замер производительности.
  2. В режиме предприятия откроем форму документа и выполним действие, код которого нам нужно отладить.
  3. Вернемся в конфигуратор и отключим замер производительности через то же меню.
  4. В открывшемся окне результатов замера найдем строчку кода, которая должна была выполниться в модуле формы.
  5. Дважды кликнем по этой строчке. Платформа принудительно откроет «дублирующее» временное окно этого модуля формы.
  6. Установим точку останова прямо в этом открывшемся окне. Как показывает опыт, в таком «захваченном» модуле отладчик начинает работать корректно.

Решение 2. Очистка локального и серверного кэша платформы

Второй по частоте причиной сбоев сопоставления исполняемого кода и конфигуратора является некорректное кэширование метаданных. Кэш 1С оптимизирует скорость работы интерфейса, но при частых обновлениях структуры документов он начинает содержать устаревшие версии модулей.

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

  1. Полностью закроем все сеансы «1С:Предприятия» и «Конфигуратора».
  2. Откроем проводник Windows и перейдем в каталог локальных данных пользователя. Для этого в адресной строке введем %localappdata%\1C\1cv8 и нажмем Enter.
  3. Удалим все папки с длинными шестнадцатеричными именами (например, вида 1a2b3c4d-5e6f-...). Именно в них хранятся временные файлы форм и модулей.
  4. Аналогично перейдем в каталог роуминга: введем в адресной строке %appdata%\1C\1cv8 и также очистим папки с кэшем метаданных.
  5. Если мы работаем с файловой базой данных, полезно добавить в параметры запуска базы специальный ключ для автоматической очистки при старте. Для этого в окне запуска 1С выберем нашу базу, нажмем Изменить, перейдем на вкладку дополнительных параметров запуска и пропишем параметр /ClearCache.

Решение 3. Настройка автоматического подключения к фоновым заданиям

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

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

  1. В конфигураторе перейдем в меню Отладка -> Подключение....
  2. В открывшемся диалоговом окне нажмем кнопку Автоматическое подключение.
  3. В списке доступных типов объектов обязательно установим флажок напротив пункта Фоновые задания.
  4. Также рекомендуется установить флажки для Тонкого клиента и Сервера, если они не были установлены.
  5. Нажмем ОК для сохранения настроек. Теперь при создании фонового задания отладчик мгновенно перехватит управление, и точка останова в процедуре модуля формы сработает.

Решение 4. Проверка привязки событий в свойствах формы

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

Выясним, привязано ли событие к этой процедуре:

  1. Откроем редактор управляемой формы в конфигураторе.
  2. В левом верхнем углу (в дереве элементов формы) выберем самый верхний элемент — саму форму (обычно она называется так же, как и документ, или имеет имя Форма).
  3. Откроем палитру свойств (сочетание клавиш Alt + Enter или через контекстное меню).
  4. Прокрутим список свойств в самый низ, до раздела События.
  5. Найдем интересующее нас событие, например, При создании на сервере или При открытии.
  6. Посмотрим на поле ввода рядом с событием. Оно должно содержать имя нашей процедуры. Если поле пустое, это означает, что связь разорвана. Платформа просто игнорирует код в модуле, так как не знает, что его нужно вызвать при наступлении события.
  7. Нажмем на кнопку с лупой рядом с пустым полем и выберем нашу готовую процедуру из списка модуля. Связь восстановится.

Решение 5. Устранение сетевых блокировок брандмауэра и антивируса

Начиная с платформы 8.3, отладка в 1С реализована по сетевым протоколам TCP/IP и HTTP. Конфигуратор и исполняемый сеанс (клиент или сервер) обмениваются пакетами данных через сетевые порты локального хоста (даже если база файловая и запущена локально). Брандмауэр Windows или сторонний антивирус может блокировать эти соединения, из-за чего точки останова не передаются в исполняемое приложение.

Разберем, как решить проблемы сетевого взаимодействия:

  1. Для отладки по протоколу TCP/IP используются порты из диапазона 1560–1591, а также управляющий порт 1550. Убедимся, что они открыты.
  2. Откроем брандмауэр Windows в режиме повышенной безопасности.
  3. Создадим новое правило для входящих подключений (и аналогично для исходящих).
  4. Укажем тип правила — Для порта, выберем протокол TCP и укажем диапазон портов 1550, 1560-1591.
  5. Разрешим подключение для всех профилей сети.
  6. Если используется файловый вариант, добавим исполняемый файл тонкого клиента 1cv8.exe (находящийся в папке установленной платформы C:\Program Files\1cv8\...) в список исключений брандмауэра и антивирусного сетевого экрана.

Решение 6. Экстренный обходной путь — Искусственная остановка по ошибке

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

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

Добавим в начало интересующей нас процедуры в модуле управляемой формы строку, которая вызовет ошибку, например:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Искусственная точка останова
    ВызватьИсключение "СТОП_ОТЛАДКА";
    
    // Дальнейший полезный код формы
    ЗначениеВРеквизитФормы(Параметры.ЗначениеКопирования, "Объект");
    
КонецПроцедуры

После добавления этого кода настроим конфигуратор для перехвата исключения:

  1. В меню конфигуратора выберем Отладка -> Настройка отладки....
  2. Перейдем на вкладку или в раздел настройки остановки по ошибке.
  3. Установим флаг Останавливаться по ошибке.
  4. При необходимости настроим фильтр: укажем, чтобы платформа останавливалась только при генерации исключений, содержащих в тексте строку "СТОП_ОТЛАДКА". Это позволит не отвлекаться на другие системные ошибки конфигурации.
  5. Запустим сеанс. Как только код дойдет до нашей строки, платформа прервет выполнение, выведет окно ошибки и предложит открыть конфигуратор прямо на строке с вызовом исключения. Отсюда мы сможем свободно проанализировать значения переменных и стек вызовов.

Решение 7. Настройка параметров публикации на веб-сервере

Если ваша база опубликована на веб-сервере (IIS или Apache) и вы запускаете отладку через веб-клиент или тонкий клиент, подключающийся по HTTP/HTTPS, отладка серверных процедур формы не будет функционировать «из коробки».

Для активации отладки нам потребуется отредактировать файл публикации:

  1. Перейдем в каталог, где опубликована база данных (путь к физическому каталогу указывается при публикации в конфигураторе, обычно это что-то вроде C:\inetpub\wwwroot\MyBase для IIS).
  2. Найдем файл конфигурации публикации с именем default.vrd и откроем его в любом текстовом редакторе (например, Блокноте) от имени Администратора.
  3. Найдем корневой тег <point>.
  4. Внутри этого тега нам необходимо прописать атрибуты отладки. Добавим или отредактируем строку, чтобы она выглядела следующим образом:

<debug enable="true" url="tcp://localhost:1560" />

В параметре url укажем адрес нашего локального отладчика. После сохранения файла обязательно перезапустим службу веб-сервера (IIS или Apache). Теперь веб-сервер будет корректно транслировать сессии отладки обратно в ваш конфигуратор, и точки останова в модуле управляемой формы начнут стабильно перехватывать управление.

← На главную