Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 22-04-2015 em Posts

  1. Muitos tem visto que o código dependendo do tamanho do BD do seu cliente algumas operações podem ficar muito lentas. Em especial notamos isso na geração dos arquivos como SPED e Sintegra. Então, na medida do possível, estou analisando aqui alguns métodos que são muitas vezes utilizados e podem fazer grande diferença no código para otimizá-los, fazendo-os serem executados com o mínimo de tempo possível. Especificamente neste caso, as vezes o problema está na constante alocação de memória e redimensionamento das strings. Vejam um exemplo o código do método ACBrUtil.TiraPontos. O método atual é executado várias vezes nos registros Sintegra. A seguinte linha abaixo causa realocação de memória ao redimensionar a string xStr toda vez que é executada: xStr := xStr + str[i] Podemos remover essa realocação por inicializar a string no começo e apenas redimensioná-la no final. Nos meus testes isso reduziu o tempo de execução em pouco mais de 80%. Quer dizer, se você utiliza esse método várias vezes chegando ao tempo total de aproximadamente 1,33 segundos, o tempo gasto depois de corrigido é de menos de 0,23 segundos. Criei o projeto abaixo para demonstrar como isso pode afetar o código quando é executado muitas vezes. Assim outros podem testar e ver a otimização. program project; {$APPTYPE CONSOLE} uses SysUtils, ACBrUtil, Diagnostics; function TiraPontosX(Str: string): string; const InvalidChars : set of char = ['/',',','-','.',')','(',',',' ']; var i, Count: Integer; begin SetLength(Result, Length(str)); Count := 0; for i := 1 to Length(str) do begin if not (str[i] in InvalidChars) then begin inc(Count); Result[Count] := str[i]; end; end; SetLength(Result, Count); end; var st1: TStopwatch; c: Extended; s: string; I,N: Integer; begin try { TODO -oUser -cConsole Main : Insert code here } st1 := TStopwatch.Create; for N := 1 to 3 do begin st1.Start; for I := 0 to 3000000 do begin s := ACBrUtil.TiraPontos('0.0'); end; st1.Stop; c := st1.ElapsedMilliseconds; Writeln(FloatToString(c)); st1.Reset; end; for N := 1 to 3 do begin st1.Start; for I := 0 to 3000000 do begin s := TiraPontosX('0.0'); end; st1.Stop; c := st1.ElapsedMilliseconds; Writeln(FloatToString(c)); st1.Reset; end; Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. Aproveitei para adicionar alguns testes para esse método específico e não causar nenhum problema ao inserir a otimização. (: Essa não é uma mudança que resolve todos os problemas. O método precisa ser chamado muitas vezes para começarmos a ver diferenças. Mas se fizermos isso com mais funções, com certeza teremos uma execução muito mais rápida. Conseguindo fazer o mesmo com outros métodos avisarei aqui nesse tópico.
    2 pontos
  2. Sendo assim, vou trancar o tópico, pois o mesmo parece não ser mais produtivo...
    2 pontos
  3. Olá amigos do ACBr, desenvolvi uma rotina nova para a balança TOLEDO 9091, essa balança ainda não existia no pacote. Segue anexo para vocês adicionarem ela ao projeto. ACBrSerial.rar
    1 ponto
  4. Verifique o motivo do Bloqueio... se é bloqueio Autônomo, é porque o SAT precisa se comunicar com o SEFAZ.. nesse caso apenas ligue-o na Rede...
    1 ponto
  5. OFFICIUM, qual a administradora do seu certificado? Vamos fazer uma tentativa independente da administradora, baixe o instalador da Valid em http://www.onlinecertificadora.com.br/arquivo/suporte/instaladorvalid24.exe e siga os passos para a instalação.... após isso reinicie seu computador e verifique se funcionou. Att.
    1 ponto
  6. Boa tarde Alexandre... Segunda-Feira (20/04) consegui resolver o ocorrido... atualizei os fontes do ACBrNFSe e no pnfsNFSeW, começo da procedure TNFSeW.GerarXML_ABRASF_V1 descomentei o código e deixei assim: if FProvedor in [proLexsom{, proPublica}] then FIdentificador := 'id'; Pode ser que resolva o teu problema...
    1 ponto
  7. Bom dia a todos! Hoje também estou passando pelo mesmo problema com clientes aqui da empresa. Dados iguais, nada foi alterado, porém retorna essa rejeição. Estou tentando ligar na SEFAZ. Qualquer coisa, posto aqui também.
    1 ponto
  8. Não..o ACBr não faz uso das DLLs dos fabricantes... Provavelmente a velocidade do ECF está a 115.200, você precisa configurar isso usando o botão "Serial", na aba do ECF
    1 ponto
  9. Olá Luiz, Como você mesmo descobriu, o problema não é na parte do FlushFileToDisk. Poderia ser se você não tivesse atualizado seu código e estivesse sendo usado o Flush do Drive inteiro. O que poderia ser então? Lógico que sem ver a máquina é difícil de dizer, mas eu começaria a olhar por coisas benignas (Antivírus, Firewall, AntiMalware, aplicativos de proteção bancária, aplicativos de aceleração que varrem os arquivos mais utilizados) e vírus e Malwares... Falando sobre antivírus, eu me lembro de ter tido um problema parecido em um cliente. O detalhe era que mesmo desabilitando o Antivírus, ele ainda continuava varrendo os arquivos. Não bastava marcar o Antivírus para ficar inativo por um tempo. Nós tivemos que colocar o executável, o banco de dados, os arquivos temporários do TEF e o arquivo AAC na lista de arquivos confiáveis dele. Finalmente, resolvemos trocar de antivírus e resolveu... Só que já não me lembro qual foi o antivírus...
    1 ponto
  10. Na vdd tem como adicionar sim Juliomar, apesar de ser desnecessário. Você vai na Toolbar do Visua Studio Adicionar uma no Aba e depois clicar em Choose Itens. Na tela que abrir Clicar em Browser e selecionar a dll no ACBrFramework depois selecionar os itens na grid que vão aparecer na aba.
    1 ponto
  11. Boa noite, Assim que possível vou avaliar as suas alterações e estando tudo OK, vamos disponibilizar. Desde já muito obrigado pela colaboração.
    1 ponto
  12. Caso alguém passe pelo mesmo problema, venho informar que consegui resolver o problema atualizando o Internet Explorer no cliente do 8 para o 11 Grato
    1 ponto
  13. Mauro quando vc tenta manifestar ciencia da nota, existe um cstat(650) que indica que ela foi cancelada ou denegada, eu trato o retorno de modo a mudar essa nota da situação "Sem Manifestação" para "Cancelada/Denegada"... espero que a idéia te ajude...
    1 ponto
  14. Caros Só uma Obs. Uma vez a nota cancelada, não é possível fazer a manifestação contra ela. Pelo menos as que eu tentei fazer. Como recebi uma notificação de NFe, que depois foi cancelada (até então eu não sabia que ela tinha sido cancelada). Para min esse Resumo de Nota significa que uma NFe foi emitida contra mim (isso é verdade). Portanto fui fazer a manifestação para "baixar o xml" e não é possível fazer a manifestação, portanto não dará mais para baixar a nota. Teoricamente tudo bem já q a nota foi cancelada, o problema é q qdo recebi o resumo da nota, não dava para saber que ela já tinha sido cancelada e meu "sistema" ficava me informando dessa nota AINDA NÃO baixada. Ate Mauro
    1 ponto
  15. Hum.. isso pode ser valido. vou ver se tem alguma coisa.. Pois nao foi eu que instalou o certificado a primeira vez. vou tentar ..
    1 ponto
  16. Obrigado pela contribuição... vou analisar assim que possível...
    1 ponto
  17. Desculpem reviver o tópico, mas estava com o mesmo problema ao trocar do XE2 para o XE6. Cheguei neste tópico procurando uma solução, mas consegui resolver o problema de outra forma que acho mais simples. Reparei que o componente tem a propriedade Filtro que vem por padrão "fiNenhum", só alterei para "fiPDF" e deu certo. Não me recordo se na versão anterior tinha essa propriedade, pois antes funcionava corretamente sem altera-la.
    1 ponto
  18. Para o erro "Rejeicao: Falha no esquema xml", informe os campos UltNSU ou NSU com 15 dígitos(Em branco 15 zeros)
    1 ponto
  19. no ACBrValidador tem a opção ExibeDigitoCorreto, eu uso assim eu envio 8 digitos sendo o ultimo um numero aleatório e mando validar então o componente exibe o digito correto então eu uso copy(minhabarra,1,7)+ACBrValidador1.DigitoCalculado; sempre funcionou comigo só para ter ideia, vc pode usar o demo assim procedure TfrValidador.bValidarClick(Sender: TObject); begin bFormatarClick( Sender ); ACBrValidador1.Documento := edDocto.Text ; ACBrValidador1.Complemento := edComple.Text ; ACBrValidador1.IgnorarChar := edIgnorar.Text ; if ACBrValidador1.Validar then mMsgErro.Text := 'Documento OK' else Begin mMsgErro.Text := ACBrValidador1.MsgErro ; mMsgErro.Lines.Add(Copy(edDocto.Text,1,7)+ACBrValidador1.DigitoCalculado); end; end; ou se vc preferir pode usar a função do próprio componente adicionar na uses Math function CalcularDV(ACodigoGTIN: String): String; var Dig, I, DV: Integer; begin DV := 0; Result := '' ; // adicionar os zeros a esquerda, se não fizer isso o cálculo não bate // limite = tamanho maior codigo (gtin14) - 1 (digito) //ACodigoGTIN := PadR(ACodigoGTIN, 13, '0'); While Length(ACodigoGTIN) < 13 do ACodigoGTIN := '0'+ACodigoGTIN; //eu alterei aqui for I := Length(ACodigoGTIN) downto 1 do begin Dig := StrToInt(ACodigoGTIN[I]); DV := DV + (Dig * IfThen(odd(I), 3, 1)); end; DV := (Ceil(DV / 10) * 10) - DV ; Result := IntToStr(DV); end;
    1 ponto
  20. Pessoal, duas pessoas foram, causadoras dessa discussão, Eu (Isaque Pinheiro) e Tagales, fomos infelizes em nossos comentários, coloquei minhas palavras de desculpas e Ele (Tagales) desejava deixar a dele, como o tópicos tinha fechado, e com razão, estou colocando as palavras dele para que todos fique em PAZ, e que não tenha passado de um mal intendido. Tagales diz: Aceito as desculpas e peço desculpas pelas minhas palavras também, não quis ofender ninguém diretamente só achei que por mais que pergunta possa parecer ignorante, podiam ter mais pessoas que estavam com medo de o projeto não ter continuidade ou mesmo não ter pessoas para cuidar dele. só queria falar isso antes de fechar...
    1 ponto
  21. Realmente você é um cara correto e certo nas palavras, acho que não preciso dizer mais nada, não quero ser mais hipócrita como você diz que sou, realmente, nunca ajudei ninguém neste fórum, e provavelmente eu e todo o resto fazemos isso unica e exclusivamente para provar que somos algo. Você começou pelo caminho errado e pelo jeito vai persistir nele, tudo bem, todos os "nicks roxo" como você diz são tratados como usuários normais fora do fórum fechado deles, no fórum aberto nunca foi dado privilégio a ninguém, até porque quem responde no fórum aberto não recebe um centavo sequer para "puxar saco" como você afirma. Percebo que você mistura claramente o termo "projeto de código aberto" com "venha trabalhar de graça para mim", deixei bem claro que as pessoas que aqui ajudam o fazem por algum motivo, seja ele qual for, mas é doado, tiram seu tempo e conhecimento para isso. Faça o seguinte, ao invés de ficar reclamando, difamando, escrevendo o que não deve para quem não precisa ler, escreva código, ajude, leia os fontes, precisamos diariamente de pessoas que codifiquem, testem, opinem de forma construtiva, ponham a mão na massa, seja um "fodão" aqui no fórum como você mesmo diz, construa coisas boas e úteis, como te disse temos 7.000 usuários esperando por pessoas neste perfil diariamente, tire 30 minutos por dia para abrir o fórum e responder alguma pergunta que não tem resposta ou ao menos tentar ajudar a pessoa que procura a resposta a encontrar junto com você.
    1 ponto
  22. Desculpe, mas ser profissional para você é trabalhar de graça, veja nem o Linux é de graça. Quanto a perguntas não respondidas, já tentou ajudar alguém a responder, até onde sei o Isaque e muito outros tiram tempo todo o dia para ajudar a muitos que sequer respondem algo, fora a codificação que todos nós e vários usuários que contribuem fazem todos os dias, tirando tempo de suas empresas para isso, deixando de ganhar dinheiro, isso não é ser profissional? Quanto a sua pergunta sobre a continuidade do projeto, sim o projeto é e sempre será gratuito, Daniel, André, Isaque, Eu e vários outros contribuímos diariamente para manter tudo gratuito, doando tempo, conhecimento e inclusive dinheiro do próprio bolso, temos a área reservada como forma de usuários que desejam contribuir possam contribuir e manter toda a estrutura. Agora você acha mesmo que toda a estrutura por trás desse "pequeno" projeto é gratuita, a hospedagem, manutenção, desenvolvimento, etc, etc, tudo isso cai do céu? Vamos a alguns número, hoje mais de 7.000 usuários utilizam o fórum ACBr, não tenho números exatos sobre quantos utilizam, mas com certeza é mais do que isso. Temos pouco mais de 100 usuários do ACBrSAC. Por favor, cuidado com suas palavras, antes de criticar, veja o tamanho da coisa toda e o que essas pessoas fazem todos os dias para te ajudar.
    1 ponto
×
×
  • 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.