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