[ОТВЕТИТЬ]
26.04.2013 13:38
yurart
 
Добрый день!

Пытаюсь получить данные по реализации ТМЦ из БД Супермаг Плюс, а именно скидки на позиции спецификации документов реализации ТМЦ ('CS')
Всё безуспешно :connie_escapejar:

Как связать документ и спецификацию документа cо скидкам на проданные товары.
Я так понимаю, всё крутится вокруг таблиц:

-- документы и спец, ну это понятно.
smdocuments
smspec

-- информацию о скидках нужно, вроде, брать отсюда:
smcashchecks
smcheckitems
smcashdisc

с таблицы smspec никак не достучаться до таблиц
smcashchecks
smcheckitems
smcashdisc

Были некоторые мысли по поводу того, чтобы делать всё через smcashz и поле znum, но не знаю, на правильном ли я пути.

Как же получить скидки по товарам спецификации документа с типом 'CS'?

Благодарю за быстрый ответ!
26.04.2013 13:44
whitewizard
 
так кассовый документ (CS) собирается же из чеков со сменами закрытыми в один день. Собирай из чеков информацию.
26.04.2013 14:38
yurart
 
Цитата:
whitewizard так кассовый документ (CS) собирается же из чеков со сменами закрытыми в один день. Собирай из чеков информацию.
Хорошо, теперь более менее понятно, что нужно
связать smdocuments с smcashchecks,
и (smspec с smcashcheckitems).

Если бы удалось связать smdocuments с smcashchecks, то спецификацию для каждого чека можно было бы получить по checknum.

Но как? По каким полям связать smdocuments с smcashchecks?
26.04.2013 14:43
yurart
 
Цитата:
vdm Есть smspeccashdisc.
Вроде, в точку. Только процент скидки остаётся посчитать.
Если будут вопросы еще, отпишусь.

Благодарю!
26.04.2013 16:52
yurart
 
Всё же не в точку. Мне требуются еще данные по коду карты и виду оплаты, которая есть только в чеках.

Возвращаюсь к своему вопросу по поводу связи таблиц smdocuments с smcashchecks, т.к. нужны не только скидки, но еще и код карты оплаты и вид оплаты.

Правильно ли будет присоединить поле znum к smdocuments:
Select *
FROM SUPERMAG.smdocuments D
LEFT JOIN smcashz CA ON D.Createdat = CA.Closedate
,т.е. получить все закрытые z-отчеты по документам,
Потом по znum документа получить все оставшиеся данные по чекам?

ON D.Createdat = CA.Closedate - правильно ли такое условие?
26.04.2013 16:55
yurart
 
Цитата:
whitewizard Собирай из чеков информацию.
Всё же как добраться от smdocuments до чеков?
26.04.2013 17:45
joutchik
 
Вопрос встречный
А есть ли чеки в базе где ты делаешь отчет?
Нужны ли тебе именно чеки?
26.04.2013 17:46
joutchik
 
Предпоследний пост не увидел
Но про наличие чеков вопрос открыт
26.04.2013 17:54
konst
 
посмотри таблицу supermag.smdoccashz
в ней есть связь кассового документа с Z-отчетом
26.04.2013 17:59
yurart
 
Да, чеки есть. Просто иначе откуда еще взять информацию по коду карты и виду оплаты?
26.04.2013 18:00
yurart
 
Цитата:
konst посмотри таблицу supermag.smdoccashz
в ней есть связь кассового документа с Z-отчетом
Похоже на правду, пошел разбираться.
26.04.2013 19:41
vdm
 
Всеж непонятно, зачем нужна привязка к позициям кассового документа.

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

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

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

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

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

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

К кассовому документу по дате/складу привязываются все позиции чеков, с картами и скидками. Но практическая ценность невелика, суммирования по артикулам и привязки к конкретным позициям кассового нет.
Да и муторное это дело - тебе придется фактически собирать тот же самый кассовый из чеков, чтобы привязаться к таким же артикулам/ценам из кассового, и все это фактически только из-за налогов. Лучше бы работать или только по чекам или только по 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, время: 10:17.

 

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