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

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

18 Comments

  1. kitminsk

    Плюсик поставил, но невольно вспомнилось, как русские выпустили в американской школе трех свиней с номерами 1,2 и 4, а американцы веь день искали четвертую свинью.

    Reply
  2. samamoiloff

    (0)Благодарю.

    А много ли граждан, интересно, практикуют формирование узлов XML, так скажем, «вручную»?

    У нас есть группа Конвертация данных, там за три года — три темы создано. Есть ли спрос на сей контент? Хотел сделать платный курс, но сдается, что придется ограничиваться бесплатным.

    Reply
  3. Поручик

    (2) Я иногда практикую, в основном для обеспечения совместимости между релизами конфигурации, иногда использую в алгоритмах КД для переноса однотипных реквизитов.

    Reply
  4. Поручик

    (2) Здесь тоже есть программное формирование узлов

    Reply
  5. CaSH_2004

    Плюсую, побольше бы публикаций по КД

    Reply
  6. Totoro

    Статья по этой теме: КД: Передача параметров из 7.7 а 8.х

    Не плохо бы ссылку в статью добавить.

    Reply
  7. andrewks

    (7) хммм… когда столкнулся с этой проблемой, почему-то гугль не вывел на эту статью, поэтому пришлось решать самому (но плюсанул). к тому же, там не рассмотрен случай, когда значение параметра нужно иметь на ранних стадиях загрузки, до того, как из файла выгрузки будут считаны параметры штатной выгрузкой

    Reply
  8. andrewks

    +(8) а мне как раз надо было получить параметры на ранней стадии — в правилах очистки данных, а они выполняются до штатной загрузки параметров

    Reply
  9. Totoro

    (8) Твоя статья тоже нужна, не спорю.

    Reply
  10. 1cmax

    полезная статья

    Reply
  11. Rudakov_D

    Возможно ли сделать параметр объекта аналогичным механизмом для обмена 1с 7.7 в 1с 8.2 ?

    Reply
  12. andrewks

    (12) Дмитрий Рудаков, думаю, что возможно

    Reply
  13. volha-77

    можно ли сделать аналогично для 7.7 ->7.7? у меня что-то не получилось (организация в документе остается пустой, хотя ошибок не выдает)

    Reply
  14. zqzq

    Есть более простое решение, вызвать в ПередВыгрузкойДанных экспортную процедуру модуля обработки УниверсальныйОбменДаннымиXML (V8Exchan82.epf)

    Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = «») Экспорт

    Через неё штатно и выгружаются параметы, см. код обработки.

    upd: (16) Да, что-то я не в тему… Но при обмене 8-8 тоже не всё гладко, можно передавать штатно только параметры с галкой «в диалоге», так что пусть будет.

    Reply
  15. andrewks

    (15) статью читали вообще? «при обмене из 7.7 в 8.х»

    Reply
  16. 942644

    (15)

    ПередатьОдинПараметрВПриемник

    Реально помогло

    Reply
  17. Vasiliy_A

    Доброго времени суток, подскажите, где подробнее об этом методе можно узнать (xml и пр.)?

    Пытаюсь применить, rootNode не находит, как его получить?

    «Правила конвертации» для обмена из 8.2 в 8.3, обработка v2.1.8.

    Reply
  18. user1090556

    А как передать ТаблицуЗначений таким способом?

    Записывается только в таком виде

    <ЗначениеПараметра Имя=»ТабДокументовУдаления» Тип=»ТаблицаЗначений»><Значение>ТаблицаЗначений</Значение></ЗначениеПараметра>

    А вот сами данные ТЗ не попадают в файл обмена

    Reply

Leave a Comment

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