В процедурах выгрузки/загрузки создается Фабрика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>