Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Выборка чеков и скидок SMCASH* с учетом возвратов : Супермаг Плюс (Супермаг 2000)

23.11.2024 1:17


15.03.2023 09:56
Давно в этот отчет не лазил.
Поставили задачу, чтобы учитывались возвраты.

Запрос по SMCASHZ + SMCASHCHECKS + SMCASHCHECKITEMS + SMCASHDISC.

Вариант "select sum (сумма1 по Z-отчетам union all -сумма2 по возвратам (CR))" - единственный?

Или, может, в чеках есть некая привязка "по данному чеку сделан возврат" ? По доке не нашел.
15.03.2023 10:01
>>> union all

Понятно, что есть еще minus и not exists.

Вопрос именно в однопроходовости по таблицам - возможна ли она?
15.03.2023 10:04
Ты не забывай, что ты погружен в вопрос, а мы - нет.
Я раза два перечитывал и понять не могу, что ты хочешь сделать-то? Запрос изменить? Так где оригинальный?
15.03.2023 10:27
Запрос по SMCASHZ + SMCASHCHECKS + SMCASHCHECKITEMS + SMCASHDISC.

Пример запроса:
---:
SQL код:
                            SELECT sl.name mh_name, e.closedate, to_char(e.closedate, 'dd.mm.yyyy') closedate_char, A.desknum, to_char(A.znum) znum, A.checknum,
                                        C.article, C.NAME ware_name, A.quantity, A.itemprice, A.totalsum,
                                        dk.title discount_type,
                                        round(DECODE(O.EXPENSETYPE, 1, B.PERCENT, to_number(null)), 0) discount_percent,
                                        DECODE(O.EXPENSETYPE, 1, NVL(B.DISCSUM, 0), 0) discount_sum,
                                        to_char(round(
                                               sum(A.quantity*A.itemprice) over (partition by D.desknum, D.znum, A.checknum) -
                                               sum(A.totalsum) over (partition by D.desknum, D.znum, A.checknum),
                                               0
                                             )) discount_sum_check

                                   FROM SUPERMAG.SAOPERATION      O,
                                        SUPERMAG.SMCASHCHECKS     D,
                                        SUPERMAG.SMCASHCHECKITEMS A,
                                        SUPERMAG.SMCASHDISC       B,
                                        SUPERMAG.SMCASHZ          E,
                                        SUPERMAG.SMDiscKind dk,
                                        SUPERMAG.SMCARD c,
                                        SUPERMAG.SMSTORELOCATIONS SL ,Supermag.SACardClass,Supermag.SACardClass R1
                                  WHERE E.CLOSEDATE between to_date('1.3.2023', 'dd.mm.yyyy') 
                                                        and to_date('15.3.2023', 'dd.mm.yyyy') 
                                    and 1 = 1 and E.locid in ( -1, 6.0)

                                    AND E.LOCID = D.LOCID
                                    AND E.DESKNUM = D.DESKNUM
                                    AND E.ZNUM = D.ZNUM
                                    AND D.OPCODE = O.ID
                                    AND O.Expensetype = 1
                                    AND D.LOCID = A.LOCID
                                    AND D.DESKNUM = A.DESKNUM
                                    AND D.ZNUM = A.ZNUM
                                    AND D.CHECKNUM = A.CHECKNUM
                                    AND A.LOCID = B.LOCID
                                    AND A.DESKNUM = B.DESKNUM
                                    AND A.ZNUM = B.ZNUM
                                    AND A.CHECKNUM = B.CHECKNUM
                                    AND A.ITEM = B.ITEM
                                    --AND B.DISCKIND != 4
                                    and a.article = c.article
                                    and b.disckind = dk.id
                                    and e.locid = sl.id
                                     and Supermag.SACardClass.ID=C.IDClass
                                         and C.IDClass=R1.ID
                                         and ( R1.Tree like '26.49.%')

                                     -- учитываем возвраты
                                     and not exists (
                                                      select 1
                                                        from supermag.SMDOCUMENTS h, supermag.SMSPEC s
                                                       where h.doctype = 'CR'
                                                         and h.createdat between to_date('1.3.2023', 'dd.mm.yyyy')  and to_date('15.3.2023', 'dd.mm.yyyy') 
                                                         and h.doctype = s.doctype
                                                         and h.id = s.docid
                                                         and h.locationto = E.LOCID
                                                         and s.article = C.ARTICLE
                                                    ) 

Задача - чтобы учитывались скидки.

Вот пока придумал только union all. Notexists не годится.
15.03.2023 10:28
Если бы у чека была приписка "по чеку сделан возврат" - достаточно было бы написать еще одно условие "кроме чеков (строчек чеков, конечно же), по которым сделан возврат".
15.03.2023 10:30
>>> sum(A.quantity*A.itemprice) over (...

Про это не спрашивайте, забытое legacy. Видимо, чтоб некий разрез по всем магазинам посчитался.
15.03.2023 10:34
В SMCASHCHECKITEMS totalsum в учетом всех скидок, которые были применены.
Ну и в smcashchecks eсть поле opcode. По нему можно отделить продажи от возвратов.
И написать что-нибудь типа decode (opcode, 1, sum(), 3 sum())
15.03.2023 10:47
И в целом предлагаю подумать над целями этого отчета. Берем за неделю, например, ни одного возврата. На следующую неделю - 50 возвратов по прошлой неделе. И что дадут отчеты по неделям, если возврат к продаже не привязан?
15.03.2023 10:54
Цитата:
OlegON И что дадут отчеты по неделям
Пусть сами думают. Мне еще покруче вопросы задают. Дайте залежалось 2019 и 2020-го года отдельно. Именно в такой формулировке, без уточнений.
Несколько раз предлагал "как считать - от последнего прихода или за период", "а залежалый 3 года - хуже, чем залежалый 2 года?", потом плюнул.
15.03.2023 10:56
OPCODE - слона-то я и не приметил.
Часовой пояс GMT +3, время: 01:17.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.