Каждый разработчик, занимающийся интеграцией систем на платформе 1С, рано или поздно сталкивается с необходимостью отладки правил конвертации данных, созданных в конфигурации «Конвертация данных 2.1» (КД 2.1). В старых конфигурациях этот процесс протекал беспрепятственно: мы выгружали модуль отладки в текстовый файл, подключали внешнюю обработку и спокойно ставили точки останова. Однако в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «Бухгалтерия предприятия 3.0», «Зарплата и управление персоналом 3.1», «ERP Управление предприятием» и других, разработчики натыкаются на жесткие системные ограничения безопасности. Если разработанные правила планируется использовать для постоянной синхронизации баз без изменения конфигураций, запустить регулярную выгрузку по расписанию можно через программу автоматического обмена данными между базами 1С.
В этой статье мы подробно разберем причины возникновения ошибок при попытке запустить отладку правил обмена и рассмотрим три надежных способа обхода этих ограничений, которые позволят вам быстро и комфортно отлаживать обработчики событий прямо в коде.
Давайте проанализируем ситуацию, с которой часто сталкиваются специалисты. При попытке выполнить обмен с подключенным файлом отладки система выдает одну из двух ошибок:
Если ЭтоВнешняяОбработка() Тогда....Давайте разберем по шагам, почему простая модификация кода через комментарии приводит ко второй ошибке. В модуле БСП КонвертацияОбъектовИнформационныхБаз в процедуре инициализации обработок присутствует следующий код:
Если ЭтоВнешняяОбработка() Тогда
ВызватьИсключение НСтр("ru = 'Внешняя обработка отладки, загружаемая из файла на диске, не поддерживается.'");
Иначе
ВнешняяОбработкаОбработчиковСобытий = Обработки[ИмяФайлаВнешнейОбработкиОбработчиковСобытий].Создать();
КонецЕсли;
Поскольку встроенный механизм обмена запускается в контексте самой конфигурации, функция ЭтоВнешняяОбработка() возвращает значение Ложь. Программа переходит в ветку Иначе. В этот момент система пытается получить обработку из коллекции метаданных Обработки по её имени. Но в переменной ИмяФайлаВнешнейОбработкиОбработчиковСобытий содержится не имя метаданных конфигурации, а полный физический путь к файлу на диске (например, D:\1SSD_DB\conv\Файлы\Отладка.epf). Платформа логично пытается найти в метаданных обработку с таким длинным именем и, не находя её, выбрасывает исключение «Поле объекта не обнаружено».
Теперь, когда нам понятна физика процесса, рассмотрим рабочие варианты решения этой проблемы.
Если ваша рабочая или тестовая база находится на замке (на поддержке) и вы не хотите снимать её с поддержки ради отладки правил, оптимальным выбором будет создание временного расширения конфигурации. Это чистый и безопасный способ, который легко удалить после завершения работ.
Разберем по шагам процесс создания расширения:
КонвертацияОбъектовИнформационныхБаз и добавьте её в расширение.ИнициализироватьОбработки и примените к ней аннотацию &Вместо.
&Вместо("ИнициализироватьОбработки")
Функция Расш_ИнициализироватьОбработки(ПараметрыИнициализации)
// Вызываем оригинальный алгоритм подготовки параметров, если это необходимо,
// либо полностью переопределяем логику загрузки внешней обработки отладки.
Если ФлагРежимОтладкиОбработчиков Тогда
Попытка
// Принудительно загружаем файл обработчиков напрямую с диска, минуя коллекции метаданных:
ВнешняяОбработкаОбработчиковСобытий = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, Ложь);
ВнешняяОбработкаОбработчиковСобытий.Конструктор(ОбъектВладелец);
Исключение
ЗаписатьЛогСобытий("Ошибка загрузки внешней обработки отладки: " + ОписаниеОшибки());
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
// Остальная логика функции инициализации...
КонецФункции
Благодаря этому коду система корректно обратится к методу ВнешниеОбработки.Создать(), передав туда прямой путь к файлу на вашем локальном компьютере, и успешно инициализирует отладчик.
Этот способ незаменим, когда разработка и отладка происходят в клиент-серверном варианте (особенно под управлением операционных систем Linux), где у сервера 1С нет прямого доступа к файловой системе вашего локального компьютера, либо возникают неразрешимые проблемы с сетевыми правами доступа к каталогам.
Рассмотрим алгоритм действий в этой ситуации:
ОтладкаОбмена). Перенесите весь сгенерированный в КД 2.1 код модуля в модуль этой обработки.ОтладкаОбмена непосредственно в дерево метаданных вашего расширения или основной конфигурации.
Если ФлагРежимОтладкиОбработчиков Тогда
// Обращаемся напрямую к метаданным конфигурации/расширения
ВнешняяОбработкаОбработчиковСобытий = Обработки.ОтладкаОбмена.Создать();
ВнешняяОбработкаОбработчиковСобытий.Конструктор(ОбъектВладелец);
КонецЕсли;
При таком подходе вам больше не нужно указывать путь к файлу на диске в пользовательском интерфейсе обмена. Платформа мгновенно создаст объект из метаданных, и вы сможете устанавливать точки останова прямо внутри модуля обработки ОтладкаОбмена в конфигураторе.
Если вы не хотите вносить изменения в конфигурацию базы данных и создавать расширения, можно воспользоваться внешней обработкой УниверсальныйОбменДаннымиXML.epf. Важно использовать версию обработки, адаптированную для работы на управляемых формах (например, поставляемую вместе с дистрибутивом КД 2.1.8 и выше).
В оригинальной обработке из поставки КД уже заложена возможность отладки обработчиков. Однако для стабильной работы необходимо соблюдать важные правила настройки платформы:
ВнешниеОбработки.Создать() на этапе подключения файла отладки.Даже если программный код обхода ограничений написан без ошибок, точки останова могут не срабатывать. Давайте проанализируем технические настройки платформы 1С, которые обязательно должны быть выполнены на компьютере разработчика:
-debug для старых версий или настроенный протокол -tcp для новых версий платформ).
// Отключение защиты от опасных действий при создании внешней обработки
ПараметрыЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ПараметрыЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
ВнешняяОбработкаОбработчиковСобытий = ВнешниеОбработки.Создать(
ИмяФайлаВнешнейОбработкиОбработчиковСобытий,
Ложь,
ПараметрыЗащиты
);
Используя предложенные методики, мы можем обойти любые ограничения современных конфигураций на БСП и восстановить полноценный, удобный цикл разработки и отладки правил конвертации данных КД 2.1. А для проверки корректности перенесенных сведений и поиска расхождений в проводках после обмена можно запустить программу автоматической сверки проводок между базами 1С.