May I post the stored procedure here? So you may guide me where to put it in the report designer.
CREATE DEFINER=`root`@`localhost` PROCEDURE `genstocksallitems`(In pDateFrom varchar(10),pDateTo varchar(10),pCustomCond varchar(1000),pCount varchar(1),pTotalOnly varchar(1),pOrderBy varchar(1000),pLimit varchar(1000))
BEGIN
Declare vstarthour varchar(8) DEFAULT "00:00:00";
Declare vendhour varchar(8) DEFAULT "23:59:59";
Declare vDateFrom varchar(19) default Concat(pDateFrom," ",vstarthour);
Declare vDateTo varchar(19) default Concat(pDateTo," ",vendhour);
Declare vCustomCond varchar(1000) Default pCustomCond;
Declare vCount varchar(1) Default pCount;
Declare vTotalOnly varchar(1) Default pTotalOnly;
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE vitemcode varchar(50) DEFAULT "";
DECLARE vbarcode varchar(50) DEFAULT "";
DECLARE vstockcode varchar(50) DEFAULT "";
DECLARE vdescription varchar(100) DEFAULT "";
DECLARE vunit varchar(20) DEFAULT "";
DECLARE vqty decimal(12,2);
DECLARE vamount decimal(12,4);
DECLARE vItemID Int(11);
DECLARE vStockID Int(11);
DECLARE vclassification varchar(100) DEFAULT "";
DECLARE stockallitems_cursor CURSOR FOR
SELECT ItemCode,barcode,stockcode,itemfulldesc,unitcode,SUM(remaining) As totalqty,SUM(remaining * costprice) As totalamt,ItemID,StockID,Classification From bw01.vwstocklog Where ItemFullDesc is not null And (DateDoc BETWEEN vDateFrom AND vDateTo) group by StockID,ItemID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
DROP TABLE IF EXISTS tmpStockAllItems;
CREATE TEMPORARY TABLE tmpStockAllItems
(itemcode VARCHAR(50),barcode VARCHAR(50),stockcode VARCHAR(50),description varchar(100),unit varchar(20),totalqty decimal(12,4),totalamt decimal(12,2),ItemID Int(11),StockID Int(11),Classification varchar(100));
OPEN stockallitems_cursor;
get_item: LOOP
FETCH stockallitems_cursor INTO vitemcode,vbarcode,vstockcode,vdescription,vunit,vqty,vamount,vItemID,vStockID,vclassification;
IF v_finished = 1 THEN LEAVE get_item; END IF;
If vqty > 0.0000 Then
INSERT INTO tmpStockAllItems VALUES(vitemcode,vbarcode,vstockcode,vdescription,vunit,vqty,vamount,vItemID,vStockID,vclassification);
End If;
END LOOP get_item;
CLOSE stockallitems_cursor;
If pCustomCond Is Not Null Then
SET @whereclause=CONCAT(vCustomCond);
If Upper(vCount) = 'Y' Then
SET @stmt= "Select Count(*) As 'Count' FROM tmpStockAllItems WHERE";
ElseIf Upper(vTotalOnly) = 'Y' Then
SET @stmt= "Select Sum(TotalAmt) As 'GrandTotal' FROM tmpStockAllItems WHERE";
Else
SET @stmt= 'SELECT * FROM tmpStockAllItems WHERE';
End If;
SET @stmt1=CONCAT(@stmt,' ',@whereclause);
If pOrderBy Is Not Null Then
Set @orderclause=CONCAT(pOrderBy);
SET @stmt3=CONCAT(@stmt1,' ORDER BY ',@orderclause);
End If;
If pLimit Is Not Null Then
Set @limitclause=CONCAT(pLimit);
SET @stmt3=CONCAT(@stmt3,' LIMIT ',@limitclause);
End If;
PREPARE stmt2 FROM @stmt3;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
Else
If Upper(vCount) = 'Y' Then
Select Count(*) As 'Count' From tmpStockAllItems;
ElseIf Upper(vTotalOnly) = 'Y' Then
Select Sum(TotalAmt) As 'GrandTotal' FROM tmpStockAllItems;
else
If pOrderBy Is Not Null Then
Set @orderclause=CONCAT(pOrderBy);
SET @stmt=CONCAT('select * from tmpStockAllItems ORDER BY ',@orderclause);
End If;
If pLimit Is Not Null Then
Set @limitclause=CONCAT(pLimit);
SET @stmt=CONCAT(@stmt,' LIMIT ',@limitclause);
End If;
PREPARE stmt1 FROM @stmt;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
End If;
End If;
END
Then I call this stored proc for report purposes like this:
call genstocksallitems('2018-09-01','2019-09-30',Null,Null,null,'Classification',Null)
Where the 6th parameter -- "Classification" rearranges the order of rows by classification.
Thank you in advance.