Как настроить подстановку кода алгоритмов по месту вызова при отладке загрузки КД 2.1 в базах с БСП?

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

Часто при переносе данных (например, из нетиповой конфигурации УТ в Розницу) с использованием «Конвертации данных 2.1» (КД 2) возникает необходимость отладить правила загрузки. В правилах конвертации широко применяются алгоритмы, и при стандартной генерации модуля отладки они выгружаются как отдельные процедуры. Проанализируем ситуацию и разберем по шагам, как заставить генератор подставлять код алгоритмов непосредственно по месту их вызова, а также выясним, как правильно передавать данные и обходить ограничения подсистемы БСП.

Передача данных между алгоритмами и обработчиками

Если код алгоритма не встроен в сам обработчик, разработчики часто используют механизм передачи значений через параметры. Рассмотрим логику взаимодействия обработчика и алгоритма через структуру параметров:

  1. Сначала мы помещаем входящие данные, необходимые для работы алгоритма, в коллекцию Параметры.
  2. Выполняем вызов самого алгоритма.
  3. Алгоритм отрабатывает свою логику и складывает полученные результаты обратно в Параметры.
  4. По месту вызова (в обработчике) мы берем из параметров итоговый результат и продолжаем выполнение кода.

Этот подход универсален, однако для пошаговой отладки единого полотна кода удобнее использовать режим подстановки.

Штатная настройка формирования модуля отладки

Рассмотрим подробнее настройки, отвечающие за компоновку модуля отладки. В конфигурации «Конвертация данных 2.1» или в обработке «Универсальный обмен данными в формате XML» есть специальный переключатель, управляющий способом переноса кода алгоритмов.

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

Настройки внутри правил конвертации (КД 2)

Посмотрим на требования к настройке самих алгоритмов в справочниках КД 2, без соблюдения которых подстановка не сработает:

  1. Признак загрузки: В карточке справочника «Алгоритмы» для нужного алгоритма обязательно установите флаг «Используется при загрузке». Если этот признак снят, парсер генератора посчитает, что алгоритм относится только к контуру выгрузки. В результате при формировании модуля загрузки он либо проигнорирует его, либо выдаст ошибку отсутствия функции.
  2. Формат вызова: Парсер генератора КД 2 распознает вызовы строго по определенному шаблону. Чтобы подстановка отработала корректно, вызов должен иметь вид: Выполнить(Алгоритмы.<ИмяАлгоритма>);. Любые нестандартные конструкции, динамическое формирование имени или разбиение строки вызова помешают автоматическому парсингу и тело алгоритма не будет вставлено.

Ограничения платформы и режима подстановки

Разберем важные нюансы и ограничения, о которых нужно помнить при использовании режима подстановки по месту вызова:

  1. Рекурсивные вызовы: Данный режим категорически не поддерживает рекурсию. Если алгоритм вызывает сам себя или присутствует перекрестный вызов между несколькими алгоритмами, формирование модуля прервется с ошибкой зацикливания.
  2. Область видимости и конфликт имен: В отличие от вызова обособленных процедур, при подстановке по месту вызова код алгоритма исполняется в единой области видимости с обработчиком события. Это дает плюс — напрямую становятся доступны контекстные переменные (например, Объект, Отказ, Источник). Но есть и существенный минус — если имена локальных переменных внутри алгоритма совпадают с локальными переменными обработчика, их значения будут непреднамеренно перезаписаны, что приведет к трудноуловимым логическим ошибкам.

Ограничения и особенности отладки в среде БСП

Современные конфигурации 1С построены на базе Библиотеки стандартных подсистем (БСП), которая накладывает строгие требования к безопасности. Проанализируем способы обхода этих ограничений при отладке:

  1. Запрет внешних обработок: В типовых механизмах БСП (например, в обработке КонвертацияОбъектовИнформационныхБаз) на программном уровне заблокирована загрузка внешних обработок отладки из файлов на локальном диске. При попытке указать путь к сформированному файлу отладки платформа сгенерирует исключение о нарушении прав или безопасного режима.
  2. Способы обхода блокировки БСП:
    • Сформированный код обработчиков загрузки можно аккуратно перенести во временное расширение конфигурации, переопределив в нем логику вызова отладочных механизмов.
    • Выполнять отладку автономно, используя классическую внешнюю обработку «Универсальный обмен данными в формате XML». Вы просто загружаете сформированный файл обмена (XML) вручную через эту обработку в режиме предприятия, подключив сформированный модуль отладки.
  3. Фоновые задания: Типовой обмен в БСП всегда запускается в фоновом потоке. Это делает невозможным перехват точек останова в конфигураторе. Чтобы заставить систему выполнять загрузку в основном потоке клиентского сеанса и нормально отлаживать код, базу-приемник необходимо запускать с параметром командной строки /C РежимОтладки.

Выполнив все описанные настройки, мы сможем комфортно отлаживать весь поток выполнения загрузки в конфигураторе, видя полный код обработчиков вместе с развернутыми алгоритмами.

← На главную