Каждый разработчик 1С рано или поздно сталкивается с мистической ситуацией: вы запускаете сеанс отладки, открываете нужный документ, совершаете целевое действие, но отладчик упорно игнорирует точки останова в модуле управляемой формы. При этом в модуле объекта или модуле менеджера того же документа все отрабатывает идеально. Возникает ощущение, что платформа выполняет совершенно другую форму, хотя визуально и по структуре метаданных она одна-единственная.
В этой статье мы подробно проанализируем причины такого поведения платформы 1С:Предприятие 8.3, разберем по шагам неочевидные нюансы взаимодействия конфигуратора с тонким клиентом и сервером, а также рассмотрим комплексные методы решения этой проблемы — от простых манипуляций с кэшем до тонкой настройки сетевых портов и работы с расширениями конфигурации.
Как показывает практика практикующих разработчиков, в современных конфигурациях на управляемых формах основной причиной «невидимости» формы для отладчика являются сбои в механизме расширений. Когда форма документа заимствуется в расширение, платформа создает сложную связь между основной конфигурацией и базой данных расширения. При активной разработке, особенно в условиях динамического обновления конфигурации базы данных, метаданные отладчика могут рассинхронизироваться.
Проанализируем ситуацию: код формы физически выполняется платформой (пользователь видит изменения на экране), но конфигуратор считает, что выполняется модуль основной конфигурации, в то время как управление уже передано модулю расширения. Из-за этого «сдвига» точки останова в расширении просто игнорируются.
Для устранения этой проблемы выполним следующие действия:
Рассмотрим также очень полезный лайфхак, который помогает обойти баг платформы без удаления формы. Если точки останова игнорируются, мы можем использовать замер производительности для «захвата» нужного контекста:
Второй по частоте причиной сбоев сопоставления исполняемого кода и конфигуратора является некорректное кэширование метаданных. Кэш 1С оптимизирует скорость работы интерфейса, но при частых обновлениях структуры документов он начинает содержать устаревшие версии модулей.
Проанализируем процесс полной очистки кэша. Обычного удаления базы из списка и повторного добавления может быть недостаточно. Выполним глубокую очистку по шагам:
%localappdata%\1C\1cv8 и нажмем Enter.1a2b3c4d-5e6f-...). Именно в них хранятся временные файлы форм и модулей.%appdata%\1C\1cv8 и также очистим папки с кэшем метаданных./ClearCache.В управляемом интерфейсе (особенно в типовых конфигурациях, построенных на БСП) логика работы форм часто оптимизирована с точки зрения отзывчивости. Открытие формы, заполнение ее реквизитов по умолчанию или выполнение сложных расчетов при создании могут выполняться асинхронно во временных фоновых заданиях на сервере.
По умолчанию отладчик конфигуратора подключается только к текущему клиентскому сеансу и основному рабочему процессу сервера. Если выполнение кода уходит в фон, отладчик просто «пролетает» мимо точек останова. Чтобы исправить это, настроим автоматическое подключение:
Иногда корень проблемы кроется не в технических сбоях платформы, а в простой человеческой невнимательности. Проанализируем ситуацию, когда процедура-обработчик (например, ПриСозданииНаСервере или ПриОткрытии) физически присутствует в тексте модуля формы, но отладчик на ней не останавливается.
Выясним, привязано ли событие к этой процедуре:
Форма).Начиная с платформы 8.3, отладка в 1С реализована по сетевым протоколам TCP/IP и HTTP. Конфигуратор и исполняемый сеанс (клиент или сервер) обмениваются пакетами данных через сетевые порты локального хоста (даже если база файловая и запущена локально). Брандмауэр Windows или сторонний антивирус может блокировать эти соединения, из-за чего точки останова не передаются в исполняемое приложение.
Разберем, как решить проблемы сетевого взаимодействия:
1560–1591, а также управляющий порт 1550. Убедимся, что они открыты.1550, 1560-1591.1cv8.exe (находящийся в папке установленной платформы C:\Program Files\1cv8\...) в список исключений брандмауэра и антивирусного сетевого экрана.Если вам необходимо срочно разобраться в поведении кода, а все вышеперечисленные методы отладки не помогают заставить точку останова сработать, применим проверенный временем профессиональный обходной путь — вызов контролируемой ошибки.
Суть метода заключается в том, что платформа гарантированно останавливает выполнение кода при возникновении необработанного исключения, если в конфигураторе включена соответствующая настройка. Посмотрим на пример реализации.
Добавим в начало интересующей нас процедуры в модуле управляемой формы строку, которая вызовет ошибку, например:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Искусственная точка останова
ВызватьИсключение "СТОП_ОТЛАДКА";
// Дальнейший полезный код формы
ЗначениеВРеквизитФормы(Параметры.ЗначениеКопирования, "Объект");
КонецПроцедуры
После добавления этого кода настроим конфигуратор для перехвата исключения:
Если ваша база опубликована на веб-сервере (IIS или Apache) и вы запускаете отладку через веб-клиент или тонкий клиент, подключающийся по HTTP/HTTPS, отладка серверных процедур формы не будет функционировать «из коробки».
Для активации отладки нам потребуется отредактировать файл публикации:
C:\inetpub\wwwroot\MyBase для IIS).default.vrd и откроем его в любом текстовом редакторе (например, Блокноте) от имени Администратора.<point>.
<debug enable="true" url="tcp://localhost:1560" />
В параметре url укажем адрес нашего локального отладчика. После сохранения файла обязательно перезапустим службу веб-сервера (IIS или Apache). Теперь веб-сервер будет корректно транслировать сессии отладки обратно в ваш конфигуратор, и точки останова в модуле управляемой формы начнут стабильно перехватывать управление.