При работе с конфигурациями на обычных формах, такими как 1С:Комплексная автоматизация 1.1 или 1С:Управление производственным предприятием 1.3, разработчики часто сталкиваются с ситуацией, когда отладчик «пролетает» мимо точек останова в общих модулях. Особенно это заметно в критически важных модулях, таких как УправлениеЗапасамиПартионныйУчет. Проблема осложняется тем, что в модулях объектов (например, в процедуре ПередЗаписью или ОбработкаПроведения документа) отладка может работать исправно, что вводит программиста в заблуждение.
В данной статье мы подробно разберем, почему возникает такая избирательность отладчика, и пошагово настроим среду для полноценной работы в клиент-серверном режиме.
Первым делом нам необходимо проанализировать, почему отладка работает в модуле объекта, но игнорирует общий модуль. В режиме Толстого клиента (обычное приложение) код модуля объекта при проведении документа физически выполняется на компьютере пользователя (на стороне клиента). Для отладки такого кода не требуется включать специальный режим на сервере 1С.
Однако, как только управление передается в общий модуль, у которого установлены флаги Сервер и Вызов сервера, выполнение кода переносится на серверную машину. Если сервер 1С:Предприятия не запущен в специальном режиме отладки, или если сетевые экраны блокируют отладочные порты, точка останова внутри этого модуля никогда не сработает. Рассмотрим подробнее, как обеспечить прохождение отладки через эти границы.
Выясним, действительно ли сервер 1С готов к отладке. Даже если вы уверены, что ключ прописан, стоит проверить его положение в строке запуска. Проанализируем системный реестр Windows на сервере, где установлена служба 1C:Enterprise 8.2 Server Agent (или 8.3, в зависимости от вашей платформы).
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.2 Server Agent (название ветки может отличаться версией платформы).ImagePath.-debug.Важный нюанс: параметр -debug должен располагаться строго перед параметрами, определяющими диапазон портов (например, -range). Рассмотрим пример правильной строки запуска:
"C:\Program Files\1cv82\8.2.19.130\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv82\srvinfo"
После изменения реестра обязательно нужно перезапустить службу сервера 1С. Помните, что простая перезагрузка консоли администрирования не применит изменения в реестре.
Если ключ -debug установлен, но отладка в общем модуле УправлениеЗапасамиПартионныйУчет все равно не срабатывает, проверим сетевое окружение. Для передачи данных отладчику сервер использует динамический диапазон портов.
Рассмотрим ситуацию с брандмауэром. По умолчанию сервер 1С использует порты в диапазоне 1560–1591 для отладочных соединений. Если на сервере или на рабочем месте программиста включен Windows Firewall (или другой антивирус с сетевым экраном), эти порты должны быть открыты для входящего и исходящего трафика. Посмотрим на алгоритм проверки:
IPv6. Платформа 8.2 иногда некорректно сопоставляет имена серверов при включенном IPv6. Попробуем прописать жесткое соответствие IP-адреса и имени сервера в файле hosts.Проанализируем настройки самого Конфигуратора. Бывают случаи, когда сервер готов отдавать отладочную информацию, но клиентская часть ее «не слушает». Разберем, как принудительно подключить серверные процессы.
Если в списке доступных предметов отладки серверные процессы не отображаются вовсе, это прямой признак того, что либо служба сервера запущена без ключа -debug, либо сетевой экран блокирует широковещательные пакеты отладчика.
Иногда причиной «проскакивания» точек останова является рассинхронизация скомпилированного кода в кеше и текста модуля в конфигурации. Это часто случается в больших конфигурациях типа КА 1.1 после динамического обновления. Для корректного обслуживания системы и минимизации технических ошибок при выполнении регламентных работ применяется автоматическое обновление и тестирование баз 1С в тихом режиме.
Выясним, как правильно очистить кеш:
C:\Program Files\1cv82\srvinfo). Удалим содержимое папок внутри snaccxt и временные файлы в папках рабочих процессов.В вашем случае общий модуль УправлениеЗапасамиПартионныйУчет помечен как Привилегированный. На старых релизах платформы (8.2.19.130) это иногда вызывает трудности при инициализации сессии отладки. Рассмотрим в качестве диагностической меры временное снятие флага Привилегированный (если это не нарушает логику прав доступа для теста). Если отладка в обычном серверном модуле заработает, значит проблема в специфике работы платформы с правами, и стоит задуматься об обновлении платформы до актуальных релизов ветки 8.3, где работа с отладкой значительно стабильнее.
Проделав эти шаги, мы обеспечим стабильную связь между клиентским приложением и серверными процессами, что позволит детально проанализировать работу механизмов партионного учета в 1С:Комплексной автоматизации. Для контроля правильности сформированных движений и поиска расхождений между базами проводится автоматическая сверка бухгалтерских и налоговых проводок.