Конвертация данных - Как свернуть несколько документов в один

1. FreeArcher 162 21.10.11 10:53 Сейчас в теме
Задача: выгружаются несколько документов по каким либо условиям, а при загрузки их нужно свернуть в один.
Пробую на пример Поступления товаров и услуг:

В ПВО - Перед обработкой написал запрос:
	Сообщить("Перед выгрузкой");
	Запрос = Новый Запрос;
	Запрос.Текст = 
"ВЫБРАТЬ
|	ПоступлениеТоваровУслуг.Ссылка.ВалютаДокумента,
|	ПоступлениеТоваровУслуг.Ссылка.ВидОперации,
|	ПоступлениеТоваровУслуг.Ссылка.ДоговорКонтрагента,
|	ПоступлениеТоваровУслуг.Ссылка.Контрагент,
|	ПоступлениеТоваровУслуг.Ссылка.КратностьВзаиморасчетов КАК КратностьВзаиморасчетов,
|	ПоступлениеТоваровУслуг.Ссылка.КурсВзаиморасчетов КАК КурсВзаиморасчетов,
|	ПоступлениеТоваровУслуг.Ссылка.НДСВключенВСтоимость,
|	ПоступлениеТоваровУслуг.Ссылка.Организация,
|	ПоступлениеТоваровУслуг.Ссылка.Склад,
|	ПоступлениеТоваровУслуг.Ссылка.СуммаВключаетНДС,
|	ПоступлениеТоваровУслуг.Ссылка.СчетУчетаРасчетовПоАвансам,
|	ПоступлениеТоваровУслуг.Ссылка.СчетУчетаРасчетовСКонтрагентом,
|	ПоступлениеТоваровУслуг.Ссылка.ТипЦен,
|	ПоступлениеТоваровУслуг.Ссылка.УчитыватьНДС,
|	ПоступлениеТоваровУслуг.Ссылка.СпособЗачетаАвансов,
|	ПоступлениеТоваровУслуг.Товары.(
|		Номенклатура,
|		СУММА(КоличествоМест),
|		ЕдиницаИзмерения,
|		СУММА(Коэффициент),
|		СУММА(Количество),
|		СУММА(Цена),
|		СУММА(Сумма),
|		СтавкаНДС,
|		СУММА(СуммаНДС),
|		НомерГТД,
|		СтранаПроисхождения,
|		СчетУчета,
|		СчетУчетаНДС,
|		ОтражениеВУСН,
|		СУММА(ЦенаВРознице),
|		СУММА(СуммаВРознице),
|		СтавкаНДСВРознице
|	)
|ИЗ
|	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
|	ПоступлениеТоваровУслуг.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|	И ПоступлениеТоваровУслуг.Ссылка.Контрагент = &Контрагент
|
|СГРУППИРОВАТЬ ПО
|	ПоступлениеТоваровУслуг.Товары.(Номенклатура,
|	ЕдиницаИзмерения,
|	СтавкаНДС,
|	НомерГТД,
|	СтранаПроисхождения,
|	СчетУчета,
|	СчетУчетаНДС,
|	ОтражениеВУСН,
|	СтавкаНДСВРознице)";


	Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
	Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
	Запрос.УстановитьПараметр("Контрагент", Параметры.Контрагент);

	Результат = Запрос.Выполнить();

	ВыборкаДетальныеЗаписи = Результат.Выбрать();

	ВыборкаДанных= Результат.Выгрузить(); 
Показать


В ПКО всё оставил, как есть, только источника у свойств нету.
Документы выгружаются, но не сворачиваются.

Не сворачиваются, потому что нет группировки в запросе, но при таком формировании запроса это и нельзя сделать.

Как вобще поступают в таких случаях?
Через Исходящие данные или может нужно обходом выборки в ПВО вручную сформировать ТЗ с одной строкой, где будут реквизиты шапки и одна колонка ТЗ табчасти товары?

