Имя: Пароль:
1C
1С v8
Запрос к документу и его табличной части
,
0 balak05
 
27.02.14
16:33
Здравствуйте. Нужно выбрать данные из документа и его табличной части. Делаю следующим образом:

ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
            КОГДА ЧекККМ.СтатусЧекаККМ = &Аннулированный
                ТОГДА ЧекККМ.Ссылка
            ИНАЧЕ 0
        КОНЕЦ) КАК колАн,
    СУММА(ВЫБОР
            КОГДА ЧекККМ.СтатусЧекаККМ = &Аннулированный
                ТОГДА ЧекККМ.СуммаДокумента
            ИНАЧЕ 0
        КОНЕЦ) КАК СуммаАн,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМ.Ссылка) КАК кол,
    СУММА(ЧекККМ.СуммаДокумента) КАК Сумма,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &Наличные
                ТОГДА ЧекККМОплата.Ссылка
            ИНАЧЕ 0
        КОНЕЦ) КАК колнал,
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &Наличные
                ТОГДА ЧекККМОплата.Сумма
            ИНАЧЕ 0
        КОНЕЦ) КАК сумнал,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &ПлКарта
                ТОГДА ЧекККМОплата.Ссылка
            ИНАЧЕ 0
        КОНЕЦ) КАК колпл,
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &ПлКарта
                ТОГДА ЧекККМОплата.Сумма
            ИНАЧЕ 0
        КОНЕЦ) КАК сумпл
ИЗ
    Документ.ЧекККМ КАК ЧекККМ,
    Документ.ЧекККМ.Оплата КАК ЧекККМОплата
ГДЕ
    ЧекККМ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЧекККМОплата.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

В результате получается общее количество документов и документов по категориям совпадают. Хотя должно быть общее количество равно сумме документов по категориям. В чем может быть ошибка?
1 Maxus43
 
27.02.14
16:38
ИЗ
    Документ.ЧекККМ КАК ЧекККМ,
    Документ.ЧекККМ.Оплата КАК ЧекККМОплата

это кросс-джойн, ты представляешь что в итоге? соединение хоть сделай
2 balak05
 
27.02.14
16:42
(1) соединение по какому полю? по ссылке не подходит. Мне нужно донные по общему количеству чеков за период, по количеству аннулированных чеков(это из реквизитов документа). И количество чеков за наличные и платежные карты (это из таб. части). Понимаю что туплю, просто башка не соображает уже. (наверное в отпуск надо)
3 Maxus43
 
27.02.14
16:43
(2) делай Объединением запросов тогда, раз данные не связаны между собой логически... не пихай всё в одну портянку.
Разделяй и властвуй!
4 Ненавижу 1С
 
гуру
27.02.14
16:44
(2) может объединение надо?
5 balak05
 
27.02.14
16:49
(3) (4) пробую...
6 Никулин Леонид
 
27.02.14
17:07
Выбирай все из табличной части документа, а к реквизитам в шапке обращайся серез "Ссылка."
7 balak05
 
27.02.14
17:10
(6) пробовал. не знаю почему но при таком раскладе ссылки неправильно считает
8 balak05
 
27.02.14
17:12
В общем сделал объединением, цифры вроде правильные, но выводит две строки

вот текст запроса

ВЫБРАТЬ
    СУММА(ВЫБОР
            КОГДА ЧекККМ.СтатусЧекаККМ = &Аннулированный
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ) КАК колАн,
    СУММА(ВЫБОР
            КОГДА ЧекККМ.СтатусЧекаККМ = &Аннулированный
                ТОГДА ЧекККМ.СуммаДокумента
            ИНАЧЕ 0
        КОНЕЦ) КАК сумАн,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМ.Ссылка) КАК кол,
    СУММА(ЧекККМ.СуммаДокумента) КАК СуммаДокумента,
    СУММА(0) КАК СуммаНал,
    СУММА(0) КАК КолПл,
    СУММА(0) КАК СумПл,
    СУММА(0) КАК КолНал
ИЗ
    Документ.ЧекККМ КАК ЧекККМ
ГДЕ
    ЧекККМ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    СУММА(0),
    СУММА(0),
    СУММА(0),
    СУММА(0),
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &Наличные
                ТОГДА ЧекККМОплата.Сумма
            ИНАЧЕ 0
        КОНЕЦ),
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &ПлКарта
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ),
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &ПлКарта
                ТОГДА ЧекККМОплата.Сумма
            ИНАЧЕ 0
        КОНЕЦ),
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &Наличные
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ)
ИЗ
    Документ.ЧекККМ.Оплата КАК ЧекККМОплата
