Разберем ситуацию, которая часто ставит в тупик даже опытных разработчиков 1С: вы устанавливаете точку останова в модуле объекта отчета СКД, в процедуре ПриКомпоновкеРезультата, но при формировании отчета программа ее «проскакивает», хотя код явно выполняется. Рассмотрим подробно все причины — от самых простых до глубоких технических нюансов серверной отладки.
Проанализируем механизм работы платформы при открытии внешнего отчета через меню «Файл — Открыть». Если в информационной базе в справочнике «Дополнительные отчеты и обработки» уже зарегистрирован отчет с точно таким же внутренним именем (идентификатором), система может повести себя коварно. Вместо того чтобы выполнять код из файла, который вы только что открыли, платформа подтягивает версию отчета, уже сохраненную в справочнике или кешированную в системе.
Выясним, как это устранить. Самый быстрый и надежный способ — изменить имя отчета в конфигураторе. Посмотрим на алгоритм действий:
Имя (например, добавьте префикс _Тест).Как показывает практика, в 80% случаев это решает проблему, так как система начинает воспринимать объект как новый и подгружает актуальный модуль с вашей точкой останова.
В современных конфигурациях, построенных на базе БСП (Библиотеки стандартных подсистем), таких как «Бухгалтерия предприятия 3.0» или «ERP», отчеты по умолчанию формируются в фоновом задании. Это делается для того, чтобы интерфейс пользователя не блокировался во время длительных вычислений. Процедура ПриКомпоновкеРезультата в этом случае выполняется в отдельном сеансе фонового задания на сервере.
Разберем, как настроить отладчик для перехвата таких сеансов. Проанализируем настройки конфигуратора:
Важный нюанс: фоновое задание может выполняться настолько быстро, что отладчик просто не успевает его «подцепить». Чтобы дать системе время на установку связи, можно временно добавить в начало процедуры ПриКомпоновкеРезультата искусственную задержку:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
// Временная пауза для подключения отладчика к фоновому заданию
ТекущаяДатаСеанса = ТекущаяДата();
Пока ТекущаяДата() < ТекущаяДатаСеанса + 10 Цикл
// Ждем 10 секунд
КонецЦикла;
// Ваша точка останова здесь
СтандартнаяОбработка = Ложь;
// ... дальнейший код
КонецПроцедуры
Выясним техническую причину, связанную с настройкой сервера 1С. Начиная с версии платформы 8.3.14, появился новый протокол отладки по HTTP. Если ваш сервер запущен с ключом -debug (используется TCP/IP), а клиент пытается использовать HTTP, или наоборот, отладка работать не будет.
Проанализируем строку запуска службы сервера 1С. Обычно она выглядит так:
"C:\Program Files\1cv8\8.3.25.1374\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Убедитесь, что:
-debug для TCP-отладки.-http.Если стандартная точка останова упорно игнорируется, применим хитрость, которую часто используют профессиональные разработчики. Мы заставим систему прерваться принудительно, вызвав исключительную ситуацию.
Выполним следующие шаги:
А = 1 / 0;
Система будет вынуждена остановиться на строке с ошибкой. В открывшемся окне нажмите кнопку Конфигуратор, и вы окажетесь именно в том контексте выполнения, который вам нужен. После этого можно удалить ошибочную строку и продолжить отладку по шагам (клавиши F10, F11).
Иногда причиной проблемы становится некорректное состояние локального кэша метаданных. Система «помнит» старую версию модуля, где точки останова еще не было. Рассмотрим, как правильно очистить кэш:
%AppData%\1C\1cv8).1C:Enterprise Server и очистка серверного кэша (папка snccntxt в каталоге данных сервера), если отчет является встроенным и его код был изменен в конфигурации.Проанализируем ситуацию с внешними отчетами. Если отчет открывается через механизм дополнительных отчетов и обработок, он может запускаться в Безопасном режиме. В этом режиме отладка серверных вызовов может блокироваться политиками безопасности. Чтобы проверить эту гипотезу, попробуйте открыть отчет напрямую через Файл - Открыть под пользователем с полными правами. Если в этом случае точка останова сработает — значит, проблема в ограничениях прав или безопасного режима при запуске из справочника.
Подводя итог, скажем: если точка останова в ПриКомпоновкеРезультата не срабатывает, первым делом смените имя отчета и проверьте включение отладки фоновых заданий. Эти два действия решают проблему в подавляющем большинстве случаев.