Caso ocorrido na Lápis de Cor, caso não recorrente mas pode ser útil para outros casos.
Cliente entrou em contato informando referente a uma nota que precisaria estar dando entrada no sistema, só que essa teria sido emitida pelo próprio fornecedor, para que ele fizesse a devolução dos produto. Mas esse não seria uma processo correto, ela deveria emitir essa nota dentro do sistema, já que o sistema não é tratado para receber essas notas.
Como esse caso é raro mas pode acontecer, foi montado um script que irá realizar a tratativa para conseguir dar entrada nessa nota.
1° Passo: Deverá criar uma CFOP referente a nota que não irá gerar movimento no estoque.
2° Passo: Cliente deverá entrar preencher todos campos na tela de nota fiscal de entrada, copiando os dados referente a nota em que o fornecedor emitiu, e salvá-la.
Feito isso entra o processo de execução do script.
Segue o script abaixo:
Set @CodigoUsuario = -1;
set @VersaoEXE = (select VersaoEXE from versoes limit 1);
-- Código da Nota ser afetada
set @CodigoNF = 151;
-- Tipo de origem para histórico produto
set @TipoNF = 4;
-- Mundando o tipo da NF
update nf set tiponf = 3 where (nf.codigo = @CodigoNF);
update subnf set subnf.movimento = 'S' where (codigonf = @CodigoNF);
delete historicoproduto.* from historicoproduto
inner join subnf on subnf.codigo = historicoproduto.codigoorigem and historicoproduto.tipoorigem = @TipoNF
inner join nf on nf.codigo = subnf.codigonf
where (nf.codigo = @CodigoNF);
insert into historicoproduto
(
codigoproduto,
codigoestoque,
codigoorigem,
tipoorigem,
data,
DataHora,
quantidade,
Entrada,
Saida,
CustoMedioAtual,
QuantidadeAtual,
NovoCustoComercial,
NovaQuantidade,
Grade,
Seriado,
CodigoCor,
Gr01,
Gr02,
Gr03,
Gr04,
Gr05,
Gr06,
Gr07,
Gr08,
Gr09,
Gr10,
Gr11,
Gr12,
Gr13,
Gr14,
Gr15,
Gr16,
Gr17,
Gr18,
Gr19,
Gr20,
Gr21,
Gr22,
Gr23,
Gr24,
Gr25,
Gr26,
Gr27,
Gr28,
Gr29,
Gr30,
EmpPrecoCusto,
EmpCustoComercial,
EmpCustoMedio,
EmpPrecoVenda,
EmpPrecoPrazo,
EmpAtacado,
SetorPrecoCusto,
SetorCustoComercial,
SetorCustoMedio,
SetorPrecoVenda,
SetorPrecoPrazo,
SetorAtacado,
CodigoLote
)
select
(subnf.codigoproduto) as codigoproduto,
(nf.codigoestoque) as codigoestoque,
(subnf.codigo) as codigoorigem,
(@TipoNF) as tipoorigem,
(now()) as data,
(now(0)) as DataHora,
(subnf.quantidade) as quantidade,
(0) as Entrada,
(subnf.quantidade) as Saida,
(0) as CustoMedioAtual,
(0) as QuantidadeAtual,
(0) as NovoCustoComercial,
(0) as NovaQuantidade,
('Não') as Grade,
('Não') as Seriado,
(0) as CodigoCor,
(0) as Gr01,
(0) as Gr02,
(0) as Gr03,
(0) as Gr04,
(0) as Gr05,
(0) as Gr06,
(0) as Gr07,
(0) as Gr08,
(0) as Gr09,
(0) as Gr10,
(0) as Gr11,
(0) as Gr12,
(0) as Gr13,
(0) as Gr14,
(0) as Gr15,
(0) as Gr16,
(0) as Gr17,
(0) as Gr18,
(0) as Gr19,
(0) as Gr20,
(0) as Gr21,
(0) as Gr22,
(0) as Gr23,
(0) as Gr24,
(0) as Gr25,
(0) as Gr26,
(0) as Gr27,
(0) as Gr28,
(0) as Gr29,
(0) as Gr30,
(0) as EmpPrecoCusto,
(0) as EmpCustoComercial,
(0) as EmpCustoMedio,
(0) as EmpPrecoVenda,
(0) as EmpPrecoPrazo,
(0) as EmpAtacado,
(0) as SetorPrecoCusto,
(0) as SetorCustoComercial,
(0) as SetorCustoMedio,
(0) as SetorPrecoVenda,
(0) as SetorPrecoPrazo,
(0) as SetorAtacado,
(0) as CodigoLote
from nf
inner join subnf on subnf.codigonf = nf.codigo
where (nf.codigo = @CodigoNF);
Esse script irá realizar a transferência da nota fiscal de entrada para tela de nota fiscal de devolução gerando um movimento de estoque, dando saída nos determinados produtos.
Obs: Esse script poderá ser usado para outras notas, não somente para devolução.