Как выполнить отладку правил загрузки данных в УТ 10.3 и повторно загрузить сообщения?

Программист 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

Процесс отладки правил обмена, созданных в конфигурации «Конвертация данных 2.1», часто вызывает затруднения, особенно когда речь идет о загрузке данных в системы на обычных формах, такие как «Управление торговлей 10.3». В этой статье мы подробно разберем, как настроить среду для отладки, устранить типичные ошибки инициализации модуля и научиться повторно загружать данные без восстановления базы из резервной копии.

Подготовка среды для отладки загрузки

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

  1. Откроем обработку Универсальный обмен данными в формате XML в базе-приемнике (УТ 10.3).
  2. Перейдем на закладку «Загрузка данных».
  3. Установим флаг «Режим отладки обработчиков загрузки».
  4. Нажмем кнопку «Настройка отладки». В открывшемся окне система предложит сформировать модуль отладки.
  5. Сгенерированный текст модуля нужно скопировать и вставить в модуль объекта новой внешней обработки, которую необходимо сохранить на диск.
  6. Укажем путь к этой внешней обработке в поле «Имя файла внешней обработки с расширениями обработчиков».

Проанализируем ситуацию, когда при попытке загрузки возникает ошибка: Ошибка инициализации модуля: ВнешняяОбработка... Ошибка создания внешней обработки из файла с процедурами обработчиков событий. Рассмотрим причины и способы решения этой проблемы.

Устранение ошибки инициализации модуля отладки

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

Разберем пример с переменной УзелОбменаЗагрузкаДанных. Эта переменная доступна, если обмен идет через планы обмена, но при использовании универсальной обработки она не определена. Чтобы решить эту проблему, проанализируем код в конфигураторе:

  1. Откроем нашу внешнюю обработку для отладки в конфигураторе.
  2. Попробуем выполнить проверку синтаксиса (Ctrl+F7).
  3. Если система ругается на УзелОбменаЗагрузкаДанных, мы можем вручную определить эту переменную в начале модуля или добавить ее в структуру параметров.

Рассмотрим совет опытных разработчиков: если правила написаны специально для плана обмена, попробуйте просто объявить эту переменную в модуле обработки или инициализировать ее в обработчике ПередЗагрузкойДанных следующим образом:


// В обработчике ПередЗагрузкойДанных
Если Не Параметры.Свойство("УзелОбменаЗагрузкаДанных") Тогда
    // Находим нужный узел плана обмена программно для целей отладки
    Параметры.Вставить("УзелОбменаЗагрузкаДанных", ПланыОбмена.ОбменУТБП.НайтиПоКоду("001"));
КонецЕсли;

Как повторно отладить загрузку, если данные уже загружены

Часто возникает вопрос: как заставить систему "забыть" об успешной загрузке файла, чтобы прогнать алгоритм еще раз? В УТ 10.3 механизмы обмена ориентируются на номера сообщений. Посмотрим, как это работает: у каждого узла плана обмена есть реквизиты НомерОтправленного и НомерПринятого.

Проанализируем алгоритм сброса:

  1. Найдем в меню «Операции» — «Планы обмена».
  2. Выберем нужный план обмена (например, «Обмен с Бухгалтерией предприятия 3.0»).
  3. Найдем конкретный узел, через который идет обмен.
  4. Нам нужно уменьшить значение в поле «Номер принятого сообщения». Если последнее загруженное сообщение имело номер 10, установите значение 9. Тогда система позволит загрузить файл с номером 10 повторно.

Если же вам нужно повторно выгрузить данные из УТ 10.3, воспользуемся стандартным механизмом регистрации изменений. Для этого можно использовать обработку Регистрация изменений для обмена. Выберем нужные объекты (например, документы «Реализация товаров и услуг») и добавим их в состав узла. После этого при следующей выгрузке они снова попадут в файл.

Программный запуск обмена в режиме отладки

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


Процедура ВыполнитьЗагрузкуСОтладкой()
    Обработка = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать();
    
    // Указываем узел плана обмена
    Обработка.УзелДляОбмена = ПланыОбмена.ОбменУТБП.НайтиПоКоду("БП");
    
    // Включаем режим отладки
    Обработка.ФлагРежимОтладки = Истина;
    Обработка.РежимОбмена = "Загрузка";
    
    // Указываем пути к файлам
    Обработка.ИмяФайлаОбмена = "C:\Exchange\Message_УТ_БП.xml";
    Обработка.ИмяФайлаПравилОбмена = "C:\Exchange\Rules.xml";
    
    // Загружаем правила и выполняем обмен
    Обработка.ЗагрузитьПравилаОбмена();
    Обработка.ВыполнитьЗагрузкуДанных();
    
    Сообщить("Загрузка завершена. Проверьте результаты отладки.");
КонецПроцедуры

Обратите внимание на объект Обработки.КонвертацияОбъектовИнформационныхБаз. Это встроенный в УТ 10.3 движок, который отвечает за выполнение правил КД 2.1. Устанавливая свойство ФлагРежимОтладки = Истина, мы заставляем систему обращаться к внешним обработчикам, если они настроены.

Инициализация параметров конвертации

Выясним, почему некоторые параметры при загрузке могут оказаться пустыми. В конфигурации «Конвертация данных» у каждого параметра на закладке «Параметры» есть флажки:

Если вы добавили параметр в правила, но забыли установить флаг «При загрузке», то в структуре Параметры внутри обработчиков загрузки его не будет. Разберем, как проверить наличие параметра программно, чтобы избежать ошибок «Поле объекта не обнаружено»:


// Безопасное обращение к параметру
Если Параметры <> Неопределено И Параметры.Свойство("ИспользоватьСпецАлгоритм") Тогда
    Если Параметры.ИспользоватьСпецАлгоритм = Истина Тогда
        // Выполняем действия
    КонецЕсли;
КонецЕсли;

Подводя итог, отметим, что качественная отладка в УТ 10.3 требует внимательного отношения к синтаксису сгенерированного кода и понимания того, в каком контексте (План обмена или Универсальная обработка) выполняется код. Используя ручную корректировку модуля отладки и управление номерами сообщений, мы можем добиться стабильной работы обмена и быстрого исправления ошибок в правилах.

← На главную