При разработке и сопровождении механизмов обмена данными между конфигурациями 1С, в частности 1С:Комплексная автоматизация 2, разработчики часто сталкиваются с ситуацией, когда точка останова в типовом модуле менеджера обмена не срабатывает. При этом в настройках подключения конфигуратора включены фоновые задания, сервер 1С запущен с ключом отладки -debug, а сам процесс синхронизации на стороне базы запускается. Разберем подробно, почему это происходит и какие шаги необходимо предпринять для успешного перехвата выполнения кода.
Когда точка останова упорно игнорируется, первым и наиболее эффективным диагностическим инструментом выступает Замер производительности. Он позволяет точно зафиксировать, какие именно процедуры и общие модули фактически выполнялись сервером в рамках процесса обмена.
Проанализируем порядок действий при диагностике:
1С:Предприятие запускаем синхронизацию данных (или выполнение сопоставления/выгрузки).Посмотрим на результат: в замере мы увидим стек вызовов и реальный общий модуль, который обрабатывал данные. Очень часто оказывается, что выполнение пошло совершенно по другой ветке логики или в другом модуле, отличном от ожидаемого.
В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) синхронизация по умолчанию выполняется асинхронно в контексте фонового задания. Чтобы упростить отладку, предусмотрен специальный режим, позволяющий выполнять обмен непосредственно в сеансе пользователя.
Выясним, как работает этот механизм:
РежимОтладки со значением Истина.1С:Предприятие.Рассмотрим пример установки параметров отладки при программном вызове процедур обмена:
ПараметрыОбмена = Новый Структура;
ПараметрыОбмена.Вставить("РежимОтладки", Истина);
ПараметрыОбмена.Вставить("ВыгрузкаВФайл", Истина);
ПараметрыОбмена.Вставить("УзелИнформационнойБазы", УзелОбмена);
ОбменДаннымиСервер.ВыполнитьВыгрузкуДанных(ПараметрыОбмена);
При обмене через универсальный формат (EnterpriseData) логика конвертации объектов распределена по нескольким общим модулям в зависимости от используемой версии формата. Разработчик часто устанавливает точку останова в базовом модуле МенеджерОбменаЧерезУниверсальныйФормат, однако реальный вызов туда не доходит.
Разберем структуру версионных модулей:
МенеджерОбменаЧерезУниверсальныйФормат_1_6, МенеджерОбменаЧерезУниверсальныйФормат_1_10, МенеджерОбменаЧерезУниверсальныйФормат_1_13.МенеджерОбменаЧерезУниверсальныйФорматПереопределяемый.Для гарантированного попадания в точку останова необходимо проверить версию формата, выбранную в настройках узла плана обмена, и установить точку останова внутри соответствующего версионного модуля.
Если синхронизация между базами 1С:КА 2 настроена через прямое подключение (веб-сервис или COM-соединение), контекст выполнения кода в базе-приемнике меняется:
rphost, сеанс обмена может стартовать в процессе, к которому конфигуратор еще не подключен. Рекомендуется использовать отладку по протоколу HTTP (через единый сервис dbgs) либо временно оставить в кластере один рабочий процесс.Если сетевой транспорт или фоновые процессы создают сложности при локализации ошибки, рассмотрим надежные альтернативные методики:
Таким образом, сочетание замера производительности, проверки версионных модулей и корректной настройки типов подключаемых сеансов позволяет быстро локализовать и устранить любые проблемы при синхронизации данных.