Имя: Пароль:
1C
1С v8
помогите с запрос
0 dreamoff
 
05.07.13
16:11
есть запрос
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
                       |    ПДСОстатки.СуммаОстаток КАК Накопления,
                       |    БазыДанных.Ссылка КАК Заведение,
                       |    ЕСТЬNULL(КартыПДСУсловияПДС.ПроцентСумма, ""0"") КАК Скидка,
                       |    КартыПДС.Ссылка
                       |ИЗ
                       |    Справочник.КартыПДС КАК КартыПДС
                       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КартыПДС.УсловияПДС КАК КартыПДСУсловияПДС
                       |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПДС.Остатки(&НаДату, КартаПДС = &КартаПоиска) КАК ПДСОстатки
                       |            ПО КартыПДСУсловияПДС.Карта = ПДСОстатки.КартаПДС
                       |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БазыДанных КАК БазыДанных
                       |            ПО КартыПДСУсловияПДС.БазаДанных = БазыДанных.Ссылка
                       |        ПО КартыПДС.Ссылка = КартыПДСУсловияПДС.Ссылка
                       |            И (ВЫБОР
                       |                КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.Больше)
                       |                        И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |                    ТОГДА ИСТИНА
                       |                КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.БольшеРавно)
                       |                        И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |                    ТОГДА ИСТИНА
                       |                КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.Меньше)
                       |                        И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |                    ТОГДА ИСТИНА
                       |                КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.МеньшеРавно)
                       |                        И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |                    ТОГДА ИСТИНА
                       |                КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.Равно)
                       |                        И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |                    ТОГДА ИСТИНА
                       |            КОНЕЦ)
                       |ГДЕ
                       |    (КартыПДСУсловияПДС.ТипКарты = ЗНАЧЕНИЕ(Перечисление.ТипКарты.Дисконтная)
                       |            ИЛИ КартыПДСУсловияПДС.ТипКарты = ЗНАЧЕНИЕ(Перечисление.ТипКарты.ПлатежноДисконтная))
                       |    И КартыПДСУсловияПДС.ПериодДействияНачало <= &НаДату
                       |    И (КартыПДСУсловияПДС.ПериодДействияОкончание >= &НаДату
                       |            ИЛИ КартыПДСУсловияПДС.ПериодДействияОкончание = ДАТАВРЕМЯ(1, 1, 1))
                       |    И КартыПДС.Ссылка = &КартаПоиска


но я никак не могу понять как сделать,что бы выводилась скидка ,когда накоплений нет.помогите и объяснить пожалуйста
1 IBTM
 
05.07.13
16:13
Выбор когда "накоплений нет" Тогда "Скидка" Конец
2 dreamoff
 
05.07.13
16:14
в смысле из "где" перенести в "выбрать"?
3 IBTM
 
05.07.13
16:16
ага
4 dreamoff
 
05.07.13
16:20
ВЫБРАТЬ РАЗРЕШЕННЫЕ
                       |    ПДСОстатки.СуммаОстаток КАК Накопления,
                       |    БазыДанных.Ссылка КАК Заведение,
                       |    ВЫБОР
                       |        КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.Больше)
                       |                И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |            ТОГДА КартыПДСУсловияПДС.ПроцентСумма
                       |        КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.БольшеРавно)
                       |                И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |            ТОГДА КартыПДСУсловияПДС.ПроцентСумма
                       |        КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.Меньше)
                       |                И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |            ТОГДА КартыПДСУсловияПДС.ПроцентСумма
                       |        КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.МеньшеРавно)
                       |                И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |            ТОГДА КартыПДСУсловияПДС.ПроцентСумма
                       |        КОГДА КартыПДСУсловияПДС.ТипСравнения = ЗНАЧЕНИЕ(Перечисление.ТипыСравнений.Равно)
                       |                И ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |            ТОГДА КартыПДСУсловияПДС.ПроцентСумма
                       |        ИНАЧЕ ЕСТЬNULL(КартыПДСУсловияПДС.ПроцентСумма, ""0"")
                       |    КОНЕЦ КАК Скидка,
                       |    КартыПДС.Ссылка
                       |ИЗ
                       |    Справочник.КартыПДС КАК КартыПДС
                       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КартыПДС.УсловияПДС КАК КартыПДСУсловияПДС
                       |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПДС.Остатки(&НаДату, КартаПДС = &КартаПоиска) КАК ПДСОстатки
                       |            ПО КартыПДСУсловияПДС.Карта = ПДСОстатки.КартаПДС
                       |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БазыДанных КАК БазыДанных
                       |            ПО КартыПДСУсловияПДС.БазаДанных = БазыДанных.Ссылка
                       |        ПО КартыПДС.Ссылка = КартыПДСУсловияПДС.Ссылка
                       |ГДЕ
                       |    (КартыПДСУсловияПДС.ТипКарты = ЗНАЧЕНИЕ(Перечисление.ТипКарты.Дисконтная)
                       |            ИЛИ КартыПДСУсловияПДС.ТипКарты = ЗНАЧЕНИЕ(Перечисление.ТипКарты.ПлатежноДисконтная))
                       |    И КартыПДСУсловияПДС.ПериодДействияНачало <= &НаДату
                       |    И (КартыПДСУсловияПДС.ПериодДействияОкончание >= &НаДату
                       |            ИЛИ КартыПДСУсловияПДС.ПериодДействияОкончание = ДАТАВРЕМЯ(1, 1, 1))
                       |    И КартыПДС.Ссылка = &КартаПоиска


