![]() |
![]() |
![]() |
|
v8: Запрос с фильтрацией из ТЗ | ☑ | ||
---|---|---|---|---|
0
Zorba131
23.01.13
✎
15:54
|
К примеру есть заполненный непериодический и независимый РегистрСведений со столбцами:
Договор | Тип | Дата и есть,к примеру, заполненная ТЗ со столбцами: Тип | Дата 1 | 10.01.2013 3 | 01.01.0001 7 | 01.01.0001 Как описать запрос, что бы на выходе был список договоров, у которых поля Тип и Дата соответствовали значению в ТЗ, причем, если в строке ТЗ поле Дата пустая, то значит фильтровать договора только по полю Тип. Вот пример результата: Договор | Тип | Дата дгвр1 | 1 | 10.01.2013 дгвр2 | 3 | 23.04.2010 дгвр3 | 1 | 10.01.2013 дгвр4 | 7 | 02.06.2011 Должно получиться, что-то типа этого, но мой пример явно неправильный. ВЫБРАТЬ Таб1.Договор, Таб1.Тип, Таб1.Дата ИЗ РегистрСведений.РС КАК Таб1 ГДЕ Таб1.Тип В(&сз1) И Таб1.Дата В(&сз2) |
|||
1
Maxus43
23.01.13
✎
15:56
|
что такое &сз1 и &сз2?
|
|||
2
Wobland
23.01.13
✎
15:57
|
соединить регистр с ТЗ что-ли?
|
|||
3
salvator
23.01.13
✎
15:58
|
(0) ТЗ во временную таблицу, потом соединяй РС с ней по нужным полям.
|
|||
4
Zorba131
23.01.13
✎
15:59
|
(1)
Запрос.УстановитьПараметр("сз1", ТЗ.ВыгрузитьКолонку("Тип")); Запрос.УстановитьПараметр("сз2", ТЗ.ВыгрузитьКолонку("Дата")); |
|||
5
Maxus43
23.01.13
✎
15:59
|
сз1 = ЗаполненаяТЗ.ВыгрузитьКолонку("Тип");
сз2 = ЗаполненаяТЗ.ВыгрузитьКолонку("Дата"); ГДЕ Таб1.Тип В(&сз1) И (Таб1.Дата В(&сз2) ИЛИ Таб1.Дата = &пустаяДата) или (2)(3) |
|||
6
Zorba131
23.01.13
✎
16:06
|
(5)
И (Таб1.Дата В(&сз2) ИЛИ Таб1.Дата = &пустаяДата) А разве тут не теряется соответствие определенных Тип+Дата и будут отображаться договора с Типом, не соответствующим требуемой от него Даты? |
|||
7
Maxus43
23.01.13
✎
16:08
|
(6) это означает >>если в строке ТЗ поле Дата пустая, то значит фильтровать договора только по полю Тип
|
|||
8
Maxus43
23.01.13
✎
16:09
|
блин, хотя нет. делай вариант (2)(3), там проще будет
|
|||
9
Zorba131
23.01.13
✎
16:17
|
вот простейший пример кода, дающий этот результат, а нужно тоже самое, но в запросе:
представим, что РС это РегистрСведений, выгруженный в таблицу значений Для Каждого стрРС Из РС Цикл Для Каждого стрТЗ Из ТЗ Цикл Если стрРС.Тип = стрТЗ.Тип Тогда Если стрРС.Дата = стрТЗ.Дата Или стрТЗ.Дата = Дата("00010101") Тогда стрРез = Результат.Добавить(); стрРез.Договор = стрРС.Договор; стрРез.Тип = стрРС.Тип; стрРез.Дата = стрРС.Дата; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; |
|||
10
hhhh
23.01.13
✎
16:22
|
ВЫБРАТЬ
Таб1.Договор, Таб1.Тип, Таб1.Дата ИЗ РегистрСведений.РС КАК Таб1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб ПО Таб.Тип = Таб1.Тип И Таб.Дата = Таб1.Дата |
|||
11
Zorba131
23.01.13
✎
16:27
|
(10)
А если в ТЗ(таблица фильтров) дата имеет пустое значение? |
|||
12
H A D G E H O G s
23.01.13
✎
16:29
|
И
ВЫБОР КОГДА Таб1.Дата=ДатаВремя(1,1,1) ТОГДА ИСТИНА ИНАЧЕ Таб.Дата = Таб1.Дата КОНЕЦ |
|||
13
H A D G E H O G s
23.01.13
✎
16:29
|
Ну или както так.
|
|||
14
Zorba131
24.01.13
✎
12:02
|
(12)
Спасибо, то что нужно! ВЫБРАТЬ Таб1.Договор, Таб1.Тип, Таб1.Дата ИЗ РегистрСведений.РС КАК Таб1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ ПО (ТЗ.Тип = Таб1.Тип) И (ВЫБОР КОГДА ТЗ.Дата = ДАТАВРЕМЯ(1, 1, 1) ТОГДА ИСТИНА ИНАЧЕ НАЧАЛОПЕРИОДА(ТЗ.Дата, ДЕНЬ) = НАЧАЛОПЕРИОДА(Таб1.Дата, ДЕНЬ) КОНЕЦ) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |