Neste artigo vou comentar sobre algumas pequenas e importantes mudanças que ocorreram no roteiro de homologação do PAF-ECF, a partir da sua versão 1.04. No vídeo do curso do PAF-ECF na parte referente ao DAV, foi mostrada a forma usada na versão 1.03 do roteiro de homologação.
Vamos lá:
No ITEM 2, subitem C, pede que o CNPJ do estabelecimento emitente, seja devidamente consistido. E foi adicionado mais um tópico que pede para imprimir os dados, denominação ou nome, e o CNPJ ou CPF do destinatário, também devidamente consistido.
Para realizar esta consistência e bem simples, haja vista a grande disponibilidade de funções que podem ser encontradas na internet. Segue abaixo um destes modelos:
function VerificaCNPJ(fCNPJ: String): Boolean;
var
d1, d4, xx, nCount, fator, resto, digito1, digito2: Integer;
Check: String;
begin
d1 := 0;
d4 := 0;
xx := 1;
for nCount := 1 to Length(fCNPJ) - 2 do
begin
if Pos(Copy(fCNPJ, nCount, 1), '/-.') = 0 then
begin
if xx < 5 then
begin
fator := 6 - xx;
end
else
begin
fator := 14 - xx;
end;
d1 := d1 + StrToInt(Copy(fCNPJ, nCount, 1)) * fator;
if xx < 6 then
begin
fator := 7 - xx;
end
else
begin
fator := 15 - xx;
end;
d4 := d4 + StrToInt(Copy(fCNPJ, nCount, 1)) * fator;
xx := xx + 1;
end;
end;
resto := (d1 mod 11);
if resto < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - resto;
end;
d4 := d4 + 2 * digito1;
resto := (d4 mod 11);
if resto < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - resto;
end;
Check := IntToStr(digito1) + IntToStr(digito2);
if Check <> Copy(fCNPJ, succ(Length(fCNPJ) - 2), 2) then
begin
Result := False;
end
else
begin
Result := True;
end;
end;
function VerificaCpf(fCPF: String): Boolean;
var
d1, d4, xx, nCount, resto, digito1, digito2: Integer;
Check: String;
begin
d1 := 0;
d4 := 0;
xx := 1;
for nCount := 1 to Length(fCPF) - 2 do
begin
if Pos(Copy(fCPF, nCount, 1), '/-.') = 0 then
begin
d1 := d1 + (11 - xx) * StrToInt(Copy(fCPF, nCount, 1));
d4 := d4 + (12 - xx) * StrToInt(Copy(fCPF, nCount, 1));
xx := xx + 1;
end;
end;
resto := (d1 mod 11);
if resto < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - resto;
end;
d4 := d4 + 2 * digito1;
resto := (d4 mod 11);
if resto < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - resto;
end;
Check := IntToStr(digito1) + IntToStr(digito2);
if Check <> Copy(fCPF, succ(Length(fCPF) - 2), 2) then
begin
Result := False;
end
else
begin
Result := True;
end;
end;
Já no ITEM 5, foram adicionadas as principais mudanças.
No item 5.1 solicita a gravação do CCF no pedido/orçamento que esta originando o DAV. Para esclarecer, CCF (Contador de Cupom Fiscal), é um dos diversos contadores que o ECF possui como, por exemplo, COO, CRZ, CRO, etc...
No item 5.2, é solicitado que o aplicativo disponha de opção para mesclar os DAV’s, ou seja, suponhamos que o cliente foi ao estabelecimento e realizou um orçamento em um determinado dia. Em outro dia, o mesmo cliente retorna e solicita um segundo orçamento contendo produtos diferentes do primeiro. Após isso, este cliente resolve efetivar a compra de alguns produtos contidos nestes orçamentos.
Neste caso o aplicativo deverá fornecer opção para que o vendedor selecione itens dos dois orçamentos, conforme solicitação do cliente e gere um terceiro orçamento/pedido.
Eu vejo para isso uma solução bem simples, que seria a criação de uma tela no aplicativo onde seria efetuado um filtro para selecionar os orçamentos realizados pelo cliente em uma determinada faixa de período, onde no primeiro grid seriam exibidos os orçamentos encontrados, e num outro grid, seriam exibidos os itens do respectivo orçamento.
Ainda nesta tela adiciona-se um componente ClientDataSet, para que seja criado uma tabela temporária apenas para armazenar os dados do item selecionado em cada orçamento.
Após confirmar os dados, o aplicativo apenas criaria o pedido a partir dos dados do cliente que já figura nos orçamentos anteriores, adicionando os itens selecionado no ClientDataSet.
Quaisquer dúvidas fiquem a vontade para postarem as perguntas.
Um abraço!