Boa noite,
tive o mesmo problema aqui na empresa, como ninguém lê as mensagens do sistema, tive que travar.
Ele testa o número nos 4 locais onde possamos lançar nota de entrada, mas deixa passar sem modelo, já que não consigo cancelar notas "só imposto", eu no teste ignorei o modelo, testei somente PN, série e número, até o momento (3 anos), não peguei nenhum PN que tenha modelos diferentes, com série e números iguais.
IF (@error = 0) AND (@sObjTyp IN ('14','16','18','20')) AND (@sTraTyp IN ('A')) AND (@SeqCode = -2) BEGIN IF @sObjTyp = 18 BEGIN SELECT @NFENUMERO = T0.Serial, @NFESERIE = ISNULL(T0.SeriesStr,''), @CodCliente = T0.CardCode FROM [dbo].[OPCH] T0 WHERE T0.DocEntry = @sKeyVal END IF @sObjTyp = 20 BEGIN SELECT @NFENUMERO = T0.Serial, @NFESERIE = ISNULL(T0.SeriesStr,''), @CodCliente = T0.CardCode FROM [dbo].[OPDN] T0 WHERE T0.DocEntry = @sKeyVal END IF @sObjTyp = 14 BEGIN SELECT @NFENUMERO = T0.Serial, @NFESERIE = ISNULL(T0.SeriesStr,''), @CodCliente = T0.CardCode FROM [dbo].[ORIN] T0 WHERE T0.DocEntry = @sKeyVal END IF @sObjTyp = 16 BEGIN SELECT @NFENUMERO = T0.Serial, @NFESERIE = ISNULL(T0.SeriesStr,''), @CodCliente = T0.CardCode FROM [dbo].[ORDN] T0 WHERE T0.DocEntry = @sKeyVal END set @sTmp = '' set @iTmp = 0 -- Deixa passar modelo vazio, SAP não tem cancelamento de nota somente imposto. -- Nota de Entrada. SELECT @iTmp = MAX(T0.DocEntry) FROM [dbo].[OPCH] T0 WHERE T0.DocEntry <> @sKeyVal and T0.CardCode = @CodCliente and ISNULL(T0.SeriesStr,'') = @NFESERIE and T0.Serial = @NFENUMERO and ISNULL(t0.model,'0') <> '0' and T0.CANCELED = 'N' and T0.SeqCode = -2 and T0.DocEntry NOT IN (SELECT T4.BaseEntry FROM ORPC T3 INNER JOIN RPC1 T4 ON T3.DocEntry = T4.DocEntry WHERE T4.BaseEntry IS NOT NULL and T4.BaseType = T0.ObjType and T3.SeqCode = 1) -- NAO ENTRA CANCELADA if ISNULL(@iTmp,0) <> 0 BEGIN set @sTmp = 'Nota Fiscal Entrada' END -- Recebimento de Mercadorias if ISNULL(@iTmp,0) = 0 BEGIN SELECT @iTmp = MAX(T0.DocEntry) FROM [dbo].[OPDN] T0 WHERE T0.DocEntry <> @sKeyVal and T0.CardCode = @CodCliente and ISNULL(T0.SeriesStr,'') = @NFESERIE and T0.Serial = @NFENUMERO and ISNULL(t0.model,'0') <> '0' and T0.CANCELED = 'N' and T0.SeqCode = -2 and T0.DocEntry NOT IN (SELECT T4.BaseEntry FROM ORPD T3 INNER JOIN RPD1 T4 ON T3.DocEntry = T4.DocEntry WHERE T4.BaseEntry IS NOT NULL and T4.BaseType = T0.ObjType and T3.SeqCode = 1) -- NAO ENTRA CANCELADA if ISNULL(@iTmp,0) <> 0 BEGIN set @sTmp = 'Recebimento de Mercadorias' END END -- Devolução Nota Fiscal Saida if ISNULL(@iTmp,0) = 0 BEGIN SELECT @iTmp = MAX(T0.DocEntry) FROM [dbo].[ORIN] T0 WHERE T0.DocEntry <> @sKeyVal and T0.CardCode = @CodCliente and ISNULL(T0.SeriesStr,'') = @NFESERIE and T0.Serial = @NFENUMERO and ISNULL(t0.model,'0') <> '0' and T0.CANCELED = 'N' and T0.SeqCode = -2 if ISNULL(@iTmp,0) <> 0 BEGIN set @sTmp = 'Dev. Nota Fiscal Saida' END END -- Devolução Entrega if ISNULL(@iTmp,0) = 0 BEGIN SELECT @iTmp = MAX(T0.DocEntry) FROM [dbo].[ORDN] T0 WHERE T0.DocEntry <> @sKeyVal and T0.CardCode = @CodCliente and ISNULL(T0.SeriesStr,'') = @NFESERIE and T0.Serial = @NFENUMERO and ISNULL(t0.model,'0') <> '0' and T0.CANCELED = 'N' and T0.SeqCode = -2 if ISNULL(@iTmp,0) <> 0 BEGIN SET @sTmp = 'Devolução Entrega' END END IF ISNULL(@sTmp,'') <> '' BEGIN SET @error=1 SET @error_message = 'TI: Documento de entrada já lançado, verifique em "' + @sTmp + '", primário = ' + LTRIM(STR(@iTmp)) END END
Espero ter ajudado
Abraço
Fabio
SAP 8.82 PL16 / SAP 9.0 PL11