Ir para conteúdo
  • Cadastre-se

Andre Rosa

Membros
  • Total de ítens

    283
  • Registro em

  • Última visita

Tudo que Andre Rosa postou

  1. Opa, e dá pra usar na homologação? Vcs precisaram de pinpad pra homologar o PAF-ECF? Eu nunca homologuei, não faço ideia de como seja. Obrigado!
  2. Beleza. Estranho a homologadora dizer pra não levar um pinpad... Obrigado.
  3. Olá amigos! A homologadora me disse que precisarei levar um simulador de pinpad, no dia da homologação. Vocês sabem onde posso baixar um? Obrigado!
  4. Obrigado, Regys; E, lendo o manual de certificação, achei isso: A Automação deve levar no dia da certificação os seguintes equipamentos: Micro, monitor, modem (com conexão TEF já testada), teclado, impressora fiscal, Pin Pad (SC 552) e cabos. Acho que responde minha pergunta. Obrigado!
  5. Olá amigos! Para desenvolver um sistema com o TEF, do que precisarei? Pinpad? Algum simulador? ECF? Alguém poderia me esclarecer um pouco? Muito obrigado. ~~~~~~~~~
  6. Vou concertar isso então. Só que no backup, onde essa parte está idêntica, funciona. Muito obrigado!
  7. Mas essas procedures que vc citou, em maioria, estão ainda com os valores padrão que veio no ACBr. Veja: procedure TfrmMenuFiscal.GerarRegistro60M; var wregistro60M: TRegistro60M; begin wregistro60M:=TRegistro60M.Create; wregistro60M.Emissao:=ACBrSintegra1.Registro10.DataInicial; wregistro60M.NumSerie:='000000987456'; wregistro60M.NumOrdem:=1; wregistro60M.ModeloDoc:='2D'; wregistro60M.CooInicial:=1000; wregistro60M.CooFinal:=1050; wregistro60M.CRZ:=1; wregistro60M.CRO:=1; wregistro60M.VendaBruta:=2050.35; wregistro60M.ValorGT:=10000; ACBrSintegra1.Registros60M.Add(wregistro60M); wregistro60M:=TRegistro60M.Create; wregistro60M.Emissao:=ACBrSintegra1.Registro10.DataInicial; wregistro60M.NumSerie:='000000777777'; wregistro60M.NumOrdem:=2; wregistro60M.ModeloDoc:='2D'; wregistro60M.CooInicial:=2000; wregistro60M.CooFinal:=2010; wregistro60M.CRZ:=1; wregistro60M.CRO:=1; wregistro60M.VendaBruta:=300; wregistro60M.ValorGT:=15000; ACBrSintegra1.Registros60M.Add(wregistro60M); end; e : procedure TfrmMenuFiscal.GerarRegistro60A; var wregistro60A: TRegistro60A; begin ThreadQuery.ExecuteAndWait(Self); with Query do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ECF'); Open; end; wregistro60A:=TRegistro60A.Create; wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial; wregistro60A.NumSerie:= Query.FieldByName('NUM_SERIE').AsString; wregistro60A.StAliquota:='F'; wregistro60A.Valor:=500; ACBrSintegra1.Registros60A.Add(wregistro60A); wregistro60A:=TRegistro60A.Create; wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial; wregistro60A.NumSerie:='000000987456'; wregistro60A.StAliquota:='I'; wregistro60A.Valor:=550; ACBrSintegra1.Registros60A.Add(wregistro60A); wregistro60A:=TRegistro60A.Create; wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial; wregistro60A.NumSerie:='000000987456'; wregistro60A.StAliquota:='1800'; wregistro60A.Valor:=1000.35; ACBrSintegra1.Registros60A.Add(wregistro60A); wregistro60A:=TRegistro60A.Create; wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial; wregistro60A.NumSerie:='000000777777'; wregistro60A.StAliquota:='F'; wregistro60A.Valor:=100; ACBrSintegra1.Registros60A.Add(wregistro60A); wregistro60A:=TRegistro60A.Create; wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial; wregistro60A.NumSerie:='000000777777'; wregistro60A.StAliquota:='I'; wregistro60A.Valor:=100; ACBrSintegra1.Registros60A.Add(wregistro60A); wregistro60A:=TRegistro60A.Create; wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial; wregistro60A.NumSerie:='000000777777'; wregistro60A.StAliquota:='1800'; wregistro60A.Valor:=100; ACBrSintegra1.Registros60A.Add(wregistro60A); end; Nesse último, que usa o campo NUM_SERIE, no bd, o mesmo está com o valor "123".
  8. Não André. Acho que você não entendeu que uma coisa não tem nada a ver com a outra. Em primeiro lugar, o ACBrSintegra não pega nada do ECF. Tudo é você quem insere. Pelo seu código, provém do seu Banco de dados. Isso é fácil de notar pois você usa Query e SQL fazendo um loop para criar um registro novo a cada linha de retorno da query. Então, se está faltando alguma coisa é no seu BD. O problema não é exatamente no código. É na falta do registro 60 M. Essa falta acontece nas duas procedures que mencionei antes. Você está criando pelo menos um registro 60A em um dia em que não foi criado um registro 60M. Você sabe o que cada registro desse significa? Uai! Então vou verificar o meu banco de dados. Sim, sei mais ou menos do que cada um se trata. Estou acompanhando por aqui: http://www.fazenda.gov.br/confaz/confaz ... ntacao.htm Obrigado.
  9. Detalhe: um outro projeto meu, antigo (um backup, na verdade) está funcionando. Copiei a rotina dele, dessa que postei aqui, e ocorre o mesmo problema, sendo que no backup funciona. Muito estranho isso.
  10. Então, Elton... Mas eu estou com a ECF desconectada do computador. O engraçado é que, aparentemente, a exceção é exatamente aqui: if not Assigned(wregistro60M) then Eu não faço ideia de como resolver. Estava funcionando, há um tempo atrás. Deixei o projeto parado por algum tempo e agora que voltei a mexer, está assim. Mas como a ECF não está conectada, não poderia ser redução Z, né? Obrigado.
  11. Não consegui resolver. O que será que pode estar causando este problema? A rotina completa é essa: procedure TfrmMenuFiscal.ArqSintegra; var arquivo: TextFile; NM_Arquivo ,Diretorio : String; wregistro60M: TRegistro60M; wregistro60A: TRegistro60A; wregistro60D: TRegistro60D; wregistro75 : TRegistro75; wregistro50 : TRegistro50; wregistro61 : TRegistro61; data: TDate;//sempre que usar a var data lembrar d fazê-la receber a data inicial (de) iRetorno: Integer; regEAD: AnsiString; begin nm_arquivo:= 'Vendas_do_Periodo_SINTEGRA'+'_'+FormatDateTime('yyyymmddhhmm',now)+'.txt'; diretorio:= CriaDiretorio('Vendas_do_Periodo'); ACBrSintegra1.FileName:= diretorio+nm_arquivo; ACBrSintegra1.VersaoValidador:= Tversaovalidador(1); data:= DataHoraInicial(edtDe.Date); with ACBrSintegra1 do begin try {Registro 10} Registro10.CNPJ:= PoeZeros(SoNumeros(RegEmpresa.CGC),14); {TAM} Registro10.Inscricao:= CortaString(SoNumeros(RegEmpresa.InscEstadual),14,true); Registro10.RazaoSocial:= CortaString(RegEmpresa.Nm_Empresa,35,true); Registro10.Cidade:= CortaString(RegEmpresa.Cidade,30,true); Registro10.Estado:= CortaString(RegEmpresa.Estado,2,true); Registro10.Telefone:= PoeZeros(SoNumeros(RegEmpresa.Telefone),10); Registro10.DataInicial:= DataHoraInicial(edtDe.Date); Registro10.DataFinal:= DataHoraInicial(edtAte.Date); Registro10.CodigoConvenio:= IntToStr(3); Registro10.NaturezaInformacoes := IntToStr(3); Registro10.FinalidadeArquivo := IntToStr(1); except Informa('Falha ao gerar o Registro 10.'); end; try {Registro 11} ThreadQuery.ExecuteAndWait(Self); query.Active := false; query.SQL.Clear; query.SQL.Add('SELECT E.* FROM EMPRESAS E'); if not query.Prepared then query.Prepare; query.Active := true; Registro11.Endereco:= CortaString(RegEmpresa.Endereco,34,true); Registro11.Numero:= PoeZeros(Query.FieldByName('ENDERECO_NUMERO').AsString,5); Registro11.Complemento:= CortaString(Query.FieldByName('COMPLEMENTO').AsString,22,true); Registro11.Bairro:= CortaString(RegEmpresa.Bairro,15,true); Registro11.Cep:= RegEmpresa.Cep; Registro11.Responsavel:= CortaString(Query.FieldByName('NM_RESPONSAVEL').AsString,28,true); Registro11.Telefone:= PoeZeros(SoNumeros(RegEmpresa.Telefone),12); except on e : Exception do Informa('Falha ao gerar o Registro 11 '+ e.Message); end; GerarRegistro50; GerarRegistro60M; GerarRegistro60A; GerarRegistro60D; try Data:= DataHoraInicial(edtDe.Date); while Data <= DataHoraFinal(edtAte.Date) do begin with Query do begin Active:= False; SQL.Clear; SQL.Add('SELECT PR.CD_PRODUTO, PI.QUANTIDADE, PI.SUBTOTAL'); SQL.Add('from PEDIDO_ITEM PI'); SQL.Add('join PEDIDO PD on PD.NUM_DOCUMENTO = PD.NUM_DOCUMENTO'); SQL.Add('left outer join PRODUTOS PR on PI.CD_PRODUTO = PR.CD_PRODUTO '); // SQL.Add('where PD.DATA_HORA between :de and :ate'); if rgpFaixadeDados.ItemIndex = 2 then SQL.Add('WHERE (ECF_COO BETWEEN :DE AND :ATE)') else if rgpFaixadeDados.ItemIndex = 1 then SQL.Add('WHERE (ECF_CRZ BETWEEN :DE AND :ATE)') else SQL.Add('where PD.DATA_HORA between :de and :ate'); Active:= TRUE; if not Prepared then Prepare; if rgpFaixadeDados.ItemIndex = 2 then begin ParamByName('DE').AsString := edtCOOIni.Text; ParamByName('ATE').AsString := edtCOOFin.Text; end else if rgpFaixadeDados.ItemIndex = 1 then begin ParamByName('DE').AsString := edtCRZIni.Text; ParamByName('ATE').AsString := edtCRZFin.Text; end else begin ParamByName('DE').AsDateTime := DataHoraInicial(edtDe.Date); ParamByName('ATE').AsDateTime := DataHoraFinal(edtAte.Date); end; Active:= True; First; while not eof do begin try {********************************************************} {* REGISTRO 75 - COD. PRODUTOS OU SERVIÇOS *} {********************************************************} wRegistro75:= TRegistro75.Create; wRegistro75.DataInicial:= ACBrSintegra1.Registro10.DataInicial; wRegistro75.DataFinal:= ACBrSintegra1.Registro10.DataFinal; wRegistro75.Codigo:= wRegistro60D.Codigo; wRegistro75.Descricao:= FieldByName('NM_PRODUTO').AsString; wRegistro75.Unidade:= FieldByName('UNIDADE').AsString; if FieldByName('IPI').IsNull then wRegistro75.AliquotaIpi:= 0 else wRegistro75.AliquotaIpi:= FieldByName('IPI').AsCurrency; wRegistro75.AliquotaICMS:= 0; ACBrSintegra1.Registros75.Add(wRegistro75); except on e : Exception do Informa('Falha ao gerar o registro 75. '+ e.Message); end; Next; end; Data:= IncDay(Data,1); end; Query.Active:= False; end; except on e : Exception do Informa('Falha ao gerar o arquivo 60D. '+e.Message); end; try GeraArquivo; except on e : Exception do Informa('Falha ao gerar Arquivo Sintegra.'+ e.Message); end; ACBrECF.Free; FechaTransacao; end; {Assinatura} SetLength(regEAD, 256); Informa('Arquivo Sintegra gerado em: ' + PL + diretorio + nm_arquivo + PL); ACBrEAD.AssinarArquivoComEAD(diretorio + nm_arquivo); iRetorno := validateFile((diretorio + nm_arquivo), mChPub.Lines.Text, mChPri.Lines.Text); if iRetorno = 0 then Informa('Arquivo Sintegra gerado em:'+ PL + diretorio + nm_arquivo + 'Assinatura Inválida, Verifique!') else Informa('Arquivo Arquivo Sintegra gerado com sucesso em: ' + PL + diretorio + nm_arquivo); end; Alguém poderia me ajudar?
  12. Depende do arquivo. O requisito XXV que você mesmo citou menciona como nomear o arquivo gerado naquele requisito. O item 9 do Requisito VII também tem especificação. E assim por diante. Os que não forem especificados você pode assumir qualquer jeito de nomear os arquivos. Veja no ROTEIRO DE ANÁLISE FUNCIONAL DE PROGRAMA APLICATIVO FISCAL - EMISSOR DE CUPOM FISCAL (RAFPAF-ECF) a pergunta 15 nas últimas páginas seção PERGUNTAS E RESPOSTAS. Opa, vou ver. Obrigado!
  13. Bom, então acho que posso manter do jeito que estou fazendo. Muito obrigado por esclarecer.
  14. O nome do txt, eu queria saber se há uma regra de nome de arquivo.
  15. Olá, não encontrei isso no roteiro, mas há uma pergunta, no final da página, que diz o seguinte: O Requisito XXV, item 6, diz: “ITEM 6: o arquivo gerado deverá ser denominado no formato CCCCCCNNNNNNNNNNNNNNDDMMAAAA.txt, sendo: a) “CCCCCC” o Código Nacional de Identificação de ECF relativo ao ECF a que se refere o movimento informado; “NNNNNNNNNNNNNN” os 14 (quatorze) últimos dígitos do número de fabricação do ECF; c) “DDMMAAAA” a data (dia/mês/ano) do movimento informado no caso de arquivo gerado automaticamente após a emissão da Redução Z, ou a data (dia/mês/ano) da geração do arquivo no caso de execução por meio do comando previsto no item 9 do requisito VII.” Os aplicativos em DOS não permitem um nome de arquivo com 28 caracteres. O padrão DOS são 8 dígitos para o nome do arquivo e 3 dígitos para a extensão. Como fazer no caso de sistemas desenvolvidos para DOS? Bem, no Requisito XXV eu só encontrei testes. Então... mas isso deve ser feito em TODOS os arquivos? Estou nomeando-os da seguinte forma: nm_arquivo := 'MeiosPgto' + FormatDateTime('yyyymmddhhmm',now) + '.txt'; por exemplo. Dessa forma dá pra homologar? Agradeço.
  16. Estou estudando os exemplos. Muito obrigado, EMBarbosa e Daniel Simões.
  17. Só precisa de gerar arquivo quando o roteiro falar especificamente de arquivo. Ou quando menciona-se Relatório Gerencial, correto? Muito obrigado!
  18. Olá, amigos. Bem, só pra conformar, no requisito XXX, referente ao Meios de Pagto., temos o seguinte conteúdo: Bem, pelo que me parece, é apenas pra imprimir no ECF, como no exemplo do ACBr, correto? Não precisa gerar nenhum arquivo de texto (txt) para este requisito, né? Só pra esclarecer, os únicos requisitos do PAF-ECF que necessitam da geração dos arquivos de texto são: LMFC, LMFS, Espelho MFD, Arq. MFD, Tab. Prod., Identificação do PAF-ECF, Estoque (parcial e total), Movimento por ECF, Vendas do Período (Sintegra e SPED), Dav Emitidos e Configuração do PAF-ECF. É só isso, tem mais, tem menos... ? Agraço muito. André.
  19. Debugando, descobri que cai em uma exceção dentro do ACBr. Logo aqui: ------------------------------------------------------ for i:=0 to Registros60A.Count - 1 do begin wregistro60M:=GetRegistro60M(Registros60A.Emissao,Registros60A.NumSerie); if not Assigned(wregistro60M) then raise Exception.Create(ACBrStr('Registro 60A sem registro 60M correspondente!'+#13+ DateToStr(Registros60A.Emissao)+' - '+Registros60A.NumSerie)); wregistro60M.Regs60A.Add(Registros60A); end; ------------------------------------------------------ E agora? =O
  20. Olá amigos! Bem, no ano passado eu havia feito minha rotina para gerar o Vendas do Período, do PAF-ECF, usando o ACBr. Me lembro que havia deixado validando sem problemas, no validador do Sintegra, mas, agora que voltei a mexer no projeto, me parece que ele não está regando o registro 90. Fiz isso: (já no final da rotina) : begin try {********************************************************} {* REGISTRO 75 - COD. PRODUTOS OU SERVIÇOS *} {********************************************************} wRegistro75:= TRegistro75.Create; wRegistro75.DataInicial:= ACBrSintegra1.Registro10.DataInicial; wRegistro75.DataFinal:= ACBrSintegra1.Registro10.DataFinal; wRegistro75.Codigo:= wRegistro60D.Codigo; wRegistro75.Descricao:= FieldByName('NM_PRODUTO').AsString; wRegistro75.Unidade:= FieldByName('UNIDADE').AsString; if FieldByName('IPI').IsNull then wRegistro75.AliquotaIpi:= 0 else wRegistro75.AliquotaIpi:= FieldByName('IPI').AsCurrency; wRegistro75.AliquotaICMS:= 0; ACBrSintegra1.Registros75.Add(wRegistro75); except on e : Exception do Informa('Falha ao gerar o registro 75. '+ e.Message); end; Next; end; Data:= IncDay(Data,1); end; Query.Active:= False; end; try GeraArquivo; Fiz algo errado? Como eu poderia gerar o registro 90 à partir deste? Agradeço a todos, André.
  21. Olá, No exemplo do ACBr, há um loop que preenche os dados 10 vezes: // FILHO for int0150 := 1 to 10 do begin // 10 Clientes with Registro0150New do begin COD_PART := '00000'+ IntToStr(int0150) ; NOME := 'NOME DO CLIENTE'; COD_PAIS := '1058'; CNPJ := ''; CPF := '98343128494'; IE := ''; COD_MUN := 3305158; SUFRAMA := ''; ENDERECO := 'ENDERECO'; NUM := ''; COMPL := 'COMPLEMENTO'; BAIRRO := 'BAIRRO'; // // FILHO - 5 Alterações para cada cliente // for int0175 := 1 to 5 do // begin // with Registro0175New do // begin // DT_ALT := Date + int0175; // NR_CAMPO := IntToStr(int0175); // CONT_ANT := 'CAMPO ANTERIOR ' + IntToStr(int0175); // end; // end; // end; end; end; Lendo no ATO COTEPE (http://www.fazenda.gov.br/confaz/confaz ... 009_08.htm), não falam nada sobre isso. Do que se trata este loop? Ele é mesmo necessário? Obrigado!
  22. Muito obrigado, Regys. Os que eu tinha aqui estavam desatualizados. Obrigado.
  23. Olá amigos! Eu gostaria de saber onde eu posso conseguir o layout dos arquivos do Vendas do Período, do PAF-ECF (Arquivo referente ao Sintegra e o referente ao SPED Fiscal). Alguém sabe informar onde consigo estes? Fiz a minha rotina de acordo com os exemplos do ACBr, mas agora eu gostaria de conferir pra ver se está tudo certo. Obrigado!
×
×
  • 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...