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

Опубликовал andrewks в раздел Обмен - Перенос данных из 1С7.7 в 1C8.X

Кратко суть проблемы можно озвучить цитатой из документации:
"Передача параметра из источника в приемник доступна только при обмене между информационными базами на платформе 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;
        Прервать;
    КонецЕсли;
КонецЦикла;

См. также

Комментарии
1. Vlad (kitminsk) 174 28.05.12 09:18 Сейчас в теме
Плюсик поставил, но невольно вспомнилось, как русские выпустили в американской школе трех свиней с номерами 1,2 и 4, а американцы веь день искали четвертую свинью.
2. Владимир Самойлов (samamoiloff) 853 01.06.12 16:46 Сейчас в теме
(0)Благодарю.

А много ли граждан, интересно, практикуют формирование узлов XML, так скажем, "вручную"?
У нас есть группа Конвертация данных, там за три года - три темы создано. Есть ли спрос на сей контент? Хотел сделать платный курс, но сдается, что придется ограничиваться бесплатным.
3. Сергей Ожерельев (Поручик) 3492 01.06.12 17:28 Сейчас в теме
(2) Я иногда практикую, в основном для обеспечения совместимости между релизами конфигурации, иногда использую в алгоритмах КД для переноса однотипных реквизитов.
4. Сергей Ожерельев (Поручик) 3492 01.06.12 17:35 Сейчас в теме
(2) Здесь тоже есть программное формирование узлов
5. Олег Шалимов (CaSH_2004) 342 04.06.12 02:14 Сейчас в теме
Плюсую, побольше бы публикаций по КД
7. Геннадий Пиганов (Totoro) 492 16.06.12 17:42 Сейчас в теме
Статья по этой теме: КД: Передача параметров из 7.7 а 8.х
Не плохо бы ссылку в статью добавить.
8. andrewks 1184 16.06.12 22:23 Сейчас в теме
(7) хммм... когда столкнулся с этой проблемой, почему-то гугль не вывел на эту статью, поэтому пришлось решать самому (но плюсанул). к тому же, там не рассмотрен случай, когда значение параметра нужно иметь на ранних стадиях загрузки, до того, как из файла выгрузки будут считаны параметры штатной выгрузкой
9. andrewks 1184 16.06.12 22:26 Сейчас в теме
+(8) а мне как раз надо было получить параметры на ранней стадии - в правилах очистки данных, а они выполняются до штатной загрузки параметров
10. Геннадий Пиганов (Totoro) 492 17.06.12 09:46 Сейчас в теме
(8) Твоя статья тоже нужна, не спорю.
11. Maximilian Alekseevich (1cmax) 151 03.03.13 21:08 Сейчас в теме
12. Дмитрий Рудаков (Дмитрий Рудаков) 156 08.11.13 13:48 Сейчас в теме
Возможно ли сделать параметр объекта аналогичным механизмом для обмена 1с 7.7 в 1с 8.2 ?
13. andrewks 1184 08.11.13 14:07 Сейчас в теме
(12) Дмитрий Рудаков, думаю, что возможно
14. Ольга Ковалева (volha-77) 15 09.03.14 17:43 Сейчас в теме
можно ли сделать аналогично для 7.7 ->7.7? у меня что-то не получилось (организация в документе остается пустой, хотя ошибок не выдает)
15. ффф ыыы (zqzq) 15 21.03.14 15:13 Сейчас в теме
Есть более простое решение, вызвать в ПередВыгрузкойДанных экспортную процедуру модуля обработки УниверсальныйОбменДаннымиXML (V8Exchan82.epf)
Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = "") Экспорт
Через неё штатно и выгружаются параметы, см. код обработки.

upd: (16) Да, что-то я не в тему... Но при обмене 8-8 тоже не всё гладко, можно передавать штатно только параметры с галкой "в диалоге", так что пусть будет.
due; IgorXml; +2 Ответить 1
16. andrewks 1184 22.03.14 08:24 Сейчас в теме
(15) статью читали вообще? "при обмене из 7.7 в 8.х"