Отладка правил обмена КД2 для подсистемы БСП Обмен данными




Уже давно нельзя отлаживать правила обмена при помощи внешних файлов. Попробуем исправить это.

В обработку КонвертацияОбъектовИнформационныхБаз в функцию ИнициализироватьОбработки разработчики любезно добавили кусочек кода:

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

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

Давайте его сделаем. Создадим новое расширение с префиксом Обмен_

Вынесем в расширение функцию ИнициализироватьОбработки из модуля объекта обработки КонвертацияОбъектовИнформационныхБа:

&Вместо("ИнициализироватьОбработки")
Функция Обмен_ИнициализироватьОбработки()

ИмяПланаОбмена = ИмяПланаОбмена();
ИмяПрофиляБезопасности = ОбменДаннымиПовтИсп.ИмяПрофиляБезопасности(ИмяПланаОбмена);

Если ОтладкаОбработчиковВыгрузки И (РежимОбмена = "Выгрузка" Или РежимОбмена = "") Тогда

Если ИмяПрофиляБезопасности = Неопределено Тогда
ОбработкаВыгрузки = Обработки[ИмяФайлаВнешнейОбработкиОтладкиВыгрузки].Создать();
КонецЕсли;

ОбработкаВыгрузки.ПодключитьОбработкуДляОтладки(ЭтотОбъект);

ИначеЕсли ОтладкаОбработчиковЗагрузки И РежимОбмена = "Загрузка" Тогда

Если ИмяПрофиляБезопасности = Неопределено Тогда
ОбработкаЗагрузки = Обработки[ИмяФайлаВнешнейОбработкиОтладкиЗагрузки].Создать();
КонецЕсли;

ОбработкаЗагрузки.ПодключитьОбработкуДляОтладки(ЭтотОбъект);

КонецЕсли;

Возврат ИмяПрофиляБезопасности;

КонецФункции

Здесь мы подключаем обработки отладки выгрузки и загрузки из обработок конфигурации. В реквизитах ИмяФайлаВнешнейОбработкиОтладкиВыгрузки и ИмяФайлаВнешнейОбработкиОтладкиЗагрузки теперь нужно хранить не путь к обработкам, а их имена в конфигурации. Для этого вынесем в расширение форму ЗагрузитьПравилаСинхронизацииДанных регистра сведений ПравилаДляОбменаДанными.

В форме поменяем заголовки у реквизитов:

 

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

&НаСервере
Процедура Обмен_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)

АвтоНаименованиеОбработкиВыгрузки();
АвтоНаименованиеОбработкиЗагрузки();

КонецПроцедуры


&НаСервере
Процедура АвтоНаименованиеОбработкиВыгрузки()

Элементы.ВнешняяОбработкаДляОтладкиВыгрузки.СписокВыбора.Очистить();

СтрокаНаименования = "ОтладкаВыгрузки_" + ИмяПланаОбмена;

Элементы.ВнешняяОбработкаДляОтладкиВыгрузки.СписокВыбора.Добавить(СтрокаНаименования);

КонецПроцедуры

&НаСервере
Процедура АвтоНаименованиеОбработкиЗагрузки()

Элементы.ВнешняяОбработкаДляОтладкиЗагрузки.СписокВыбора.Очистить();

СтрокаНаименование = "ОтладкаЗагрузки_" + ИмяПланаОбмена;

Элементы.ВнешняяОбработкаДляОтладкиЗагрузки.СписокВыбора.Добавить(СтрокаНаименование);

КонецПроцедуры

Теперь нам нужно изменить поведение полей ВнешняяОбработкаДляОтладкиВыгрузки и ВнешняяОбработкаДляОтладкиЗагрузки в свойствах полей нужно установить КнопкаВыпадающегоСписка = Да, КнопкаВыбора = Авто и переопределить событие Началовыбора.

Для события НачалоВыбора мы сделаем заглушку и не не будем предлагать выбрать файл из каталога на диске:

&НаКлиенте
Процедура Обмен_ВнешняяОбработкаДляОтладкиВыгрузкиНачалоВыбораВместо(Элемент, ДанныеВыбора, СтандартнаяОбработка)

Возврат;

КонецПроцедуры

&НаКлиенте
Процедура Обмен_ВнешняяОбработкаДляОтладкиЗагрузкиНачалоВыбораВместо(Элемент, ДанныеВыбора, СтандартнаяОбработка)

Возврат;

КонецПроцедуры

Теперь в полях можно выбрать имена обработок сформированные автоматически:

Завершающим этапом в расширении нужно создать две обработки с именами из полей формы.

Для отладки правил, их нужно скопировать в модуль объекта соответствующей обработки и выставить точки останова.

Тестировалось Платформа 8.3.13.1690 БСП3.0.2.

5 Comments

  1. fenixnow

    (1) похоже

    Reply
  2. ret

    Уже давно сделано:

    https://infostart.ru/public/995632/

    Reply
  3. json

    Автор расписал что да как, а не просто выложил какое-то расширение, которое будешь скачивать как кота в мешке.

    За это плюс

    Reply
  4. gilan

    Скачал и установил расширение.

    В модуль обработки «ОтладкаЗагрузки__ДемоОбменСБиблиотекойСтандартныхПодсистем»­ скопировал.код, сгенерированный обработкой «Универсальный обмен данными в формате XML».

    Точку останова в отладчике поставил.

    Загружаю файл обработкой «Универсальный обмен данными в формате XML» — не останавливается.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *