Отладка внешних (COM) соединений в платформе «1С:Предприятие 8» — одна из тех задач, которая часто ставит в тупик даже опытных разработчиков. Ситуация стандартная: в коде прописано подключение, галочки отладки на сервере установлены, но при попытке зайти внутрь вызываемого метода точка останова упорно игнорируется. В этой статье мы подробно разберем, как шаг за шагом настроить среду для успешного дебага внешних соединений, устранить типичные ошибки платформы и заставить отладчик работать стабильно.
Для того чтобы COM-соединение «понимало», что его работу необходимо отлаживать, и знало, куда именно отправлять сигналы отладки, нам потребуется создать специальный файл конфигурации comcntrcfg.xml. Этот файл указывает параметры подключения к отладчику для COM-класса платформы.
Давайте создадим текстовый файл с именем comcntrcfg.xml и поместим в него следующую структуру настроек:
<config xmlns="http://v8.1c.ru/v8/comcntrcfg">
<debugconfig debug="true" debuggerURL="tcp://localhost:1560"/>
</config>
Рассмотрим подробнее ключевые параметры этой конфигурации:
localhost:1560 подходит в тех случаях, когда база-источник (инициатор соединения) и Конфигуратор запущены на одном и том же локальном компьютере.Выясним важную деталь: где именно должен лежать созданный нами файл comcntrcfg.xml? Место его размещения зависит от того, в каком контексте инициализируется COM-соединение.
Файл должен находиться на том компьютере и в каталоге той версии платформы, которая физически создает COM-соединение:
C:\Program Files\1cv8\Х.Х.Х.Х\bin\conf\comcntrcfg.xml (или в папке Program Files (x86) для 32-разрядной версии платформы).comcntrcfg.xml необходимо скопировать на сервер 1С в аналогичную папку соответствующей версии платформы. Если ваш сервер 1С представляет собой кластер из нескольких рабочих серверов, этот файл должен присутствовать на каждом рабочем сервере кластера.Проанализируем распространенную ошибку, когда при отладке на удаленном сервере в конфигурационном файле оставляют адрес tcp://localhost. Если ваш Конфигуратор запущен на локальном рабочем месте, а COM-соединение инициируется на удаленном сервере 1С, указание localhost заставит сервер искать отладчик на самом себе. Естественно, никакого запущенного Конфигуратора там не окажется, и отладка не сработает.
Для решения этой проблемы вместо localhost укажите сетевое имя или IP-адрес вашего локального компьютера, на котором открыт Конфигуратор:
<config xmlns="http://v8.1c.ru/v8/comcntrcfg">
<debugconfig debug="true" debuggerURL="tcp://ИмяВашегоКомпьютера:1560"/>
</config>
Чтобы узнать точный адрес и порт отладчика, откройте ваш Конфигуратор, перейдите в меню Отладка — Подключение и нажмите кнопку Настройка. В открывшемся окне в поле «Отладчик» будет указана строка подключения, которую и нужно прописать в файл конфигурации.
Поскольку внешнее соединение пытается «постучаться» к вашему локальному компьютеру, сетевые экраны (брандмауэр Windows или корпоративный файрвол) могут заблокировать этот входящий запрос. Чтобы этого не произошло, выполните следующие настройки:
Если инициатором COM-соединения выступает серверный процесс базы-источника, сам сервер «1С:Предприятия» обязательно должен быть запущен в режиме отладки. Проверим параметры службы агента сервера 1С:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3...).ImagePath в самый конец строки добавьте ключ -debug.Без этого ключа серверные процессы не будут передавать информацию отладчику, и вы не сможете зайти в код, выполняемый на стороне сервера.
Для того чтобы Конфигуратор автоматически перехватывал управление при инициализации внешнего источника, выполните простую настройку в интерфейсе:
Если вы работаете на современных версиях платформы «1С:Предприятие 8» (а также в среде разработки 1C:EDT), отладка часто настраивается по HTTP-протоколу. В этом случае формат файла comcntrcfg.xml будет выглядеть следующим образом:
<config xmlns="http://v8.1c.ru/v8/comcntrcfg">
<debugconfig debug="true" protocol="http" debuggerURL="http://ИмяВашегоКомпьютера:ПортОтладчика"/>
</config>
Обратите внимание, что порт отладчика для HTTP назначается динамически (обычно из диапазона выше 45000). Его значение также необходимо предварительно посмотреть в настройках подключения текущего сеанса Конфигуратора.
Иногда при попытке установить внешнее соединение возникает критическая ошибка:
«Существуют активные сеансы работы с данной базой, использующие версию платформы, не поддерживающую совместную работу с этой версией».
Выясним причину этой проблемы. При установке нескольких версий платформы 1С на одном сервере или ПК в операционной системе Windows регистрируется только одна библиотека COM-соединителя comcntr.dll. Если базы работают на другой версии платформы, возникает конфликт.
Для решения этой проблемы выполните перерегистрацию библиотеки нужной версии:
regsvr32 "C:\Program Files\1cv8\8.3.X.YYYY\bin\comcntr.dll"
Напоследок убедимся, что вызываемый через COM-соединение код в принципе доступен для отладки. Проверьте свойства общих модулей, методы которых вы вызываете:
#Если Клиент, выполняться во внешнем соединении не будет. Используйте директивы #Если ВнешнееСоединение или #Если Сервер, чтобы логика была доступна вызывающей стороне.Применяя эти шаги системно, мы сможем без труда настроить стабильный процесс отладки, быстро локализовать ошибки обмена данными и контролировать правильность передачи объектов между базами «1С:Предприятие 8».