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

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

04.05.2024 0:05


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

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

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

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

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

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

Пример запроса:
---:
SQL код:
                            SELECT sl.name mh_namee.closedateto_char(e.closedate'dd.mm.yyyy'closedate_charA.desknumto_char(A.znumznumA.checknum,
                                        
C.articleC.NAME ware_nameA.quantityA.itempriceA.totalsum,
                                        
dk.title discount_type,
                                        
round(DECODE(O.EXPENSETYPE1B.PERCENTto_number(null)), 0discount_percent,
                                        
DECODE(O.EXPENSETYPE1NVL(B.DISCSUM0), 0discount_sum,
                                        
to_char(round(
                                               
sum(A.quantity*A.itempriceover (partition by D.desknumD.znumA.checknum) -
                                               
sum(A.totalsumover (partition by D.desknumD.znumA.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 
and E.locid in ( -16.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 hsupermag.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
DMaslov
 
Если бы у чека была приписка "по чеку сделан возврат" - достаточно было бы написать еще одно условие "кроме чеков (строчек чеков, конечно же), по которым сделан возврат".
15.03.2023 10:30
DMaslov
 
>>> sum(A.quantity*A.itemprice) over (...

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

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