XDTO для чайников

29.05.19

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Пример использования XDTO пакетов для выгрузки документа с табличной частью.

Скачать файлы

Наименование Файл Версия Размер
XDTO для чайников:
.zip 50,93Kb
62
.zip 1.0 50,93Kb 62 Скачать

По пакетам XDTO уже существует достаточно много статей, прочитав которые я потратил еще достаточно много времени чтобы разобраться как написать обмен, используя эту технологию. Сейчас я уверенно могу сказать, что все достаточно просто и покажу это на примере.

В примере мы выгрузим из демо базы БП 3 документ «Реализация (акты, накладные)» в самописную конфигурацию.

Конфигурация, в которую будем загружать данные будет состоять из следующих объектов:
Справочники: Номенклатура, Контрагенты. Перечисления: СтавкиНДС. Документы: РеализацияТоваровУслуг.

Оказывается, в демо базе БП 3 есть расширение «ФормированиеТестовыхДанных», значит им и воспользуемся, не будем создавать собственное.

Добавим пакет XDTO. Имя: ВыгрузкаРеализаций. URI пространство имен: infostart.

В пакете добавим тип объекта «ДокументРеализация».

В объект добавим свойства: Ссылка, Дата, Номер, Контрагент.

Пакет 1

Создадим обработку «Выгрузка реализаций»

Выгрузка реализаций

Код команды выгрузки:

&НаСервере
Функция КомандаВыгрузитьНаСервере()
	// Вставить содержимое обработчика.
	ЗаписьXML = Новый ЗаписьXML();
    ЗаписьXML.УстановитьСтроку();
	
	РеализацияXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "ДокументРеализация"));
	РеализацияXDTO.Ссылка = СериализаторXDTO.XMLСтрока(выбРеализация.Ссылка);
	РеализацияXDTO.Дата = выбРеализация.Дата;
	РеализацияXDTO.Номер = выбРеализация.Номер;
	РеализацияXDTO.Контрагент = выбРеализация.Контрагент.Наименование;
	
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, РеализацияXDTO);
	
	Возврат ЗаписьXML.Закрыть();

КонецФункции

&НаКлиенте
Процедура КомандаВыгрузить(Команда)
	ОбъектXDTO = КомандаВыгрузитьНаСервере();
	
	ЗаписьXML = Новый ЗаписьXML();
	ЗаписьXML.ОткрытьФайл(выбФайл);
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ЗаписьXML.ЗаписатьБезОбработки(ОбъектXDTO);
		
	ЗаписьXML.Закрыть(); 
	
КонецПроцедуры

Результат 

<?xml version="1.0" encoding="UTF-8"?>
<ДокументРеализация xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="infostart">
<Ссылка xsi:type="xs:string">63d07913-1e98-11e6-a31d-14dae9b19a48</Ссылка>
<Дата xsi:type="xs:dateTime">2016-12-29T12:00:00</Дата>
<Номер xsi:type="xs:string">0000-000603</Номер>
<Контрагент xsi:type="xs:string">Внуковский комбинат бортового питания</Контрагент>
</ДокументРеализация>

Изменим форму представления для свойств объекта XDTO

Результат

<?xml version="1.0" encoding="UTF-8"?>
<ДокументРеализация Контрагент="Внуковский комбинат бортового питания" Номер="0000-000603" Дата="2016-12-29T12:00:00" Ссылка="63d07913-1e98-11e6-a31d-14dae9b19a48" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="infostart"/>

Переходим к загрузке данных. Создадим обработку загрузки.

Код 

&НаСервереБезКонтекста
Функция ПолучитьСсылкуПоУИ(УникальныйИдентификатор, МенеджерОбъекта)
	УИДСсылки = СериализаторXDTO.XMLЗначение(Тип("УникальныйИдентификатор"), УникальныйИдентификатор);
	Возврат МенеджерОбъекта.ПолучитьСсылку(УИДСсылки);
КонецФункции

&НаСервереБезКонтекста
Процедура ЗагрузитьРеализации(ТекстФайла)
	ЧтениеXML = Новый ЧтениеXML();
	ЧтениеXML.УстановитьСтроку(ТекстФайла);
	
	РеализацияXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("infostart", "ДокументРеализация")); 
	
	
	сРеализацияТоваров = ПолучитьСсылкуПоУИ(РеализацияXDTO.Ссылка, Документы.РеализацияТоваровУслуг);
	
	оРеализацияТоваров = сРеализацияТоваров.ПолучитьОбъект();
	Если оРеализацияТоваров = Неопределено Тогда
		оРеализацияТоваров = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
		оРеализацияТоваров.УстановитьСсылкуНового(сРеализацияТоваров);
	КонецЕсли;
	
	оРеализацияТоваров.Дата = РеализацияXDTO.Дата;
	оРеализацияТоваров.Номер = РеализацияXDTO.Номер;
	
	оРеализацияТоваров.Записать(РежимЗаписиДокумента.Запись);
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаЗагрузить(Команда)
	// Вставить содержимое обработчика.
	ЧтениеТекста = Новый ЧтениеТекста(выбФайл);
	ТекстФайла = ЧтениеТекста.Прочитать();
	ЗагрузитьРеализации(ТекстФайла);	
КонецПроцедуры

Проверяем загрузку. Выполнение прерывается ошибкой. Через отладку можно увидеть, что значения свойств объекта РеализацияXDTO имеют строковый тип, конкретно дата в таком виде преобразуется к пустому значению.

В пакете XDTO укажем свойству "Дата" тип

Проверим еще раз загрузку, все должно было пройти успешно.

Отдельно обращу внимание на эту строчку кода

РеализацияXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("infostart", "ДокументРеализация")); 

При чтение объекта XDTO я принудительно указал его тип, хотя параметр не является обязательным. И сделал я это не просто так, для корневого элемента тип объекта не выгружается, это хорошо видно в xml файле, где все свойства выгружали в форме элементов. Для объекта ДокументРеализация не указан атрибут xsi:type.

<?xml version="1.0" encoding="UTF-8"?>
<ДокументРеализация xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="infostart">
<Ссылка xsi:type="xs:string">63d07913-1e98-11e6-a31d-14dae9b19a48</Ссылка>
<Дата xsi:type="xs:dateTime">2016-12-29T12:00:00</Дата>
<Номер xsi:type="xs:string">0000-000603</Номер>
<Контрагент xsi:type="xs:string">Внуковский комбинат бортового питания</Контрагент>
</ДокументРеализация>

В свойство "контрагент" мы помещали наименование контрагента. Добавим новый тип объекта в пакет XDTO "СправочникКонтрагенты" со свойствами: Ссылка, Код, Наименование, НаименованиеПолное. Для свойства "Контрагент" в типе объекта "ДокументРеализация" укажем форму хранения в виде элемента. Внесем изменения в код выгрузки.

&НаСервере
Функция КомандаВыгрузитьНаСервере()
	// Вставить содержимое обработчика.
	ЗаписьXML = Новый ЗаписьXML();
    ЗаписьXML.УстановитьСтроку();
	
	КонтрагентXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "СправочникКонтрагенты"));
	КонтрагентXDTO.Ссылка = СериализаторXDTO.XMLСтрока(выбРеализация.Контрагент.Ссылка);
	КонтрагентXDTO.Код = выбРеализация.Контрагент.Код;
	КонтрагентXDTO.Наименование = выбРеализация.Контрагент.Наименование;
	КонтрагентXDTO.НаименованиеПолное = выбРеализация.Контрагент.НаименованиеПолное;
	
	РеализацияXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "ДокументРеализация"));
	РеализацияXDTO.Ссылка = СериализаторXDTO.XMLСтрока(выбРеализация.Ссылка);
	РеализацияXDTO.Дата = выбРеализация.Дата;
	РеализацияXDTO.Номер = выбРеализация.Номер;
	РеализацияXDTO.Контрагент = КонтрагентXDTO;
			
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, РеализацияXDTO);
	
	Возврат ЗаписьXML.Закрыть();

КонецФункции

Думаю, здесь все понятно.

Дольше всего я не мог разобраться, как выгружать табличные части.

Создадим тип объекта "ТабличнаяЧасть" со свойством "Строки".

Максимальное количество -1, означает неограниченное количество элементов.

Создадим объект.

ТоварыXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "ТабличнаяЧасть"));

И посмотрим его свойства в отладчике.

Дальше, думаю, уже все понятно. Изменения в коде обработки выгрузки.

