Выгрузка запроса в XML. Выгрузка объекта

chugindanil 43 1 1
&НаСервере
Процедура КомандаВыполнитьНаСервере()
	
	ИмяФайла = "d:\test.xml";
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	| Номенклатура.Код КАК Код,
	| Номенклатура.Наименование КАК Наименование,
	| Номенклатура.Артикул КАК Артикул,
	| Номенклатура.Ссылка КАК Номенклатура
	|ИЗ
	| Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	| Номенклатура.ЭтоГруппа = ЛОЖЬ");
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ИмяФайла,"UTF-8");
	
	ВыборкаРезультата = Запрос.Выполнить().Выгрузить(); 
	ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
	Для каждого Выборка Из ВыборкаРезультата Цикл
		ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());           
	КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.Закрыть();
	
КонецПроцедуры
7

Комментарии

metatron
#1, ред. 11 июля 2020 14:33

Результат = Запрос.Выполнить().Выгрузить(); для чего эта строчка?
если дальше по коду есть выборка: ВыборкаРезультата = Запрос.Выполнить().Выгрузить();
только не понял почему переменная называется Выборка, а Вы делаете выгрузку в ТЗ, будет правильнее использовать метод Выбрать();


bolsun
#2, 11 июля 2020 12:55

(1) metatron, да эта строчка была лишняя. Также предлагаю вариант через выборку, либо если нужно, то с возможностью обхода через ТаблицуЗначений.

&НаСервере
Процедура КомандаВыполнитьНаСервере()
	
	ИмяФайла = "d:\test.xml";
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	| Номенклатура.Код КАК Код,
	| Номенклатура.Наименование КАК Наименование,
	| Номенклатура.Артикул КАК Артикул,
	| Номенклатура.Ссылка КАК Номенклатура
	|ИЗ
	| Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	| Номенклатура.ЭтоГруппа = ЛОЖЬ");
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ИмяФайла,"UTF-8");
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
	
	ВыборкаРезультата = Запрос.Выполнить().Выбрать();
	
	Пока ВыборкаРезультата.Следующий() Цикл
		ЗаписатьXML(ЗаписьXML, ВыборкаРезультата.Номенклатура.ПолучитьОбъект());
	КонецЦикла;
	
	//Вариант через ТаблицуЗначений
	
	//ТабРезультаты = Запрос.Выполнить().Выгрузить();
	//
	//Для каждого СтрокаТаб Из ТабРезультаты Цикл
	//	ЗаписатьXML(ЗаписьXML, СтрокаТаб.Номенклатура.ПолучитьОбъект());
	//КонецЦикла;
	
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.Закрыть();
	
КонецПроцедуры


chugindanil
#3, 11 июля 2020 12:59

спасибо за совет !
приму к сведению
если у вас будут еще идеи или другие варианты
буду раз услышать )


Farovsky
#4, 14 июля 2020 10:51

Зачем вам поля Код, наименование, артикул в запросе, если они не используются потом нигде?
Зачем писать ЭтоГруппа = ЛОЖЬ, у нее составной тип?
Тут я не уверен: зачем в ЗаписатьXML писать именно СправочникОбъект, ссылка не пройдет? Это же жрет лишний раз оперативку.


chugindanil
#5, 14 июля 2020 14:07

(4) Farovsky, данный код в виде примера, а то как дальше вы будете его использовать илм корректировать .... только ваша фантазия)


SanchoD
#6, 25 августа 2020 11:46

(4) Если использовать только ссылку, то в файл попадут только данные типа:

а из объекта все значения реквизитов. А код, наименование, артикул действительно лишние в данном случае. А вот условие ЭтоГруппа=Ложь нужно, чтобы выгрузились только элементы справочника.


Farovsky
#7, 11 января 2021 18:15

(6) SanchoD, а чем хуже Не ЭтоГруппа. ЭтоГруппа = ложь пишут в случаях, когда тип составной.


См. также

ПриВыгрузкеОбъекта (БСП)

Выгрузка Таблицы значений в Объект Таблица Значений на форме обработки (для передачи сервер - клиент)

Выгрузка результата запроса в текстовый файл с разделителями

ПослеВыгрузкиОбъекта (БСП)

ПередВыгрузкойОбъекта (БСП)

ВыгрузкаОбъектаВыборки (БСП)

Модератору