КД2: передача параметров из выгрузки в загрузку (в т.ч. и на ранние стадии) при обмене из 7.7 в 8.х

База знаний
  1. 10 г. назад

    Кратко суть проблемы можно озвучить цитатой из документации:
    "Передача параметра из источника в приемник доступна только при обмене между информационными базами на платформе 1С:Предприятие 8".

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

    Итак, в обработчике ПередВыгрузкойДанных пишем код:

    УзелПарам=СоздатьУзел("ЗначениеПараметра");
    УстановитьАтрибут(УзелПарам,"Имя","НашПараметр1");
    УстановитьАтрибут(УзелПарам,"Тип","Строка");
    ЗаписатьЭлемент(УзелПарам,"Значение","Значение нашего параметра 1");
    ДобавитьПодчиненный(rootNode,УзелПарам);
    
    УзелПарам=СоздатьУзел("ЗначениеПараметра");
    УстановитьАтрибут(УзелПарам,"Имя","НашПараметр2");
    УстановитьАтрибут(УзелПарам,"Тип","Булево");
    ЗаписатьЭлемент(УзелПарам,"Значение","true");
    ДобавитьПодчиненный(rootNode,УзелПарам);
    

    после этого данные параметры будут абсолютно штатно загружены в стандартной обработке "Универсальный обмен данными в формате XML (2.1.5)".

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

    АлгПослеЗагрузкиПараметров=
    "СтрокаКода1;"+РазделительСтрок+
    "СтрокаКода2;"+РазделительСтрок+
    "СтрокаКода3;";
    ЗаписатьЭлемент(rootNode,"АлгоритмПослеЗагрузкиПараметров",АлгПослеЗагрузкиПараметров);
    

    Нюанс: чтобы иметь параметры на ранних стадиях загрузки, например, в обработчиках ПередЗагрузкойДанных или ПередОбработкой в ПОД (правилах очистки данных), нужно помещать выгружаемые параметры в корень узла с выгружаемыми данными:

    ИмяПараметра="НашПараметр1";
    ТипПараметра="Строка";
    ЗначениеПараметра="Значение нашего параметра 1";
    
    
    // Устанавливаем значение параметра в обработчике ПередЗагрузкойДанных
    УзелПравил=rootNode.getElementsByTagName("ПравилаОбмена").item(0);
    УзелПередЗагрузкой=УзелПравил.getElementsByTagName("ПередЗагрузкойДанных").item(0);
    КоллУзлов=УзелПередЗагрузкой.childNodes;
    Для НомУзла=0 По КоллУзлов.length-1 Цикл
        ТекУзел=КоллУзлов.item(НомУзла);
        Если (ТекУзел.nodeType=3) Тогда
            // текст элемента
            ТекУзел.nodeValue=РазделительСтрок+"Параметры."+ИмяПараметра+"="+?(ТипПараметра="Строка","""","")+
                ЗначениеПараметра+?(ТипПараметра="Строка","""","")+";"+РазделительСтрок+РазделительСтрок+
                ТекУзел.nodeValue;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    

    скрин.png

или зарегистрируйтесь чтобы ответить!