Descrição:  No módulo de faturamento, ao enviar para a Sefaz uma nota de devolução com a referencia sendo feita por chave avulsa, apresenta a seguinte rejeição:

Error: 50000 Message: 

CHAVE NFE: 35220559418806003243550010003250981619463211
DATA RECEBIMENTO: 20220519 17:54:47.000
STATUS: 225
MOTIVO: RejeiCAo: Falha no Schema XML do lote de NFe
 Proc: LX_RECEBIMENTO_PROTOCOLO_NFE_SEFAZ

Verificando o XML pelo validador Validador NF-e - TecnoSpeed, consta a seguinte mensagem:

Falha de Esquema: O elemento pai: 'impostoDevol' não estava esperando o elemento 'pDevol'. O elemento esperado é: 'IPI'.

Causa​:  Este incidente ocorre, pois a Tag <pDevol> aparece em duplicidade no XML da nota fiscal

Ao referenciar uma chave avulsa, ou seja, a nota de origem sendo vinculada na tabela FATURAMENTO_NF_AVULSA_REFERENCIADA, o valor da tag <pDevol> deve ser 0.00. Já quando a nota de origem constar no sistema, o valor da tag deverá ser calculado com base nas informações da tabela ENTRADAS_ITEM e FATURAMENTO_ENTRADA_DEVOLUCAO. 

Exemplo de como aparece a duplicidade no XML:

<impostoDevol>
        <pDevol>0.00</pDevol>
        <pDevol>38.00</pDevol>
        <IPI>
          <vIPIDevol>0.00</vIPIDevol>
        </IPI>
</impostoDevol>

Solução: Para correção desse incidente, realize o seguinte processo com o script a seguir, que trará como a tag esta sendo gerada:

  1. Rode cada select separadamente pra ver em quais consultas está trazendo duas vezes, o correto é trazer um resultado;

    -- ALTERAR TODOS OS WHERE, PREENCHENDO O DADO DA NOTA QUE ESTÁ COM ERRO DA TAG PDEVOL DUPLICADA 
    --(ATÉ NA ONDE PEDE NOTA DE ENTRADA OU SAIDA, INFORMAR A NOTA COM ERRO NÃO A NOTA DE ORIGEM.
    
    SELECT   pDevol AS "pDevol" 
    FROM 
    ( --SELECT       CONVERT(NUMERIC(3,2),(B.QTDE_DEVOLVIDA/C.QTDE_ITEM))*100 AS "pDevol" --#62# --#88#
    SELECT       CONVERT(NUMERIC(5,2),(SUM(B.QTDE_DEVOLVIDA)/SUM(C.QTDE_ITEM)))*100 AS "pDevol" --#90#
    FROM   W_IMPRESSAO_NFE_ITENS  AS A
    JOIN FATURAMENTO_ENTRADA_DEVOLUCAO AS B
    ON     A.NF=B.NF_SAIDA
    AND    A.SERIE_NF=B.SERIE_NF
    AND    A.FILIAL =B.FILIAL
    AND    A.ITEM_IMPRESSAO=B.ITEM_IMPRESSAO_SAIDA
    AND    A.SUB_ITEM_TAMANHO=B.SUB_ITEM_SAIDA
    JOIN ENTRADAS_ITEM AS C
    ON     C.NF_ENTRADA=B.NF_ENTRADA
    AND    C.SERIE_NF_ENTRADA=B.SERIE_NF_ENTRADA
    AND    C.NOME_CLIFOR=B.NOME_CLIFOR
    AND    C.ITEM_IMPRESSAO=B.ITEM_IMPRESSAO_ENTRADA
    AND    C.SUB_ITEM_TAMANHO=B.SUB_ITEM_ENTRADA
    WHERE  A.NOME_CLIFOR = ''      
    AND    A.ITEM_IMPRESSAO = ''
    AND    A.SUB_ITEM_TAMANHO = ''
    AND    A.NF = ''
    AND    A.SERIE_NF =''
    
    UNION
    
    SELECT CONVERT(NUMERIC(5,2),(SUM(B.QTDE_DEVOLVIDA)/SUM(B.QTDE_ITEM))*100) AS "pDevol" --#70#
    FROM   W_IMPRESSAO_NFE_ITENS  AS A
    JOIN	(	SELECT	
    CASE WHEN Isnull(FT.CODIGO_CLIENTE_VAREJO, '') = '' THEN FED.NOME_CLIFOR
    ELSE CV.CLIENTE_VAREJO 
    END AS NOME_CLIFOR 
    --#118#
    ,FED.NF_ENTRADA , FED.SERIE_NF_ENTRADA , FED.ITEM_IMPRESSAO_ENTRADA , FED.SUB_ITEM_ENTRADA,SUM(FED.QTDE_DEVOLVIDA) AS QTDE_DEVOLVIDA ,SUM(FI.QTDE_ITEM) AS QTDE_ITEM 
    FROM	FATURAMENTO_ENTRADA_DEVOLUCAO AS FED
    JOIN FATURAMENTO_ITEM AS FI
    ON	FED.FILIAL = FI.FILIAL 
    AND	FED.NF_SAIDA = FI.NF_SAIDA 
    AND	FED.SERIE_NF= FI.SERIE_NF 
    AND	FED.SUB_ITEM_SAIDA = FI.SUB_ITEM_TAMANHO 
    AND	FED.ITEM_IMPRESSAO_SAIDA = FI.ITEM_IMPRESSAO 
    --#118#
    JOIN FATURAMENTO AS FT
    ON	FT.NF_SAIDA = FI.NF_SAIDA 
    AND FT.SERIE_NF = FI.SERIE_NF 
    AND FT.FILIAL  = FI.FILIAL 
    LEFT JOIN CLIENTES_VAREJO CV
    ON CV.CODIGO_CLIENTE = FT.CODIGO_CLIENTE_VAREJO
    --#118#
    GROUP BY FED.NOME_CLIFOR ,FED.NF_ENTRADA , FED.SERIE_NF_ENTRADA , FED.ITEM_IMPRESSAO_ENTRADA , FED.SUB_ITEM_ENTRADA,CV.CLIENTE_VAREJO,FT.CODIGO_CLIENTE_VAREJO ) AS B
    /*#39#*/
    ON     A.NF=B.NF_ENTRADA
    AND    A.SERIE_NF=B.SERIE_NF_ENTRADA
    AND    A.NOME_CLIFOR =B.NOME_CLIFOR
    AND    A.ITEM_IMPRESSAO=B.ITEM_IMPRESSAO_ENTRADA
    AND    A.SUB_ITEM_TAMANHO=B.SUB_ITEM_ENTRADA
    WHERE A.NOME_CLIFOR = ''
    AND    A.ITEM_IMPRESSAO = ''
    AND    A.SUB_ITEM_TAMANHO = ''
    AND    A.NF = ''
    AND    A.SERIE_NF = ''
    --and  IPI > 0 /*#27#*/
    															
    															
    															UNION
    															--#88#
    															SELECT	0.00 AS "pDevol"
    															FROM	ENTRADAS_NF_AVULSA_REFERENCIADA
    															WHERE	NF_ENTRADA=''
    															AND		SERIE_NF_ENTRADA = ''
    															AND		NOME_CLIFOR = ''
    															UNION
    															--#89#
    															SELECT	0.00 AS "pDevol"
    															FROM	FATURAMENTO_NF_AVULSA_REFERENCIADA
    															WHERE	NF_SAIDA=''
    															AND		SERIE_NF = ''
    															AND		FILIAL = '' 
    															--#88#
    															UNION
    															--#110#-Início
    															SELECT top 1 0.00 AS "pDevol"
    															FROM	FATURAMENTO_ITEM_RELACIONADO
    															WHERE	NF_SAIDA = ''
    															AND		SERIE_NF = ''
    															AND		FILIAL = '' 
    															--#110#-Fim
    															UNION
    															--#93#
    															SELECT	100.00 AS "pDevol"
    															FROM	ENTRADAS_ITEM
    																LEFT JOIN FATURAMENTO_ENTRADA_DEVOLUCAO
    																	ON     ENTRADAS_ITEM.NF_ENTRADA=FATURAMENTO_ENTRADA_DEVOLUCAO.NF_ENTRADA
    																	AND    ENTRADAS_ITEM.SERIE_NF_ENTRADA=FATURAMENTO_ENTRADA_DEVOLUCAO.SERIE_NF_ENTRADA
    																	AND    ENTRADAS_ITEM.NOME_CLIFOR=FATURAMENTO_ENTRADA_DEVOLUCAO.NOME_CLIFOR
    																	AND    ENTRADAS_ITEM.ITEM_IMPRESSAO=FATURAMENTO_ENTRADA_DEVOLUCAO.ITEM_IMPRESSAO_ENTRADA
    																	AND    ENTRADAS_ITEM.SUB_ITEM_TAMANHO=FATURAMENTO_ENTRADA_DEVOLUCAO.SUB_ITEM_ENTRADA
    															WHERE	ENTRADAS_ITEM.NF_ENTRADA=''
    															AND		ENTRADAS_ITEM.SERIE_NF_ENTRADA = ''
    															AND		ENTRADAS_ITEM.NOME_CLIFOR = ''
    															AND		ENTRADAS_ITEM.ITEM_IMPRESSAO = ''
    															AND		ENTRADAS_ITEM.SUB_ITEM_TAMANHO =''
    															AND		FATURAMENTO_ENTRADA_DEVOLUCAO.NF_ENTRADA IS NULL 
    															--AND		NFE_ITENS.CODIGO_FISCAL_OPERACAO IN ('1201','1202','1410','1411','5921','6921')
    															--#107#
    															AND     NOT EXISTS (	SELECT	top 1 *
    																					FROM	ENTRADAS_NF_AVULSA_REFERENCIADA
    																					WHERE	NF_ENTRADA=''
    																					AND		SERIE_NF_ENTRADA = ''
    																					AND		NOME_CLIFOR = '')
    															--#107#
    															--#93#
    															UNION
    															--#29#
    															--LOJA
    															--#82# Implementado o SUM
    															SELECT CONVERT(NUMERIC(5,2), (SUM(A.QTDE_ITEM)/SUM(H.QTDE_ITEM))) * 100 AS "pDevol"
    															FROM W_IMPRESSAO_NFE_ITENS A
    																INNER JOIN FILIAIS B 
    																ON A.FILIAL = B.FILIAL
    																INNER join LOJAS_VAREJO LV -- #95#
    																on B.FILIAL = LV.FILIAL 
    																INNER JOIN LOJA_VENDA_PGTO C 
    																ON A.NF = C.NUMERO_FISCAL_TROCA 
    																AND A.SERIE_NF = C.SERIE_NF_ENTRADA 
    																AND LV.CODIGO_FILIAL = C.CODIGO_FILIAL --#95#
    																INNER JOIN LOJA_VENDA D ON C.LANCAMENTO_CAIXA = D.LANCAMENTO_CAIXA 
    																AND C.CODIGO_FILIAL = D.CODIGO_FILIAL
    																CROSS APPLY (SELECT DISTINCT TRO.CODIGO_FILIAL, TRO.TICKET, 
    																TRO.CODIGO_FILIAL_ORIGEM, TRO.TICKET_ORIGEM,  TRO.DATA_VENDA_ORIGEM --#94#  
    																			 FROM LOJA_VENDA_TROCA_ORIGEM TRO 
    																			 WHERE
    																			 TRO.CODIGO_FILIAL = D.CODIGO_FILIAL 
    																			 AND TRO.TICKET = D.TICKET 
    																			 AND  TRO.DATA_VENDA = D.DATA_VENDA ) E --#84# #94#
    																INNER JOIN LOJA_VENDA F ON E.TICKET_ORIGEM = F.TICKET 
    																AND E.CODIGO_FILIAL_ORIGEM = F.CODIGO_FILIAL  
    																AND F.DATA_VENDA = E.DATA_VENDA_ORIGEM --#94#
    																INNER JOIN LOJA_VENDA_PGTO G ON F.LANCAMENTO_CAIXA = G.LANCAMENTO_CAIXA 
    																AND F.CODIGO_FILIAL = G.CODIGO_FILIAL
    																INNER JOIN LOJA_NOTA_FISCAL_ITEM H ON G.NUMERO_FISCAL_VENDA = H.NF_NUMERO 
    																AND G.SERIE_NF_SAIDA = H.SERIE_NF 
    																AND G.CODIGO_FILIAL = H.CODIGO_FILIAL
    																AND A.CODIGO_ITEM = H.CODIGO_ITEM -- #84# 
    																WHERE      A.NOME_CLIFOR = ''
    																	AND    A.ITEM_IMPRESSAO = ''
    																	AND    A.SUB_ITEM_TAMANHO = ''
    																	AND    A.NF = ''
    																	AND    A.SERIE_NF = ''
    																	AND	   A.NF = '' --#84#
    																	AND    A.SERIE_NF ='' --#84#
    																	--and  IPI > 0
    																	) IPI_DEVOLUCAO
    
    															FOR XML PATH(''), TYPE    
    													 

    1.1. Correção referente a versões anteriores a 01.24.030. Esse item é sanado na versão Service Pack 01.24 Hotfix 030 - Shopping - Linx - Rascunho - Linx Share

  2. Se a nota de origem existe no sistema e foi referenciada na aba devolução, só pode constar na tabela FATURAMENTO_ENTRADA_DEVOLUCAO;
  3. Se foi referenciada na aba OUTROS ou tem que estar na ENTRADAS_NF_AVULSA_REFERENCIADA ou FATURAMENTO_NF_AVULSA_REFERENCIADA;
    3.1 - Se tiver em mais que uma tabela, está parametrizado incorretamente;
  4. Se a nota foi referenciada na aba devolução, deletar as informações da tabela ENTRADAS_NF_AVULSA_REFERENCIADA e  FATURAMENTO_NF_AVULSA_REFERENCIADA;
  5. Se foi referenciada na aba OUTROS deletar as informações da tabela FATURAMENTO_ENTRADA_DEVOLUCAO;
  6. Utilize o select e delete abaixo:
Select * from (Preencher com a tabela)
where NF_ENTRADA = ''
AND SERIE_NF_ENTRADA = ''
AND NOME_CLIFOR = ''

Begin tran
Delete from (tabela que as informações será excluída)
where NF_ENTRADA = ''
AND SERIE_NF_ENTRADA = ''
AND NOME_CLIFOR = ''

commit