сделал так,все равно ничего не показывает.а скидка есть(
5 Ёпрст
 
05.07.13
16:29
Условия из ГДЕ перенеси в условия присоединения таблички
КартыПДСУсловияПДС
6 Ёпрст
 
05.07.13
16:29
наслаждаться
7 dreamoff
 
05.07.13
16:34
(6) это только выведет карту.а скидку все равно не выводит
8 dreamoff
 
05.07.13
16:34
точнее срабатывает вот это
ИНАЧЕ ЕСТЬNULL(КартыПДСУсловияПДС.ПроцентСумма, ""0"")
9 Ёпрст
 
05.07.13
16:43
зачем тебе скидка строка 0 ?
мот число пихать будешь ?
10 dreamoff
 
05.07.13
16:45
это запрос из тестового отчет,в рабочем там число стоит
11 Ёпрст
 
05.07.13
16:49
И.. что не устраивает ?
12 dreamoff
 
05.07.13
16:50
в табличной части справочника карточки есть скидка,но нет движений по этой карточке.нужно выводить просто скидку,если нет движений.а запрос ничего кроме не выводит
13 Ёпрст
 
05.07.13
16:52
Ну ясно, условие ПО сделай сразу после соединения таблиц
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КартыПДС.УсловияПДС КАК КартыПДСУсловияПДС
14 Ёпрст
 
05.07.13
16:52
а не после..
15 dreamoff
 
05.07.13
16:57
ВЫБРАТЬ РАЗРЕШЕННЫЕ
                       |    ПДСОстатки.СуммаОстаток КАК Накопления,
                       |    БазыДанных.Ссылка КАК Заведение,
                       |    ВЫБОР
                       |        КОГДА ПДСОстатки.СуммаОстаток ЕСТЬ NULL
                       |            ТОГДА КартыПДСУсловияПДС.ПроцентСумма
                       |        ИНАЧЕ ЕСТЬNULL(КартыПДСУсловияПДС.ПроцентСумма, 0)
                       |    КОНЕЦ КАК Скидка,
                       |    КартыПДС.Ссылка
                       |ИЗ
                       |    Справочник.КартыПДС КАК КартыПДС
                       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КартыПДС.УсловияПДС КАК КартыПДСУсловияПДС
                       |        ПО КартыПДС.Ссылка = КартыПДСУсловияПДС.Ссылка
                       |            И (КартыПДСУсловияПДС.ТипКарты = ЗНАЧЕНИЕ(Перечисление.ТипКарты.Дисконтная)
                       |                ИЛИ КартыПДСУсловияПДС.ТипКарты = ЗНАЧЕНИЕ(Перечисление.ТипКарты.ПлатежноДисконтная))
                       |            И (КартыПДСУсловияПДС.ПериодДействияНачало <= &НаДату)
                       |            И (КартыПДСУсловияПДС.ПериодДействияОкончание >= &НаДату
                       |                ИЛИ КартыПДСУсловияПДС.ПериодДействияОкончание = ДАТАВРЕМЯ(1, 1, 1))
                       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БазыДанных КАК БазыДанных
                       |        ПО (КартыПДСУсловияПДС.БазаДанных = БазыДанных.Ссылка)
                       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПДС.Остатки(&НаДату, КартаПДС = &КартаПоиска) КАК ПДСОстатки
                       |        ПО (КартыПДСУсловияПДС.Карта = ПДСОстатки.КартаПДС)
                       |ГДЕ
                       |    КартыПДС.Ссылка = &КартаПоиска


может что не так сделал?ничего не изменилось
16 Ёпрст
 
05.07.13
17:00
А так ?

//|    ВЫБОР
//|        КОГДА ПДСОстатки.СуммаОстаток ЕСТЬ NULL
//|            ТОГДА КартыПДСУсловияПДС.ПроцентСумма
//|        ИНАЧЕ ЕСТЬNULL(КартыПДСУсловияПДС.ПроцентСумма, 0)
//|    КОНЕЦ КАК Скидка,

|ЕСТЬNULL(КартыПДСУсловияПДС.ПроцентСумма, 0) КАК Скидка,
17 dreamoff
 
05.07.13
17:09
так показывает только если есть движение
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший