gifts2017

Конвертация данных 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) 28.05.12 09:18
Плюсик поставил, но невольно вспомнилось, как русские выпустили в американской школе трех свиней с номерами 1,2 и 4, а американцы веь день искали четвертую свинью.
2. Владимир Самойлов (samamoiloff) 01.06.12 16:46
(0)Благодарю.

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

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