Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3517 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Pessoal, estou com um problema estranho...vejam o meu código

procedure DAVEmitidos(DtInicial, DtFinal: TDateTime; Arquivo, Abrir: Boolean);

Var slArquivo: TStringList;

ListaDAV: TObjectList;

i, Cod_Rel_Paf:integer;

R06: TR06VO;

D2: TRegistroD2;

Impressora: TImpressoraVO;

ArqNom: String;

begin

//

Try

//

ListaDAV := TDAVController.ListarDAVPeriodo(DtInicial, DtFinal);

//

If Assigned(ListaDAV) Then

Begin

//

If (Arquivo) Then

Begin

// registro D1

// preencher header do arquivo

PreencherHeader(DMEcf.ACBrPAF.PAF_D.RegistroD1);

// registro D2

DMEcf.ACBrPAF.AssinarArquivo := False;

DMEcf.ACBrPAF.PAF_D.RegistroD2.Clear;

//dados da impressora

Impressora := TImpressoraController.CarregarImpressora(1);

//

For i := 0 To ListaDAV.Count - 1 Do

Begin

//

D2 := DMEcf.ACBrPAF.PAF_D.RegistroD2.New;

//

D2.RegistroValido := TDAVController.VerificarHASH(TDAVVO(ListaDAV.Items));

//

D2.NUM_FAB := Impressora.Serie;

D2.MF_ADICIONAL := Impressora.MFD;

D2.TIPO_ECF := Impressora.Tipo;

D2.MARCA_ECF := Impressora.Marca;

D2.MODELO_ECF := Impressora.Modelo;

D2.NUMERO_ECF := Impressora.NUMERO_ECF;

D2.COO := IntToStr(TDAVVO(ListaDAV.Items).COO);

D2.NUM_DAV := Format('%.13d', [TDAVVO(ListaDAV.Items).Id]);

D2.DT_DAV := TDAVVO(ListaDAV.Items).DT_EMISSAO; // Verificar

D2.TIT_DAV := Impressora.DAV_NOME;

D2.VLT_DAV := TDAVVO(ListaDAV.Items).VLR_TOTAL;

//

End;

//

ArqNom := ExtractFilePath(Application.ExeName) + 'Arquivos\DAVEmitidos.txt';

DMEcf.ACBrPAF.SaveFileTXT_D('DAVEmitidos.txt');

DMEcf.Assinar(ArqNom, true);

if Abrir then

Abrir_Arq( ArqNom );

//

End

Else

Begin

//

Try

//

slArquivo := TStringList.Create;

//

slArquivo.Add(Replicate('=', DMEcf.ECF.Colunas));

slArquivo.Add(Centraliza('DAV EMITIDOS', DMEcf.ECF.Colunas));

slArquivo.Add(Centraliza('PERIODO: ' + DateToStr(DtInicial) + ' A ' + DateToStr(DtFinal), DMEcf.ECF.Colunas));

slArquivo.Add(Replicate('=', DMEcf.ECF.Colunas));

// ...05...10...15...20...25...30...35...40...45...

slArquivo.Add('NUMERO DT EMIS TITULO IMP COO VLR');

// 0000000001 01/01/01 ORCAMENTO 0001

slArquivo.Add(Replicate('=', DMEcf.ECF.Colunas));

//

For i := 0 To ListaDAV.Count - 1 Do

slArquivo.Add(Format('%.10d %8s %-7s %5s %5s %7s',

[TDAVVO(ListaDAV.Items).ID,

FormatDateTime('dd/mm/yy', TDAVVO(ListaDAV.Items).DT_EMISSAO),

'ORÇAMENT',

FormatFloat('###0', TDAVVO(ListaDAV.Items).COO_IMP),

FormatFloat('###0', TDAVVO(ListaDAV.Items).COO),

FormatFloat('#,##0.00', TDAVVO(ListaDAV.Items).VLR_TOTAL)]));

//

slArquivo.Add(Replicate('=', DMEcf.ECF.Colunas));

if DMECF.VCODIGO_REL_GER_PAF <> '' then

Cod_Rel_Paf := Strtoint(Trim(DMECF.VCODIGO_REL_GER_PAF))

else

Cod_Rel_Paf := 2;

DMEcf.ECF.RelatorioGerencial(slArquivo, 1, Cod_Rel_Paf);

{ TODO : Está correta essa implementação para gravação do registro R06? }

Try

//

R06 := TR06VO.Create;

//

R06.USUARIO := 1;

R06.COO := StrToInt(DMEcf.ECF.NumCOO);

R06.GNF := StrToInt(DMEcf.ECF.NumGNF);

R06.GRG := StrToInt(DMEcf.ECF.NumGRG);

R06.CDC := StrToInt(DMEcf.ECF.NumCDC);

R06.NUM_FABRICACAO := DMEcf.ECF.NumSerie;

R06.MF_ADICIONAL := DMEcf.ECF.MFAdicional;

R06.MODELO := DMEcf.ModeloECF;

R06.NUM_ECF := DMEcf.NumeroECF;

R06.DATA := DMEcf.ECF.DataHora;

R06.Denominacao := 'RG';

R06.DataEmissao := FormatDateTime('yyyy-mm-dd', DMEcf.ECF.DataHora);

R06.HoraEmissao := FormatDateTime('hh:nn:ss', DMEcf.ECF.DataHora);

//

TRegistroRController.GravaR06(R06);

Except

//

On E:Exception Do

MessageDlg(E.Message, mtError, [mbOk], 0);

//

End;

//

Finally

//

slArquivo.Free;

slArquivo := Nil;

//

End;

//

End;

//

End

//

Else

Application.MessageBox('Não existem DAV para o período informado.', 'Informação do Sistema', MB_OK + MB_ICONINFORMATION);

//

Finally

//

ListaDAV.Free;

ListaDAV := Nil;

//

End;

//

end;

*/*/*/*/*/*/*/*/*/*/

Vejam que para o DAVs por arquivo esta aparentemente tudo certo...mas o arquivo esta sendo gerado faltando dados...vejam a tela do Validador..esta me dizendo que esta faltando dados...percebi que o valor esta meio fora de lugar..mas não achei o pq disso

post-1520-13548988000487.png

Postado

Pessoal Encontrei o problema mas não entendi como poderei resolver, pois olhando o código do ACBR me parece que esta tudo OK.

O problema me parece que esta sendo gerado na coluna "D2.VLT_DAV" que esta sendo gerada sem o tamanho correto que seria de 8 Caracteres, ou seja,

nao esta completando com espaços a esquerda.

Alguém passou pelo mesmo problema?

post-1520-13548988000536.png

Postado

Achei os erros...peço ao Pessoal do ACBR Para dar uma olhada pfv

Na Unit ACBrPAF_D_Class.

function TPAF_D.WriteRegistroD9: String;

begin

if Assigned(FRegistroD9) then

begin

with FRegistroD9 do

begin

Check(funChecaCNPJ(FRegistroD1.CNPJ), '(D9) TOTALIZAÇÃO: O CNPJ "%s" digitado é inválido!', [FRegistroD1.CNPJ]);

Check(funChecaIE(FRegistroD1.IE, FRegistroD1.UF), '(D9) TOTALIZAÇÃO: A Inscrição Estadual "%s" digitada é inválida!', [FRegistroD1.IE]);

///

Result := LFill('D9') +

LFill(FRegistroD1.CNPJ, 14) +

RFill(FRegistroD1.IE, 14) +

LFill(TOT_REG_D2, 6) + AQUI ESTAVA LFill(TOT_REG_D2, 6, 0)

LFill(TOT_REG_D3, 6) + AQUI ESTAVA LFill(TOT_REG_D2, 6, 0)

sLineBreak;

end;

end;

end;

Passando AQUI ESTAVA LFill(TOT_REG_D2, 6, 0) ele entra no LFill para Numeric.

E na Função abaixo ja deixei como eu coloquei

function TPAF_D.WriteRegistroD2: String;