ГДЕ
    ЧекККМОплата.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания



Как убрать вторую строчку?
9 Никулин Леонид
 
27.02.14
17:14
ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
            КОГДА ЧекККМОплата.ссылка.СтатусЧекаККМ = &Аннулированный
                ТОГДА Ссылка
            ИНАЧЕ 0
        КОНЕЦ) КАК колАн,
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ссылка.СтатусЧекаККМ = &Аннулированный
                ТОГДА ЧекККМОплата.ссылка.СуммаДокумента
            ИНАЧЕ 0
        КОНЕЦ) КАК СуммаАн,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ссылка) КАК кол,
    СУММА(ЧекККМОплата.ссылка.СуммаДокумента) КАК Сумма,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &Наличные
                ТОГДА ЧекККМОплата.Ссылка
            ИНАЧЕ 0
        КОНЕЦ) КАК колнал,
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &Наличные
                ТОГДА ЧекККМОплата.Сумма
            ИНАЧЕ 0
        КОНЕЦ) КАК сумнал,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &ПлКарта
                ТОГДА ЧекККМОплата.Ссылка
            ИНАЧЕ 0
        КОНЕЦ) КАК колпл,
    СУММА(ВЫБОР
            КОГДА ЧекККМОплата.ВидОплаты.ТипОплаты = &ПлКарта
                ТОГДА ЧекККМОплата.Сумма
            ИНАЧЕ 0
        КОНЕЦ) КАК сумпл
ИЗ
    //Документ.ЧекККМ КАК ЧекККМ,
    Документ.ЧекККМ.Оплата КАК ЧекККМОплата
ГДЕ
    ЧекККМОплата.ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    //И ЧекККМОплата.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
10 Никулин Леонид
 
27.02.14
17:18
В твоем запросе все выбирается из одной таблицы. Не усложняй себе жизнь.
11 balak05
 
27.02.14
17:20
(9) колАн    СуммаАн    кол    Сумма    колнал    сумнал    колпл    сумпл
1    0    2    27 479    2    27 479    1    0
почему то возвращает количество с нулевой ценой
12 balak05
 
27.02.14
17:23
и цифры неправильные

колАн    сумАн    кол    СуммаДокумента    СуммаНал    КолПл    СумПл    КолНал
2    10 484    4    37 963    0    0    0    0
0    0    0    0    27 479    0    0    2

здесь все правильно, но как сделать одну строчку?
13 Maxus43
 
27.02.14
17:24
(12) засунь оба запроса во вложенный, а потом сгруппируй на выходе
14 Никулин Леонид
 
27.02.14
17:24
Если задвоен результат попробуй поэксперементировать со связями
15 Никулин Леонид
 
27.02.14
17:25
(13) бли, там же простой запрос? Все и так должно работать!
16 Maxus43
 
27.02.14
17:26
(15) не совсем. если в ТЧ несколько строк, то смысл первой части запроса пойдёт не в ту степь...
17 balak05
 
27.02.14
17:28
(15) но не работает
18 balak05
 
27.02.14
17:29
(16) там одна строка. проверил
19 Maxus43
 
27.02.14
17:30
(18) где там? во всех докуентах?
20 Никулин Леонид
 
27.02.14
17:30
Да не, не в том смысле:)
21 Никулин Леонид
 
27.02.14
17:31
(18) если у тебя в табличной части документа будет несколько строк, а не тип значения "Строка"
22 Никулин Леонид
 
27.02.14
17:33
Скорее всего у тебя попадутся документы где будет больше одной строки
23 Никулин Леонид
 
27.02.14
17:34
(+13) Тогда добавляй в оба запроса номенклатуру(че-нибудь только не число), а потом на выходе сгруппируешь по ней. Может так?
24 balak05
 
27.02.14
17:35
(13) вроде так работает
25 Никулин Леонид
 
27.02.14
17:36
ништяк
26 balak05
 
27.02.14
17:37
(22) попадутся. например часть оплаты сертификатом каким нибудь а часть налом. сейчас проверю такой вариант
27 balak05
 
27.02.14
17:43
(22) (26) так тоже работает. всем спасибо за помощь