Долго самому изобретать велосипед, направьте в нужную сторону.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tusv 212 21.10.11 11:25 Сейчас в теме
(1) FreeArcher, Тебе надо в ПВД этот запрос писать и поставить галку произвольный алгоритм. В ПК0 все получить из входящих данный
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ВходящиеДанные=Новый Структура();
//Заполняешь ВходящиеДанные
ВыгрузитьПоПравилу(,,ВходящиеДанные,,<Твое правило конвертации объекта>);
КонейЦикла;
xsazar; DiKAN79; +2 Ответить
5. Gr@y 6 20.05.15 15:19 Сейчас в теме
А можно поподробнее что где проставить чтоб работало? Переделал запрос как мне надо но что не работает...

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|    РеализацияТоваровУслугТовары.Ссылка.ВалютаДокумента,
|    РеализацияТоваровУслугТовары.Ссылка.ВидОперации,
|    РеализацияТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
|    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
|    МАКСИМУМ(1) КАК КратностьВзаиморасчетов,
|    МАКСИМУМ(1) КАК КурсВзаиморасчетов,
|    РеализацияТоваровУслугТовары.Ссылка.Организация,
|    РеализацияТоваровУслугТовары.Ссылка.Склад,
|    РеализацияТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
|    РеализацияТоваровУслугТовары.Ссылка.ТипЦен,
|    РеализацияТоваровУслугТовары.Ссылка.УчитыватьНДС,
|    РеализацияТоваровУслугТовары.Номенклатура,
|    МАКСИМУМ(1) КАК КоличествоМест,
|    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
|    МАКСИМУМ(1) КАК Коэффициент,
|    СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
|    РеализацияТоваровУслугТовары.Цена,
|    СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
|    РеализацияТоваровУслугТовары.СтавкаНДС,
|    СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
|    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|    И РеализацияТоваровУслугТовары.Ссылка.Проведен
|
|СГРУППИРОВАТЬ ПО
|    РеализацияТоваровУслугТовары.СтавкаНДС,
|    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
|    РеализацияТоваровУслугТовары.Ссылка.ВидОперации,
|    РеализацияТоваровУслугТовары.Ссылка.Организация,
|    РеализацияТоваровУслугТовары.Ссылка.УчитыватьНДС,
|    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
|    РеализацияТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
|    РеализацияТоваровУслугТовары.Ссылка.Склад,
|    РеализацияТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
|    РеализацияТоваровУслугТовары.Номенклатура,
|    РеализацияТоваровУслугТовары.Ссылка.ТипЦен,
|    РеализацияТоваровУслугТовары.Цена,
|    РеализацияТоваровУслугТовары.Ссылка.ВалютаДокумента";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

ТЗ = Запрос.Выполнить().Выгрузить();

ТЗРез= ТЗ.СкопироватьКолонки();
ТЗРез.Колонки.Добавить("Товары");
НоваяСтрока= ТЗРез.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТЗ[0]);
НоваяСтрока.Товары= ТЗ;

ВыборкаДанных= ТЗРез; 
Показать


Вставил в обработчик Конвертация_ПередВыгрузкойОбъекта, а дальше то как из ТЗ в приемник отправить данные?
3. TsMGeorg 21.10.11 11:32 Сейчас в теме
Ну сначала я считаю нужно загрузить данные в ТЗ, после этого свернуть по определенным полям (Метод Свернуть())
В данном случае по Контрагенту и его договору, складу и организации. После этого эту ТЗ можно использовать при формировании объединенных документов, а сделать это не сложно
4. FreeArcher 162 21.10.11 13:54 Сейчас в теме
(3) ты объяснил что и ежу понятно, а вот как это использовать вопрос более интересный.

(2) возможно так и прокаркает, даже наверняка, но я иду своим путем, как описал. Мне кажется так проще.

Вот весь код Перед обработкой в ПВО:
	Сообщить("Перед выгрузкой");
	Запрос = Новый Запрос;
	Запрос.Текст = 