&НаСервере
Функция КомандаВыгрузитьНаСервере()
	// Вставить содержимое обработчика.
	ЗаписьXML = Новый ЗаписьXML();
    ЗаписьXML.УстановитьСтроку();
		
	КонтрагентXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "СправочникКонтрагенты"));
	КонтрагентXDTO.Ссылка = СериализаторXDTO.XMLСтрока(выбРеализация.Контрагент.Ссылка);
	КонтрагентXDTO.Код = выбРеализация.Контрагент.Код;
	КонтрагентXDTO.Наименование = выбРеализация.Контрагент.Наименование;
	КонтрагентXDTO.НаименованиеПолное = выбРеализация.Контрагент.НаименованиеПолное;
	
	РеализацияXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "ДокументРеализация"));
	РеализацияXDTO.Ссылка = СериализаторXDTO.XMLСтрока(выбРеализация.Ссылка);
	РеализацияXDTO.Дата = выбРеализация.Дата;
	РеализацияXDTO.Номер = выбРеализация.Номер;
	РеализацияXDTO.Контрагент = КонтрагентXDTO;
	
	ТоварыXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "ТабличнаяЧасть"));
	
	Для Каждого сТовары Из выбРеализация.Товары Цикл
		НоменклатураXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "СправочникНоменклатура"));
		НоменклатураXDTO.Ссылка = СериализаторXDTO.XMLСтрока(сТовары.Номенклатура);
		НоменклатураXDTO.Код = сТовары.Номенклатура.Код;
		НоменклатураXDTO.Наименование = сТовары.Номенклатура.Наименование;
		НоменклатураXDTO.НаименованиеПолное = сТовары.Номенклатура.НаименованиеПолное;
		
		сТоварыXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "ДокументРеализацияТовары"));
		сТоварыXDTO.Номенклатура = НоменклатураXDTO;
		сТоварыXDTO.Количество = сТовары.Количество;
		сТоварыXDTO.Цена = сТовары.Цена;
		сТоварыXDTO.Сумма = сТовары.Сумма;
		сТоварыXDTO.СтавкаНДС = XMLСтрока(сТовары.СтавкаНДС);
		сТоварыXDTO.СуммаНДС = сТовары.СуммаНДС;
		
		ТоварыXDTO.Строки.Добавить(сТоварыXDTO);
	КонецЦикла;
	
	РеализацияXDTO.тчТовары = ТоварыXDTO;
				
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, РеализацияXDTO);
	
	Возврат ЗаписьXML.Закрыть();

КонецФункции

Код загрузки

&НаСервереБезКонтекста
Процедура ЗагрузитьРеализации(ТекстФайла)
	ЧтениеXML = Новый ЧтениеXML();
	ЧтениеXML.УстановитьСтроку(ТекстФайла);
	
	РеализацияXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип("infostart", "ДокументРеализация")); 
	
	
	сРеализацияТоваров = ПолучитьСсылкуПоУИ(РеализацияXDTO.Ссылка, Документы.РеализацияТоваровУслуг);
	
	оРеализацияТоваров = сРеализацияТоваров.ПолучитьОбъект();
	Если оРеализацияТоваров = Неопределено Тогда
		оРеализацияТоваров = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
		оРеализацияТоваров.УстановитьСсылкуНового(сРеализацияТоваров);
	КонецЕсли;
	
	оРеализацияТоваров.Дата = РеализацияXDTO.Дата;
	оРеализацияТоваров.Номер = РеализацияXDTO.Номер;
	
	КонтрагентXDTO = РеализацияXDTO.Контрагент;
	сКонтрагент = ПолучитьСсылкуПоУИ(КонтрагентXDTO.Ссылка, Справочники.Контрагенты);
	оКонтрагент = сКонтрагент.ПолучитьОбъект();
	Если оКонтрагент = Неопределено Тогда
		оКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
		оКонтрагент.УстановитьСсылкуНового(сКонтрагент);
	КонецЕсли;
	
	оКонтрагент.Код = КонтрагентXDTO.Код; 
	оКонтрагент.Наименование = КонтрагентXDTO.Наименование; 
	оКонтрагент.НаименованиеПолное = КонтрагентXDTO.НаименованиеПолное; 
	оКонтрагент.Записать();
	
	оРеализацияТоваров.Контрагент = оКонтрагент.Ссылка;
	оРеализацияТоваров.Товары.Очистить();
	Для Каждого сТоварыXDTO Из РеализацияXDTO.тчТовары.Строки Цикл
		сТовары = оРеализацияТоваров.Товары.Добавить();
		ЗаполнитьЗначенияСвойств(сТовары, сТоварыXDTO,,"СтавкаНДС,Номенклатура");
		сТовары.СтавкаНДС = Перечисления.СтавкиНДС[сТоварыXDTO.СтавкаНДС];
		
		НоменклатураXDTO = сТоварыXDTO.Номенклатура;
		сНоменклатура = ПолучитьСсылкуПоУИ(НоменклатураXDTO.Ссылка, Справочники.Номенклатура);
		оНоменклатура = сНоменклатура.ПолучитьОбъект();
		Если оНоменклатура = Неопределено Тогда
			оНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
			оНоменклатура.УстановитьСсылкуНового(сНоменклатура);
		КонецЕсли;
		
		оНоменклатура.Код = НоменклатураXDTO.Код; 
		оНоменклатура.Наименование = НоменклатураXDTO.Наименование; 
		оНоменклатура.НаименованиеПолное = НоменклатураXDTO.НаименованиеПолное; 
		оНоменклатура.Записать();
		
		сТовары.Номенклатура = оНоменклатура.Ссылка;
	КонецЦикла;

	
	оРеализацияТоваров.Записать(РежимЗаписиДокумента.Запись);
	
КонецПроцедуры

Для создания примера использовались программные файлы 1С:Предприятие 8.3 (8.3.14.1694).

XDTO

См. также

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    133686    714    291    

385

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила тестировались на конфигурациях УПП 1.3 (1.3.220.x) и БП 3.0 (3.0.147.x). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    19643    130    38    

88

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос позволяет настроить собственный обмен данными между указанными программами, альтернативный предлагаемому фирмой 1С. Перенос данных осуществляется из 1С:ERP 2 / 1С:КА 2 / 1С:УТ 11 в 1С:БП 3.0. Правила обмена оперативно обновляются при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

38500 34650 руб.

15.04.2019    67853    175    136    

107

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обработка позволяет не только перенести все документы, справочную информацию и начальные остатки из ERP 2 или КА 2 в ЗУП 3, но и организовать регулярный перенос данных между программами 1С:ERP 2 / КА 2 и 1С:ЗУП 3. Вы можете выбрать период отбора данных и установить фильтр по организациям, чтобы выгружать только необходимую информацию. Более того, перенос оперативно обновляется при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

48278 43450 руб.

03.12.2020    33820    79    57    

77

SALE! 10%

Перенос данных из УПП 1.3 / КА 1.1 в БП 3.0

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из УПП 1.3 в БП 3.0 (или из КА 1.1 в БП 3.0). Переносятся документы, начальные остатки и вся справочная информация. Есть фильтр по организации и множество других параметров выгрузки. Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов. Перенос данных возможен в 1С: Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую. Переход с "1С: Управление производственным предприятием 1.3" / "1С:Комплексная автоматизация 1.1" на "1С:Бухгалтерия предприятия 3.0" с помощью наших правил конвертации будет максимально комфортным!

43889 39500 руб.

25.02.2015    168048    288    240    

371

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. За основу были взяты стандартные правила переноса остатков и справочной информации. Правила тестировались на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.15.x).

28000 руб.

23.07.2020    45475    193    64    

151

SALE! 10%

Перенос данных из УПП 1.3 в ЗУП 3.1 или из КА 1.1 в ЗУП 3.1

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Перенос кадровых и расчетных данных и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" или "1С:Управление производственным предприятием, ред.1.3" в "1С:Зарплата и управление персоналом", ред. 3.1. Правила позволяют перенести кадровые данные сотрудников за весь период ведения учета в КА 1.1 / УПП 1.3 и расчетные данные за выбранный период (минимально необходимый - 2 года). Позволяют осуществить переход на ведение учета зарплаты и кадров в программе 1С:Зарплата и управление персоналом, ред. 3.1.

50722 45650 руб.

29.10.2018    53989    52    97    

55

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9036    8    8    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. androidT1C 76 29.05.19 15:56 Сейчас в теме
О! Спасибо.
Одна вещь перечеркивает всю нужность XDTO в 1С: при изменении структуры данных для обмена (например, добавить всего одно новое поле) придется изменять конфигурацию. Это никуда не годится.
adhocprog; TreeDogNight; Kolzah; 9-pm; acanta; +5 Ответить
2. acanta 29.05.19 15:59 Сейчас в теме
(1) может есть возможность сделать такой макет в обработке?
adhocprog; +1 Ответить
3. fenixnow 267 29.05.19 17:12 Сейчас в теме
(1) Считаем, что структура выгрузки определяется пакете ХДТО и все прекрасно :)
adhocprog; +1 Ответить
4. HAMMER_59 244 29.05.19 17:45 Сейчас в теме
(1) Как-то очень не внимательно даже начало статьи прочитали - в примере для демо базы я храню пакет в расширении.
Также пакет XDTO можно прекрасно хранить в файле.

Кроме того в статье далеко не полный обзор возможностей применения XDTO, всего лишь простенький пример с которого можно начать знакомство с технологией.

Пора уже завести правило на Инфостарт.
Не согласен - критикуй, критикуешь - предлагай, предлагаешь - делай, делаешь - отвечай!
adhocprog; Fril; HameleonA; ikalmykia; A7758735; user1021675; cleaner_it; dbachinsky; victorree; Gendelf; Olga_aku; kraynev-navi; +12 Ответить
13. androidT1C 76 30.05.19 10:10 Сейчас в теме
(4)
Также пакет XDTO можно прекрасно хранить в файле.

Можно пример? Меня от XDTO, в самом деле, удерживает необходимость внесения изменений в конфигурацию.
adhocprog; +1 Ответить
16. prosto_tak 30.05.19 15:43 Сейчас в теме
(13)
Экспортируете пакет в .xsd, текст из .xsd копируете в макет. Далее все просто:

