|   |   | 
| 
 | СКД. Изменение вида соединения в зависимости от парметров | ☑ | ||
|---|---|---|---|---|
| 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) т.е. просто выставив фигурные скобки, все автоматом становится полным соединением??
  чтобы сделать полное соединение, нужно писать ПОЛНОЕ СОЕДИНЕНИЕ, но никак не внутреннее. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |