Имя: Пароль:
1C
1С v8
Страннное поведение запроса
, ,
0 КУНГ ФУ 1С
 
19.11.12
12:34
ТекстЗапроса = "
|Выбрать
| Т1.Субконто,
| Т1.Сумма
|ИЗ
| &Таблица1 как Т1
|ПОМЕСТИТЬ
| ВТ_Т1
|//////////////////////////////////////
|Выбрать
| Т2.Субконто,
| Т2.Сумма
|ИЗ
| &Таблица2 как Т2
|ПОМЕСТИТЬ
| ВТ_Т2
|///////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Т1.Субконто,
| ВЫБОР КОГДА
| ВТ_Т1.Сумма >= isnull(ВТ_Т2.Сумма,0) Тогда
| ВТ_Т1.Сумма - isnull(ВТ_Т2.Сумма,0)
| ИНАЧЕ
| 0
| КОНЕЦ
|
|ОБЪЕДЕНИТЬ ПО
| ВТ_Т1.Субконто = ВТ_Т2.Субконто

Есть такой запрос по таблицам значений, где
&Таблица1 - движения X  (ИТОГОВАЯ СУММА 1000)
&Таблица2 - Движения Y, (ПУСТАЯ ТАБЛИЦА)
Так вот после запроса, итоговая сумма по &Таблица1 увеличивается на n-сумму! Хотя &Таблица2 ПУСТАЯ. Долго думал в чем пробелема, а проблема оказалась в слудующем

написал веместо
| ВЫБОР КОГДА
| ВТ_Т1.Сумма >= isnull(ВТ_Т2.Сумма,0) Тогда
| ВТ_Т1.Сумма - isnull(ВТ_Т2.Сумма,0)
| ИНАЧЕ
| 0
| КОНЕЦ

такое

|ВТ_Т1.Сумма - isnull(ВТ_Т2.Сумма,0)

И все заработало.
отсюда вопрос как  "ВЫБОР КОГДА КОНЕЦ" Влияет на результат запроса?
1 DrunkAnimal
 
19.11.12
12:36
спрашивается накуй ... простите ... делать это в запросе
2 DrunkAnimal
 
19.11.12
12:37
ошибка здесь, кстати))
"ОБЪЕДЕНИТЬ ПО"
3 GLazNik
 
19.11.12
12:38
(0) но выражения таки разные и дают разный результат
4 КУНГ ФУ 1С
 
19.11.12
12:38
(2) да ето не оригинальный запрос, писал от руки для примера
5 vmv
 
19.11.12
12:38
галимые понты
6 КУНГ ФУ 1С
 
19.11.12
12:39
(3) всмысле выражения разные и как могут дать другой результат когда вторая таблица пустая.
7 DrunkAnimal
 
19.11.12
12:40
(6) у самого нет идей?
8 КУНГ ФУ 1С
 
19.11.12
12:40
(5) какие понты, или написать запрос от руки это уже "ПОНТЫ"
9 КУНГ ФУ 1С
 
19.11.12
12:41
(7) были бы идеи, думаю не стал бы этот вопрос обсуждать на форуме.
10 DrunkAnimal
 
19.11.12
12:42
(8) что такое: ОБЪЕДЕНИТЬ ПО
| ВТ_Т1.Субконто = ВТ_Т2.Субконто
я вот честно не могу аналога скл подобрать
11 GLazNik
 
19.11.12
12:43
(6) тут сложно что-то говорить не видя всей картины... а так... "от руки для примера"
12 КУНГ ФУ 1С
 
19.11.12
12:44
Запрос.Текст =
    "ВЫБРАТЬ
    |    ЕСТЬNULL(Основной.Субконто1, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто1,
    |    ЕСТЬNULL(Основной.Субконто2, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто2,
    |    ЕСТЬNULL(Основной.Субконто3, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто3,
    |    Основной.СуммаОстатокДт,
    |    Основной.СуммаОстатокКт
    |ПОМЕСТИТЬ Основной
    |ИЗ
    |    &Основной КАК Основной
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ЕСТЬNULL(Сторно.Субконто1, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто1,
    |    ЕСТЬNULL(Сторно.Субконто2, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто2,
    |    ЕСТЬNULL(Сторно.Субконто3, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто3,
    |    Сторно.СуммаОстатокДт КАК СуммаОстатокДт,
    |    Сторно.СуммаОстатокКт КАК СуммаОстатокКт
    |ПОМЕСТИТЬ Сторно
    |ИЗ
    |    &Сторно КАК Сторно
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Основной.Субконто1,
    |    Основной.Субконто2,
    |    Основной.Субконто3,
    |    Основной.СуммаОстатокДт - ЕСТЬNULL(Сторно.СуммаОстатокДт, 0) КАК СуммаОстатокДт,
    |    Основной.СуммаОстатокКт - ЕСТЬNULL(Сторно.СуммаОстатокКт, 0) КАК СуммаОстатокКт
    |ИЗ
    |    Основной КАК Основной
    |        ЛЕВОЕ СОЕДИНЕНИЕ Сторно КАК Сторно
    |        ПО Основной.Субконто1 = Сторно.Субконто1
    |            И Основной.Субконто2 = Сторно.Субконто2
    |            И Основной.Субконто3 = Сторно.Субконто3";
13 КУНГ ФУ 1С
 
19.11.12
12:44
(12) оригинальный запрос
14 GLazNik
 
19.11.12
12:44
+(11) но в общем случае
| ВЫБОР КОГДА
| ВТ_Т1.Сумма >= isnull(ВТ_Т2.Сумма,0) Тогда
| ВТ_Т1.Сумма - isnull(ВТ_Т2.Сумма,0)
| ИНАЧЕ
| 0
| КОНЕЦ

совсем не то же самое что

|ВТ_Т1.Сумма - isnull(ВТ_Т2.Сумма,0)
15 КУНГ ФУ 1С
 
19.11.12
12:45
(14) Вот старый запрос

   Запрос.Текст =
    "ВЫБРАТЬ
    |    ЕСТЬNULL(Основной.Субконто1, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто1,
    |    ЕСТЬNULL(Основной.Субконто2, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто2,
    |    ЕСТЬNULL(Основной.Субконто3, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто3,
    |    Основной.СуммаОстатокДт,
    |    Основной.СуммаОстатокКт
    |ПОМЕСТИТЬ Основной
    |ИЗ
    |    &Основной КАК Основной
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ЕСТЬNULL(Сторно.Субконто1, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто1,
    |    ЕСТЬNULL(Сторно.Субконто2, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто2,
    |    ЕСТЬNULL(Сторно.Субконто3, ЗНАЧЕНИЕ(Справочник.Субконто.ПустаяСсылка)) КАК Субконто3,
    |    Сторно.СуммаОстатокДт КАК СуммаОстатокДт,
    |    Сторно.СуммаОстатокКт КАК СуммаОстатокКт
    |ПОМЕСТИТЬ Сторно
    |ИЗ
    |    &Сторно КАК Сторно
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Основной.Субконто1,
    |    Основной.Субконто2,
    |    Основной.Субконто3,
    |    ВЫБОР
    |        КОГДА Основной.СуммаОстатокДт >= ЕСТЬNULL(Сторно.СуммаОстатокДт, 0)
    |            ТОГДА Основной.СуммаОстатокДт - ЕСТЬNULL(Сторно.СуммаОстатокДт, 0)
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК СуммаОстатокДт,
    |    ВЫБОР
    |        КОГДА Основной.СуммаОстатокКт >= ЕСТЬNULL(Сторно.СуммаОстатокКт, 0)
    |            ТОГДА Основной.СуммаОстатокКт - ЕСТЬNULL(Сторно.СуммаОстатокКт, 0)
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК СуммаОстатокКт
    |ИЗ
    |    Основной КАК Основной
    |        ЛЕВОЕ СОЕДИНЕНИЕ Сторно КАК Сторно
    |        ПО Основной.Субконто1 = Сторно.Субконто1
    |            И Основной.Субконто2 = Сторно.Субконто2
    |            И Основной.Субконто3 = Сторно.Субконто3";
16 КУНГ ФУ 1С
 
19.11.12
12:49
up!
17 GLazNik
 
19.11.12
12:50
(15) а теперь бы расшифровать еще это:
"Так вот после запроса, итоговая сумма по &Таблица1 увеличивается на n-сумму! "