Ну и до кучи подкину, по периоду.
Аннулированные и сторнированные позиции в нормально завершенных чеках (суммы)
Код:
SELECT @StartTime := '2012-01-01 00:00:00';
SELECT @FinishTime := '2012-01-02 23:59:59';
-- SELECT @CashLine := 123456; -- id магазина
SELECT cl.name 'Магазин'
, usr.name 'Кассир'
, it.item 'Артикул'
, it.name 'Наименование'
, count(*) AS 'Позиций'
, sum(ifnull(it.total_quantity, 0)) AS 'Количество'
, sum(ifnull(it.total + it.discount, 0)) AS 'Сумма'
FROM
trm_in_store cl
INNER JOIN trm_in_pos c
ON c.store_id = cl.store_id
INNER JOIN trm_out_receipt_header h
ON h.cash_id = c.cash_id
INNER JOIN trm_out_receipt_footer f
ON (h.cash_id = f.cash_id AND h.id = f.id)
INNER JOIN trm_out_receipt_item it
ON (h.cash_id = it.cash_id AND h.id = it.receipt_header)
INNER JOIN trm_out_shift_open s
ON (h.cash_id = s.cash_id AND h.shift_open = s.id)
LEFT JOIN trm_out_login lg
ON (h.cash_id = lg.cash_id AND h.login = lg.id)
LEFT JOIN trm_in_users usr
ON (c.store_id = usr.store_id AND lg.user_id = usr.id)
WHERE
(f.date BETWEEN @StartTime AND @FinishTime)
AND (f.result = 0)
AND (h.type IN (0, 5))
AND (it.type IN (1, 2))
-- AND (c.store_id = @CashLine)
GROUP BY
c.store_id, usr.name, c.number, it.item, it.name
ORDER BY
count(*) DESC
;
Аннулированные и сторнированные позиции в нормально завершенных чеках (список)
Для всех подряд позиций из аннулированных чеков - раскомментировать соответствующие условия и убрать аналогичные
Код:
SELECT @StartTime := '2012-01-01 00:00:00';
SELECT @FinishTime := '2012-01-02 23:59:59';
-- SELECT @CashLine := 123456; -- id магазина
SELECT cl.name 'Магазин'
, usr.name 'Кассир'
, f.date 'Время'
, c.number 'Касса'
, s.number 'Смена'
, h.local_number 'Чек'
, it.item 'Артикул'
, it.name 'Наименование'
, it.total_quantity 'Количество'
, it.total + it.discount 'Сумма'
FROM
trm_in_store cl
INNER JOIN trm_in_pos c
ON c.store_id = cl.store_id
INNER JOIN trm_out_receipt_header h
ON h.cash_id = c.cash_id
INNER JOIN trm_out_receipt_footer f
ON (h.cash_id = f.cash_id AND h.id = f.id)
INNER JOIN trm_out_receipt_item it
ON (h.cash_id = it.cash_id AND h.id = it.receipt_header)
INNER JOIN trm_out_shift_open s
ON (h.cash_id = s.cash_id AND h.shift_open = s.id)
LEFT JOIN trm_out_login lg
ON (h.cash_id = lg.cash_id AND h.login = lg.id)
LEFT JOIN trm_in_users usr
ON (c.store_id = usr.store_id AND lg.user_id = usr.id)
WHERE
(f.date BETWEEN @StartTime AND @FinishTime)
AND (h.type IN (0, 5))
AND (f.result = 0)
AND (it.type IN (1, 2))
-- AND (f.result = 1)
-- AND (it.type IN (0, 1, 2))
ORDER BY
f.date, c.number, s.number, h.local_number, it.position
;