SMS_Registros duplicados en tablas de surtido

Se tiene identificado un escenario en el cual se duplican registros en las tablas de surtido de una orden eccomerce de tipo CICO, al hacer una consulta a la tabla Mobile.PickingOrder por el campo Ordernumber tendremos 3 registrso de la orden reportada como se muestra a continuacion.

select  * from Mobile.PickingOrder WITH (NOLOCK) where OrderNumber = 12345678 --Numero de orden CICO

Para este caso se tiene la siguiente mitigacion que consiste en depurar los registros duplicados de las tablas de surtido en la BD de tienda que nos reporta el incidente, solo como dato de entrada en el query podremos el numero de orden, posteriormente llamamos a tienda y notificamos al usuario para que valide de nuevo.

El ticket se cierra en el *Servicio Gestión de Tiendas (SMS) CISMS – Surtido

DECLARE	@STORE INT = (select storenumber from Store  where StoreType = 1)
DECLARE	@OrderNumber INT =  35609616

SELECT	COUNT(*) AS 'Conteo',OrderNumber,PO.RetailStore
INTO	#PO	
FROM	Mobile.PickingOrder PO WITH(NOLOCK)
	WHERE	PO.[IF] = '270' AND RetailStore <> @STORE 
			AND PO.CreatedDateTime >= '2022-06-01'
			AND PO.OrderNumber=@OrderNumber
GROUP BY PO.OrderNumber,RetailStore
HAVING	COUNT(OrderNumber) = 3 



SELECT TOP 2 PO.TranNumber,PO.OrderID,PO.TranDate,PO.CreatedDateTime
INTO	#TRAN
FROM	Mobile.PickingOrder po  WITH(NOLOCK)
		INNER JOIN #PO
			ON PO.OrderNumber=#PO.OrderNumber
ORDER BY 4 DESC

SELECT	'ANTES',* 
FROM	Mobile.PickingOrder PO WITH(NOLOCK)
		INNER JOIN Mobile.PickingOrderDetail POD WITH(NOLOCK)
			ON POD.OrderID=PO.OrderID
		LEFT JOIN Mobile.PickingLog PL WITH(NOLOCK)
			ON PL.OrderID=PO.OrderID AND PL.OrderID=POD.OrderID
WHERE	PO.OrderNumber=@OrderNumber  



DELETE mobile.PickingTicket where OrderID IN (select OrderID from #TRAN NOLOCK)
DELETE Mobile.PickingTicketDetail where TicketID IN ( select ticketID from mobile.PickingTicket where OrderID IN (select OrderID from #TRAN NOLOCK))-- where OrderID IN (select OrderID from #TRAN NOLOCK)
delete   Mobile.PickingOrderDetailException  where OrderID IN (select OrderID from #TRAN NOLOCK)
delete   Mobile.PickingOrderDetail  where OrderID IN (select OrderID from #TRAN NOLOCK)

DELETE	POD
FROM	Mobile.PickingOrder PO 
		INNER JOIN #TRAN T
			ON PO.TranNumber=T.TranNumber AND PO.OrderID = T.OrderID
		LEFT JOIN Mobile.PickingOrderDetail POD
			ON POD.OrderID=T.OrderID AND POD.OrderID=PO.OrderID
WHERE	PO.OrderNumber=@OrderNumber


DELETE	PO
FROM	Mobile.PickingOrder PO INNER JOIN #TRAN T
			ON PO.TranNumber=T.TranNumber AND PO.OrderID = T.OrderID
WHERE	PO.OrderNumber=@OrderNumber

DELETE Mobile.PickingLog  where Orderid IN (select OrderID from #TRAN NOLOCK)

SELECT	'DESPUES',* 
FROM	Mobile.PickingOrder PO WITH(NOLOCK)
		INNER JOIN Mobile.PickingOrderDetail POD WITH(NOLOCK)
			ON POD.OrderID=PO.OrderID
		LEFT JOIN Mobile.PickingLog PL WITH(NOLOCK)
			ON PL.OrderID=PO.OrderID AND PL.OrderID=POD.OrderID
WHERE	PO.OrderNumber=@OrderNumber 


DROP TABLE #PO
DROP TABLE #TRAN

Depurar unicamente una orden con registro duplicado de años anteriores de la tabla de surtido, favor de usar el siguiente delete

declare @orden INT = 732477
declare @orderID INT
Select   @orderID = OrderID  from Mobile.PickingOrder  where ordernumber =@orden and OrderStatus = 4 
--Select @orderID
DELETE mobile.PickingTicket where OrderID IN (@orderID)
DELETE Mobile.PickingTicketDetail where TicketID IN ( select ticketID from mobile.PickingTicket where OrderID IN (@orderID))-- where OrderID IN (select OrderID from #TRAN NOLOCK)
DELETE   Mobile.PickingOrderDetailException  where OrderID IN (@orderID)
DELETE   Mobile.PickingOrderDetail  where OrderID IN (@orderID)
DELETE Mobile.PickingOrderDetail where OrderID = @orderID
DELETE	PO
FROM	Mobile.PickingOrder PO
WHERE	PO.OrderNumber=@orden  AND OrderID = @orderID

DELETE Mobile.PickingLog  where Orderid IN (@orderID)

Loading

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *