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

Получение скидок по позициям спецификации документа 'CS' : Супермаг Плюс (Супермаг 2000)

23.11.2024 1:00


26.04.2013 17:59
Да, чеки есть. Просто иначе откуда еще взять информацию по коду карты и виду оплаты?
26.04.2013 18:00
Цитата:
konst посмотри таблицу supermag.smdoccashz
в ней есть связь кассового документа с Z-отчетом
Похоже на правду, пошел разбираться.
26.04.2013 19:41
Всеж непонятно, зачем нужна привязка к позициям кассового документа.

Да, все можно получить из чековых таблиц. Это несколько медленнее, но там информации больше.

Если же плясать от кассового, то посмотри еще
- smdoccredcard (но тут нет деления по позициям)
- smdocdisccard (если "код карты" - это супермаговская дисконтная карта)
- smdocdisccardspec
Они заполняются при включенном расчете соответствующих типов кассовой статистики в адм. модуле.
29.04.2013 09:47
Цитата:
vdm Всеж непонятно, зачем нужна привязка к позициям кассового документа.

Да, все можно получить из чековых таблиц. Это несколько медленнее, но там информации больше.
Если быть кратким, то мне нужна следующая информация:

1) Сами кассовые документы, беру определенные поля из smdocuments.
2) Cпецификации документов (smspec), чтобы получить следующие поля:

Артикул, Цена, Количество, Цена продажи, Ставка НДС, Сумма НДС , Сумма без скидки, Процент скидки, Сумма, Вид оплаты, Код карты.

Без привязки к спецификации smspec (по DOCTYPE и DOCID) не получится получить скидки (SMSpecTax) и цены (SMPrices), если я всё верно понимаю.

Сейчас получаю спецификацию документа типа 'CS' и объединяю join'ом c таблицей smcashcheckitems, данные из которой выбраны по znum документа. Объединение smspec и smcashcheckitems делаю по артиклю.

Что-то нет у меня твердой уверенности, что я делаю всё верно. И еще толком не проверял.

Может, кто видит, что не так? :sad_mini2:
29.04.2013 09:58
SMSpecTax - это налоги.
Конечный запрос покажи.

И есть мнение, деление видов оплаты по артикулам - бессмысленно.
Оно и в чековых таблицах хранится только по чеку в целом, можно посчитать "пропорционально полной сумме", но получишь ты погоду на Марсе.
Хотя нет, есть привязка и к позициям, но все равно смысла морочиться с этим не вижу.
29.04.2013 10:58
Цитата:
vdm SMSpecTax - это налоги.
Конечный запрос покажи.

И есть мнение, деление видов оплаты по артикулам - бессмысленно.
Оно и в чековых таблицах хранится только по чеку в целом, можно посчитать "пропорционально полной сумме", но получишь ты погоду на Марсе.
Хотя нет, есть привязка и к позициям, но все равно смысла морочиться с этим не вижу.
Да, конечно же налоги. Опечатался.

Сложно судить о степени корявости данного запроса, прошу не судить строго, опыта в написании запросов мало.

Возможно, со стороны покажется, что это вообще ахинея :connie_nutzo:, но всё же вот:

SELECT DISTINCT SMsp.*,
ChkIt.Totalsum - Disc.DiscSum as SumWithoutDiscount,
Card.Code as CardCode,
Disc.Percent as DiscountPercent,
ChkIt.Znum
FROM SmCashCheckItems ChkIt
LEFT JOIN smcashdisc Disc
ON (ChkIt.CheckNum = Disc.CheckNum)
LEFT JOIN SMCashDiscCard Card
ON (ChkIt.CheckNum = Card.CheckNum)
LEFT JOIN (SELECT C.GlobalArticle,
S.Article,
S.Quantity,
ST.TaxRate,
ST.TaxSum,
S.ItemPrice,
Pr.Price as ItemSellPrice,
S.TotalPriceNoTax,
S.TotalPrice
FROM SUPERMAG.SMSpec S
JOIN SUPERMAG.SMSpecTax ST
ON (S.DocType = ST.DocType)
AND (S.DocId = ST.DocId)
AND (S.SpecItem = ST.SpecItem)
AND (ST.TaxId = 1)
JOIN SUPERMAG.SMCard C
ON (S.Article = C.Article)
JOIN SUPERMAG.SMPrices Pr
ON (S.Article = Pr.Article)
WHERE (S.DocType = 'CS')
AND (S.DocId = '<номер документа>')
AND C.IdClass != 1
AND Pr.STORELOC = 4) SMsp
ON (ChkIt.Article = SMsp.GlobalArticle)
WHERE ChkIt.Znum = <номер z-отчета>
29.04.2013 15:04
Цитата:
vdm SMSpecTax - это налоги.
Конечный запрос покажи.
Цитата:
vdm И есть мнение, деление видов оплаты по артикулам - бессмысленно.
Да, возможно, бессмысленно. Но задача именно такая, что нужно вывести определенный набор параметров для каждой строки спецификации документа.

