PAF-ECF – Mesclando DAV’s para emissão de cupom fiscal

Informações sobre as mudanças do requisito VI do roteiro de homologação do PAF-ECF da versão 1.03 para 1.04 em diante.

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!

Artigos relacionados