При разработке и администрировании систем на платформе 1С:Предприятие специалисты часто сталкиваются со странным поведением отладчика: точка останова срабатывает в клиентском коде непосредственно перед вызовом процедуры, но при попытке войти внутрь по кнопке F11 программа просто проскакивает строку и продолжает выполнение. Особенно остро эта проблема проявляется в конфигурациях на обычных формах (например, УПП 1.3), где тяжелые процедуры партионного учета (такие как УправлениеЗапасамиПартионныйУчет.ЗарегистрироватьДокументВПоследовательностяхПартионногоУчетаНаСервере) выполняются строго на сервере.
В этой статье мы подробно разберем по шагам, почему возникает эта проблема, проанализируем ситуацию с параллельной работой двух версий платформы (8.2 и 8.3) на одном физическом сервере и выясним, как правильно настроить отладку серверного кода без конфликтов.
Самая распространенная причина, по которой конфигуратор «проскакивает» вызовы серверных процедур, заключается в том, что отладчик подключен только к тонкому или толстому клиенту, но игнорирует серверные сеансы. Выясним причину, почему это происходит. По умолчанию автоматическое подключение к фоновым заданиям и серверным модулям может быть отключено в настройках самого Конфигуратора.
Для решения этой проблемы выполним следующие действия:
После этого отладчик начнет автоматически перехватывать выполнение кода, когда управление передается с клиента на сервер.
Рассмотрим подробнее ситуацию, когда на одном сервере одновременно развернуты службы для работы с базами 8.2 и 8.3. По умолчанию для отладки по протоколу TCP/IP обе платформы пытаются занять стандартный диапазон портов (с 1560 по 1591). Служба, которая стартовала первой, успешно захватывает эти порты, а служба второго сервера остается без возможности передавать отладочную информацию в Конфигуратор.
В результате мы получаем ситуацию, когда один из серверов (например, 8.2) работает, но отладка на сервере не функционирует, а Конфигуратор начинает хаотично «цепляться» за порты соседней службы (например, за порт 1541 вместо своего 1641).
Чтобы полностью исключить конфликт портов отладки между разными версиями платформы 1С, необходимо принудительно развести их диапазоны. Для этого используется конфигурационный файл debugcfg.xml. Выполним настройку по шагам:
C:\Program Files\1cv82\conf\ (или C:\Program Files (x86)\1cv82\conf\ для 32-битной версии).debugcfg.xml.
<config xmlns="http://v8.1c.ru/v8/debugcfg">
<debugports range="1660:1675"/>
</config>
C:\Program Files\1cv8\conf\, указав там стандартный диапазон 1560:1575 или любой другой свободный диапазон портов.Важно: Не забудьте добавить вновь назначенные диапазоны портов в правила исключений вашего Брандмауэра (Firewall) Windows на сервере, иначе они будут заблокированы для входящих подключений с компьютеров разработчиков.
Проанализируем ситуацию, когда после добавления параметров или перезагрузки служба 1С 8.3 (или 8.2) запускается и сразу останавливается. Это явный признак конфликта прав или портов. Основные причины такого поведения:
USR1CV82, а служба 8.3 — под USR1CV8. Если вы скопировали параметры или папки, либо служба 8.3 пытается обратиться к каталогу srvinfo платформы 8.2, у нее может не оказаться прав NTFS на запись и изменение файлов. Убедитесь, что пользователю USR1CV8 предоставлены полные права на папку C:\Program Files\1cv8\srvinfo.Посмотрим на пример строки запуска службы агента сервера 1С. Многие администраторы совершают ошибку, дописывая параметр -debug в самый конец строки запуска в свойствах службы через реестр, что иногда приводит к его некорректному считыванию платформой.
Правильный способ добавления параметра отладки выглядит следующим образом:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.2 Server Agent.ImagePath.-debug находился перед указанием рабочего каталога -d, либо строго следовал за ним, но не нарушал структуру параметров.Пример корректной строки запуска службы агента 1С 8.2 с измененным портом и включенной отладкой:
"C:\Program Files\1cv82\8.2.19.130\bin\ragent.exe" -srvc -agent -regport 1641 -port 1640 -range 1660:1691 -debug -d "C:\Program Files\1cv82\srvinfo"
После внесения изменений в реестр необходимо перезапустить соответствующую службу через стандартную оснастку «Службы» (services.msc) операционной системы Windows.
Применяя предложенные методики настройки debugcfg.xml, управления правами пользователей служб и конфигурации параметров запуска, мы сможем добиться стабильной параллельной работы сред разработки и отладки серверного кода на любых версиях платформы 1С.