Skip to content

Softshop > MFe: Vendas duplicadas ao gerar MFe

Software: SOFTSHOP | Grupo: ALTERACOES

Solução

Esse script tem como objetivo visualizar as vendas que estão ficando duplicadas a segunda venda que fica com nome vendas_log = true é feito a captura dos dados da vendas_log e com isso coloca na venda anterior, esses casos ocorrem sempre quando é venda vinda da MFe quando se usa pre-venda.

1 - Criar procedure no SQL Server segue abaixo

CREATE PROCEDURE [sp_UpdateVendaMFeVendaLog]

AS

BEGIN

-- Verificar se a tabela _log_mfe_venda_log existe; se não, criar

IF NOT EXISTS (

SELECT *

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_NAME = '_log_mfe_venda_log'

)

BEGIN

CREATE TABLE _log_mfe_venda_log (

LogID INT PRIMARY KEY IDENTITY(1, 1)

,UpdateBloquetes INT

,UpdateVenda1 INT

,UpdateVenda2 INT

,DataHora DATETIME

);

END

DECLARE @RowsAffected_1 INT

,@RowsAffected_2 INT

,@RowsAffected_3 INT

--[Bloquetes] Altera pagamento da nova venda para a anterior

UPDATE b

SET b.[Código da Venda] = v1.[Código da Venda]

FROM Bloquetes AS b

INNER JOIN [Cadastro de Vendas] AS v2 ON b.[Código da Venda] = v2.[Código da Venda]

INNER JOIN [Cadastro de Vendas] AS v1 ON v1.Lancamento_DataHora = v2.Lancamento_DataHora

WHERE v2.Obs LIKE '%VendaLog=True%'

AND (

v1.Obs NOT LIKE '%VendaLog=True%'

OR v1.Obs IS NULL

)

AND v1.NFCe_Chave IS NULL

AND v1.SAT_EquipamentoSerie IS NULL

-- DATA CRIAÇÃO CORREÇÃO

AND v1.[Data da Venda] >= CONVERT(DATE, '14/09/2023');

SET @RowsAffected_1 = @@ROWCOUNT

-- [Cadastro de Vendas] UPDATE Atualiza as vendas com os dados da nova venda que veio do PDV duplicada

UPDATE A

SET A.TEFCV = B.TEFCV

,A.SerieECF = B.SerieECF

,A.DtFatura = B.DtFatura

,A.NFCe_NRO = B.NFCe_NRO

,A.NFCe_Chave = B.NFCe_Chave

,A.NFCe_Data = B.NFCe_Data

,A.SAT_EquipamentoSerie = B.SAT_EquipamentoSerie

,A.SAT_AssinaturaQRCode = B.SAT_AssinaturaQRCode

FROM [Cadastro de Vendas] A

INNER JOIN (

SELECT *

FROM [Cadastro de Vendas]

WHERE Obs LIKE '%VendaLog=True%'

) B ON A.Lancamento_DataHora = B.Lancamento_DataHora

WHERE (

A.Obs NOT LIKE '%VendaLog=True%'

OR A.Obs IS NULL

)

AND A.Lancamento_DataHora IN (

SELECT Lancamento_DataHora

FROM [Cadastro de Vendas]

GROUP BY Lancamento_DataHora

HAVING COUNT(*) > 1

AND A.NFCe_Chave IS NULL

AND A.SAT_EquipamentoSerie IS NULL

AND A.[Data da Venda] >= CONVERT(DATE, '14/09/2023') -- DATA CRIAÇÃO CORREÇÃO

);

SET @RowsAffected_2 = @@ROWCOUNT

-- [Cadastro de Vendas] Atualiza venda vinda do PDV para não exibir nos relatorio

IF EXISTS (

SELECT 1 -- HABILITAR UPDATE NULL LOJA_ORIGEM

FROM sys.check_constraints

WHERE name = 'DF_CadastroDeVendas_FN_VerificarSeLojaExiste'

AND parent_object_id = OBJECT_ID('[Cadastro de Vendas]')

)

BEGIN

ALTER TABLE [Cadastro de Vendas] NOCHECK CONSTRAINT DF_CadastroDeVendas_FN_VerificarSeLojaExiste;

END;

UPDATE [Cadastro de Vendas]

SET [LojaOrigem] = NULL

,[Cancelado] = 1

WHERE Obs LIKE '%VendaLog=True%'

AND Lancamento_DataHora IN (

SELECT Lancamento_DataHora

FROM [Cadastro de Vendas]

WHERE (

[Cancelado] = 0

OR [LojaOrigem] NOT LIKE ''

)

AND [Data da Venda] >= CONVERT(DATE, '14/09/2023') -- DATA CRIAÇÃO CORREÇÃO

GROUP BY Lancamento_DataHora

HAVING COUNT(*) > 1

);

IF EXISTS (

SELECT 1 -- DESATIVAR UPDATE NULL LOJA_ORIGEM

FROM sys.check_constraints

WHERE name = 'DF_CadastroDeVendas_FN_VerificarSeLojaExiste'

AND parent_object_id = OBJECT_ID('[Cadastro de Vendas]')

)

BEGIN

ALTER TABLE [Cadastro de Vendas] CHECK CONSTRAINT DF_CadastroDeVendas_FN_VerificarSeLojaExiste;

END;

SET @RowsAffected_3 = @@ROWCOUNT

INSERT INTO _log_mfe_venda_log (

UpdateBloquetes

,UpdateVenda1

,UpdateVenda2

,DataHora

)

VALUES (

@RowsAffected_1

,@RowsAffected_2

,@RowsAffected_3

,GETDATE()

)

END

SELECT *

FROM _log_mfe_venda_log

GO

2 - Acessar a procedure [Integrar_EstoqueAtualizar] e altarar ela para inserir no final:

ALTER PROCEDURE [dbo].[Integrar_EstoqueAtualizar]
AS
UPDATE [Cadastro de mercadoriasLojas]
SET [Cadastro de mercadoriasLojas].Estoque =
[MercLoja].[entradas]-
[MercLoja].[saídas]+
[MercLoja].[entmov]+
[MercLoja].[SaíMov]+
[MercLoja].[devolucao]-
[MercLoja].[Requisicao] -
ISNULL((SELECT SUM(Producao_MovimentoVendas.[SomaDeQuantidade])
FROM Producao_MovimentoVendas
WHERE Producao_MovimentoVendas.[Código da Composição] = MercLoja.[Código da MercadoriaLoja]),0)-
[MercLoja].EstoqueReservado
FROM [Cadastro de mercadoriasLojas] MercLoja;
EXEC sp_UpdateVendaMFeVendaLog;
GO

OBS: Alterar inserir apenas essa linha destacada em vermelho


Tags: vendas, duplicadas, mfe, vendas log

Documentação de Testes