QR-Code Reports
Doubts
- How we will get age for Qrstocks?
- For valuation report how will we compare the records?
- Notes how we will pick up it will not be similar to Stock_Qty
QR Reports logic
Transaction Wise Reports
New- In Inventory Ledger report if QR is Enable we will add one more report type Transaction type wise.It will show Item Wise transactions details and summaryShared XL in teamsInventory Valuation & MRP Report - where we are dumping from Stock_qty in insertion0Query, if QR is enable we will use query given below
INSERT INTO #Temp0 (Ind,YearLabel,Dated,unitCode,Stage,brandid,ItemState,itemid, qty,docno,partyid,storecode,notes) SELECT Ind,YearLabel,Dated,unitCode,Stage,brandid,ItemState,itemid, qty,docno,partyid,storecode,notes FROM stock_qtyWITH A(trnid,balanceqty) AS ( SELECT trnid, SUM(balanceqty) AS balanceqty FROM qrSubtrn WHERE balanceqty > 0 GROUP BY trnid ), B( Ind,YearLabel,Dated,unitCode,Stage,brandid,ItemState,itemid, qty,docno,partyid,storecode,notes ) AS ( /* ========================= GRN ========================= */ SELECT 'G' AS Ind,LEFT(G.yeargrnno,4) + '-' + SUBSTRING(G.yeargrnno,5,2) AS YearLabel, G.dated,G.unitcode,I1.stage,I1.brandid,'G' AS ItemState,G1.ItemId, A.balanceqty AS qty,G.grnno AS docno,G.partyid,G1.storecode,'' AS notes FROM A LEFT JOIN Grn1 G1 ON A.trnid = G1.trnid LEFT JOIN Indent1 I1 ON G1.indent1id = I1.id LEFT JOIN Grn G ON G1.yeargrnno = G.yeargrnno WHERE LEFT(A.trnid,1) = 'G' UNION ALL /* ========================= JOBWORK ========================= */ SELECT 'J' AS Ind, LEFT(J.yearjobno,4) + '-' + SUBSTRING(J.yearjobno,5,2) AS YearLabel, J1.anexdate AS Dated,J.unitcode,J1.stage,J1.brandid,'G' AS ItemState, J1.ItemId,A.balanceqty AS qty,J.jobno AS docno,J.partyid,J1.storecode,'' AS notes FROM A LEFT JOIN Jobwork1 J1 ON A.trnid = J1.trnid LEFT JOIN Jobwork J ON J1.yearjobno = J.yearjobno WHERE LEFT(A.trnid,1) = 'J' UNION ALL /* ========================= MIRS ========================= */ SELECT 'M' AS Ind,LEFT(M.yearjobno,4) + '-' + SUBSTRING(M.yearjobno,5,2) AS YearLabel, M1.dated,M.unitcode,M1.stage,M1.brandid,'G' AS ItemState,M1.ItemId, A.balanceqty AS qty,M.jobno AS docno,'' AS partyid,M1.storecode,'' AS notes FROM A LEFT JOIN Mirs1 M1 ON A.trnid = M1.trnid LEFT JOIN Mirs M ON M1.yearjobno = M.yearjobno WHERE LEFT(A.trnid,1) = 'M' AND M.isauth = 'Y' UNION ALL /* ========================= STOCK ADJUSTMENT ========================= */ SELECT 'S' AS Ind,LEFT(Q.trnid,4) + '-' + SUBSTRING(Q.trnid,5,2) AS YearLabel, GETDATE(),Q.unitcode,Q.stagecode,Q.brandid,'G' AS ItemState, Q.ItemId,SUM(A.balanceqty) AS qty,Q.trnid AS docno,'' AS partyid,Q.storecode, '' AS notes FROM A LEFT JOIN QrStock Q ON A.trnid = Q.trnid WHERE LEFT(A.trnid,1) = 'S' GROUP BY Q.trnid,Q.unitcode,Q.stagecode,Q.brandid, Q.ItemId,Q.storecode ) INSERT INTO #Temp0 (Ind,YearLabel,Dated,unitCode,Stage,brandid,ItemState,itemid, qty,docno,partyid,storecode,notes) SELECT Ind,YearLabel,Dated,unitCode,Stage,brandid,ItemState,itemid, qty,docno,partyid,storecode,notes FROM BInventory Aging Report - If Qr is Enable we will run logic given below for inventory Aging reports
Aging Reports logic
-- picking records from Qrsubtrn and joining with documents for getting itemid and docdate
WITH A(trnid,itemid,stage,docdate,qty)AS
(
/* GRN */
SELECT QS.trnid,G1.itemid,I1.stage,G.dated AS docdate,
SUM(QS.balanceqty) AS qty
FROM QRSubTrn QS
LEFT JOIN Grn1 G1 ON QS.trnid = G1.trnid
LEFT JOIN Grn G ON G1.yeargrnno = G.yeargrnno
LEFT JOIN Indent1 I1 ON G1.indent1id = I1.id
WHERE LEFT(QS.trnid,1) = 'G'
GROUP BY QS.trnid, G1.itemid, I1.stage, G.dated
UNION ALL
/* MIRS */
SELECT QS.trnid,M1.itemid,M1.stage,M1.dated AS docdate,
SUM(QS.balanceqty) AS qty
FROM QRSubTrn QS
LEFT JOIN Mirs1 M1 ON QS.trnid = M1.trnid
LEFT JOIN Mirs M ON M1.yearjobno = M.yearjobno
WHERE LEFT(QS.trnid,1) = 'M'
GROUP BY QS.trnid, M1.itemid, M1.stage, M1.dated
UNION ALL
/* Jobwork */
SELECT QS.trnid,J1.itemid,J1.stage, J1.anexdate AS docdate,
SUM(QS.balanceqty) AS qty
FROM QRSubTrn QS
LEFT JOIN Jobwork1 J1 ON QS.trnid = J1.trnid
WHERE LEFT(QS.trnid,1) = 'J'
GROUP BY QS.trnid, J1.itemid, J1.stage, J1.anexdate
UNION ALL
/* Stock Adjustment */
SELECT QS.trnid,Q.itemid,Q.StageCode,GETDATE() AS docdate,
SUM(QS.balanceqty) AS qty
FROM QRSubTrn QS
LEFT JOIN QRStock Q
ON QS.trnid = Q.trnid
WHERE LEFT(QS.trnid,1) = 'S'
GROUP BY QS.trnid, Q.itemid, Q.StageCode
),
B(trnid,itemid,stage,docdate,qty,age) AS
(
SELECT A.trnid,A.itemid,A.stage,A.docdate,A.qty,
DATEDIFF(DAY, A.docdate, '30-Dec-25') AS age
FROM A
WHERE qty > 0
),
D(trnid,itemid,stage,docdate,qty,age,rate,value) AS
(
SELECT B.trnid,B.itemid,B.stage,B.docdate,B.qty,B.age,
IR.warate AS rate,B.qty * IR.warate AS value
FROM B
LEFT JOIN ItemRates IR ON B.itemid = IR.itemid AND B.stage = IR.stage
),
E(itemid,stage,qtyupto15,qtyupto30,qtyupto60,qtyupto90,qtyupto180,qtyupto365,qtyabove365,
valueupto15,valueupto30,valueupto60,valueupto90,valueupto180,valueupto365,valueabove365
)AS
(
SELECT itemid,stage,
ROUND(SUM(IIF(age BETWEEN 0 AND 15 , qty , 0)),3) AS qtyupto15,
ROUND(SUM(IIF(age BETWEEN 16 AND 30 , qty , 0)),3) AS qtyupto30,
ROUND(SUM(IIF(age BETWEEN 31 AND 60 , qty , 0)),3) AS qtyupto60,
ROUND(SUM(IIF(age BETWEEN 61 AND 90 , qty , 0)),3) AS qtyupto90,
ROUND(SUM(IIF(age BETWEEN 91 AND 180, qty , 0)),3) AS qtyupto180,
ROUND(SUM(IIF(age BETWEEN 181 AND 365,qty , 0)),3) AS qtyupto365,
ROUND(SUM(IIF(age > 365, qty , 0)),3) AS qtyabove365,
ROUND(SUM(IIF(age BETWEEN 0 AND 15 , value , 0)),2) AS valueupto15,
ROUND(SUM(IIF(age BETWEEN 16 AND 30 , value , 0)),2) AS valueupto30,
ROUND(SUM(IIF(age BETWEEN 31 AND 60 , value , 0)),2) AS valueupto60,
ROUND(SUM(IIF(age BETWEEN 61 AND 90 , value , 0)),2) AS valueupto90,
ROUND(SUM(IIF(age BETWEEN 91 AND 180, value , 0)),2) AS valueupto180,
ROUND(SUM(IIF(age BETWEEN 181 AND 365,value , 0)),2) AS valueupto365,
ROUND(SUM(IIF(age > 365, value , 0)),2) AS valueabove365
FROM D
GROUP BY itemid,stage
)
SELECT E.itemid,I0.shortname AS itemshortname,
I0.itemname,IT.groupname AS itemgroupname,
S.description AS segmentname,U.uomname,ST.stagename,
E.qtyupto15,E.qtyupto30,E.qtyupto60,E.qtyupto90,
E.qtyupto180,E.qtyupto365,E.qtyabove365,
E.valueupto15,E.valueupto30,E.valueupto60,E.valueupto90,
E.valueupto180,E.valueupto365,E.valueabove365,
E.stage
FROM E
LEFT JOIN Inventorymst I0 ON E.itemid = I0.itemid
LEFT JOIN ItemGroupmst IT ON I0.itemgroupid = IT.groupcode
LEFT JOIN segmentmst S ON I0.segmentcode = S.segmentcode
LEFT JOIN Uom U ON I0.uomid = U.uomcode
LEFT JOIN stages ST ON E.stage = ST.stage- Reconcilation Report
New- It will be similar to DPR stock comparison reports - It will involve two steps 1. Importing trnids, 2. Comparing it with existing physical records
/////import query
var createtemp = @"CREATE TABLE #temp
(
trnid NVARCHAR(7) COLLATE DATABASE_DEFAULT,
subtrnid NVARCHAR(3) COLLATE DATABASE_DEFAULT
)";
var inserttempquery = @"INSERT INTO #temp (trnid, subtrnid) VALUES (@trnid, @subtrnid)";
var finalinsertquery = @"INSERT INTO QrSubTrnComparison (trnid, subtrnid, inventorytype, qty, qty1)
SELECT DISTINCT trnid,subtrnid,'P' AS inventoryype, 0 AS qty, 0 AS qty1 FROM #temp";
// need to discuss short close part in details
var trnIdList = @"WITH A(trnid, subtrnid,balanceqty) AS
(
SELECT trnid,subtrnid, balanceqty FROM QrSubTrn
WHERE ABS(balanceqty) > 0
)";
// Updated bal. for existing records
var updateqtyquery = $@"{trnIdList}
UPDATE QrSubTrnComparison SET qty = B.balanceqty FROM B
WHERE QrSubTrnComparison.trnid = B.trnid AND QrSubTrnComparison.subtrnid = B.subtrnid";
// Insert those records which is in System but not in comparison table
var insertSystemRecords = $@"{trnIdList},
C(trnid, subtrnid, balanceqty) AS
(
SELECT trnid, subtrnid, balanceqty FROM B
WHERE NOT EXISTS (SELECT trnid, subtrnid FROM QrSubTrnComparison D
WHERE B.trnid = D.trnid AND B.subtrnid = D.subtrnid )
)
INSERT INTO QrSubTrnComparison (trnid, subtrnid, inventorytype, qty, qty1)
SELECT trnid, subtrnid, 'S' AS inventoryType, balanceqty FROM C";WITH A (trnid, id, inventorytype) AS
(
-- Physical Stocks
SELECT trnid, id, inventorytype
FROM QrSubTrnComparison
WHERE inventorytype = 'P'
UNION ALL
-- Added by System but trnid exists in Physical Stock
SELECT trnid, id, inventorytype
FROM QrSubTrnComparison
WHERE inventorytype = 'S'
AND trnid IN (
SELECT trnid
FROM QrSubTrnComparison
WHERE inventorytype = 'P'
)
),
B (trnid) AS
(
SELECT DISTINCT trnid FROM A
),
C (trnid, rowno) AS
(
SELECT trnid,
ROW_NUMBER() OVER (ORDER BY trnid) AS rowno
FROM B
),
D (trnid, id, inventorytype, rowno, newrowno) AS
(
SELECT A.trnid,A.id,A.inventorytype,
C.rowno,
IIF(A.inventorytype = 'P', C.rowno, C.rowno + 0.1) AS newrowno
FROM A
LEFT JOIN C ON A.trnid = C.trnid
),
E (maxrowno) AS
(
SELECT MAX(rowno) + 1 FROM C
),
F (trnid, id, inventorytype, newrowno) AS
(
SELECT trnid,id,inventorytype,
newrowno
FROM D
UNION ALL
SELECT DS.trnid,DS.id,DS.inventorytype,
E.maxrowno AS newrowno
FROM QrSubTrnComparison DS
LEFT JOIN E ON 1 = 1
LEFT JOIN D ON DS.trnid = D.trnid
WHERE DS.inventorytype = 'S'
AND D.trnid IS NULL
),
/* =========================================================
Document & Item Resolution using QRSubTrn
========================================================= */
G(trnid,itemid,docno,docdate,qty) AS
(
/* ---------------- GRN ---------------- */
SELECT QS.trnid,G1.itemid,G.grnno AS docno,G.dated AS docdate,
SUM(QS.balanceqty) AS qty
FROM QRSubTrn QS
LEFT JOIN Grn1 G1 ON QS.trnid = G1.trnid
LEFT JOIN Grn G ON G1.yeargrnno = G.yeargrnno
WHERE LEFT(QS.trnid,1) = 'G'
GROUP BY QS.trnid, G1.itemid, G.grnno, G.dated
UNION ALL
/* ---------------- MIRS ---------------- */
SELECT QS.trnid,M1.itemid,M.jobno AS docno,M1.dated AS docdate,
SUM(QS.balanceqty) AS qty
FROM QRSubTrn QS
LEFT JOIN Mirs1 M1 ON QS.trnid = M1.trnid
LEFT JOIN Mirs M ON M1.yearjobno = M.yearjobno
WHERE LEFT(QS.trnid,1) = 'M'
AND M.isauth = 'Y'
GROUP BY QS.trnid, M1.itemid, M.jobno, M1.dated
UNION ALL
/* ---------------- JOBWORK ---------------- */
SELECT QS.trnid,J1.itemid,J.jobno AS docno,J1.anexdate AS docdate,
SUM(QS.balanceqty) AS qty
FROM QRSubTrn QS
LEFT JOIN Jobwork1 J1 ON QS.trnid = J1.trnid
LEFT JOIN Jobwork J ON J1.yearjobno = J.yearjobno
WHERE LEFT(QS.trnid,1) = 'J'
GROUP BY QS.trnid, J1.itemid, J.jobno, J1.anexdate
UNION ALL
/* ---------------- STOCK ADJUSTMENT ---------------- */
SELECT QS.trnid,Q.itemid,Q.trnid AS docno,Q.dated AS docdate,
SUM(QS.balanceqty) AS qty
FROM QRSubTrn QS
LEFT JOIN QRStock Q ON QS.trnid = Q.trnid
WHERE LEFT(QS.trnid,1) = 'S'
GROUP BY QS.trnid, Q.itemid, Q.trnid, Q.dated
),
/* =========================================================
Final Presentation Layer
========================================================= */
H(itemname,trnid,docno,docdate,qty) AS
(
SELECT I.itemname,CONCAT_WS('-', LEFT(F.trnid,1), RIGHT(F.trnid,6)) AS trnid,
G.docno,G.docdate,G.qty
FROM F
LEFT JOIN G ON F.trnid = G.trnid
LEFT JOIN DprItem I ON G.itemid = I.itemid
)
SELECT itemname,trnid,docno,docdate,qty
FROM H
ORDER BY trnid;";