Имя: Пароль:
1C
1С v8
v8: 8.2 Непонятки с запросом ☑
0 Aswed
 
11.10.11
✎
12:52
Если формирую запрос так

ВЫБРАТЬ
                                  |    БонусыСотрудниковОбороты.Автомобиль.Модель.Наименование + "" "" + БонусыСотрудниковОбороты.Автомобиль.VIN КАК ПечАвто,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.МаржаОборот, 0) КАК Маржа,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.МаржаНЕТТООборот, 0) КАК МаржаБезНДС,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.ПродажнаяСтоимостьОборот, 0) КАК ЦенаРеализации,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.СуммаБонусаОборот, 0) КАК Бонус,
                                  |    ВЫБОР
                                  |        КОГДА &ВыполнениеПланаОплат = ИСТИНА
                                  |            ТОГДА ЕСТЬNULL(БонусыСотрудниковОбороты.СуммаБонусаПланОборот, 0)
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ КАК БонусЗаПлан,
                                  |    ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СтраховаяПремияОборот, 0) КАК СуммаСтраховойПремии,
                                  |    ЕСТЬNULL(БонусыЗаСтраховкуОбороты.КомиссионноеВознаграждениеОборот, 0) КАК МаржаСоСтраховки,
                                  |    ЕСТЬNULL(БонусыЗаСтраховкуОбороты.КомиссионноеВознаграждениеНеттоОборот, 0) КАК МаржаСоСтраховкиБезНДС,
                                  |    ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаОборот, 0) КАК БонусОтСтраховки,
                                  |    ВЫБОР
                                  |        КОГДА &ВыполнениеПланаСтраховок = ИСТИНА
                                  |            ТОГДА ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаПланОборот, 0)
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ КАК БонусОтСтраховкиПлан,
                                  |    ЕСТЬNULL(ДополнительноеОборудованиеСрезПоследних.СуммаОборудования, 0) КАК ЦенаДопОборудования,
                                  |    ЕСТЬNULL(ДополнительноеОборудованиеСрезПоследних.СуммаОборудования * &ПроцентВыделения / 100 * &ПроцентВыделенияДолжность / 100, 0) КАК БонусЗаДопы,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.СуммаБонусаОборот, 0) + ВЫБОР
                                  |        КОГДА &ВыполнениеПланаОплат = ИСТИНА
                                  |            ТОГДА БонусыСотрудниковОбороты.СуммаБонусаПланОборот
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ + ЕСТЬNULL(ДополнительноеОборудованиеСрезПоследних.СуммаОборудования * &ПроцентВыделения / 100 * &ПроцентВыделенияДолжность / 100, 0) + ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаОборот, 0) + ВЫБОР
                                  |        КОГДА &ВыполнениеПланаСтраховок = ИСТИНА
                                  |            ТОГДА ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаПланОборот, 0)
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ КАК ИтогоБонуса,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.СуммаБонусаОборот, 0) + ВЫБОР
                                  |        КОГДА &ВыполнениеПланаОплат = ИСТИНА
                                  |            ТОГДА БонусыСотрудниковОбороты.СуммаБонусаПланОборот
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ + ЕСТЬNULL(ДополнительноеОборудованиеСрезПоследних.СуммаОборудования * &ПроцентВыделения / 100 * &ПроцентВыделенияДолжность / 100, 0) + ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаОборот, 0) + ВЫБОР
                                  |        КОГДА &ВыполнениеПланаСтраховок = ИСТИНА
                                  |            ТОГДА ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаПланОборот, 0)
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ КАК Итого,
                                  |    ЕСТЬNULL(ШтрафыПоМашинам.Штраф, 0) КАК ШтрафЗаОборачиваемость
                                  |ИЗ
                                  |    РегистрНакопления.БонусыСотрудников.Обороты(&НачалоПериода, &ОкончаниеПериода, , Сотрудник = &Сотрудник) КАК БонусыСотрудниковОбороты
                                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.БонусыЗаСтраховку.Обороты КАК БонусыЗаСтраховкуОбороты
                                  |        ПО БонусыСотрудниковОбороты.Автомобиль = БонусыЗаСтраховкуОбороты.Автомобиль
                                  |            И БонусыСотрудниковОбороты.Сотрудник = БонусыЗаСтраховкуОбороты.Сотрудник
                                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительноеОборудование.СрезПоследних КАК ДополнительноеОборудованиеСрезПоследних
                                  |        ПО БонусыСотрудниковОбороты.Автомобиль = ДополнительноеОборудованиеСрезПоследних.Автомобиль
                                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрафыПоМашинам КАК ШтрафыПоМашинам
                                  |        ПО БонусыСотрудниковОбороты.Автомобиль = ШтрафыПоМашинам.Автомобиль

То выводятся данные как надо, но без ограничения периода.

Когда вывожу так

ВЫБРАТЬ
                                  |    БонусыСотрудниковОбороты.Автомобиль.Модель.Наименование + "" "" + БонусыСотрудниковОбороты.Автомобиль.VIN КАК ПечАвто,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.МаржаОборот, 0) КАК Маржа,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.МаржаНЕТТООборот, 0) КАК МаржаБезНДС,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.ПродажнаяСтоимостьОборот, 0) КАК ЦенаРеализации,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.СуммаБонусаОборот, 0) КАК Бонус,
                                  |    ВЫБОР
                                  |        КОГДА &ВыполнениеПланаОплат = ИСТИНА
                                  |            ТОГДА ЕСТЬNULL(БонусыСотрудниковОбороты.СуммаБонусаПланОборот, 0)
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ КАК БонусЗаПлан,
                                  |    ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СтраховаяПремияОборот, 0) КАК СуммаСтраховойПремии,
                                  |    ЕСТЬNULL(БонусыЗаСтраховкуОбороты.КомиссионноеВознаграждениеОборот, 0) КАК МаржаСоСтраховки,
                                  |    ЕСТЬNULL(БонусыЗаСтраховкуОбороты.КомиссионноеВознаграждениеНеттоОборот, 0) КАК МаржаСоСтраховкиБезНДС,
                                  |    ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаОборот, 0) КАК БонусОтСтраховки,
                                  |    ВЫБОР
                                  |        КОГДА &ВыполнениеПланаСтраховок = ИСТИНА
                                  |            ТОГДА ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаПланОборот, 0)
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ КАК БонусОтСтраховкиПлан,
                                  |    ЕСТЬNULL(ДополнительноеОборудованиеСрезПоследних.СуммаОборудования, 0) КАК ЦенаДопОборудования,
                                  |    ЕСТЬNULL(ДополнительноеОборудованиеСрезПоследних.СуммаОборудования * &ПроцентВыделения / 100 * &ПроцентВыделенияДолжность / 100, 0) КАК БонусЗаДопы,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.СуммаБонусаОборот, 0) + ВЫБОР
                                  |        КОГДА &ВыполнениеПланаОплат = ИСТИНА
                                  |            ТОГДА БонусыСотрудниковОбороты.СуммаБонусаПланОборот
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ + ЕСТЬNULL(ДополнительноеОборудованиеСрезПоследних.СуммаОборудования * &ПроцентВыделения / 100 * &ПроцентВыделенияДолжность / 100, 0) + ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаОборот, 0) + ВЫБОР
                                  |        КОГДА &ВыполнениеПланаСтраховок = ИСТИНА
                                  |            ТОГДА ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаПланОборот, 0)
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ КАК ИтогоБонуса,
                                  |    ЕСТЬNULL(БонусыСотрудниковОбороты.СуммаБонусаОборот, 0) + ВЫБОР
                                  |        КОГДА &ВыполнениеПланаОплат = ИСТИНА
                                  |            ТОГДА БонусыСотрудниковОбороты.СуммаБонусаПланОборот
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ + ЕСТЬNULL(ДополнительноеОборудованиеСрезПоследних.СуммаОборудования * &ПроцентВыделения / 100 * &ПроцентВыделенияДолжность / 100, 0) + ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаОборот, 0) + ВЫБОР
                                  |        КОГДА &ВыполнениеПланаСтраховок = ИСТИНА
                                  |            ТОГДА ЕСТЬNULL(БонусыЗаСтраховкуОбороты.СуммаБонусаПланОборот, 0)
                                  |        ИНАЧЕ 0
                                  |    КОНЕЦ КАК Итого,
                                  |    ЕСТЬNULL(ШтрафыПоМашинам.Штраф, 0) КАК ШтрафЗаОборачиваемость
                                  |ИЗ
                                  |    РегистрНакопления.БонусыСотрудников.Обороты(&НачалоПериода, &ОкончаниеПериода, , Сотрудник = &Сотрудник) КАК БонусыСотрудниковОбороты
                                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.БонусыЗаСтраховку.Обороты КАК БонусыЗаСтраховкуОбороты
                                  |        ПО БонусыСотрудниковОбороты.Автомобиль = БонусыЗаСтраховкуОбороты.Автомобиль
                                  |            И БонусыСотрудниковОбороты.Сотрудник = БонусыЗаСтраховкуОбороты.Сотрудник
                                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительноеОборудование.СрезПоследних КАК ДополнительноеОборудованиеСрезПоследних
                                  |        ПО БонусыСотрудниковОбороты.Автомобиль = ДополнительноеОборудованиеСрезПоследних.Автомобиль
                                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрафыПоМашинам КАК ШтрафыПоМашинам
                                  |        ПО БонусыСотрудниковОбороты.Автомобиль = ШтрафыПоМашинам.Автомобиль
                                  |ГДЕ
                                  |    ШтрафыПоМашинам.НачалоПериода = &НачалоПериода
                                  |    И ШтрафыПоМашинам.ОкончаниеПериода = &ОкончаниеПериода
                                  |    И ШтрафыПоМашинам.ДилерскийЦентр = &ДилерскийЦентр

То несмотря на левое соединение БонусыСотрудниковОбороты с таблицей ШтрафыПоМашинам в результате запроса выдаются только те машины которые имеются в таблице ШтрафыПоМашинам. Т.е. запрос формируется как будто я делаю правое соединение.

Кто нить может сказать что я не правильно сделал?
1 Aswed
 
11.10.11
✎
12:55
Когда же сделал вложенный запрос а потом его объединил то получил данные которые и должны были быть.
Чертовщина какая то...
2 catena
 
11.10.11
✎
12:56
Что значит - "не смотря на левое соединение"? Как раз ПОТОМУ, что левое соединение, так и выводится.
3 Aswed
 
11.10.11
✎
12:57
(2) левое соединение таблицы БОНУСЫ с таблицей ШТРАФЫ
4 catena
 
11.10.11
✎
12:57
(1)Условия ставим на всю выборку - получаем только условные записи.
5 catena
 
11.10.11
✎
12:59
(3)Блин, правильно! А потом отбираешь:
ГДЕ
|    ШтрафыПоМашинам.НачалоПериода = &НачалоПериода
|    И ШтрафыПоМашинам.ОкончаниеПериода = &ОкончаниеПериода
|    И ШтрафыПоМашинам.ДилерскийЦентр = &ДилерскийЦентр
А теперь подумай, что у тебя там, где не соединилось???
6 Aleks73
 
11.10.11
✎
13:00
выполни и выведи каждую часть сложного запроса в отдельные тз. и увидишь где плохо
Программист всегда исправляет последнюю ошибку.