"ВЫБРАТЬ
|	ПоступлениеТоваровУслугТовары.Ссылка.ВалютаДокумента,
|	ПоступлениеТоваровУслугТовары.Ссылка.ВидОперации,
|	ПоступлениеТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
|	ПоступлениеТоваровУслугТовары.Ссылка.Контрагент,
|	МАКСИМУМ(1) КАК КратностьВзаиморасчетов,
|	МАКСИМУМ(1) КАК КурсВзаиморасчетов,
|	ПоступлениеТоваровУслугТовары.Ссылка.НДСВключенВСтоимость,
|	ПоступлениеТоваровУслугТовары.Ссылка.Организация,
|	ПоступлениеТоваровУслугТовары.Ссылка.Склад,
|	ПоступлениеТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
|	ПоступлениеТоваровУслугТовары.Ссылка.СчетУчетаРасчетовПоАвансам,
|	ПоступлениеТоваровУслугТовары.Ссылка.СчетУчетаРасчетовСКонтрагентом,
|	ПоступлениеТоваровУслугТовары.Ссылка.ТипЦен,
|	ПоступлениеТоваровУслугТовары.Ссылка.УчитыватьНДС,
|	ПоступлениеТоваровУслугТовары.Ссылка.СпособЗачетаАвансов,
|	ПоступлениеТоваровУслугТовары.Номенклатура,
|	МАКСИМУМ(1) КАК КоличествоМест,
|	ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
|	МАКСИМУМ(1) КАК Коэффициент,
|	СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
|	СРЕДНЕЕ(ПоступлениеТоваровУслугТовары.Цена) КАК Цена,
|	СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма,
|	ПоступлениеТоваровУслугТовары.СтавкаНДС,
|	СУММА(ПоступлениеТоваровУслугТовары.СуммаНДС) КАК СуммаНДС,
|	ПоступлениеТоваровУслугТовары.НомерГТД,
|	ПоступлениеТоваровУслугТовары.СтранаПроисхождения,
|	ПоступлениеТоваровУслугТовары.СчетУчета,
|	ПоступлениеТоваровУслугТовары.СчетУчетаНДС
|ИЗ
|	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|	ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|	И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент
|
|СГРУППИРОВАТЬ ПО
|	ПоступлениеТоваровУслугТовары.СтавкаНДС,
|	ПоступлениеТоваровУслугТовары.Ссылка.Контрагент,
|	ПоступлениеТоваровУслугТовары.Ссылка.ВидОперации,
|	ПоступлениеТоваровУслугТовары.Ссылка.Организация,
|	ПоступлениеТоваровУслугТовары.Ссылка.СпособЗачетаАвансов,
|	ПоступлениеТоваровУслугТовары.Ссылка.УчитыватьНДС,
|	ПоступлениеТоваровУслугТовары.НомерГТД,
|	ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
|	ПоступлениеТоваровУслугТовары.Ссылка.СчетУчетаРасчетовСКонтрагентом,
|	ПоступлениеТоваровУслугТовары.СтранаПроисхождения,
|	ПоступлениеТоваровУслугТовары.СчетУчета,
|	ПоступлениеТоваровУслугТовары.Ссылка.СчетУчетаРасчетовПоАвансам,
|	ПоступлениеТоваровУслугТовары.Ссылка.НДСВключенВСтоимость,
|	ПоступлениеТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
|	ПоступлениеТоваровУслугТовары.Ссылка.Склад,
|	ПоступлениеТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
|	ПоступлениеТоваровУслугТовары.Номенклатура,
|	ПоступлениеТоваровУслугТовары.Ссылка.ТипЦен,
|	ПоступлениеТоваровУслугТовары.Ссылка.ВалютаДокумента,
|	ПоступлениеТоваровУслугТовары.СчетУчетаНДС";

	Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
	Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
	Запрос.УстановитьПараметр("Контрагент", Параметры.Контрагент);

	ТЗ = Запрос.Выполнить().Выгрузить();

	ТЗРез= ТЗ.СкопироватьКолонки();
	ТЗРез.Колонки.Добавить("Товары");
	НоваяСтрока= ТЗРез.Добавить();
	ЗаполнитьЗначенияСвойств(НоваяСтрока, ТЗ[0]);//Так мы создали шапку документа
	НоваяСтрока.Товары= ТЗ;//А так создали табличную чать
//лишние колонки в ПКО просто проигнорировались
	
	
	ВыборкаДанных= ТЗРез; 
Показать

В ПКО все, как обычно, т.е. так же как если бы выгружал документ в документ, только пустой источник.

Вот вариант, который работает.
Причем замете, нет лишних трат времени на создание Структур повторяя реквизиты документа.
6. Gr@y 6 20.05.15 23:58 Сейчас в теме
В ПВО - Перед обработкой написал запрос:

Вот весь код Перед обработкой в ПВО:

Имеется ввиду событие «Перед обработкой» правила выгрузки данных?
Тогда должно работать
Просто не могу найти где это самое ПВО, вот вставил запрос в глобальный обработчик Конвертация_ПередВыгрузкойОбъекта, но не работает.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот