Кратко суть проблемы можно озвучить цитатой из документации: "Передача параметра из источника в приемник доступна только при обмене между информационными базами на платформе 1С:Предприятие 8".
Ниже излагается способ передачи глобальных параметров при таком обмене без правки выгруженного из КД 2 модуля выгрузки и без правки самой КД 2.
Итак, в обработчике ПередВыгрузкойДанных пишем код:
Код 1C v 8.2 УП УзелПарам=СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПарам,"Имя","НашПараметр1");
УстановитьАтрибут(УзелПарам,"Тип","Строка");
ЗаписатьЭлемент(УзелПарам,"Значение","Значение нашего параметра 1");
ДобавитьПодчиненный(rootNode,УзелПарам);
УзелПарам=СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПарам,"Имя","НашПараметр2");
УстановитьАтрибут(УзелПарам,"Тип","Булево");
ЗаписатьЭлемент(УзелПарам,"Значение","true");
ДобавитьПодчиненный(rootNode,УзелПарам);
после этого данные параметры будут абсолютно штатно загружены в стандартной обработке "Универсальный обмен данными в формате XML (2.1.5)".
Ещё хотелось бы заметить, что содержимое обработчика ПослеЗагрузкиПараметров при таком обмене также не выгружается в файл обмена. Исправить данную оплошность можно так же, записав в обработчике ПередВыгрузкойДанных
Код 1C v 8.2 УП АлгПослеЗагрузкиПараметров=
"СтрокаКода1;"+РазделительСтрок+
"СтрокаКода2;"+РазделительСтрок+
"СтрокаКода3;";
ЗаписатьЭлемент(rootNode,"АлгоритмПослеЗагрузкиПараметров",АлгПослеЗагрузкиПараметров);
Нюанс : чтобы иметь параметры на ранних стадиях загрузки, например, в обработчиках ПередЗагрузкойДанных или ПередОбработкой в ПОД (правилах очистки данных), нужно помещать выгружаемые параметры в корень узла с выгружаемыми данными:
Код 1C v 8.2 УП ИмяПараметра="НашПараметр1";
ТипПараметра="Строка";
ЗначениеПараметра="Значение нашего параметра 1";
// Устанавливаем значение параметра в обработчике ПередЗагрузкойДанных
УзелПравил=rootNode.getElementsByTagName("ПравилаОбмена").item(0);
УзелПередЗагрузкой=УзелПравил.getElementsByTagName("ПередЗагрузкойДанных").item(0);
КоллУзлов=УзелПередЗагрузкой.childNodes;
Для НомУзла=0 По КоллУзлов.length-1 Цикл
ТекУзел=КоллУзлов.item(НомУзла);
Если (ТекУзел.nodeType=3) Тогда
// текст элемента
ТекУзел.nodeValue=РазделительСтрок+"Параметры."+ИмяПараметра+"="+?(ТипПараметра="Строка","""","")+
ЗначениеПараметра+?(ТипПараметра="Строка","""","")+";"+РазделительСтрок+РазделительСтрок+
ТекУзел.nodeValue;
Прервать;
КонецЕсли;
КонецЦикла;
Автор: andrewks - Источник
В процедурах выгрузки/загрузки создается ФабрикаXDTO из схемы, которая хранится в макете как файл. Файл настроек схемы надо использовать один и тот же в обработках Загрузки/Выгрузки
Из Фабрики создается объект, его заполняю
выгружаемыми данными
Фабрику сохраняю в XML. В процедуре загрузки из читаю фабрику из XML и пробегаю по объектам
Очень удобно!
Код 1C v 8.х Функция СоздатьФайлСхемы()
ФайлСхемы = Новый Файл(КаталогВременныхФайлов() + "schema.xsd");
Если ФайлСхемы.Существует() Тогда
УдалитьФайлы(ФайлСхемы.ПолноеИмя);
КонецЕсли;
Ссылка = ПолучитьМакет("schema_xsd");
Ссылка.Записать(ФайлСхемы.ПолноеИмя);
Возврат ФайлСхемы.ПолноеИмя;
КонецФункции
Функция ВыгрузитьДокументы()
ФайлыXSD = Новый Массив();
ФайлыXSD.Добавить(СоздатьФайлСхемы());
Фабрика = СоздатьФабрикуXDTO(ФайлыXSD);
ФайлОбмена = Фабрика.Создать(Фабрика.Тип("http://anton.fly7.ru", "ФайлОбмена"));
Пока Выборка.Следующий() Цикл
Документ = Фабрика.Создать(Фабрика.Тип("http://anton.fly7.ru", "Документ"));
Документ.ID = Строка(Док.УникальныйИдентификатор());
Документ.ВидДокумента = Док.Метаданные().Имя;
Документ.Дата = Док.Дата;
Документ.Номер = Док.Номер;
Документ.Статус = ?(Док.Проведен, "Проведен", ?(Док.ПометкаУдаления, "ПометкаУдаления", "НеПроведен"));
Документ.Комментарий = Док.Комментарий;
КонецЦикла
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
МойXML = Новый ЗаписьXML;
МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML);
МойXML.ЗаписатьОбъявлениеXML();
Фабрика.ЗаписатьXML(МойXML, ФайлОбмена);
МойXML.Закрыть();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Создан файл обмена " + ИмяФайла);
КонецФункции
Процедура ЗагрузитьДокументы()
ФайлыXSD = Новый Массив();
ФайлыXSD.Добавить(СоздатьФайлСхемы());
Фабрика = СоздатьФабрикуXDTO(ФайлыXSD);
ФайлОбмена = Фабрика.Создать(Фабрика.Тип("http://anton.fly7.ru", "ФайлОбмена"));
ОбменXML = Новый ЧтениеXML;
ОбменXML.ОткрытьФайл(ИмяФайла);
ФайлОбмена = Фабрика.ПрочитатьXML(ОбменXML, Фабрика.Тип("http://anton.fly7.ru", "ФайлОбмена"));
Для Каждого Документ Из ФайлОбмена.Документ Цикл
ОбработкаПрерыванияПользователя();
Если Документ.ВидДокумента = "ПоступлениеТоваров" И
ЗначениеЗаполнено(Поставщик) И
Документ.Контрагент.ИНН Поставщик.ИНН Тогда
КонецЕсли;
КонецЦикла
ФайлОбмена = "";
ОбменXML.Закрыть();
УдалитьФайлы(ИмяФайла);
КонецПроцедуры
Файл схемы примерно такой (разукрашка съела скобки, но смысл должен быть понятен ))
Код xs:schema xmlns:tns="http://anton.fly7.ru" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://anton.fly7.ru" attributeFormDefault="unqualified" elementFormDefault="qualified">
xs:complexType name="ФайлОбмена">
xs:sequence>
xs:element name="Документ" type="tns:Документ" nillable="true" maxOccurs="unbounded"/>
xs:sequence>
xs:complexType>
xs:complexType name="Документ">
xs:sequence>
xs:element name="ID" type="xs:string"/>
xs:element name="ВидДокумента" type="xs:string"/>
xs:element name="Статус" type="xs:string"/>
xs:element name="Дата" type="xs:dateTime"/>
xs:element name="Номер" type="xs:string"/>
xs:element name="Контрагент" type="tns:Контрагент"/>
xs:element name="Свойства" type="tns:ТаблицаСвойства" nillable="true" minOccurs="0"/>
xs:sequence>
xs:complexType>
xs:complexType name="Контрагент">
xs:sequence>
xs:element name="ID" type="xs:string"/>
xs:element name="Наименование" type="xs:string"/>
xs:element name="ИНН" type="xs:string"/>
xs:sequence>
xs:complexType>
xs:complexType name="ТаблицаСвойства">
xs:sequence>
xs:element name="СтрокаСвойства" type="tns:СтрокаСвойство" nillable="true" maxOccurs="unbounded"/>
xs:sequence>
xs:complexType>
xs:complexType name="СтрокаСвойство">
xs:sequence>
xs:element name="Наименование" type="xs:string" nillable="true"/>
xs:element name="Значение" type="xs:string" nillable="true"/>
xs:sequence>
xs:complexType>
xs:schema>
Автор:
Абазин Антон