Skip to end of metadata
Go to start of metadata


Serial discrepancies
--Check all stock items, which are serialized Whse vs Serial Qty!
SELECT StockLink, StockCode, WHID, WHCode, SUM(SerialQty) as SerialQty, SUM(StockQty) as StockQty, diff = COALESCE(SUM(SerialQty),0) - COALESCE(SUM(StockQty),0) FROM
    (select SNStockLink as StockLink, S.Code as StockCode, CurrentAccLink as WHID, W.Code as WHCode, count(*) as SerialQty, 0 as StockQty
        from SerialMF
        left join StkItem S ON SerialMF.SNStockLink = S.StockLink
        left join WhseMst W ON CurrentAccLink = W.WhseLink where CurrentLoc IN(1,6,4) GROUP BY CurrentAccLink, W.Code, SNStockLink, S.Code
    UNION ALL
    SELECT P.AccountLink as StockLink, S.Code as StockCode, P.WarehouseID, W.Code, 0 as SerialQty,
    --SUM(CASE WHEN Debit > 0 THEN Quantity ELSE -Quantity END) as SignedQty
	SUM (CASE WHEN P.Id = 'JCI' THEN 0 --JCI invoices directly invoice out, so doesn't affect the available stock qty
				  WHEN P.Id = 'JCS' THEN 0 --JCS is always 0 anyway on the quantity column, so this shouldn't affect anything.
				  /*JCM -> standard rule applies on qty */
				  WHEN P.Id NOT IN ('JCI','JCS') AND Debit > 0 THEN Quantity
				  ELSE -Quantity END) as SignedQty
     from PostST P
     left join StkItem S ON P.AccountLink = S.StockLink
     left join WhseMst W ON P.WarehouseID = W.WhseLink where S.SerialItem = 1 AND S.ServiceItem = 0
     group by P.WarehouseID, W.Code, P.AccountLink, S.Code
    ) t
    GROUP BY StockLink, WHID, WHCode, StockCode
    HAVING SUM(SerialQty) <> SUM(StockQty)
    ORDER BY StockCode




Investigation scripts
--392 stockid serial: 230257
select top 10 * from SerialMF SMF WHERE SMF.SNStockLink = 392 and SMF.SerialNumber = '230257'
SELECT top 10 * FROM SerialTX where SNLink = 170204

select * from StkItem where StockLink = 392
select * from PostST where cAuditNumber = '30703.0001'
SELECT * FROM SerialTX where SNAuditNumber = '30703.0001'

select SUM(Quantity) as PostSTQty,
	SerialQty = (SELECT COUNT(*) FROM SerialTx SNT 
					LEFT JOIN SerialMF SN ON SNT.SNLink = SN.SerialCounter 
					WHERE SN.SNStockLink = PostST.AccountLink AND PostST.WarehouseID = SNT.SNWarehouseID AND PostST.cAuditNumber = SNT.SNAuditNumber)
	, cAuditNumber, WarehouseID from postst where AccountLink = 392 --cAuditNumber = '64198,0005'
	GROUP BY AccountLink, cAuditNumber, WarehouseID
	HAVING SUM(Quantity) <> (SELECT COUNT(*) FROM SerialTx SNT 
					LEFT JOIN SerialMF SN ON SNT.SNLink = SN.SerialCounter 
					WHERE SN.SNStockLink = PostST.AccountLink AND PostST.WarehouseID = SNT.SNWarehouseID AND PostST.cAuditNumber = SNT.SNAuditNumber)

--checking for differences in both tables!
	SELECT t.AuditNumber, t.WHID, t.StockLink, SNQty = SUM(t.SNQty), StockQty = SUM(t.StockQty)  FROM
		(SELECT SNAuditNumber as AuditNumber, 1 as SNQty,0 as StockQty, SNStockLink as StockLink, SNT.SNWarehouseID as WHID FROM SerialTx SNT 
					LEFT JOIN SerialMF SN ON SNT.SNLink = SN.SerialCounter 
		UNION ALL
		 SELECT P.cAuditNumber, 0 as SNQty, P.Quantity as StockQty, P.AccountLink as StockLink, P.WarehouseID as WHID FROM PostST P			
					) t
					WHERE t.StockLink = 21841
					GROUP BY t.AuditNumber, t.WHID, t.StockLink
					HAVING SUM(t.SNQty) <> SUM(t.StockQty)