Просто непонятно, как выводить получить, например, налоги, если брать информацию только из чеков.

Складывается впечатление, что я упускаю что-то очень важное в понимании, как вообще эти все данные должны получаться.

Запрос не работает, это просто примерно то, что сейчас есть.
29.04.2013 18:18
Посмотри это, для информации, как возможное направление движения.

К кассовому документу по дате/складу привязываются все позиции чеков, с картами и скидками. Но практическая ценность невелика, суммирования по артикулам и привязки к конкретным позициям кассового нет.
Да и муторное это дело - тебе придется фактически собирать тот же самый кассовый из чеков, чтобы привязаться к таким же артикулам/ценам из кассового, и все это фактически только из-за налогов. Лучше бы работать или только по чекам или только по spec*. К чекам smdocuments без проблем привязывается через smdoccashz. Налоги тож можно прицепить.

Код:
-- :PRICETYPE - тип розничной цены для МХ
-- :LOCID - магазин
-- :DOCDATE - дата
SELECT   D.DOCTYPE,
         D.ID,
         NVL(cm.article,ci.article) article, 
         NVL2(cm.article, ci.article, NULL) complexarticle, 
         ci.quantity item_qty,
         pr.price article_price,
         ci.itemprice item_price,
         ci.totalsum item_sum,       -- сумма уже без скидок
         ci.credcardbrand item_credcard,
         credcard.totalsum check_credsum,
         ch.totalsum check_totalsum, -- сумма уже без скидок
         disc.discsum item_discsum,
         disc.percent item_discpercent,
         disccard.code card_code,
         disccard.discsum card_discsum
  FROM   supermag.smdocuments d
         JOIN supermag.smdoccashz dz
             ON d.doctype = DZ.DOCTYPE
               and D.ID = DZ.ID 
         JOIN supermag.smcashchecks ch
             ON ch.DESKNUM = DZ.DESKNUM 
               and CH.ZNUM = DZ.ZNUM
               and CH.LOCID = D.LOCATIONFROM
               and CH.OPCODE = D.OPCODE
         JOIN supermag.smcashcheckitems ci
             ON CI.LOCID = ch.LOCID
               and ci.DESKNUM = ch.DESKNUM
               and CI.ZNUM = ch.ZNUM
               and CI.CHECKNUM = CH.CHECKNUM
         LEFT JOIN supermag.smcashcheckcomplexitems cm
            ON cm.locid=ci.locid
              and cm.desknum=ci.desknum
              and cm.znum=ci.znum
              and cm.complexarticle=ci.article
         LEFT JOIN supermag.smprices pr
             ON ci.article = pr.article
                 AND pr.storeloc = ci.locid
                 AND pr.pricetype = :PRICETYPE
         LEFT JOIN supermag.smcashcredcardchecks credcard
             ON CH.locid=credcard.locid
               and CH.desknum=credcard.desknum
               and CH.znum=credcard.znum
               and CH.checknum=credcard.checknum
               and CI.CREDCARDBRAND=CREDCARD.CREDCARDBRAND
         LEFT JOIN supermag.smcashdisc disc
             ON CI.LOCID = DISC.LOCID
               and ci.DESKNUM = DISC.DESKNUM
               and CI.ZNUM = DISC.ZNUM
               and CI.CHECKNUM = DISC.CHECKNUM
               and CI.ITEM = DISC.ITEM
               and DISC.DISCKIND = 4 -- тип 'персональная скидка'
         LEFT JOIN supermag.smcashdisccard disccard
             ON CI.LOCID = DISCCARD.LOCID
               and CI.DESKNUM = DISCCARD.CHECKNUM
               and CI.ZNUM = DISCCARD.ZNUM
               and CI.CHECKNUM = DISCCARD.CHECKNUM
 WHERE   d.doctype = 'CS'
         AND d.locationfrom = :LOCID
         AND d.CREATEDAT = :DOCDATE
Часовой пояс GMT +3, время: 01:00.

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