由于从其他系统中传递过来的采购入库单未做货位验证,将错误货位写入数据库,导致料号货位错误,做货位调整单提示货位非法,采用如下方法,修改为正确的货位之后,重新写入货位存量表。
SELECT * FROM dbo.InvPosition WHERE cposcode ='d'
SELECT * FROM dbo.InvPositionSum WHERE cposcode ='d'
UPDATE dbo.InvPosition set cposcode ='DA00-000' WHERE cposcode ='d'
SELECT * FROM dbo.Position WHERE cposcode LIKE 'd%'
BEGIN TRAN;
TRUNCATE TABLE InvPositionSum;
--update set cbatch='' from InvPosition p left join Inventory i on p.cInvCode=i.cinvcode where isnull (bInvBatch,0) =0
--select * into AA_BatchPropertybak2021 from AA_BatchProperty
--delete from b from AA_BatchProperty b left join Inventory i on b.cinvcode =i.cinvcode where bInvBatch=0
INSERT INTO InvPositionSum
(
iQuantity,
inum,
cWhCode,
cPosCode,
cInvCode,
cBatch,
cFree1,
cFree2,
cFree3,
cFree4,
cFree5,
cFree6,
cFree7,
cFree8,
cFree9,
cFree10,
cvmivencode,
iTrackid,
cInVouchType
)
SELECT SUM( (CASE
WHEN Inv.bRdFlag = 1 THEN
1
WHEN Inv.bRdFlag = 0 THEN
-1
ELSE
0
END
) * Inv.iQuantity
),
SUM( (CASE
WHEN Inv.bRdFlag = 1 THEN
1
WHEN Inv.bRdFlag = 0 THEN
-1
ELSE
0
END
) * Inv.iNum
),
Inv.cWhCode,
Inv.cPosCode,
Inv.cInvCode,
ISNULL(Inv.cBatch, N''),
ISNULL(Inv.cFree1, N''),
ISNULL(Inv.cFree2, N''),
ISNULL(Inv.cFree3, N''),
ISNULL(Inv.cFree4, N''),
ISNULL(Inv.cFree5, N''),
ISNULL(Inv.cFree6, N''),
ISNULL(Inv.cFree7, N''),
ISNULL(Inv.cFree8, N''),
ISNULL(Inv.cFree9, N''),
ISNULL(Inv.cFree10, N''),
ISNULL(Inv.cvmivencode, N''),
CASE
WHEN ISNULL(I.bTrack, 0) = 1 THEN
ISNULL(Inv.iTrackId, 0)
ELSE
0
END,
CASE
WHEN ISNULL(I.bTrack, 0) = 1 THEN
ISNULL(Inv.cInVouchType, N'')
ELSE
N''
END
FROM InvPosition Inv
INNER JOIN Inventory I
ON Inv.cInvCode = I.cInvCode
GROUP BY Inv.cWhCode,
Inv.cPosCode,
Inv.cInvCode,
ISNULL(Inv.cBatch, N''),
ISNULL(Inv.cFree1, N''),
ISNULL(Inv.cFree2, N''),
ISNULL(Inv.cFree3, N''),
ISNULL(Inv.cFree4, N''),
ISNULL(Inv.cFree5, N''),
ISNULL(Inv.cFree6, N''),
ISNULL(Inv.cFree7, N''),
ISNULL(Inv.cFree8, N''),
ISNULL(Inv.cFree9, N''),
ISNULL(Inv.cFree10, N''),
ISNULL(Inv.cvmivencode, N''),
CASE
WHEN ISNULL(I.bTrack, 0) = 1 THEN
ISNULL(Inv.iTrackId, 0)
ELSE
0
END,
CASE
WHEN ISNULL(I.bTrack, 0) = 1 THEN
ISNULL(Inv.cInVouchType, N'')
ELSE
N''
END;
UPDATE Inv
SET cMassUnit = CS.cMassUnit,
iMassDate = CS.iMassDate,
dMadeDate = CS.dMdate,
dVDate = CS.dVDate,
iExpiratDateCalcu = CS.iExpiratDateCalcu,
cExpirationdate = CS.cExpirationdate,
dExpirationdate = CS.dExpirationdate
FROM InvPositionSum Inv
INNER JOIN CurrentStock CS
ON Inv.cInvCode = CS.cInvCode
AND Inv.cWhCode = CS.cWhCode
AND ISNULL(Inv.cBatch, '') = ISNULL(CS.cBatch, '')
AND ISNULL(Inv.cFree1, '') = ISNULL(CS.cFree1, '')
AND ISNULL(Inv.cFree2, '') = ISNULL(CS.cFree2, '')
AND ISNULL(Inv.cFree3, '') = ISNULL(CS.cFree3, '')
AND ISNULL(Inv.cFree4, '') = ISNULL(CS.cFree4, '')
AND ISNULL(Inv.cFree5, '') = ISNULL(CS.cFree5, '')
AND ISNULL(Inv.cFree6, '') = ISNULL(CS.cFree6, '')
AND ISNULL(Inv.cFree7, '') = ISNULL(CS.cFree7, '')
AND ISNULL(Inv.cFree8, '') = ISNULL(CS.cFree8, '')
AND ISNULL(Inv.cFree9, '') = ISNULL(CS.cFree9, '')
AND ISNULL(Inv.cFree10, '') = ISNULL(CS.cFree10, '')
AND ISNULL(Inv.cvmivencode, '') = ISNULL(CS.cVMIVenCode, '');
COMMIT