В процессе разработки и поддержки конфигураций на платформе 1С:Предприятие 8.3, особенно таких сложных, как Зарплата и управление персоналом 3.1 (ЗУП), программисты часто сталкиваются с коварной проблемой: точки останова в модулях внезапно перестают срабатывать. Казалось бы, еще вчера отладка работала идеально, но сегодня конфигуратор упорно игнорирует установленные маркеры, хотя код явно выполняется. Рассмотрим подробно, почему это происходит и как вернуть контроль над процессом выполнения программы.
Это самая частая причина «исчезновения» точек останова в современных конфигурациях. В ЗУП 3.1 многие отчеты (например, Расчетный листок) и тяжелые обработки используют механизм длительных операций. Даже если вы работаете в файловом режиме, система имитирует разделение процессов, чтобы интерфейс пользователя не «зависал» во время формирования отчета.
Проанализируем ситуацию: когда вы нажимаете кнопку «Сформировать», основной сеанс клиента порождает еще один сеанс — фоновое задание. Конфигуратор по умолчанию «слушает» только основной сеанс. Чтобы точка останова сработала внутри фонового процесса, необходимо выполнить следующие действия:
После включения этой опции конфигуратор будет автоматически подключаться ко всем порожденным процессам, и точка останова в общем модуле ЗарплатаКадрыОтчеты или любом другом месте сработает корректно.
Начиная с версии платформы 8.3.7, отладка может работать по двум протоколам: TCP/IP и HTTP. По умолчанию в новых версиях часто предлагается HTTP. Однако в файловом режиме или при специфических настройках сети отладка по HTTP может вести себя нестабильно. Выясним, как это проверить:
Разберем процесс переключения протокола:
Иногда брандмауэр или антивирус могут блокировать динамические порты (обычно диапазон 1560–1591), используемые для TCP-отладки. В этом случае отладка по HTTP может быть более стабильной, так как она использует стандартные веб-порты.
В файловом режиме 1С иногда возникают ситуации, когда конфигуратор и клиентский сеанс начинают «видеть» разные версии кода из-за локального кэша. Проанализируем, как правильно очистить систему от подобных артефактов:
%AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8. Это заставит систему заново считать метаданные и модули.1cv8.exe или 1cv8c.exe. Если база была закрыта некорректно, старый сеанс может удерживать блокировки модулей, мешая отладчику подключиться к новому сеансу.Проверим банальную, но часто встречающуюся ситуацию. Если вы правили код модуля и поставили точку останова, а затем удалили пустые строки или изменили структуру цикла, визуальный маркер в конфигураторе может сместиться на пустую строку или на комментарий. В этом случае 1С просто не увидит команду для остановки.
Рассмотрим правильный алгоритм действий:
Для каждого или присвоении значения переменной).Пример кода, где точка останова может не сработать, если она стоит на пустом заголовке или комментарии:
// Это комментарий (точка здесь может не сработать)
Процедура РасчитатьНачисления()
// Пустая строка ниже тоже плохой вариант
Для Каждого Строка Из ТаблицаНачислений Цикл // Ставьте точку ТУТ
Строка.Результат = 0;
КонецЦикла;
КонецПроцедуры
Если в вашей базе ЗУП 3.1 используются расширения, они могут перехватывать выполнение методов с помощью аннотаций &Вместо, &Перед или &После. Посмотрим на ситуацию глазами платформы: если код основного модуля был полностью заменен (&Вместо) кодом из расширения, то точка останова в основном модуле никогда не сработает, так как этот участок кода просто не исполняется. В таком случае точку останова необходимо ставить именно в модуле расширения.
Выясним причину, связанную со свойствами общих модулей. Если вы пытаетесь отладить код в общем модуле, проверьте его свойства в дереве метаданных. У модуля должны быть установлены флаги Клиент (управляемое приложение) или Вызов сервера, в зависимости от того, откуда вызывается код. В файловой базе грань между клиентом и сервером размыта, но правила видимости объектов для отладчика остаются строгими.
Если вышеперечисленные методы не помогают, попробуйте применить «метод исключения»:
ЗаписьЖурналаРегистрации("Отладка_Моя", УровеньЖурналаРегистрации.Информация, , , "Код выполнен в " + ТекущаяДата());
Подводя итог, можно сказать, что в 90% случаев в ЗУП 3.1 проблема решается именно включением отладки фоновых заданий. Это связано с архитектурой конфигурации, которая стремится выполнять все ресурсоемкие задачи асинхронно.