ЧтениеХМЛ = Новый ЧтениеXML();
	ЧтениеХМЛ.УстановитьСтроку(ПолучитьМакет("МакетС_XSD").ПолучитьТекст());	
	ПостроительDOM = Новый ПостроительDOM();
	Документ = ПостроительDOM.Прочитать(ЧтениеХМЛ);
	ПостроительСхем = Новый ПостроительСхемXML();
	Схема = ПостроительСхем.СоздатьСхемуXML(Документ.ЭлементДокумента);
	НаборСхем = Новый НаборСхемXML();
	НаборСхем.Добавить(Схема);
	
	НоваяФабрикаХДТО = Новый ФабрикаXDTO(НаборСхем);
Показать
BigB; swenzik; +2 Ответить
36. alekshihanov 27.09.19 09:17 Сейчас в теме
(4)
Не согласен - критикуй, критикуешь - предлагай, предлагаешь - делай, делаешь - отвечай!


Получится: Не согласен - отвечай.
Merkalov; crosby; +2 Ответить
47. crosby 280 13.01.22 16:25 Сейчас в теме
(36) вот именно для этого под комментариями и сделана кнопка "Ответить" ))
Прикрепленные файлы:
user1970649; +1 Ответить
54. Dzenn 865 12.07.23 12:48 Сейчас в теме
(1) пакеты XDTO можно (и в какой-то степени нужно) хранить хранить отдельно от конфигурации — например, в XML-файлах или в макетах внешней обработки
5. nbeliaev 823 30.05.19 04:49 Сейчас в теме
Ок, если это пример для чайников, то зачем сразу учить неправильно? Выгружаете ссылочные объекты, но не используете гуиды или хотя бы инн у того же контрагента, зато есть СериализаторXDTO для номенклатуры.
Я бы на Вашем месте повнимательнее изучил метариалы по этой теме.
bulpi; jONES1979; Неопределено; +3 Ответить
6. HAMMER_59 244 30.05.19 06:27 Сейчас в теме
(5)
И что по вашему эти строчки выгружают?
КонтрагентXDTO.Ссылка = СериализаторXDTO.XMLСтрока(выбРеализация.Контрагент.Ссылка);
РеализацияXDTO.Ссылка = СериализаторXDTO.XMLСтрока(выбРеализация.Ссылка);
НоменклатураXDTO.Ссылка = СериализаторXDTO.XMLСтрока(сТовары.Номенклатура);

А что делает эта строчка кода?
сНоменклатура = ПолучитьСсылкуПоУИ(НоменклатураXDTO.Ссылка, Справочники.Номенклатура);
Код функции ПолучитьСсылкуПоУИ, я действительно, забыл выложить, но как по Вашему что она делает?
Не использует ли случаем Справочники.Номенклатура.ПолучитьСсылку()? И что же эта функция интересно делает, не по уникальному идентификатору, случаем, получает ссылку на объект?
crosby; Batman; +2 Ответить
7. nbeliaev 823 30.05.19 08:45 Сейчас в теме
(6) хорошо, допустим гуиды все таки есть, но они появляются уже в коде ближе к окончанию публикации без всяких объяснений почему вдруг наименование стало не пригодным и как нужно связать реализацию и контрагента в пакете (форма хранения - элемент, которую указываете Вы, не счиатется).
Далее, у Вас везде используется разименование (обращение к реквизитам через точку). Плюс ко всему название переменных (я про префиксы) - Вы для себя что ли пишите или для людей?
9. HAMMER_59 244 30.05.19 09:23 Сейчас в теме
(7) Я так понимаю в вашей голове летает мысль, что синхронизацию баз лучше делать, используя планы обмена, в таком случае не нужно каждый раз выгружать данные по подчиненным объектам.
Цель какая статьи? Показать технологию XDTO. Вам не понятно зачем остальной код написан максимально упрощенно?
Может вам стоит задуматься прежде всего над собой, а не других критиковать?
crosby; ikalmykia; Batman; user774630; TreeDogNight; GreenDragon; +6 Ответить
11. nbeliaev 823 30.05.19 09:59 Сейчас в теме
(9) Вы где про планы обмена в моих сообщениях прочитали?
Если делаете что-то, то делайте это хорошо. Вот и все.
На этом прекращаю общение с Вами. Успехов.
12. GreenDragon 30.05.19 10:10 Сейчас в теме
(11) Бугурт вообще не по теме. Уважаемый, вы действительно глупо выглядите
15. HAMMER_59 244 30.05.19 11:32 Сейчас в теме
(7)
Плюс ко всему название переменных (я про префиксы) - Вы для себя что ли пишите или для людей?

