|
СКД. Изменение вида соединения в зависимости от парметров | ☑ | ||
---|---|---|---|---|
0
pessok
28.10.11
✎
16:34
|
Доброго времени суток. Очередной затык с СКД случился...
Надо в зависимости от заполненности параметров виртуальной таблицы изменять тип соединения таблиц следующим образом: Если параметры не заполнены - левое соединение, если заполнены - полное. Делается это для получения множества значений из двух выборок. ВЫБРАТЬ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.ЦФО, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.СтатьяОборотов, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.Ответственный, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.ФизЛицо, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.СуммаПлатежа, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента.Владелец, СостоянияСогласованияЗаявокСрезПоследних.Состояние, СостоянияСогласованияЗаявокСрезПоследних.Этап, СостоянияСогласованияЗаявокСрезПоследних.Комментарий, СостоянияСогласованияЗаявокСрезПоследних.Пользователь, ЕСТЬNULL(ДвиженияДенежныхСредствОбороты.СуммаОборот, 0) КАК Сумма, ВЫБОР КОГДА ЗаявкаНаРасходованиеСредствДатыРасхода.Дата = &СегодняшняяДата ТОГДА ЗаявкаНаРасходованиеСредствДатыРасхода.СуммаРасхода ИНАЧЕ 0 КОНЕЦ КАК СуммаОплатыНаСегодня, ВЫБОР КОГДА (НЕ ДвиженияДенежныхСредствОбороты.Регистратор ЕСТЬ NULL ) ТОГДА ДвиженияДенежныхСредствОбороты.Регистратор ИНАЧЕ NULL КОНЕЦ КАК ПлатежныйДокумент ИЗ Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияДенежныхСредств.Обороты({&ПериодОплатыНачало}, {&ПериодОплатыКонец}, Регистратор, ) КАК ДвиженияДенежныхСредствОбороты ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка = ДвиженияДенежныхСредствОбороты.ДокументПланированияПлатежа ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСогласованияЗаявок.СрезПоследних КАК СостоянияСогласованияЗаявокСрезПоследних ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка = СостоянияСогласованияЗаявокСрезПоследних.Заявка ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств.ДатыРасхода КАК ЗаявкаНаРасходованиеСредствДатыРасхода ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка = ЗаявкаНаРасходованиеСредствДатыРасхода.Ссылка ГДЕ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода И СостоянияСогласованияЗаявокСрезПоследних.Заявка.Проведен = &Проведен УПОРЯДОЧИТЬ ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.Дата Т.е. если ПериодОплатыНачало и ПериодОплатыКонец заполнены - то полное соединение, если не заполнены, то левое. Скорее всего я делаю что-то не так, и все решается другим методом, если так - то ткните носом, пожалуйста. (только сильно не бейте) :) Идея простая: Если не выбран период оплат по регистратору, то выводим все заявки, если выбран, то только те заявки, которые были оплачены за этот период и входят в период создания заявок. Мудреное описание получилось, но, надеюсь, понятное... |
|||
1
pessok
28.10.11
✎
16:35
|
Ах да, УПП.
|
|||
2
Axel2009
28.10.11
✎
16:48
|
ГДЕ НЕ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка ЕСТЬ NULL
|
|||
3
pessok
28.10.11
✎
17:04
|
(2) ничего не изменилось, после того как это условие добавил. да и к чему это?
объясню как происходит на данный момент. Подмножество заявок отбирается, а вот подмножество оплат к нему не цепляется. Т.е. не получается общего подмножества. Если делать левое соединение - лезут все заявки, если делать полное, то даже без указанных параметров ПериодОплатыНачало и ПериодОплатыКонец отбираются только оплаченные заявки. |
|||
4
Axel2009
28.10.11
✎
17:06
|
потому что из ГДЕ нужно переносить в соединение ПО
|
|||
5
pessok
28.10.11
✎
17:13
|
(4) эммм. не понял, что-то я туплю уже к вечеру... ладно, разберусь, идея ясна, спасибо
|
|||
6
Axel2009
28.10.11
✎
17:14
|
(5) в ГДЕ фильтр накладывается на результирующую таблицу. при полном соединении если нет данныех в левой таблице и есть в правой, то
ГДЕ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода отфильтрует эти записи, и в результат они не попадут. |
|||
7
pessok
31.10.11
✎
09:17
|
блин. так я и не понял, куда надо приткнуть
ГДЕ НЕ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка ЕСТЬ NULL в соединение ставлю - синтаксическая ошибка, к левой таблице - "Ожидается имя таблицы". Где вообще можно почитать про условия в самих соединениях? |
|||
8
pessok
31.10.11
✎
09:52
|
ап, чтоли...
|
|||
9
pessok
31.10.11
✎
10:46
|
еще ап.сейчас запрос имеет вид
ВЫБРАТЬ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.ЦФО, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.СтатьяОборотов, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.Ответственный, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.ФизЛицо, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.СуммаПлатежа, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента, ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента.Владелец, СостоянияСогласованияЗаявокСрезПоследних.Состояние, СостоянияСогласованияЗаявокСрезПоследних.Этап, СостоянияСогласованияЗаявокСрезПоследних.Комментарий, СостоянияСогласованияЗаявокСрезПоследних.Пользователь, ЕСТЬNULL(ДвиженияДенежныхСредствОбороты.СуммаОборот, 0) КАК Сумма, ВЫБОР КОГДА ЗаявкаНаРасходованиеСредствДатыРасхода.Дата = &СегодняшняяДата ТОГДА ЗаявкаНаРасходованиеСредствДатыРасхода.СуммаРасхода ИНАЧЕ 0 КОНЕЦ КАК СуммаОплатыНаСегодня, ВЫБОР КОГДА (НЕ ДвиженияДенежныхСредствОбороты.Регистратор ЕСТЬ NULL ) ТОГДА ДвиженияДенежныхСредствОбороты.Регистратор ИНАЧЕ NULL КОНЕЦ КАК ПлатежныйДокумент ИЗ РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&ПериодОплатыНачало, &ПериодОплатыКонец, Регистратор, ) КАК ДвиженияДенежныхСредствОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСогласованияЗаявок.СрезПоследних КАК СостоянияСогласованияЗаявокСрезПоследних ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка = СостоянияСогласованияЗаявокСрезПоследних.Заявка ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств.ДатыРасхода КАК ЗаявкаНаРасходованиеСредствДатыРасхода ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка = ЗаявкаНаРасходованиеСредствДатыРасхода.Ссылка ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка = ДвиженияДенежныхСредствОбороты.ДокументПланированияПлатежа {ГДЕ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода И СостоянияСогласованияЗаявокСрезПоследних.Заявка.Проведен = &Проведен} УПОРЯДОЧИТЬ ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка.Дата соответственно соединение идет только внутреннее. как же нужно установить условия, чтобы при незаполненных параметрах виртуальной таблицы соединение становилось полным(в данном случае) |
|||
10
pessok
31.10.11
✎
13:26
|
ап... блин, неужели никто не может/не хочет объяснить/дать линк? %)
|
|||
11
pessok
31.10.11
✎
15:24
|
ап
|
|||
12
Робинзон Крузо
31.10.11
✎
15:31
|
Сделай два варианта отчета. Не трать полдня там, где можно сделать за 5 минут.
|
|||
13
pessok
31.10.11
✎
15:38
|
(12) топорно это. а вот как не топорно сделать - свой мозг не может дать решения. хотелось бы красиво сделать таки. А так - придется от заполненности параметров менять набор данных...
|
|||
14
Axel2009
31.10.11
✎
17:24
|
(13) т.е. просто выставив фигурные скобки, все автоматом становится полным соединением??
чтобы сделать полное соединение, нужно писать ПОЛНОЕ СОЕДИНЕНИЕ, но никак не внутреннее. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |