-
Total de ítens
354 -
Registro em
-
Última visita
-
Days Won
1
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por Rodrigo - Digibyte
-
-
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.
-
1
-
-
-
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 AVSem 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
-
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.
-
Alguém tem os fontes mais atualizados que os do svn? Quero começar a mexer/testar o sped ecf
-
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;
beginBloco_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.
-
1
-
-
Ops, achei que tinha anexado, segue ...
-
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
-
Já descobri, é a prefeitura onde foi gerada a nf
-
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; -
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, '<', '<', [rfReplaceAll]);
StrReplace(aux, '>', '>', [rfReplaceAll]);// ArquivoXML.Text := StrReplace(StringReplace( ArquivoXML.Text, '<', '<', [rfReplaceAll]), '>', '>', [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; -
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?
-
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; -
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
-
Preciso estar a par também dos rumos do componente, poderíamos conversar via skype
-
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ê.
-
Esqueçi, gerando no layout versão 1.1
-
Pessoal, estou anexando o que tenho do projeto. Estão sendo gerados os eventos iniciais e mais as duas primeiras tabelas. A situação é a seguinte: o programador que estava na empresa saiu (talvez dê continuidade como free) então não sei exatamente a situação do componente. Ele foi feito baseado no ACBRNfe, seguindo o mesmo padrão, gostaria de seguir esse caminho.
Precisamos acertar as arestas, o ponto inicial para então darmos continuidade.
Por favor, qualquer duvida me perguntem ou passem mensagem, inclusive se faltou alguma coisa ....
-
Sim, completamos os eventos iniciais e atualizamos o layout. Me comprometo a colocar isso aqui até amanhã. Feito isso podemos ter um ponto de partida pra melhorarmos o componente.
Rodrigo.
-
O que precisar é só ir perguntando ou me passando mensagem.
-
Estou aos poucos implementando o componente mas seria importante se desse um feedback sobre a usabilidade do mesmo, sugestões, etc
-
1
-
-
Segue mais uma atualização com novos registros, quanto as alterações que houveram em breve terá mais uma atualização.AcbrEsocial.zip
-
Já tenho vários outros registros prontos no ACBResocial, vou ver se até amanhã posto aqui.
-
1
-
-
Segue componente e exemplo de uso, lembrando que está em fase inicial
Depois temos que organizar quem faz o que pra não repetir trabalho
Sped ECF Disponibilizado do Trunk2
em ACBrSPEDECF
Postado · Editado por Digibyte
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