Странно такое слышать от человека, который выкладывает статьи с кодом на английском языке. У вас то код, конечно, кошерный, суффиксы, префиксы, а главное не для себя, а для людей, всем же крайне понятно на английском. Крайне странно, статьи у вас такие, что не каждый осилит прочитать и осознать, а тут код проще некуда, но разобраться не смогли.
Ну, и конечно, в ваших статьях все данные из базы извлекаются оптимальным запросом, ах да, у вас просто абстрактный код, т.к. запросы слишком громоздко выглядят, да и нет смысла их включать в статью.
RIS2020; Rustam10; +2 Ответить
8. zqzq 23 30.05.19 09:11 Сейчас в теме
В примере мы выгрузим из демо базы БП 3 документ «Реализация (акты, накладные)» в самописную конфигурацию.
Такое впечатление, что данный пример сильно проще было бы сделать с помощью Конвертации данных 2. И поддержка + доработка/расширение проще, чем в этой низкоуровневой XDTO. Но может пример неудачный, и в обмене с не-1С системами XDTO засияет?
10. HAMMER_59 244 30.05.19 09:48 Сейчас в теме
(8) Т.е. я тебе должен бы ещё описать как и где использовать технологию XDTO?
Тебе кажется что использование XDTO для синхронизации баз - не комильфо?
Конвертация данных лучше?
Прекрасно, напиши статью, очень будет интересно посмотреть на изящность реализации синхронизации баз, используя КД.
30. Yashazz 4693 21.09.19 23:07 Сейчас в теме
(10) Такие статьи были, и были на ИС; ищи лучше. И среди них была пара действительно изящных решений.
17. bulpi 214 30.05.19 17:06 Сейчас в теме
Статья вроде полезная, но мелкие огрехи не дают поставить плюс.
1)Автор, ну что это за "выбРеализация.Ссылка" ? А нельзя без ".Ссылка" ? Раздражает.
2)В выгрузке зачем использовать ЗаписьXml 2 раза ?
3)Получить ссылку по УИ можно гораздо короче

и т.д.
18. HAMMER_59 244 31.05.19 07:30 Сейчас в теме
(17)
1. Взял куски кода из реальной синхронизации, в ней переменная содержит объект полученный из плана обмена. В конкретном случае ни на что не влияет, т.к. дальше идет обращение к другим реквизитам объекта.
2. Действительно можно было воспользоваться другим объектом для записи текста в файл. Сильно бы изменился результат? Или вы предлагаете использовать поток? Тогда пришлось бы усложнять код. А может вы просто не заметили передачу данных с сервера на клиент, а затем с клиента в файл?
3. Очень интересно как можно проще. Сейчас в коде 2 строчки. Первая - десериализация УИД из XML. Вторая получение ссылки через менеджер.

Перед собой я ставил цель - показать на простом примере, как начать работать с XDTO.
Пример простой?
По работе с XDTO есть какие-то претензии?

Слышали такую фразу: "Лучшее, враг хорошего"?
20. bulpi 214 31.05.19 11:54 Сейчас в теме
(18)
1.Когда я вижу конструкцию вида "Ссылка.Ссылка", я думаю, что автор - неквалифицированный новичок, и перестаю дальше читать (как правило). В данном случае это не так. Получается когнитивный диссонанс :)

2.Возражение снимаю. Действительно, гонять файл туда-сюда не проще.

3.сРеализацияТоваров =XmlЗначение(Тип("ДокументСсылка.РеализацияТоваровУслуг"),РеализацияXDTO.Ссылка);

4)Пример простой, да

5)По работе с XDTO претензий нет.

6)В данном случае лучшее - не враг хорошего. Вы пишете методическую статью, почти главу учебника. Сейчас сотня новичков скопирует себе это как образец для подражания. А потом я, грязно матерясь :) , буду за ними исправлять конструкции типа Ссылка.Ссылка
Yashazz; nbeliaev; HAMMER_59; +3 Ответить
21. HAMMER_59 244 31.05.19 13:48 Сейчас в теме
(20)
сРеализацияТоваров =XmlЗначение(Тип("ДокументСсылка.РеализацияТоваровУслуг"),РеализацияXDTO.Ссылка);

Не знал что так можно, спасибо, за интересный вариант.
31. Yashazz 4693 21.09.19 23:09 Сейчас в теме
(21) а вы, батенька, слушайте, а не начинайте сразу возбухать. Вы ещё мнооого чего не знаете, уж поверьте)

ладно у bulpi было время вас просветить, так оно не у всех есть)
19. rudnitskij 31.05.19 11:16 Сейчас в теме
По-моему, передавать данные с помощью универсального обмена в формате XML неизмеримо проще, XDTO для такой задачи кажется слишком громоздким
22. starik-2005 3016 31.05.19 17:23 Сейчас в теме
Сколько страсти! А есть еще такой объект, как сериализатор XDTO - там схема не нужна, т.к. используется схема метаданных.

А по поводу XDTO, то это, фактически, xsd-схема, описанная в "терминах" объекта "ПакетXDTO" от 1С, который сам по себе поддерживает только малую часть "стандарта" - https://www.w3.org/TR/xmlschema11-1/

С помощью такой схемы вполне реально сделать обмен через веб-сервисы (SOAP), но нет особого смысла делать это для HTTP-сервисов (REST), т.к. тот же JSON занимает меньше места.
Yashazz; acanta; +2 Ответить
23. Region102 03.06.19 11:21 Сейчас в теме
(22) XDTO применяется при обмене между разнородными системами, если объекты в базах идентичны, то серилизатор значительно удобнее. А для JSON тоже надо писать функции серилизации и десериализации, так что при обмене именно 1С - 1С мне кажется лучше XDTO, тем более пакет отлично ложится в сообщения плана обмена. Да и скорость обработки тоже надо измерять, но мне кажется, что XDTO быстрее формирует xml чем обычные механизмы.
24. starik-2005 3016 03.06.19 13:23 Сейчас в теме
(23)
для JSON тоже надо писать функции серилизации и десериализации
В действительности не надо - достаточно структуры с именованными полями, в которых также может находиться структура. И все это через ЗаписьJSON (как, собственно, и через СериализаорХДТО) вполне себе работает, т.е. не нужно мутить бесполезную схему, достаточно просто написать что-то типа "Новый Структура("Поле1, Поле2, ...");" или вообще взять ключи структуры из метаданных. Я твк делал обмен из четырех баз в одну - заняло день, а это даже на конвертации больше времени занимает, при том отлаживать проще - вот у тебя сериализованная структура в хоть XML, хоть в JSON, хоть вообще через "значениеВСтрокуВнутр()" - пофиг.
25. HAMMER_59 244 03.06.19 13:31 Сейчас в теме
(24) Написать подобный обмен недолго и не сложно, проблема поддерживать такой обмен. Нужно со временем внести изменения в структуру, и это становится серьезной проблемой. При обмене между 8-кой и 7-кой при помощи XML, в итоге пришел к тому, что начал все документировать, иначе просто невозможно потом вспомнить что же там за структура. Естественно, объектов у меня там было не 2 и не 3 а на порядок больше.
32. Yashazz 4693 21.09.19 23:13 Сейчас в теме
(23)
XDTO быстрее формирует xml

Не совсем так. До определённого предела да, более выигрышно и быстро, но если вложенные структуры типов достаточно сложны, или не в рамках одного пакета, или там зависимости кривые/сложные, или записей более определённого количества, то хдто начинают проигрывать, причём достаточно сильно. Опять же зависит, какой фабрикой пользоваться - синглтоном или конкретно созданной. У меня бывали случаи, когда хдто в разы проигрывал другим инструментам, да и сериализаторы падали от "несъедобного" объёма.
Это тема отдельной большой статьи, ващета.
26. Trotter_NN 16.09.19 10:24 Сейчас в теме
Как у Вас записались данные в файл на этом моменте ?
РеализацияXDTO.Контрагент = КонтрагентXDTO;

КонтрагентXDTO - у меня равен ОбъектXDTO и в xml ничего не добавляется.
27. HAMMER_59 244 18.09.19 07:27 Сейчас в теме
(26) А какой тип вы ждете при работе с XDTO?
Не считая примитивных типов там всего два типа ОбъектXDTO и СписокXDTO, которые в последствии сериализуются в XML.
У ОбъектXDTO есть метод Тип(), посмотрите какого типа у Вас ОбъектXDTO, дальше уже нужно смотреть что там в пакете XDTO.
28. пользователь 21.09.19 22:17
Сообщение было скрыто модератором.
...
29. пользователь 21.09.19 22:21
Сообщение было скрыто модератором.
...
33. пользователь 22.09.19 14:05
Сообщение было скрыто модератором.
...
34. HAMMER_59 244 23.09.19 06:59 Сейчас в теме
(33) А остальные статьи на инфостарте Вам нравятся? Статей подобной этой на тему: "Как сделать?" не так много, а вот развлекательные статьи ежедневно да не по одной размещают, и у этих авторов рэйтинги куда выше.
Критиковать каждый дурак может. Я вроде, так и написал, что не знаю где нормальную документацию можно найти, Видимо Вы знаете, ну так напишите, что лучше бы я почитал и далее по списку, и я бы обязательно почитал, хорошие курсы также приветствуются.
35. Yashazz 4693 23.09.19 09:03 Сейчас в теме
(34) Да вообще-то я сразу и написал, только вот модераторам не нравится якобы, что картиночка не отображается) не хотят пропускать публикацию)))
37. Franchiser 47 23.11.19 14:58 Сейчас в теме
На скрине у свойства Дату указано что это атрибут, а далее приведен текст выгрузки где Дата это элемент.
38. HAMMER_59 244 25.11.19 07:09 Сейчас в теме
(37) Можно поконкретнее по какой части кода вы определили что Дата это элемент, а не атрибут.
39. Franchiser 47 25.11.19 10:56 Сейчас в теме
(38) по приведенному вами тексту в xml



