Перейти к содержимому


Запрос по двум табличным частям документа


Сообщений в теме: 5

#1 JVN

    Частый гость


  • 76 сообщений

Отправлено 21 февраля 2012 - 18:33

Добрый вечер, коллеги! Возможно ли написать запрос по двум табличным частям документа, так чтобы выводился общий реквизит этих табличных частей и таблица значений состоящая из значений в строке второй табличной части объединенной через общий реквизит?

Пример:

первая табличная часть

Элемент1
Элемент2
Элемент3

вторая табличная часть

Элемент1 Значение1
Элемент1 Значение2
Элемент1 Значение3
Элемент3 Значение2
Элемент3 Значение10
Элемент2 Значение1

На выходе у запроса:

Элемент1 ТЗ
Элемент2 ТЗ
Элемент3 ТЗ

где ТЗ содержит значения через объединение по общему реквизиту.

#2 Fart

    Активист


  • 377 сообщений

Отправлено 22 февраля 2012 - 01:18

Можно через итоги попробовать:

Запр = Новый запрос("
|ВЫБРАТЬ
|	ДокТабЧасть1.Ссылка,
|	ДокТабЧасть1.ОбщийРеквизит,
|	ДокТабЧасть1.Количество,
|	ДокТабЧасть1.Цена,
|	ДокТабЧасть1.Сумма
|ИЗ
|	Документ.ВашДокумент.ДокТабЧасть1 КАК ДокТабЧасть1
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВашДокумент.ДокТабЧасть2 КАК ДокТабЧасть2
|		ПО ДокТабЧасть1.ОбщийРеквизит = ДокТабЧасть2.ОбщийРеквизит
|			И ДокТабЧасть1.Ссылка = ДокТабЧасть2.Ссылка
|ИТОГИ ПО
|	ОбщийРеквизит");

Сообщение отредактировал Fart: 22 февраля 2012 - 01:20


#3 JVN

    Частый гость


  • 76 сообщений

Отправлено 22 февраля 2012 - 08:43

не подходит, из запроса не взять ТЗ по соответствиям общему реквизиту

#4 Fart

    Активист


  • 377 сообщений

Отправлено 22 февраля 2012 - 09:05

Выборка = Запр.Выполнить.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока выборка.Следующий() Цикл
    Выборка1 = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка1.Следующий() Цикл
		 //Тут можно заполнить ТЗ
    КонецЦикла
КонецЦикла


#5 uza

    1С, VBA (EXCEL), VB (.NET + WEB)


  • 1 338 сообщений

Отправлено 22 февраля 2012 - 09:53

У вас в документе две ТЧ, и они ничем, кроме как самим документом не связаны?
ДокТабЧасть1.Ссылка = ДокТабЧасть2.Ссылка
т.е. возможно только вот такая связь?

Хм. А тогда смысл их дергать одним запросом?

Ну в любом случае можно и дернуть. Только на выходе можете либо получить количество строк равное суме кол-ва строк обоих ТЧ. Либо кол-во строк равное максимальному кол-ву сток в этих ТЧ, но кучей колонок.

Первое - берез запрос Fart и убираем первое условие связи.

Второе вот пример на основе ППИ

Запрос1С.Текст =
    "ВЫБРАТЬ
    |    ПлатежноеПоручениеИсходящее.Ссылка
    |ПОМЕСТИТЬ ППИ_
    |ИЗ
    |    Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
    |;

    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ППИ_.Ссылка КАК СсылкаНаППИ,
    |    ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Договор КАК ДоговорИЗТЧ_Расшифровка,
    |    NULL КАК ТипКонтрагентаИЗТЧ_Реквизиты
    |ПОМЕСТИТЬ Связка_
    |ИЗ
    |    ППИ_ КАК ППИ_
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа
    |        ПО ППИ_.Ссылка = ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка

    |ОБЪЕДИНИТЬ

    |ВЫБРАТЬ
    |    ППИ_.Ссылка,
    |    NULL,
    |    ПлатежноеПоручениеИсходящееРеквизитыКонтрагента.ТипКонтрагента
    |ИЗ
    |    ППИ_ КАК ППИ_
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее.РеквизитыКонтрагента КАК ПлатежноеПоручениеИсходящееРеквизитыКонтрагента
    |        ПО ППИ_.Ссылка = ПлатежноеПоручениеИсходящееРеквизитыКонтрагента.Ссылка
    |;

    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Связка_.СсылкаНаППИ,
    |    ЕСТЬNULL(Связка_.ДоговорИЗТЧ_Расшифровка, &ПустаяСсылкаНаДоговор) КАК Договор,
    |    ЕСТЬNULL(Связка_.ТипКонтрагентаИЗТЧ_Реквизиты, &ПустаяСсылкаНаТипКонтрагента) КАК ТипКонтрагента
    |ИЗ
    |    Связка_ КАК Связка_";


Сообщение отредактировал uza: 22 февраля 2012 - 09:54

Не все полезно - что в БД залезло

#6 BabySG

    Любитель программирования


  • 12 211 сообщений

Отправлено 22 февраля 2012 - 19:21

Эта задача решается в СКД без проблем
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных