Обмен между базами через XML (создается ФабрикаXDTO) В процедурах выгрузки/загрузки создается Фабрика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>
Автор:
Абазин Антон Категория:
WEB-сервисы, WS-ссылки, XDTO-пакеты