Результат

<?xml version="1.0" encoding="UTF-8"?>
<ДокументРеализация xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="infostart">
<Ссылка xsi:type="xs:string">63d07913-1e98-11e6-a31d-14dae9b19a48</Ссылка>
<Дата xsi:type="xs:dateTime">2016-12-29T12:00:00</Дата>
<Номер xsi:type="xs:string">0000-000603</Номер>
<Контрагент xsi:type="xs:string">Внуковский комбинат бортового питания</Контрагент>
</ДокументРеализация>
40. Franchiser 47 25.11.19 11:03 Сейчас в теме
(38) спасибо за статью, очень понравилась.
Понял, вы текст выгрузки привели далее что дата это атрибут, а не элемент.
Статья помогла разобраться в моей проблеме : начиная с 8.3.8 нужно указывать "квалифицированная форма элемента " = истина иначе совсем не так выглядит выгрузка.
41. nayd 9 03.06.20 14:29 Сейчас в теме
Не понял, как у нас получилось что Строки - это СписокXDTO?
Вроде пропущено описание еще одного типа объекта в схеме XDTO, а именно типа "ДокументРеализацияТовары"
42. user1222071 08.06.20 13:27 Сейчас в теме
Может кто привести пример как прочитать xsd из файла и по нему записать данные в xml?
51. gybson 02.08.22 10:37 Сейчас в теме
(42) Как-то так

Фабрика = СоздатьФабрикуXDTO(ИмяФайла);


далее все как описано
43. lolm 22.09.21 09:18 Сейчас в теме
Добавим пакет XDTO. Имя: ВыгрузкаРеализаций. URI пространство имен: infostart.
Скажите в какой конфигурации обавлять пакет, хотелось бы больше подробностей
44. HAMMER_59 244 22.09.21 09:26 Сейчас в теме
(43) Во всех конфигурациях должен быть пакете XDTO. Одна конфигурация - будет выгружать данные и ей необходим пакет, другая принимать и её также необходим пакет.
Естественно я создаю пакет в одной конфигурации, затем его выгружаю, а далее загружаю в другую конфигурацию.
45. lolm 22.09.21 14:59 Сейчас в теме
{Обработка.Обработка1.Форма.Форма.Форма(8)}: Ошибка при вызове метода контекста (Создать)
РеализацияXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("infostart", "ДокументРеализация"));
по причине:
Несоответствие типов (параметр номер '1')

подскажите. пожалуйста что должно быть в типе какого вида значение. в чем ошибка
46. lolm 22.09.21 15:26 Сейчас в теме
48. marat.coolls 31.01.22 22:51 Сейчас в теме
Жаль схемы XML нет. Купил обработку, думал, что туда в виде текстового документа прикрепили, но нет.
Многое не понятно только из за того, что нет схемы...
49. esqado 20.06.22 20:21 Сейчас в теме
Добрый день. Подскажите пожалуйста, как вот этот xml превратить в схему?
Как задать атрибуты xsi:type?
Как настроить пакет XDTO, чтобы получить вот такую строку?
<Recorder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="DocumentRef.ПеремещениеЗапасов">d268942d-e8d1-11ec-89c8-a8a1598defdb</Recorder>

Мне нужно, чтобы тип документа менялся при формировании объекта XDTO.
Прикрепленные файлы:
50. user625107_barabambler1s 06.07.22 15:11 Сейчас в теме
Для чайников? Ты серьезно? Я ничегошеньки не понял, что ты тут понавыложил. Сам себе рассказал, короче
52. sonGodv 43 15.09.22 14:01 Сейчас в теме
Привет,
Пересмотрел много, но только по этой статье понял как сделать.
Остался вопрос. Указываю для свойства тип "data". Но в xml тип не указывается. При загрузке получаю строку.
В чем может быть причина?
53. sonGodv 43 15.09.22 16:10 Сейчас в теме
(52) Разобрался. При чтении пространство имен неправильно указал.
Оставьте свое сообщение