|
Вывод результата запроса через условие другого запроса | ☑ | ||
---|---|---|---|---|
0
jonik_joker
16.10.13
✎
11:51
|
Всем добрый день. Посоветуйте как быть: есть запрос из которого впоследствии делается 2 выборки, по результатам каждой выборки заполняется табличный документ. В 1-й выборке соединение документа и регистра накоплений, во 2-м - ТЧ этого документа и другого регистра накоплений. Смысл отчета: если в результате выполнения 1-го запроса во 2-й выборке не окажется необходимых мне параметров( нет записей в регистре накоплений ), то выполнить 2-й запрос,где эти параметры есть и соответственно соединить с данными из 1-й выборки.
Привожу код (немного длинноват): Запрос=Новый Запрос; Запрос.УстановитьПараметр("Клиент",Клиент); Запрос.УстановитьПараметр("Грузополучатель",Грузополучатель); Запрос.Параметры.Вставить("Инвойс",Инвойс); Запрос.Параметры.Вставить("Заявка",Заявка); Запрос.Параметры.Вставить("ДатаНачала",НачалоДня(ДатаНачала)); Запрос.Параметры.Вставить("ДатаКонца",КонецДня(ДатаКонца)); Запрос.Текст="ВЫБРАТЬ | ОборотыДенежныхСредствОстаткиИОбороты.СуммаПриход КАК СуммаИнвойс, | ОборотыДенежныхСредствОстаткиИОбороты.Инвойс, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка КАК Заявка, | ОборотыДенежныхСредствОстаткиИОбороты.Инвойс.Номер КАК НомерИнвойс, | ОборотыДенежныхСредствОстаткиИОбороты.Инвойс.Дата КАК ДатаИнвойс, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомер КАК НомерЗаказ, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомерЗаказаНаПроизводство КАК НомерЗаявка, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата КАК ДатаЗаявка, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.СоставИтогСтоимость КАК СуммаЗаявка, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Валюта, | ЗаявкаНаПоставкуУсловиеОплаты.ВариантОплаты КАК ВариантОплаты, | ЗаявкаНаПоставкуУсловиеОплаты.Процент, | ЗаявкаНаПоставкуУсловиеОплаты.СДаты КАК СДаты, | ЗаявкаНаПоставкуУсловиеОплаты.ВТечение, | ОборотыДенежныхСредствОстаткиИОбороты.Период |ИЗ | Документ.ЗаявкаНаПоставку.УсловиеОплаты КАК ЗаявкаНаПоставкуУсловиеОплаты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты | ПО ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = ОборотыДенежныхСредствОстаткиИОбороты.Заявка |ГДЕ | (&Клиент = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) | ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент = &Клиент) | И (&Грузополучатель = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) | ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель = &Грузополучатель) | И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца | И (&Заявка = ЗНАЧЕНИЕ(Документ.ЗаявкаНаПоставку.ПустаяСсылка) | ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = &Заявка) | И (&Инвойс = ЗНАЧЕНИЕ(Документ.ПрохождениеТаможни.ПустаяСсылка) | ИЛИ ОборотыДенежныхСредствОстаткиИОбороты.Инвойс = &Инвойс) |ИТОГИ ПО | Заявка"; РезультатЗапроса=Запрос.Выполнить(); ДокументДанных=Новый ТабличныйДокумент; ДатаНачалаФормат=Формат(ДатаНачала,"ДФ=dd.MM.yyyy"); ДатаКонцаФормат=Формат(ДатаКонца,"ДФ=dd.MM.yyyy"); Макет=Отчеты.Отчет1.ПолучитьМакет("Макет1"); ОбластьШапкаЗаявки=Макет.ПолучитьОбласть("ШапкаЗаявки"); ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок"); ОбластьСтрока=Макет.ПолучитьОбласть("Строка"); ОбластьИтог=Макет.ПолучитьОбласть("Итог"); ОбластьСтрЗаявки=Макет.ПолучитьОбласть("ШапкаЗаявки"); ОбластьШапкаОплаты=Макет.ПолучитьОбласть("ШапкаОплаты"); ОбластьШапкаОтчета=Макет.ПолучитьОбласть("ШапкаОтчета"); ОбластьШапкаКонтрагент=Макет.ПолучитьОбласть("ШапкаКонтрагент"); ОбластьШапкаОтчета.Параметры.ДатаНачала=ДатаНачалаФормат; ОбластьШапкаОтчета.Параметры.ДатаКонца=ДатаКонцаФормат; ДокументДанных.Вывести(ОбластьШапкаОтчета); ВыборкаПоЗаявке=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоЗаявке.Следующий() Цикл ОбластьЗаголовок.Параметры.Валюта=ВыборкаПоЗаявке.Валюта; ОбластьШапкаЗаявки.Параметры.Заявка=ВыборкаПоЗаявке.Заявка; ОбластьШапкаКонтрагент.Параметры.Клиент=ВыборкаПоЗаявке.Клиент; ОбластьШапкаКонтрагент.Параметры.Грузополучатель=ВыборкаПоЗаявке.Грузополучатель; ОбластьШапкаОтчета.Параметры.ДатаНачала=ДатаНачалаФормат; ОбластьШапкаОтчета.Параметры.ДатаКонца=ДатаКонцаФормат; ДокументДанных.Вывести(ОбластьШапкаКонтрагент); ДокументДанных.Вывести(ОбластьШапкаЗаявки); ДокументДанных.Вывести(ОбластьЗаголовок); ВыборкаПоИнвойсу=ВыборкаПоЗаявке.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоИнвойсу.Следующий() Цикл ДатаИнвойс=ВыборкаПоИнвойсу.ДатаИнвойс; ТекЗаявка=ВыборкаПоИнвойсу.Заявка; Если ДатаИнвойс=Null Тогда Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка КАК Заявка, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомер КАК НомерЗаказ, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомерЗаказаНаПроизводство КАК НомерЗаявка, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата КАК ДатаЗаявка, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.СоставИтогСтоимость КАК СуммаЗаявка, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель, | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Валюта, | ЗаявкаНаПоставкуУсловиеОплаты.ВариантОплаты КАК ВариантОплаты, | ЗаявкаНаПоставкуУсловиеОплаты.Процент, | ЗаявкаНаПоставкуУсловиеОплаты.СДаты КАК СДаты, | ЗаявкаНаПоставкуУсловиеОплаты.ВТечение, | ПрохождениеТаможенногоОформления.Период, | ПрохождениеТаможенногоОформления.Регистратор КАК Инвойс, | ПрохождениеТаможенногоОформления.Регистратор.Номер КАК НомерИнвойс, | ПрохождениеТаможенногоОформления.Регистратор.Дата КАК ДатаИнвойс, | ПрохождениеТаможенногоОформления.Регистратор.СтоимостьИтог КАК СуммаИнвойс |ИЗ | Документ.ЗаявкаНаПоставку.УсловиеОплаты КАК ЗаявкаНаПоставкуУсловиеОплаты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПрохождениеТаможенногоОформления КАК ПрохождениеТаможенногоОформления | ПО ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = ПрохождениеТаможенногоОформления.Заявка |ГДЕ | ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = &ТекЗаявка |ИТОГИ ПО | Заявка"; ЗапросТаможня=Новый Запрос; ЗапросТаможня.УстановитьПараметр("ТекЗаявка",ТекЗаявка); ЗапросТаможня.Текст=Текст; ТекРезультат=ЗапросТаможня.Выполнить().Выгрузить(); КонецЕсли; ДатаЗаявкаФормат=Формат(ВыборкаПоИнвойсу.ДатаЗаявка,"ДФ=dd.MM.yyyy"); ДатаИнвойсФормат=Формат(ВыборкаПоИнвойсу.ДатаИнвойс,"ДФ=dd.MM.yyyy"); ОбластьИтог.Параметры.СуммаЗаявка=ВыборкаПоИнвойсу.СуммаЗаявка; ДниОплаты=ВыборкаПоИнвойсу.ВТечение; СрокОплаты=ДатаИнвойс+ДниОплаты*24*60*60; СрокОплатыФормат=Формат(СрокОплаты,"ДФ=dd.MM.yyyy"); ОбластьСтрока.Параметры.СрокОплаты=СрокОплатыФормат; Период=ВыборкаПоИнвойсу.Период; ПериодФормат=Формат(Период,"ДФ=dd.MM.yyyy"); Если Период=Неопределено И ТекущаяДата()>СрокОплаты Тогда Долг="Да"; Иначе Долг="Нет"; КонецЕсли; ОбластьСтрока.Параметры.Долг=Долг; ОбластьСтрока.Параметры.ДатаОплаты=ПериодФормат; ОбластьСтрока.Параметры.НомерЗаявка=ВыборкаПоИнвойсу.НомерЗаявка; ОбластьСтрока.Параметры.ДатаЗаявка=ДатаЗаявкаФормат; ОбластьСтрока.Параметры.НомерИнвойс=ВыборкаПоИнвойсу.НомерИнвойс; ОбластьСтрока.Параметры.ДатаИнвойс=ДатаИнвойсФормат; ОбластьСтрока.Параметры.СуммаИнвойс=ВыборкаПоИнвойсу.СуммаИнвойс; ОбластьСтрока.Параметры.НомерЗаказ=ВыборкаПоИнвойсу.НомерЗаказ; ОбластьСтрока.Параметры.ВариантОплаты=ВыборкаПоИнвойсу.ВариантОплаты; ОбластьСтрока.Параметры.Процент=ВыборкаПоИнвойсу.Процент; ОбластьСтрока.Параметры.СДаты=ВыборкаПоИнвойсу.СДаты; ОбластьСтрока.Параметры.ВТечение=ВыборкаПоИнвойсу.ВТечение; ДокументДанных.Вывести(ОбластьСтрока); КонецЦикла; ДокументДанных.Вывести(ОбластьИтог); КонецЦикла; Возврат ДокументДанных; Соответственно, условие ДатаИнвойс=ВыборкаПоИнвойсу.ДатаИнвойс; ТекЗаявка=ВыборкаПоИнвойсу.Заявка; Если ДатаИнвойс=Null Тогда мои потуги реализовать данную задачу. Буду признателен за любые советы. |
|||
1
Defender aka LINN
16.10.13
✎
11:52
|
"если в результате выполнения 1-го запроса во 2-й выборке не окажется" - это вообще как?
|
|||
2
jonik_joker
16.10.13
✎
11:58
|
(1) ,в ТЧ документа ЗаявкаНаПоставку есть документы таможни,соответственно если эти документы оплачены,то есть запись в регистре ОборотыДенежныхСредств,если нет - в регистре
ПрохождениеТаможенногоОформления. |
|||
3
Defender aka LINN
16.10.13
✎
12:00
|
(2) И? Как это объясняет, что в результате выполнения одного запроса, что-то окажется в совершенно другой выборке?
|
|||
4
jonik_joker
16.10.13
✎
12:17
|
(3),вот что получается после строки
Пока ВыборкаПоЗаявке.Следующий() Цикл http://uploads.ru/JGFaR.png |
|||
5
jonik_joker
16.10.13
✎
12:19
|
||||
6
jonik_joker
16.10.13
✎
12:20
|
это после строки
Пока ВыборкаПоИнвойсу.Следующий() Цикл |
|||
7
jonik_joker
16.10.13
✎
12:20
|
||||
8
jonik_joker
16.10.13
✎
12:22
|
соответственно,когда в 1-м регистре нет записей по данным документам таможни,2-я картинка аналогична 1-й.
|
|||
9
hhhh
16.10.13
✎
12:51
|
ну вы же нигде не подставляете. У вас
ТекРезультат=ЗапросТаможня.Выполнить().Выгрузить(); а дальше ТекРезультат нигде не используете. |
|||
10
jonik_joker
16.10.13
✎
15:16
|
все, спасибо, сам разобрался.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |