|
Непонятки с запросом | ☑ | ||
---|---|---|---|---|
0
rool
02.09.16
✎
08:42
|
День добрый!
Есть запрос с объединением таблиц ВЫБРАТЬ КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ДоговорКонтрагента.Владелец КАК Контрагент, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.Номенклатура КАК Номенклатура, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ЭтоЛьгота КАК ЭтоЛьгота, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ЭтоПени КАК ЭтоПени, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ВариантПоставкиУслуг КАК ВариантПоставкиУслуг, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ДоговорПоставщикаУслуг КАК ДоговорПоставщикаУслуг, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.СуммаОстаток КАК СуммаОтражения ПОМЕСТИТЬ ТаблицаОстатков ИЗ РегистрНакопления.КВП_НачислениеДляОтраженияВРеглУчете.Остатки( &ДатаСреза, Организация = &Организация И ИСТИНА И ДоговорКонтрагента.Владелец = &Контрагент И ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем)) КАК КВП_НачислениеДляОтраженияВРеглУчетеОстатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДвиженияДокумента.ДоговорКонтрагента.Владелец КАК Контрагент, ДвиженияДокумента.ДоговорКонтрагента, ДвиженияДокумента.Номенклатура, ДвиженияДокумента.НоменклатурнаяГруппа, ДвиженияДокумента.ЭтоЛьгота, ДвиженияДокумента.ЭтоПени, ДвиженияДокумента.ВариантПоставкиУслуг, ДвиженияДокумента.ДоговорПоставщикаУслуг, СУММА(ДвиженияДокумента.Сумма) КАК СуммаОтражения ПОМЕСТИТЬ ТаблицаДвиженийДокумента ИЗ РегистрНакопления.КВП_НачислениеДляОтраженияВРеглУчете КАК ДвиженияДокумента ГДЕ ДвиженияДокумента.Регистратор = &ДокСсылка И ИСТИНА И ДвиженияДокумента.ДоговорКонтрагента.Владелец = &Контрагент И ДвиженияДокумента.ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем) СГРУППИРОВАТЬ ПО ДвиженияДокумента.ДоговорКонтрагента.Владелец, ДвиженияДокумента.ДоговорКонтрагента, ДвиженияДокумента.Номенклатура, ДвиженияДокумента.НоменклатурнаяГруппа, ДвиженияДокумента.ЭтоЛьгота, ДвиженияДокумента.ЭтоПени, ДвиженияДокумента.ВариантПоставкиУслуг, ДвиженияДокумента.ДоговорПоставщикаУслуг ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЕСТЬNULL(ТаблицаОстатков.Контрагент, ТаблицаДвиженийДокумента.Контрагент) КАК Контрагент, ЕСТЬNULL(ТаблицаОстатков.ДоговорКонтрагента, ТаблицаДвиженийДокумента.ДоговорКонтрагента) КАК ДоговорКонтрагента, ЕСТЬNULL(ТаблицаОстатков.Номенклатура, ТаблицаДвиженийДокумента.Номенклатура) КАК Номенклатура, ЕСТЬNULL(ТаблицаОстатков.НоменклатурнаяГруппа, ТаблицаДвиженийДокумента.НоменклатурнаяГруппа) КАК НоменклатурнаяГруппа, ЕСТЬNULL(ТаблицаОстатков.ЭтоЛьгота, ТаблицаДвиженийДокумента.ЭтоЛьгота) КАК ЭтоЛьгота, ЕСТЬNULL(ТаблицаОстатков.ЭтоПени, ТаблицаДвиженийДокумента.ЭтоПени) КАК ЭтоПени, ЕСТЬNULL(ТаблицаОстатков.ВариантПоставкиУслуг, ТаблицаДвиженийДокумента.ВариантПоставкиУслуг) КАК ВариантПоставкиУслуг, ЕСТЬNULL(ТаблицаОстатков.ДоговорПоставщикаУслуг, ТаблицаДвиженийДокумента.ДоговорПоставщикаУслуг) КАК ДоговорПоставщикаУслуг, ЕСТЬNULL(ТаблицаОстатков.СуммаОтражения, 0) + ЕСТЬNULL(ТаблицаДвиженийДокумента.СуммаОтражения, 0) КАК СуммаОтражения, ТаблицаДвиженийДокумента.СуммаОтражения КАК СуммаОтражения1, ТаблицаОстатков.СуммаОтражения КАК СуммаОтражения2 ИЗ ТаблицаОстатков КАК ТаблицаОстатков ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаДвиженийДокумента КАК ТаблицаДвиженийДокумента ПО (ТаблицаДвиженийДокумента.Контрагент = ТаблицаОстатков.Контрагент) И (ТаблицаДвиженийДокумента.ДоговорКонтрагента = ТаблицаОстатков.ДоговорКонтрагента) И (ТаблицаДвиженийДокумента.Номенклатура = ТаблицаОстатков.Номенклатура) И (ТаблицаДвиженийДокумента.НоменклатурнаяГруппа = ТаблицаОстатков.НоменклатурнаяГруппа) И (ТаблицаДвиженийДокумента.ЭтоЛьгота = ТаблицаОстатков.ЭтоЛьгота) И (ТаблицаДвиженийДокумента.ЭтоПени = ТаблицаОстатков.ЭтоПени) И (ТаблицаДвиженийДокумента.ВариантПоставкиУслуг = ТаблицаОстатков.ВариантПоставкиУслуг) И (ТаблицаДвиженийДокумента.ДоговорПоставщикаУслуг = ТаблицаОстатков.ДоговорПоставщикаУслуг) ГДЕ ИСТИНА И ЕСТЬNULL(ТаблицаОстатков.СуммаОтражения, 0) + ЕСТЬNULL(ТаблицаДвиженийДокумента.СуммаОтражения, 0) > 0 Вторая таблица Движения документа - пустая при выполнении запроса получаю: ВариантПоставкиУслуг ДоговорПоставщикаУслуг СуммаОтражения СуммаОтражения1 СуммаОтражения2 Купля/продажа услуг 33 104,28 33 104,28 Купля/продажа услуг 5 340,71 5 340,71 Купля/продажа услуг 45 340,92 45 340,92 Купля/продажа услуг 1 672,8 1 672,8 Купля/продажа услуг 4 795 4 795 Купля/продажа услуг 32 036,4 32 036,4 Купля/продажа услуг 8 140,84 8 140,84 Купля/продажа услуг 61 921,89 61 921,89 Купля/продажа услуг 1 618,85 1 618,85 Купля/продажа услуг 43 200 43 200 При выполнении запроса только по первой таблице (без соединения) имеем: ВЫБРАТЬ КВП_НачислениеДляОтраженияВРеглУчетеОстатки.Номенклатура КАК Номенклатура, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ЭтоЛьгота КАК ЭтоЛьгота, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ЭтоПени КАК ЭтоПени, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ВариантПоставкиУслуг КАК ВариантПоставкиУслуг, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ДоговорПоставщикаУслуг КАК ДоговорПоставщикаУслуг, СУММА(КВП_НачислениеДляОтраженияВРеглУчетеОстатки.СуммаОстаток) КАК СуммаОтражения ИЗ РегистрНакопления.КВП_НачислениеДляОтраженияВРеглУчете.Остатки( &ДатаСреза, Организация = &Организация И ИСТИНА И ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем)) КАК КВП_НачислениеДляОтраженияВРеглУчетеОстатки СГРУППИРОВАТЬ ПО КВП_НачислениеДляОтраженияВРеглУчетеОстатки.Номенклатура, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.НоменклатурнаяГруппа, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ЭтоЛьгота, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ЭтоПени, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ВариантПоставкиУслуг, КВП_НачислениеДляОтраженияВРеглУчетеОстатки.ДоговорПоставщикаУслуг УПОРЯДОЧИТЬ ПО Номенклатура НоменклатурнаяГруппа ЭтоЛьгота ЭтоПени ВариантПоставкиУслуг ДоговорПоставщикаУслуг СуммаОтражения Основная номенклатурная группа Нет Нет Купля/продажа услуг 56 490,06 Основная номенклатурная группа Нет Нет Купля/продажа услуг 10 331,74 Основная номенклатурная группа Нет Нет Купля/продажа услуг 109 984,96 Основная номенклатурная группа Нет Нет Купля/продажа услуг 1 672,8 Основная номенклатурная группа Нет Нет Купля/продажа услуг 12 565 Основная номенклатурная группа Нет Нет Купля/продажа услуг 54 667,8 Основная номенклатурная группа Нет Нет Купля/продажа услуг 148 937,89 Основная номенклатурная группа Нет Нет Купля/продажа услуг 214 316,84 Основная номенклатурная группа Нет Нет Купля/продажа услуг 1 618,85 Основная номенклатурная группа Нет Нет Купля/продажа услуг 95 400 Вопрос: Почему СуммаОтражения выданная вторым запросом нифига не совпадает с суммойотражения2 выданной первой хотя параметры у запросов заполнены аналогично а в таблице с которой происходит объединение нет ни одной записи? У меня мозг плавится :( |
|||
1
Неверный Параметр И
02.09.16
✎
09:00
|
Объединение пишется как ОБЪЕДИНИТЬ
Соединение пишется как СОЕДИНЕНИЕ |
|||
2
Ёпрст
02.09.16
✎
09:02
|
(0) вот этим ГДЕ
ИСТИНА И ЕСТЬNULL(ТаблицаОстатков.СуммаОтражения, 0) + ЕСТЬNULL(ТаблицаДвиженийДокумента.СуммаОтражения, 0) > 0 ты сделал уже не полное соединение. ЗЫ: если че, ОБЪЕДЕНИТЬ ВСЕ |
|||
3
Ёпрст
02.09.16
✎
09:02
|
объединить
|
|||
4
Неверный Параметр И
02.09.16
✎
09:06
|
(3) ОБЪЕДИНИТЬ ВСЕ
Иначе мальчик потеряет совпадающие строки из разных источников и заведет еще одну тему с километровым листингом |
|||
5
rool
02.09.16
✎
09:08
|
(2) это не я сделал а типовая жкх, убил указанное тобой условие
ГДЕ ИСТИНА И ЕСТЬNULL(ТаблицаОстатков.СуммаОтражения, 0) + ЕСТЬNULL(ТаблицаДвиженийДокумента.СуммаОтражения, 0) > 0 Результаты запроса вообще не изменились (4) Т.е. Кривой запрос? |
|||
6
rool
02.09.16
✎
09:18
|
Народ, мне пинать разработчиков конфы за криворукость при написании запросов, или это не баг а фича типовой Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК? :)
|
|||
7
Fedor-1971
02.09.16
✎
09:23
|
(0) проверь по коду "И ИСТИНА" не заменяется чем-нибудь? типа СтрЗаменить(ля ля, "И ИСТИНА", "И ????);
(4) он получит полностью сырую выборку и кодом будет разруливать логику, в его запросе идёт некоторая связка информации по нескольким условиям (6) прежде чем пинать - пойми зачем это сделано (может намеренно что-то выбирают и именно так), что дальше выполняет обработка результата, а потом уж и претензии можешь выдавать. Оптимальность алгоритма в типовой - не есть догма, типовые делают в режиме "а МЫ думаем, что этот функционал нужен ВСЕМ"+ персональные доработки за деньги |
|||
8
rool
02.09.16
✎
09:29
|
(7) "И ИСТИНА" нет не заменяется я забрал готовый текст запроса из отладчика уже после срабатывания Запрос.Выполнить().Выгрузить()
По ощущениям табличная часть документа "Отражение начисления в регламентированном учете" заполняется вообще не правильно судя по отчету за этот период было начисленно около 800к в табличной части появляется только около 300. я не думаю что это редко используемый документ |
|||
9
Fedor-1971
02.09.16
✎
09:37
|
(8) попроси франча объяснить, что за незадача.
Сам в консоли запросов повыбирай данные, что-бы убедиться в своей правоте. Строка из ТЧ может формировать несколько записей регистра и наоборот, по количеству записей сравнивать несколько некорректно и сравнение по сумме то же вопрос, некоторые записи могут не участвовать в формировании суммы требования. |
|||
10
mkalimulin
02.09.16
✎
09:37
|
(0) Как проверял?
|
|||
11
rool
02.09.16
✎
12:12
|
Короче странный глюк решился тестированием базы - пересчетом итогов. Выборки запросов сошлись 1 в 1.
Мой бедный мозг. :( |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |