Как отладить правила конвертации данных (КД 2.1) в современных конфигурациях 1С на БСП?

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

Каждый разработчик, занимающийся интеграцией систем на платформе 1С, рано или поздно сталкивается с необходимостью отладки правил конвертации данных, созданных в конфигурации «Конвертация данных 2.1» (КД 2.1). В старых конфигурациях этот процесс протекал беспрепятственно: мы выгружали модуль отладки в текстовый файл, подключали внешнюю обработку и спокойно ставили точки останова. Однако в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «Бухгалтерия предприятия 3.0», «Зарплата и управление персоналом 3.1», «ERP Управление предприятием» и других, разработчики натыкаются на жесткие системные ограничения безопасности. Если разработанные правила планируется использовать для постоянной синхронизации баз без изменения конфигураций, запустить регулярную выгрузку по расписанию можно через программу автоматического обмена данными между базами 1С.

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

Выясняем причины возникновения ошибок при отладке

Давайте проанализируем ситуацию, с которой часто сталкиваются специалисты. При попытке выполнить обмен с подключенным файлом отладки система выдает одну из двух ошибок:

  1. «Внешняя обработка отладки, загружаемая из файла на диске, не поддерживается». Эта блокировка встроена разработчиками фирмы «1С» непосредственно в код БСП из соображений безопасности. Она предотвращает несанкционированный запуск произвольного исполняемого кода на сервере 1С.
  2. «Поле объекта не обнаружено (ПутьКФайлу\Отладка.epf)». Эта ошибка возникает, если программист пытается решить проблему «в лоб» — находит в конфигурации место проверки и просто комментирует условие Если ЭтоВнешняяОбработка() Тогда....

Давайте разберем по шагам, почему простая модификация кода через комментарии приводит ко второй ошибке. В модуле БСП КонвертацияОбъектовИнформационныхБаз в процедуре инициализации обработок присутствует следующий код:


Если ЭтоВнешняяОбработка() Тогда
    ВызватьИсключение НСтр("ru = 'Внешняя обработка отладки, загружаемая из файла на диске, не поддерживается.'");
Иначе
    ВнешняяОбработкаОбработчиковСобытий = Обработки[ИмяФайлаВнешнейОбработкиОбработчиковСобытий].Создать();
КонецЕсли;

Поскольку встроенный механизм обмена запускается в контексте самой конфигурации, функция ЭтоВнешняяОбработка() возвращает значение Ложь. Программа переходит в ветку Иначе. В этот момент система пытается получить обработку из коллекции метаданных Обработки по её имени. Но в переменной ИмяФайлаВнешнейОбработкиОбработчиковСобытий содержится не имя метаданных конфигурации, а полный физический путь к файлу на диске (например, D:\1SSD_DB\conv\Файлы\Отладка.epf). Платформа логично пытается найти в метаданных обработку с таким длинным именем и, не находя её, выбрасывает исключение «Поле объекта не обнаружено».

Теперь, когда нам понятна физика процесса, рассмотрим рабочие варианты решения этой проблемы.

Вариант 1. Использование расширения конфигурации (Рекомендуемый способ)

Если ваша рабочая или тестовая база находится на замке (на поддержке) и вы не хотите снимать её с поддержки ради отладки правил, оптимальным выбором будет создание временного расширения конфигурации. Это чистый и безопасный способ, который легко удалить после завершения работ.

Разберем по шагам процесс создания расширения:

  1. Создайте новое расширение конфигурации в конфигураторе. Отключите для него флаги «Активно» и «Безопасный режим» (это критически важно для работы внешних обработок).
  2. Найдите в основной конфигурации обработку КонвертацияОбъектовИнформационныхБаз и добавьте её в расширение.
  3. Перенесите в расширение функцию ИнициализироватьОбработки и примените к ней аннотацию &Вместо.
  4. Модифицируйте код внутри расширения таким образом, чтобы принудительно инициализировать создание обработки из файла на диске, игнорируя стандартные проверки БСП. Проанализируем пример кода:

&Вместо("ИнициализироватьОбработки")
Функция Расш_ИнициализироватьОбработки(ПараметрыИнициализации)
    
    // Вызываем оригинальный алгоритм подготовки параметров, если это необходимо, 
    // либо полностью переопределяем логику загрузки внешней обработки отладки.
    
    Если ФлагРежимОтладкиОбработчиков Тогда
        Попытка
            // Принудительно загружаем файл обработчиков напрямую с диска, минуя коллекции метаданных:
            ВнешняяОбработкаОбработчиковСобытий = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, Ложь);
            ВнешняяОбработкаОбработчиковСобытий.Конструктор(ОбъектВладелец);
        Исключение
            ЗаписатьЛогСобытий("Ошибка загрузки внешней обработки отладки: " + ОписаниеОшибки());
            ВызватьИсключение;
        КонецПопытки;
    КонецЕсли;
    
    // Остальная логика функции инициализации...
    
КонецФункции

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

Вариант 2. Интеграция обработчиков непосредственно в конфигурацию или расширение

Этот способ незаменим, когда разработка и отладка происходят в клиент-серверном варианте (особенно под управлением операционных систем Linux), где у сервера 1С нет прямого доступа к файловой системе вашего локального компьютера, либо возникают неразрешимые проблемы с сетевыми правами доступа к каталогам.

Рассмотрим алгоритм действий в этой ситуации:

  1. В конфигурации «Конвертация данных 2.1» на этапе настройки отладки сгенерируйте модуль отладки обработчиков событий.
  2. Создайте новую внешнюю обработку в конфигураторе (например, назовите её ОтладкаОбмена). Перенесите весь сгенерированный в КД 2.1 код модуля в модуль этой обработки.
  3. Добавьте созданную обработку ОтладкаОбмена непосредственно в дерево метаданных вашего расширения или основной конфигурации.
  4. В модуле обмена БСП настройте прямой вызов этой встроенной обработки. Измените код инициализации следующим образом:

Если ФлагРежимОтладкиОбработчиков Тогда
    // Обращаемся напрямую к метаданным конфигурации/расширения
    ВнешняяОбработкаОбработчиковСобытий = Обработки.ОтладкаОбмена.Создать();
    ВнешняяОбработкаОбработчиковСобытий.Конструктор(ОбъектВладелец);
КонецЕсли;

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

Вариант 3. Использование модифицированной обработки «Универсальный обмен данными XML»

Если вы не хотите вносить изменения в конфигурацию базы данных и создавать расширения, можно воспользоваться внешней обработкой УниверсальныйОбменДаннымиXML.epf. Важно использовать версию обработки, адаптированную для работы на управляемых формах (например, поставляемую вместе с дистрибутивом КД 2.1.8 и выше).

В оригинальной обработке из поставки КД уже заложена возможность отладки обработчиков. Однако для стабильной работы необходимо соблюдать важные правила настройки платформы:

Важные сопутствующие настройки для успешной отладки

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

  1. Отладка на сервере 1С. Если база данных развернута на сервере, обмен по умолчанию выполняется в серверном контексте. Убедитесь, что служба сервера 1С запущена с ключом отладки (параметр -debug для старых версий или настроенный протокол -tcp для новых версий платформ).
  2. Подключение фоновых заданий. Часто выгрузка и загрузка данных выполняются в фоновом задании. В конфигураторе перейдите в меню Отладка -> Подключение... и в открывшемся окне убедитесь, что в списке автоматического подключения установлены флажки для пунктов «Фоновые задания» и «Клиентские приложения на сервере».
  3. Отключение защиты от опасных действий программно. Если вы используете программное создание обработок в расширении (Вариант 1), вы можете явно отключить защиту в коде, чтобы не менять настройки пользователей. Посмотрим на пример реализации:

// Отключение защиты от опасных действий при создании внешней обработки
ПараметрыЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ПараметрыЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;

ВнешняяОбработкаОбработчиковСобытий = ВнешниеОбработки.Создать(
    ИмяФайлаВнешнейОбработкиОбработчиковСобытий, 
    Ложь, 
    ПараметрыЗащиты
);

Используя предложенные методики, мы можем обойти любые ограничения современных конфигураций на БСП и восстановить полноценный, удобный цикл разработки и отладки правил конвертации данных КД 2.1. А для проверки корректности перенесенных сведений и поиска расхождений в проводках после обмена можно запустить программу автоматической сверки проводок между базами 1С.

← На главную