Первый раз я встретился с Фабрикой XDTO, когда делал интеграцию между одной 1С-конфигураций УТ и другой 1С-конфигурацией УТ. Там было удобней использовать именно фабрику XDTO, а не конфигурацию "Конвертация данных". И тогда я думал, что уже полностью понял механизм этой фабрики. Но когда увидел подсистему Битрикса для интеграции 1С и БУС, то еще глубже стал понимать ее. Здесь просто приведены некоторые схемы, которые более наглядно представляют этот механизм.
| Просто | Сложно | |
|---|---|---|
| Типы данных XDTO | ТипЗначенияXDTO | ТипОбъектаXDTO |
| Экземпляры данных XDTO | ЗначениеXDTO | ОбъектXDTO |
МояФабрикаXDTO = СоздатьФабрикуXDTO(МояСхема);
XDTOКаталогТип = МояФабрикаXDTO.Тип("Каталог");
XDTOКаталог = МояФабрикаXDTO.Создать(XDTOКаталогТип);
XDTOКаталог.Ид = sss.ИдКаталога;
XDTOКаталог.ИдКлассификатора = sss.ИдКаталога;
XDTOКаталог.Наименование = sss.Каталог;
XDTOКаталог.Описание = sss.Каталог;
XDTOКаталог.СодержитТолькоИзменения = XMLСтрока(Истина);
XDTOКлассификаторТип = МояФабрикаXDTO.Тип("Классификатор");
XDTOКлассификатор = МояФабрикаXDTO.Создать(XDTOКлассификаторТип);
XDTOКлассификатор.Ид = sss.ИдКаталога;
XDTOКлассификатор.Наименование = sss.Каталог;
XDTOКлассификатор.СодержитТолькоИзменения = XMLСтрока(Истина);
XDTOПакетПредложенийТип = МояФабрикаXDTO.Тип("ПакетПредложений");
XDTOПакетПредложений = МояФабрикаXDTO.Создать(XDTOПакетПредложенийТип);
XDTOЕдиницыИзмеренияТип = МояФабрикаXDTO.Тип("ЕдиницыИзмерения");
XDTOЕдиницаИзмеренияТип = МояФабрикаXDTO.Тип("ЕдиницаИзмерения");
XDTOЕдиницыИзмерения = МояФабрикаXDTO.Создать(XDTOЕдиницыИзмеренияТип);
Пока выборка.Следующий() Цикл
XDTOЕдиницаИзмерения = МояФабрикаXDTO.Создать(XDTOЕдиницаИзмеренияТип);
XDTOЕдиницаИзмерения.Ид = XMLСтрока(выборка.Идентификатор);
XDTOЕдиницаИзмерения.НомерВерсии = ... ;
XDTOЕдиницаИзмерения.НаименованиеКраткое = Лев(выборка.Наименование,3);
XDTOЕдиницаИзмерения.ПометкаУдаления = XMLСтрока(выборка.ПометкаУдаления);
XDTOЕдиницаИзмерения.Код = Лев(выборка.Код,4);
XDTOЕдиницаИзмерения.НаименованиеПолное = выборка.НаименованиеПолное;
XDTOЕдиницаИзмерения.МеждународноеСокращение = Лев(выборка.МеждународноеСокращение,3);
XDTOЕдиницыИзмерения.ЕдиницаИзмерения.Добавить(XDTOЕдиницаИзмерения);
КонецЦикла;
XDTOТипыЦенТип = МояФабрика.Тип("ТипыЦен");
XDTOТипЦеныТип = МояФабрика.Тип("ТипЦены");
XDTOНалогТип = МояФабрика.Тип("Налог");
XDTOТипыЦен = МояФабрикаXDTO.Создать(XDTOТипыЦенТип);
Пока выборка.Следующий() Цикл
XDTOТипЦены = МояФабрикаXDTO.Создать(XDTOТипЦеныТип);
XDTOТипЦены.Ид = XMLСтрока(выборка.Идентификатор);
XDTOТипЦены.НомерВерсии = ... ;
XDTOТипЦены.Наименование = выборка.Наименование;
XDTOТипЦены.ПометкаУдаления = XMLСтрока(выборка.ПометкаУдаления);
XDTOТипЦены.Валюта = Лев(выборка.ВалютаЦеныКод, 3 );
XDTOНалог = МояФабрикаXDTO.Создать(XDTOНалогТип);
XDTOНалог.Наименование = ... НаименованиеНалога;
XDTOНалог.УчтеноВСумме = выборка.ЦенаВключаетНДС;
XDTOТипЦены.Налог.Добавить(XDTOНалог);
XDTOТипыЦен.ТипЦены.Добавить(XDTOТипЦены);
КонецЦикла;
XDTOСкладыТип = МояФабрика.Тип("Склады");
XDTOСкладТип = МояФабрика.Тип("Склад");
XDTOСклады = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOСкладыТип);
Пока выборка.Следующий() Цикл
XDTOСклад = МояФабрикаXDTO.Создать(XDTOСкладТип);
XDTOСклад.Ид = XMLСтрока(выборка.Идентификатор);
XDTOСклад.НомерВерсии = ... ;
XDTOСклад.ПометкаУдаления = XMLСтрока(выборка.ПометкаУдаления);
XDTOСклад.Наименование = выборка.Наименование;
XDTOСклад.Комментарий = выборка.Комментарий;
XDTOСклады.Склад.Добавить(XDTOСклад);
КонецЦикла;