--Checking the tx in both tables for an auditnr:
GO
DECLARE @AN varchar(100) = '45871.0001' --'45867.0001'
DECLARE @ANT TABLE(AN varchar(100))
	INSERT INTO @ANT (AN) VALUES ('45871.0001') ,('45867.0001'),('2641.0001')
SELECT cAuditNumber, Quantity,WarehouseID, * FROM PostST where cAuditNumber IN (SELECT AN FROM @ANT) 
SELECT * FROM SerialTx SNT  LEFT JOIN SerialMF SN ON SNT.SNLink = SN.SerialCounter WHERE SNT.SNAuditNumber IN (SELECT AN FROM @ANT) 

SELECT top 10 * FROM _btblJCMaster where IdJCMaster = 47011
select cAuditNumber, * from postst where JobCodeLink = 47011

select top 10 * from serialtx where cSNTXReference2 like 'DIBT%'
/*
2641.0001
30703.0001
45867.0001

*/
GO
DECLARE @ANT TABLE(AN varchar(100))
	INSERT INTO @ANT (AN) VALUES ('2641.0001') -- ,('64056.0001') --,('2641.0001')
SELECT cAuditNumber, Quantity,WarehouseID, * FROM PostST where cAuditNumber IN (SELECT AN FROM @ANT) 
SELECT * FROM SerialTx SNT  LEFT JOIN SerialMF SN ON SNT.SNLink = SN.SerialCounter WHERE SNT.SNAuditNumber IN (SELECT AN FROM @ANT) 

select top 1000 * from SerialMF where SNStockLink = 392 and CurrentLoc = 1

--CHECK on quantities - Serial vs PostST
GO
DECLARE @StockLink int = 392
select CurrentAccLink, W.Code, count(*) from SerialMF left join WhseMst W ON CurrentAccLink = W.WhseLink where SNStockLink = @StockLink and CurrentLoc IN(1,6,4) GROUP BY CurrentAccLink, W.Code
SELECT P.WarehouseID, W.Code,
	SUM(CASE WHEN Debit > 0 THEN Quantity ELSE -Quantity END) as SignedQty
	 from PostST P left join WhseMst W ON P.WarehouseID = W.WhseLink where P.AccountLink = @StockLink group by P.WarehouseID, W.Code

GO
--check by stocklink:
DECLARE @StockLink int = 21841
SELECT StockLink, WHID, WHCode, SUM(SerialQty), SUM(StockQty) FROM
	(select SNStockLink as StockLink, CurrentAccLink as WHID, W.Code as WHCode, count(*) as SerialQty, 0 as StockQty from SerialMF left join WhseMst W ON CurrentAccLink = W.WhseLink where SNStockLink = @StockLink and CurrentLoc IN(1,6,4) GROUP BY CurrentAccLink, W.Code, SNStockLink
	UNION ALL
	SELECT P.AccountLink as StockLink, P.WarehouseID, W.Code, 0 as SerialQty,
	SUM(CASE WHEN Debit > 0 THEN Quantity ELSE -Quantity END) as SignedQty
	 from PostST P left join WhseMst W ON P.WarehouseID = W.WhseLink where P.AccountLink = @StockLink group by P.WarehouseID, W.Code, P.AccountLink
	) t
	GROUP BY StockLink, WHID, WHCode

--Check all stock items, which are serialized!
SELECT StockLink, StockCode, WHID, WHCode, SUM(SerialQty) as SerialQty, SUM(StockQty) as StockQty, diff = COALESCE(SUM(SerialQty),0) - COALESCE(SUM(StockQty),0) FROM
	(select SNStockLink as StockLink, S.Code as StockCode, CurrentAccLink as WHID, W.Code as WHCode, count(*) as SerialQty, 0 as StockQty 
		from SerialMF 
		left join StkItem S ON SerialMF.SNStockLink = S.StockLink
		left join WhseMst W ON CurrentAccLink = W.WhseLink where CurrentLoc IN(1,6,4) GROUP BY CurrentAccLink, W.Code, SNStockLink, S.Code
	UNION ALL
	SELECT P.AccountLink as StockLink, S.Code as StockCode, P.WarehouseID, W.Code, 0 as SerialQty,
	SUM(CASE WHEN Debit > 0 THEN Quantity ELSE -Quantity END) as SignedQty
	 from PostST P 
	 left join StkItem S ON P.AccountLink = S.StockLink
	 left join WhseMst W ON P.WarehouseID = W.WhseLink where S.SerialItem = 1 AND S.ServiceItem = 0
	 group by P.WarehouseID, W.Code, P.AccountLink, S.Code
	) t
	GROUP BY StockLink, WHID, WHCode, StockCode
	HAVING SUM(SerialQty) <> SUM(StockQty)
	ORDER BY StockCode

	

SELECT top 10 * FROM _btblJCMaster where IdJCMaster = 47011
select cAuditNumber, * from postst where JobCodeLink = 47011



--select * from postst where AccountLink = 392
SELECT * FROM SerialTx SNT 
		LEFT JOIN SerialMF SN ON SNT.SNLink = SN.SerialCounter 
		WHERE SN.SNStockLink = 392 AND 40 = SNT.SNWarehouseID AND PostST.cAuditNumber = SNT.SNAuditNumber


		select * from serialmf where SerialNumber IN('230257','262580')
		select * from serialtx where SNLink IN (170204,171995)
		select * from PostST where cAuditNumber IN ('64198,0005','67691,0004')

		select * from serialtx where SNAuditNumber IN ('58973.0001','58974.0001')
		select * from TrCodes



Stored Proc: WHT Serial (without PostST)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =================================================================
-- Author:		Asamco B.V. - Alex
-- Create date: 2019-04-03
-- Description:	Quick WH transfer for SN (no PostST entry!)
-- =================================================================
CREATE OR ALTER PROCEDURE _as_spSNWHT 
	-- Add the parameters for the stored procedure here
	@SerialNumber varchar(50)
   ,@StockID int
   ,@FromWHID int
   ,@ToWHID int
   ,@TxDate datetime = NULL
AS
BEGIN
/*USAGE:
EXEC _as_spSNWHT 'SERIALNRHERE', 123,1,2

*/
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	--fix tx date - no time or null:
	SELECT @TxDate = Convert(date, COALESCE(@TxDate,GETDATE())) 

	--get Audit Number:
	declare @AuditNo varchar(20)                -- AuditNo
    declare @IsBranch bit = 0                       -- 1 if branch, otherwise 0
    declare @TxBranchID int = 0                    -- ID of the currenct branch
    declare @AuditTemp float                    -- The temp value for the audit number.
	EXEC @AuditTemp = _bspNextAuditNo;
        select @AuditNo = CASE
            WHEN @IsBranch = 1 THEN Cast(@TxBranchID as varchar(20)) + '.' + CAST(@AuditTemp as varchar) + '.0001'
            ELSE CAST(@AuditTemp as varchar) + '.0001' END; --'GET NEXT AUDIT NO!!!!' --Check SP _bspNextAuditNo



	DECLARE @SerialNumberID bigint
	SELECT @SerialNumberID = COALESCE((SELECT SerialCounter FROM SerialMF S WHERE S.SerialNumber = @SerialNumber AND S.SNStockLink = @StockID),0)
	DECLARE @TxRef varchar(100)
	SELECT @TxRef = 'vIBT' + convert(varchar, getdate(), 120)

	--post WH OUT:
	EXECUTE [dbo].[_bspSNPostSerialNumber] 
   @SerialNumberID OUTPUT
  ,@SerialNumber = @SerialNumber
  ,@StockID = @StockID
  ,@TxType = 9
  ,@TxDate = @TxDate
  ,@TxReference = @TxRef
  ,@TxCodeID = 32 --hardcoded for ATT db.
  ,@ProjectID = 0
  ,@DrCrAccountID = 0
  ,@WarehouseID = @FromWHID
  ,@JobCodeID = 0
  ,@MFPID = 0
  ,@LotID = 0
  ,@AuditNumber = @AuditNo
  ,@TxReference2 = ''
  ,@MFPLineID = 0
  ,@iTxBranchID = 0
  ,@Quantity = 1

  --reset:
  --select @SerialNumberID = 0

  --post WH in:
  EXECUTE [dbo].[_bspSNPostSerialNumber] 
   @SerialNumberID OUTPUT
  ,@SerialNumber = @SerialNumber
  ,@StockID = @StockID
  ,@TxType = 10
  ,@TxDate = @TxDate
  ,@TxReference = @TxRef
  ,@TxCodeID = 32 --hardcoded for ATT db.
  ,@ProjectID = 0
  ,@DrCrAccountID = 0
  ,@WarehouseID = @ToWHID
  ,@JobCodeID = 0
  ,@MFPID = 0
  ,@LotID = 0
  ,@AuditNumber = @AuditNo
  ,@TxReference2 = ''
  ,@MFPLineID = 0
  ,@iTxBranchID = 0
  ,@Quantity = 1

END
GO


  • No labels