Волшебный обмен между базами 1с через XML

В процедурах выгрузки/загрузки создается ФабрикаXDTO из схемы, которая хранится в макете как файл. Файл настроек схемы надо использовать один и тот же в обработках Загрузки/Выгрузки
Из Фабрики создается объект, его заполняю выгружаемыми данными
Фабрику сохраняю в XML
В процедуре загрузки из читаю фабрику из XML и пробегаю по объектам

Функция

СоздатьФайлСхемы

()

ФайлСхемы

= Новый

Файл

(

КаталогВременныхФайлов

() + «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>

Запись опубликована автором в рубрике с метками , .

Добавить комментарий