var

intFor: integer;

strRegistroD2: String;

strRegistroD3: String;

begin

strRegistroD2 := '';

strRegistroD3 := '';

if Assigned(FRegistroD2) then

begin

FRegistroD2.Sort(@OrdenarD2);

for intFor := 0 to FRegistroD2.Count - 1 do

begin

with FRegistroD2.Items[intFor] do

begin

Check(funChecaCNPJ(FRegistroD1.CNPJ), '(D2) DAV EMITIDOS: O CNPJ "%s" digitado é inválido!', [FRegistroD1.CNPJ]);

strRegistroD2 := strRegistroD2 + LFill('D2') +

LFill(FRegistroD1.CNPJ, 14) +

RFill(NUM_FAB, 20) +

RFill(MF_ADICIONAL, 1) +

RFill(TIPO_ECF, 7) +

RFill(MARCA_ECF, 20) +

RFill(MODELO_ECF, 20, ifThen(RegistroValido, ' ', '?')) +

LFill(COO, 6) +

RFill(NUM_DAV, 13) +

LFill(DT_DAV, 'yyyymmdd') +

RFill(TIT_DAV, 30) +

LFill( FormatCurr('###,##0.00', VLT_DAV), 8, '0') + //LFill(VLT_DAV, 8, 2) +

LFill(COO_DFV, 6) +

LFill(NUMERO_ECF, 3) +

RFill(NOME_CLIENTE, 40) +

LFill(CPF_CNPJ, 14) +

sLineBreak;

end;

// Registro FILHOS

strRegistroD3 := strRegistroD3 +

WriteRegistroD3( FRegistroD2.Items[intFor] );

FRegistroD9.TOT_REG_D2 := FRegistroD9.TOT_REG_D2 + 1;

FRegistroD9.TOT_REG := FRegistroD9.TOT_REG + 1;

end;

Result := strRegistroD2 + strRegistroD3;

end;

end;

Acho que assim fica correto...ou não?

  • Consultores
Postado

O código aqui está incorreto. Não se deve usar o FormatCurr dentro do código do ACBrPAF_D_CLASS deste jeito.

É exatamente para isso que serve o LFill.

LFill( FormatCurr('###,##0.00', VLT_DAV), 8, '0') + //LFill(VLT_DAV, 8, 2) +

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

Tem algo errado ai, porque o ACBrPAF não gera valores numericos com "," e ".", mas sim formatados como manda a ER, você gerou esse arquivo pelo ACBrPAF mesmo?

Essa formatação que você adicionou vai contra os padrões, acabei de gerar diversos arquivos aqui com o ACBrPAF e está tudo OK, tudo dentro da ER, sua versão do ACBr está atualizada?

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Apaguei os meus arquivos do ACBR e mandei gerar novamente...deu o mesmo problema.

Nas Linhas D2 No campo VLT_DAV ele esta colocando Alinhado a esquerda sem o tamanho correto que seria 8 Caracteres

Na Linha D9 Ele esta gerando com 2 casas decimais ..e deveria ser um inteiro com 6 Caracteres.

function TPAF_D.WriteRegistroD9: String;

begin

if Assigned(FRegistroD9) then

begin

with FRegistroD9 do

begin

Check(funChecaCNPJ(FRegistroD1.CNPJ), '(D9) TOTALIZAÇÃO: O CNPJ "%s" digitado é inválido!', [FRegistroD1.CNPJ]);

Check(funChecaIE(FRegistroD1.IE, FRegistroD1.UF), '(D9) TOTALIZAÇÃO: A Inscrição Estadual "%s" digitada é inválida!', [FRegistroD1.IE]);

///

Result := LFill('D9') +

LFill(FRegistroD1.CNPJ, 14) +

RFill(FRegistroD1.IE, 14) +

LFill(TOT_REG_D2, 6) + // Aqui era assim LFill(TOT_REG_D2, 6, 0)

LFill(TOT_REG_D3, 6) +

sLineBreak;

end;

end;

end;

Mas na função do WriteRegistroD2 eu nao consegui corrigir sem fazer a formatação....o que poderia ser?

  • Moderadores
Postado

Como eu te disse, está tudo funcionando corretamente, verifique como o seu software está enviando a informação ao componente, segue um exemplo de como preencher corretamente o componente para gerar o arquivo de DAVs emitidos:



var
D2: TRegistroD2;
I, X: integer;
begin
// registro D1
PreencherHeader(ACBrPAF.PAF_D.RegistroD1); // preencher header do arquivo

// registro D2 (Corpo do DAV)
ACBrPAF.PAF_D.RegistroD2.Clear;
for I := 1 to 15 do
begin
D2:=ACBrPAF.PAF_D.RegistroD2.New;
D2.NUM_FAB := NUM_FAB;
D2.MF_ADICIONAL := MF_ADICIONAL;
D2.TIPO_ECF := TIPO_ECF;
D2.MARCA_ECF := MARCA_ECF;
D2.MODELO_ECF := MODELO_ECF;
D2.COO := IntToStr(I * QualquerNumero);
D2.NUM_DAV := IntToStr(I * QualquerNumero);
D2.DT_DAV := Date - QualquerNumero;
D2.TIT_DAV := 'Pedido';
D2.VLT_DAV := GerarDados('I', 2);
D2.COO_DFV := '0';
D2.NUMERO_ECF := '1';
D2.NOME_CLIENTE := 'NOME CLIENTE';
D2.CPF_CNPJ := '12345678921';

D2.RegistroValido := True; // diz quando o registro foi modificado no banco

// Registro D3 (Itens do DAV)
for X := 1 to 5 do
begin
with D2.RegistroD3.New do
begin
DT_INCLUSAO := DATE;
NUM_ITEM := X;
COD_ITEM := '10';
DESC_ITEM := 'descricao do item';
QTDE_ITEM := 10.00;
UNI_ITEM := 'UN';
VL_UNIT := 1.00;
VL_DESCTO := 0.00;
VL_ACRES := 0.00;
VL_TOTAL := 10.00;
SIT_TRIB := 'T'; // T, S, I, N, F
ALIQ := 7.00; // SOMENTE QUANDO T E S
IND_CANC := 'N';
DEC_QTDE_ITEM := 2;
DEC_VL_UNIT := 2;

RegistroValido := True;
end;
end;

end;
ACBrPAF.SaveFileTXT_D('PAF_D.txt');
end;

[/code]

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Consultores
Postado

Há uma boa possibilidade de você estar alterando os parâmetros do sistema para separador de decimal (DecimalSeparator) e formato de datas e isso estar influenciando na escrita do componente.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Então...eu imaginei que poderia ser isso também, mas olhei nos parâmetros do Windows e esta tudo normal.

E ainda esta saindo incorreto no meu sistema estes arquivos onde tem valores...como por exemplo o DAVs por Período.

Estou executando passo a passo para dar uma verificada onde ele(Meu sistema) pode estar interferindo na formatação correta.

Mas obrigado pela ajuda.

  • Consultores
Postado

Se em algum lugar você usar o DecimalSeparator, então ele altera a formatação do sistema.

Talvez por exemplo ao montar um Select em SQL.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • 2 anos depois...
Postado

Quando estou gerando um o campo D3 ele cria um novo D2 com valores zerados

ex: FDataModule.ACBrPAF.PAF_D.RegistroD2.New.RegistroD3.New

 

txt >>> D200000000000000                                                                    000000   

  • Consultores
Postado

Quando estou gerando um o campo D3 ele cria um novo D2 com valores zerados

ex: FDataModule.ACBrPAF.PAF_D.RegistroD2.New.RegistroD3.New

 

txt >>> D200000000000000                                                                    000000   

FDataModule.ACBrPAF.PAF_D.RegistroD2.New.RegistroD3.New

 

New é uma function que retorna um novo registro. Se você executar ela toda vez, vai criar um registro toda vez. Nessa única linha aí são criados dois registros, um D2 e outro D3.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 3517 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...