Ir para conteúdo
  • Cadastre-se

Rodrigo - Digibyte

Membros Pro
  • Total de ítens

    284
  • Registro em

  • Última visita

  • Days Won

    1

Tudo que Rodrigo - Digibyte postou

  1. Então falta os arquivos :( agora com arquivos ... ACBrECFBloco_P.pas ACBrECFBloco_P_Class.pas
  2. Segue Bloco P. 1) Criados métodos "RegistroxxxNEW" 2) Os registros P300, P400, P500 estavam como listas mas pelo manual a ocorrência é única, dessa forma, observando os outros Sped, alterei os mesmos 3) Testei e está compilando, agora creio que a classe já pode ser alimentada com dados para gerar o registro, isso ainda não testei mas irei fazer hoje
  3. Se é pra mim, como pareçe, realmente não entendi essa observação
  4. Pessoal estou criando o métodos RegistroXXXXNEW para o Bloco P que está sem
  5. Procure nas mensagens deste tópico, tem uma unit em delphi que postei e pode servir como inspiração
  6. No LimpaRegistros do bloco Y tinha duas vezes o FRegistroY990.Free, gerando erro. ACBrECFBloco_Y_Class.pas
  7. Pessoal, o ecf está sendo feito com base no trunk2 ou trunk? Pergunto porque os fontes do ecf estavam no trunk2 mas por necessidade (pois o trunk 2 está com alguns problemas) estavam fazendo o desenvolvimento com base no trunk e que eu saiba houveram alterações nas units e não é compatível... ou é ? Quero ver como faço pra ajudar a dar continuidade
  8. Segue bloco P, não está pronto, falta implementar a propriedades mas o grosso da classe está feito. Não vou poder mexer no projeto por uns 10 dias então se os interessados puderem contribuir seria uma boa pra todos ! ACBrECFBloco_P.pas ACBrECFBloco_P_Class.pas
  9. Seguem units alteradas: Está gerando o bloco 0, já testei importação pelo ecf e deu tudo certo Alterei alguns parâmetros de inteiro para string, seguindo o padrão do sped contribuições (cep por exemplo) Implementei várias partes de código faltando ou incorretas O que vi que está faltando: limpar memória após gerar o arquivo (TStringList's) Acho que agora está mais fácil para todos que puderem contribuir pois temos um início. ACBrECFBloco_0_Class.pas ACBrECFBloco_0.pas ACBrSpedEcf.pas Vou anexar a unit do delphi que tenho e que gerou e validou o arquivo. Quem quiser usar como referência é só baixar e pegar a parte do código que gera o sped, é bem simples, tem alguns lugares que pego informações do banco de dados mas é só tirar e inserir os dados diretamente para testar. UFrmSpedEcf.pas
  10. Atualizei e estou fazendo grandes alterações no bloco 0 e na units acbrspedecf pois não estavam sendo gerados vários registros. Aguardem que ainda hoje posto as alterações.
  11. Boa tarde, a procedure como está gera um erro AV, para corrigir voltei ao que era anteriormente, seguem os dois blocos para análise: Com erro: Bloco.NomeArquivo := FACBrTXT.NomeArquivo; Bloco.LinhasBuffer := FACBrTXT.LinhasBuffer; Bloco.Gravado := False ; Bloco.Conteudo.Clear; <<---- erro AV Sem erro: Bloco.NomeArquivo := FACBrTXT.NomeArquivo; Bloco.LinhasBuffer := FACBrTXT.LinhasBuffer; Bloco.Gravado := False ; if not Assigned(Bloco.Conteudo) then Bloco.Conteudo := TStringList.Create; Bloco.Conteudo.Clear; Obs: repositório trunk
  12. Os mantenedores do acbr poderiam dar uma força e incluir o ecf na instalação do acbr? Assim ficaria mais fácil para usarmos e principalmente implementarmos as correções, que estariam disponíveis no svn para todos. Se não for possível posso tentar por aqui mas tenho medo de estar fazendo em desacordo com o padrão que utilizam ou outro usuários estar fazendo a mesma coisa/correçoes em paralelo.
  13. Alguém tem os fontes mais atualizados que os do svn? Quero começar a mexer/testar o sped ecf
  14. Os totalizadores desses registros estavam sendo gerados de forma incorreta, o do I155 estava fora de ordem (mas validava no pva), o do I310 não totalizava e acusava erro. Constatei s seguinte trecho de código, mesma coisa ocorria no WriteRegistroI150: procedure TACBrSPEDContabil.WriteRegistroI300; begin if Bloco_I.RegistroI300.Count > 0 then begin with Bloco_9.Registro9900.New do begin REG_BLC := 'I300'; QTD_REG_BLC := Bloco_I.RegistroI300.Count; end; end; if Bloco_I.RegistroI310Count > 0 then begin with Bloco_9.Registro9900.New do begin REG_BLC := 'I310'; QTD_REG_BLC := Bloco_I.RegistroI310Count; end; end; Bloco_I.WriteRegistroI300; end; Correção: procedure TACBrSPEDContabil.WriteRegistroI300; begin Bloco_I.WriteRegistroI300; if Bloco_I.RegistroI300.Count > 0 then begin with Bloco_9.Registro9900.New do begin REG_BLC := 'I300'; QTD_REG_BLC := Bloco_I.RegistroI300.Count; end; end; if Bloco_I.RegistroI310Count > 0 then begin with Bloco_9.Registro9900.New do begin REG_BLC := 'I310'; QTD_REG_BLC := Bloco_I.RegistroI310Count; end; end; end; Outro erro que acabava gerando os totais mas fora de ordem e do padrão: procedure TACBrSPEDContabil.WriteRegistroI990; begin with Bloco_9.Registro9900.New do begin REG_BLC := 'I990'; QTD_REG_BLC := 1; end; Bloco_I.WriteRegistroI990; with Bloco_9.Registro9900 do begin if Bloco_I.RegistroI155Count > 0 then begin with New do begin REG_BLC := 'I155'; QTD_REG_BLC := Bloco_I.RegistroI155Count; end; end; if Bloco_I.RegistroI250Count > 0 then begin with New do begin REG_BLC := 'I250'; QTD_REG_BLC := Bloco_I.RegistroI250Count; end; end; end; end; O trecho em vermelho foi retirado pois agora os totais estão sendo gerados no local correto. Validei aqui e funcionou tudo certo mas é sempre bom alguém com mais experiência no ACBR dar uma olhada se as alterações estão corretas. ACBrSpedContabil.pas
  15. Ops, achei que tinha anexado, segue ... ACBrECDBloco_0_Class.pas
  16. Existiam duas mensagens de erro/aviso que estavam sendo tratadas incorretamente, segue correção em anexo 1) (0-0000) O indicador "%s" de situação especial, deve ser informado o número 1 ou 2 ou 3 ou 4 ou 5! Estava duplicado no código Não respeitava os valores possíveis de acordo com o layout/ano Dava mensagem de erro ao ser informado em branco, qué é a situação mais comum e possível 2) (0-0000) A inscrição estadual "%s" digitada é inválida! Algumas empresas não tem IE, não estava sendo tratada essa possibilidade
  17. Boa tarde, gostaria de saber o que significa "orgão gerador" na nfse. Ocorre que na importação de algumas notas o código do município está vindo (aparentemente) errado dentro da tag <orgaogerador><codigomunicipio>, com isso o acbr não localiza o provedor e não é feita a importação pois esta é a primeira tag que é verificada para determinar o provedor: unit pnfsNFSeR; if FProvedor = proNenhum then begin if (Leitor.rExtrai(1, 'OrgaoGerador') <> '') then begin CM := Leitor.rCampo(tcStr, 'CodigoMunicipio'); FProvedor := StrToProvedor(Ok, CodCidadeToProvedor(StrToIntDef(CM, 0))); end; if (CM = '') or (CM = '0') then begin if (Leitor.rExtrai(1, 'Servico') <> '') then begin CM := Leitor.rCampo(tcStr, 'CodigoMunicipio'); FProvedor := StrToProvedor(Ok, CodCidadeToProvedor(StrToIntDef(CM, 0))); end; end; if (CM = '') or (CM = '0') then begin if (Leitor.rExtrai(1, 'PrestadorServico') <> '') then begin CM := OnlyNumber(Leitor.rCampo(tcStr, 'CodigoMunicipio')); if CM = '' then CM := Leitor.rCampo(tcStr, 'Cidade'); FProvedor := StrToProvedor(Ok, CodCidadeToProvedor(StrToIntDef(CM, 0))); end else FProvedor := proNenhum; end; { Alterado Por Cleiver em - 22-08-2014 } if (FProvedor = proNenhum) and (Pos('https://nfse.goiania.go.gov.br/ws/'Leitor.Arquivo) > 0) then FProvedor := proGoiania; end;
  18. Estava fazendo alguns testes de importação de lote nfse com um arquivo contendo cerca de 650 notas. Ao tentar fazer a importação notei que o sistema travava no método LoadFromFile, debugando a unit notei que o problema eram nas funções StringReplace de Delphi que são muito lentas ao menipular uma quantidade maior de caracteres. Essas 650 notas quando chegou em 5 minutos desisti de esperar ... se pesquisarem por "faster delphi stringreplace" no google irão ver que essa lentidão é bastante discutida Pesquisando um pouco achei alguns substitutos otimizados para o StringReplace, um deles foi o StrReplace, da biblioteca Jedi (unit JclStrings). Fiz as alterações no código para testar e agora demora cerca de 20 segundos a importação. Gostaria de saber a posição dos demais programadores a respeito de uma possível alteração, incorporando a função StrReplace do Jedi dentro do ACBR. A dica peguei neste link http://conferences.embarcadero.com/article/32120 no final do artigo (Alternative String Routines (FastStrings and other Libraries)) Abaixo os trechos de código alterado: Unit AcbrNfseNotasFiscais try {$IFDEF DELPHI2009_UP} Encoding := NotaUtil.LoadXML(CaminhoArquivo); {$ENDIF} ArquivoXML := TStringList.Create; ArquivoXML.LoadFromFile(CaminhoArquivo {$IFDEF DELPHI2009_UP},Encoding{$ENDIF}); Result := True; aux := ArquivoXML.Text; StrReplace(aux, '&lt;', '<', [rfReplaceAll]); StrReplace(aux, '&gt;', '>', [rfReplaceAll]); // ArquivoXML.Text := StrReplace(StringReplace( ArquivoXML.Text, '&lt;', '<', [rfReplaceAll]), '&gt;', '>', [rfReplaceAll]); ArquivoXML.Text := NotaUtil.RetirarPrefixos(aux); Unit AcbrNfseUtil class function NotaUtil.RetirarPrefixos(const AXML: String): String; var XML: string; begin XML := AXML; StrReplace( XML, 'ns1:', '', [rfReplaceAll] ); StrReplace( XML, 'ns2:', '', [rfReplaceAll] ); StrReplace( XML, 'ns3:', '', [rfReplaceAll] ); StrReplace( XML, 'ns4:', '', [rfReplaceAll] ); StrReplace( XML, 'ns5:', '', [rfReplaceAll] ); StrReplace( XML, 'tc:', '', [rfReplaceAll] ); StrReplace( XML, 'ii:', '', [rfReplaceAll] ); StrReplace( XML, 'p1:', '', [rfReplaceAll] ); StrReplace( XML, 'nfse:', '', [rfReplaceAll] ); StrReplace( XML, 'soap:', '', [rfReplaceAll] ); StrReplace( XML, 'soap12:', '', [rfReplaceAll] ); StrReplace( XML, 'SOAP-ENV:', '', [rfReplaceAll] ); result := XML; end;
  19. Bom dia, um cliente me mandou um xml que é o lote de notas gerados pela prefeitura de João Pessoa. É possível fazer a importação dessas notas com auxílio do ACBR? Se for possível podem dar uma dica das configurações básicas pra isso?
  20. Boa tarde, ao tentar compilar meu projeto (após uma atualização hoje) está retornando erro nas linhas abaixo destacadas. Verifiquei rapidamente e aparentemente está errado mesmo. Erro: "[DCC Error] pcnRetEnvEventoNFe.pas(274): E2018 Record, object or class type required" while Leitor.rExtrai(3, 'chNFePend', '', j + 1) <> '' do begin FretEvento.Items.FRetInfEvento.chNFePend.Add; FretEvento.Items.FRetInfEvento.chNFePend[j].ChavePend := Leitor.rCampo(tcStr, 'chNFePend'); inc(j); end; inc(i); end;
  21. Não tem como termos acesso a uma pasta específica do SVN, só para o esocial? O controle das alterações seria bem mais fácil
  22. Preciso estar a par também dos rumos do componente, poderíamos conversar via skype
  23. Precisamos de ajuda sim, o jeancantu ia dar uma olhada e estou esperando retorno dele, se quizer baixar e fazer uns testes seria uma boa. Não vi que saiu a versão 1.2 mas isso podemos ver depois, precisamos definir o projeto inicial e quem faz o quê.
×
×
  • 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.