Почему отладчик 1С пропускает серверные процедуры и как настроить отладку при работе двух серверов (8.2 и 8.3) на одном компьютере?

Программист 1С v8.3 (Обычные формы) Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке и администрировании систем на платформе 1С:Предприятие специалисты часто сталкиваются со странным поведением отладчика: точка останова срабатывает в клиентском коде непосредственно перед вызовом процедуры, но при попытке войти внутрь по кнопке F11 программа просто проскакивает строку и продолжает выполнение. Особенно остро эта проблема проявляется в конфигурациях на обычных формах (например, УПП 1.3), где тяжелые процедуры партионного учета (такие как УправлениеЗапасамиПартионныйУчет.ЗарегистрироватьДокументВПоследовательностяхПартионногоУчетаНаСервере) выполняются строго на сервере.

В этой статье мы подробно разберем по шагам, почему возникает эта проблема, проанализируем ситуацию с параллельной работой двух версий платформы (8.2 и 8.3) на одном физическом сервере и выясним, как правильно настроить отладку серверного кода без конфликтов.

Причина 1. Отсутствие подключения к серверным предметам отладки в Конфигураторе

Самая распространенная причина, по которой конфигуратор «проскакивает» вызовы серверных процедур, заключается в том, что отладчик подключен только к тонкому или толстому клиенту, но игнорирует серверные сеансы. Выясним причину, почему это происходит. По умолчанию автоматическое подключение к фоновым заданиям и серверным модулям может быть отключено в настройках самого Конфигуратора.

Для решения этой проблемы выполним следующие действия:

  1. В Конфигураторе откроем главное меню Отладка и выберем пункт Подключение....
  2. В появившемся диалоговом окне обратим внимание на список «Доступные предметы отладки». Если там присутствует строка с типом «Сервер», выделим ее и нажмем кнопку Подключить.
  3. Чтобы не делать этого вручную при каждом запуске, нажмем кнопку Настройка автоматического подключения.
  4. В открывшемся окне установим флажки напротив пунктов Серверные процедуры и функции и Фоновые задания. Нажмем «ОК».

После этого отладчик начнет автоматически перехватывать выполнение кода, когда управление передается с клиента на сервер.

Причина 2. Конфликт портов отладки при параллельном запуске 1С 8.2 и 8.3

Рассмотрим подробнее ситуацию, когда на одном сервере одновременно развернуты службы для работы с базами 8.2 и 8.3. По умолчанию для отладки по протоколу TCP/IP обе платформы пытаются занять стандартный диапазон портов (с 1560 по 1591). Служба, которая стартовала первой, успешно захватывает эти порты, а служба второго сервера остается без возможности передавать отладочную информацию в Конфигуратор.

В результате мы получаем ситуацию, когда один из серверов (например, 8.2) работает, но отладка на сервере не функционирует, а Конфигуратор начинает хаотично «цепляться» за порты соседней службы (например, за порт 1541 вместо своего 1641).

Решение: Разделение портов отладки через файл debugcfg.xml

Чтобы полностью исключить конфликт портов отладки между разными версиями платформы 1С, необходимо принудительно развести их диапазоны. Для этого используется конфигурационный файл debugcfg.xml. Выполним настройку по шагам:

  1. Перейдем в каталог конфигурационных файлов нужной платформы. Для 1С 8.2 путь по умолчанию выглядит так: C:\Program Files\1cv82\conf\ (или C:\Program Files (x86)\1cv82\conf\ для 32-битной версии).
  2. Создадим в этой папке обычный текстовый файл и переименуем его в debugcfg.xml.
  3. Откроем созданный файл и пропишем в него XML-код, выделяющий для платформы 8.2 альтернативный диапазон портов отладки (например, с 1660 по 1675):

<config xmlns="http://v8.1c.ru/v8/debugcfg">
    <debugports range="1660:1675"/>
</config>
  1. Аналогичный файл можно создать для платформы 8.3 в каталоге C:\Program Files\1cv8\conf\, указав там стандартный диапазон 1560:1575 или любой другой свободный диапазон портов.
  2. Для того чтобы настройки вступили в силу, перезапустим обе службы агента сервера 1С.

Важно: Не забудьте добавить вновь назначенные диапазоны портов в правила исключений вашего Брандмауэра (Firewall) Windows на сервере, иначе они будут заблокированы для входящих подключений с компьютеров разработчиков.

Причина 3. Падение службы сервера 1С 8.3 при запуске

Проанализируем ситуацию, когда после добавления параметров или перезагрузки служба 1С 8.3 (или 8.2) запускается и сразу останавливается. Это явный признак конфликта прав или портов. Основные причины такого поведения:

Причина 4. Неправильное расположение ключа запуска -debug в реестре Windows

Посмотрим на пример строки запуска службы агента сервера 1С. Многие администраторы совершают ошибку, дописывая параметр -debug в самый конец строки запуска в свойствах службы через реестр, что иногда приводит к его некорректному считыванию платформой.

Правильный способ добавления параметра отладки выглядит следующим образом:

  1. Откроем редактор реестра Windows (команда regedit).
  2. Перейдем к ветке реестра со службой 1С (например, для 8.2): HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.2 Server Agent.
  3. Найдем параметр ImagePath.
  4. Изменим его значение так, чтобы ключ -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С.

← На главную