При разработке и отладке конфигураций на управляемых формах (особенно типовых решений, таких как «Бухгалтерия предприятия 3.0», «ERP Управление предприятием» или «Комплексная автоматизация») программисты часто сталкиваются с загадочным поведением платформы. Мы создаем подписку на событие, например, на ОбработкаПроведения для документа. Пытаемся проверить ее работу: открываем форму документа, нажимаем кнопку «Провести», но отладчик упорно игнорирует точку останова, хотя документ успешно проводится и делает движения по регистрам. При этом, если провести тот же самый документ из формы списка через контекстное меню, отладка срабатывает моментально. Разберем подробно, почему так происходит, и как решить эту проблему раз и навсегда.
Давайте проанализируем ситуацию. На первый взгляд поведение системы кажется системным сбоем или багом платформы 1С:Предприятие. На самом деле мы имеем дело с комбинацией архитектурных особенностей Библиотеки стандартных подсистем (БСП) и настроек сетевой безопасности вашей операционной системы.
В современных управляемых формах типовых конфигураций стандартные кнопки «Записать», «Провести» и «Провести и закрыть» — это не просто стандартные команды платформы. БСП переопределяет их поведение для оптимизации работы интерфейса. Рассмотрим разницу в механизмах проведения:
Поскольку при проведении из формы выполнение кода уходит в фоновое задание, отладчик должен уметь подключаться к этому новому фоновому сеансу на сервере. И здесь мы сталкиваемся с проблемой сетевой доступности.
При классическом протоколе отладки TCP/IP подключение между Конфигуратором (клиентом отладки) и сервером 1С (предметом отладки) работает по принципу обратного вызова (обратного соединения):
В итоге фоновое задание выполняется сервером в штатном режиме, транзакция проведения завершается успешно, а Конфигуратор просто «не видит» это событие и не останавливается на точках останова. При проведении из списка соединение уже установлено в рамках текущей сессии, поэтому отладка работает штатно. Также отладка работает без проблем, если запускать Конфигуратор непосредственно на самом сервере 1С, так как в этом случае сетевые пакеты не покидают пределы локального хоста (localhost) и не блокируются внешним брандмауэром.
Для того чтобы входящие подключения от сервера 1С могли беспрепятственно доходить до вашего Конфигуратора, необходимо настроить локальный сетевой экран. Выполним следующие шаги:
wf.msc в строке выполнения).C:\Program Files\1cv8\8.3.X.XXXX\bin\1cv8.exe (где вместо X.XXXX укажите ваш релиз платформы). Рекомендуется создать правило для всех используемых версий платформы или разрешить входящий трафик для конкретных портов.Даже при открытых портах Конфигуратор может игнорировать фоновые процессы, если в настройках отладки не задано их автоматическое подключение. Проверим эту настройку:
Теперь при старте любого фонового процесса проведения на сервере отладчик автоматически подключит его к текущему сеансу отладки.
Если у вас нет прав администратора для настройки брандмауэра или сетевые политики компании строго запрещают открытие входящих портов, вы можете временно отключить асинхронное проведение документов средствами самой БСП. Разработчики библиотеки предусмотрели специальный режим работы приложения.
Для активации этого режима выполните следующие действия:
/C РежимОтладки (обратите внимание на заглавную букву "C" в параметре — она должна быть латинской).При запуске пользовательского сеанса из Конфигуратора с этим параметром БСП определит его наличие и перенаправит все фоновые задачи (включая проведение документов, формирование отчетов и печатных форм) на выполнение в синхронном режиме в рамках вашего текущего сеанса. Фоновые задания создаваться не будут, транзакция пройдет линейно, и ваша точка останова в подписке на событие гарантированно сработает без изменения каких-либо сетевых настроек.
Также данный режим можно включить непосредственно в режиме «1С:Предприятие» (если это предусмотрено версией вашей БСП): перейдите в раздел Администрирование -> Поддержка и обслуживание -> Отчеты и обработки и установите флаг Режим отладки.
Начиная с версии платформы 8.3.7, фирма 1С добавила альтернативный и более прогрессивный протокол отладки — по протоколу HTTP. В отличие от классического TCP/IP, этот протокол не использует обратные вызовы от сервера к клиенту, что полностью снимает проблему заблокированных брандмауэром портов.
При HTTP-отладке схема взаимодействия выглядит следующим образом:
dbgs.Для перевода вашей базы на HTTP-отладку необходимо запустить службу сервера 1С с ключом локального сервера отладки (параметр -http) и в настройках Конфигуратора (меню Сервис -> Параметры -> Запуск 1С:Предприятия -> Отладка) выбрать тип отладки по протоколу HTTP, указав адрес вашего сервера отладки.
Мы настоятельно рекомендуем использовать HTTP-отладку при работе в клиент-серверных вариантах баз данных, так как это решает целый класс сетевых проблем и избавляет разработчиков от рутинной настройки портов на локальных рабочих станциях.