При разработке и сопровождении конфигураций на платформе 1С:Предприятие 8.3 программисты иногда сталкиваются с крайне неприятной ситуацией: точка остановки в отладчике срабатывает, выполнение кода замирает на нужной строке, но при наведении курсора на переменные или при попытке добавить их в Табло значения не отображаются. Вместо ожидаемых данных мы видим пустоту или сообщение о том, что переменная не определена, хотя код успешно выполняется. Особенно часто это проявляется в старых конфигурациях, таких как Управление торговлей 10.3, работающих на платформе 8.3 под управлением обычных форм.
В этой статье мы подробно разберем, почему возникает такая проблема, проанализируем влияние конкретных релизов платформы и выясним, какие шаги необходимо предпринять для восстановления нормальной работы отладчика.
Первое, на что нам стоит обратить внимание — это где именно выполняется код. В обычных формах (как в случае с УТ 10.3) большинство процедур в модуле формы выполняются на клиенте (в контексте Толстого клиента). Однако при использовании платформы 8.3 механизмы отладки стали более требовательными к сетевой инфраструктуре и настройкам сервера.
Проанализируем ситуацию: если отладчик «видит» переменные в модуле объекта, но «не видит» их в модуле формы, это может указывать на то, что отладочная информация некорректно передается именно для клиентского сеанса. Посмотрим на типичный пример процедуры обработки события нажатия кнопки:
Процедура КнопкаВыполнитьНажатие(Кнопка)
Построитель = Новый ПостроительОтчета;
Построитель.Текст = "ВЫБРАТЬ * ИЗ Справочник.Номенклатура";
// В этой точке отладчик может не показывать значение переменной Построитель
Построитель.Выполнить();
КонецПроцедуры
Если вы столкнулись с таким поведением, попробуйте временно перенести логику в серверную процедуру или в модуль объекта. Если там значения переменных отображаются корректно, значит, проблема кроется в механизме взаимодействия клиентской части отладчика с сервером отладки.
В нашем случае используется платформа версии 8.3.12.1440. Стоит отметить, что ветка 8.3.12 была переходным этапом, в котором 1С внедряла новые протоколы отладки. Версия 1440 имела зафиксированные баги, связанные с некорректным формированием отладочных символов для модулей обычных форм.
Рассмотрим, почему это происходит. При компиляции модуля в режиме отладки платформа создает специальную карту соответствия адресов памяти и имен переменных. Из-за ошибок оптимизации в релизе 8.3.12 эта карта могла создаваться с ошибками для «тяжелых» модулей форм. Проверим это предположение: если выгрузить обработку во внешний файл и запустить её в другой, «чистой» базе, и проблема сохранится — дело определенно в релизе платформы или структуре самого модуля.
Решение: Рекомендуется обновить платформу до более стабильных сборок, например, последних в ветке 8.3.12 (8.3.12.1924) или перейти на современные версии 8.3.15 и выше, где работа с обычными формами была стабилизирована.
Очистка кэша — это «золотой стандарт» решения проблем в 1С, но выполнять её нужно правильно. Простое удаление базы из списка и повторное добавление (как сделал автор темы) помогает далеко не всегда, так как папки кэша в каталоге %AppData%\Local\1C\1cv8 могут быть привязаны к идентификатору базы (GUID), который иногда сохраняется.
Выполним правильную очистку кэша по шагам:
%AppData%\Roaming\1C\1cv8 и %AppData%\Local\1C\1cv8.eb92d1...).Если это не помогло, проанализируем состояние базы данных. Иногда помогает выполнение операции Тестирование и исправление с включенными опциями «Реиндексация таблиц» и «Пересчет итогов», хотя прямого влияния на отладчик эти действия не имеют, они помогают устранить логические несоответствия в таблицах Config.
Современные версии платформы 8.3 по умолчанию могут пытаться использовать протокол HTTP для отладки вместо старого TCP. Если сервер 1С и клиент находятся в разных подсетях или между ними стоит брандмауэр, часть трафика (именно та, что отвечает за передачу содержимого переменных) может блокироваться.
Рассмотрим, как принудительно настроить режим отладки. В параметрах запуска службы агента сервера 1С (ragent.exe) используется ключ -debug. Если вы испытываете проблемы с видимостью переменных, попробуйте переключить отладку в режим HTTP. Для этого в настройках службы добавляется параметр -http. Это делает процесс отладки более устойчивым к сетевым задержкам и ограничениям прав доступа ОС.
Выясним еще один нюанс: часто отладчик перестает показывать значения, когда мы работаем с объектами типа ПостроительОтчета, COMОбъект или специфическими коллекциями. В платформе 8.3 при работе в режиме обычного приложения отладчик может не справляться с визуализацией всего объекта целиком.
Посмотрим на пример того, как можно «обмануть» отладчик и все же увидеть нужные данные:
Построитель, попробуйте вычислить конкретное выражение в Табло.ЗначениеЗаполнено(Построитель.Текст) или просто обращение к вложенному свойству.Строка(Построитель.Текст).Если проблема локализована в одной конкретной форме, как пишет автор (сообщение №2), велика вероятность микроповреждения структуры этой формы в метаданных. Разберем алгоритм «лечения» такой формы:
Этот процесс заставляет платформу полностью перезаписать записи в системных таблицах базы данных, отвечающих за хранение кода и форм этого объекта. В большинстве случаев после такой процедуры отладчик начинает работать корректно, так как устраняются ошибки в индексах отладочных символов.
Подводя итог, можно сказать, что невидимость переменных в отладчике на платформе 8.3.12 при работе с УТ 10.3 — это комплексная проблема. Мы выяснили, что она может быть вызвана как багом конкретного релиза, так и сетевыми настройками или «битым» кэшем.
Наиболее эффективный порядок действий следующий: сначала пробуем полную очистку кэша, затем проверяем работу в серверном контексте, и если это не помогает — обновляем платформу до актуальной версии 8.3.15 или выше. Помните, что стабильность работы инструментов разработчика напрямую зависит от соответствия версии платформы и используемых в конфигурации технологий.