Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 08-02-2019 em todas as áreas

  1. Bom dia Confirme dito pelo Juliomar, o contador obrigatoriamente deve saber lhe orientar, porém já adianto que conforme as regras da EFD o registro 0200 sempre deverá estar presente quando outros registros fizerem referencia ao mesmo, assim como o 0150 e outros do bloco 0. Att.
    5 pontos
  2. Atualização da homologação - Rev. 1: O ACBr é um projeto vivo que recebe atualizações diárias. Essas atualizações, normalmente, envolvem correções e novas funcionalidades. Para acompanhar esta realidade, adição de novos testes e revisão dos existentes são frequentes em novas homologações. Fica evidente também, que homologações antigas necessitam de revisões. Por conta disso, adicionamos nesta postagem, informações adicionais e novos testes comumente encontrado em homologações recentes. Quando houver novas funcionalidades nos componentes ocasionando a necessidade de novos testes, serão feitas novas postagem, no mesmo tópico, informando novos testes realizados com o acréscimo da revisão. Ex.: Rev. 2, Rev. 3 … Rev X. Ambiente: Computador Desktop Sistema Operacional Windows 10 64Bit atualizado (31/01/2019) Processador Intel Core 2 Duo E5400 2.20GHz Memória 2 GB USB 2.0 Dip-Switches: Apenas para complementar, achamos válido descrever a funcionalidade de cada chave nesta postagem, baseando no manual do fabricante: Dip-Switch 1 (SW1) Chave Função Ligada(on) Desligada Padrão de Fábrica Porta serial física 1 Handshaking XON/XOFF DTR/DSR DTR/DSR Baudrate Chave 5 Chave 6 Chave 7 2 Comprimento 7 Bits 8 Bits 8 Bits 115200 desligada desligada desligada 3 Verificação de paridade Sim Não Não 57600 desligada desligada ligada 4 Seleção de paridade Par Ímpar Ímpar 38400 (padrão) desligada ligada desligada 8 Modo USB VCOM USB USB 19200 desligada ligada ligada 14400 ligada desligada desligada 9600 ligada desligada ligada 4800 ligada ligada desligada 2400 ligada ligada ligada Dip-Switch 2 (SW2) Chave Função Ligada(on) Desligada Padrão de Fábrica Densidade Chave 5 Chave 6 1 Seleção de modo STAR EPSON EPSON 1 (claro) ligada ligada 2 Kitchen bell (opcional) Habilitado Desabilitado Desabilitado 2 (padrão) desligada desligada 3 Cortador automático Desabilitado Habilitado Habilitado 3 ligada desligada 4 Autoteste Hex dump Modo autoteste Modo autoteste 4 (escuro) desligada ligada 7 Modo download Cartão de memória Interface Interface 8 Autoajuste do cortador Habilitado Desabilitado Desabilitado Testes usando os componentes e Demos do ACBr Utilizamos a versão 3.1.2 do PosPrinterTeste.exe, demo do ACBrPosPrinter, parte do projeto ACBr, para efetuar testes na impressora. A ultima versão do PosPrinterTestes.exe está disponível neste link: Durante os testes deixamos as configurações desta forma: Modelo: ppEscPosEpson; Porta: COM9; Colunas: 42; Espaços: 40; Linhas Pular: 5; Pag. codigo: pc860; KC1: 1; KC2: 0; FatorX: 1; FatorY: 1; Demais configurações não alteramos; Resultados: Page Mode: Funcionou, com pequenas limitações, de forma satisfatória. Contudo foi preciso adaptá-la ao tamanho de colunas da impressora, ou seja, 42 colunas: Observações: 1- O risco logo abaixo o descrito MODO PAGINA DESLIGADO é uma “sujeira” que a impressora imprimiu. Não conseguimos tirá-lo. 2- O texto EXPANDIDO, impresso de cabeça para baixo, ficou cortado por falta de espaço; Suporte a impressão de imagens e gravação de logotipos: Realizamos os testes de impressão de imagens e gravação de logotipo na impressora, através de comandos Esc/Pos. Maiores detalhes destas funcionalidades podem ser conferidos neste link: Abaixo, o resultado das funcionalidades testadas: ok Impressão de imagem; ok Gravar logotipo na memória da impressora; ok Apagar logotipo na memória da impressora; ok Imprimir logotipo gravado na memória da impressora; Teste de acentuação: Atualizamos o teste de acentuação para demonstrar o suporte da impressora com fontes do Tipo B. Esta funcionalidade está presente na ultima versão do PosPrinterTeste.exe: Resultados: pc473: Alguns acentos circunflexos, crases e todos os til foram ignorados; pc850: Todos os acentos foram impressos corretamente; pc852: Alguns acentos circunflexos, todas as crases e os til foram ignorados; pc860: Todos os acentos foram impressos corretamente; pc1252: Todos os acentos foram impressos corretamente; Impressão de extratos do SAT com QRCode e Logotipo lateral: A impressora suportou os comandos enviados. Contudo, não imprimiu corretamente o cupom. Acreditamos que o problema esteja no limite de 42 colunas, utilizada pela impressora. Os testes foram realizados com o uso do SATTeste na versão 2.2. Ele é um demo do ACBrSAT, parte do projeto ACBr. Ele está disponível neste link:
    3 pontos
  3. Tai, mais um que costuma ouvir os mortos.?
    3 pontos
  4. Bom dia, Amarildo de Matos. Tente fazer da seguinte forma: [reboque01] com dois dígitos.
    3 pontos
  5. Se eu ouvir um morto enquanto programo, juro que mudo de profissão na mesma hora.?
    3 pontos
  6. Existe sim, e funciona. Já realizei em produção (2.5) fechamento com este tipo de parametrização e funcionou corretamente. Evento S-1200 TEvtRemun.dmDev.Items[0].infoPerApur.ideEstabLot.Items[0].remunPerApur.items[0].infoAgNocivo.grauExp Evento S-2299 TInfoDeslig.VerbasResc.dmDev.Items[0].infoPerApur.ideEstabLot.Items[0].infoAgNocivo.grauExp
    2 pontos
  7. Boa tarde. Cada uma que fazem..rs Att.
    2 pontos
  8. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
    2 pontos
  9. O gerente mudou o layout pra 400 sem o cliente solicitar. Putz! E a remessa é 240. Já pedi pra alterar la. Resolvido..
    2 pontos
  10. Felipe, Creio que seja isso mesmo, vou enviar para o banco e retorno com o resultado Muito Obrigado
    2 pontos
  11. Então, falei com o suporte da CEF, segundo eles, o ultimo layout publico é de julho/2018, nesse layout não tem como especificar uma data para começar os juros, somente para multa, segundo o mesmo atendente, tem um layout novo, de janeiro/2019, mas é somente de uso interno por enquanto, nesse layout novo teria esse campo. portanto as dicas acima não se aplicam a remessa cef, cnab400, pois o sistema deles não respeita o campo datamorajuros.
    2 pontos
  12. Bom dia Balena, Favor atualizar os seus fontes primeiro, faça novos testes e se necessário for faça as devidas correções e anexe a unit aqui no fórum. Peço isso pelo simples fato dos seus fontes estarem desatualizados.
    2 pontos
  13. Eu costumo ouvir musicas dos anos 80.
    2 pontos
  14. Mas no help, esta [reboque001] cInt=1 Mas vou testar, e retorno.
    2 pontos
  15. Bom dia.. Sim é obrigatorio pois é a informações de seus produtos. Estou lhe mandando um exemplo Gerado. sped_Exemplo.txt
    2 pontos
  16. Bom dia, Diego Dualbox. Sugiro que ao chamar a função GerarRemessa(), você deverá passar como parâmetro o número da respectiva remessa. Segue o exemplo abaixo: "BOLETO.GerarRemessa BOLETO.GerarRemessa(cDirArqRemessa,nNumeroArquivo[,nNomeArquivo]) Parâmetros: cDirArqRemessa - Diretório onde deverá ser gravado o arquivo de Remessa. nNumeroArquivo - Numero do arquivo que deve ser gerado, utilizado pelo Bradesco, funciona como um contador de arquivos remessa já enviados. nNomeArquivo - nome do arquivo. Parâmetro opcional, caso não seja informado o ACBrMonitor irá calcular o nome do arquivo. Exemplos: BOLETO.GerarRemessa("c:\remessa\",1,000001.rem ) – Irá gerar o arquivo de remessa no diretório "C:\Remessa", com o nome formatado de acordo com o banco para o qual esta sendo feita a remessa .000001.rem ou BOLETO.GerarRemessa("c:\remessa\" ) – Irá gerar o arquivo de remessa no diretório "C:\Remessa", com o nome formatado de acordo com o banco para o qual esta sendo feita a remessa . No caso do Bradesco cb00002.rem, considerando que já exista o arquivo cb00001.rem em C:\Remessa." https://acbr.sourceforge.io/ACBrMonitor/BOLETOGerarRemessa.html
    2 pontos
  17. Obrigado pela dica Amarildo; farei conforme sua sugestão; muito obrigado.
    2 pontos
  18. Fiz alguns testes (Fedora 28) e as libs estão dispostas da seguinte forma: ls -sal /usr/lib64/libssl* /usr/lib64/libssl3.so /usr/lib64/libssl.so -> libssl.so.1.1.0i /usr/lib64/libssl.so.10 -> libssl.so.1.0.2o /usr/lib64/libssl.so.1.0.2o /usr/lib64/libssl.so.1.1 -> libssl.so.1.1.0i /usr/lib64/libssl.so.1.1.0i ls -sal /usr/lib64/libcrypto* /usr/lib64/libcrypto.so -> libcrypto.so.1.1.0i /usr/lib64/libcrypto.so.10 -> libcrypto.so.1.0.2o /usr/lib64/libcrypto.so.1.0.2o /usr/lib64/libcrypto.so.1.1 -> libcrypto.so.1.1.0i /usr/lib64/libcrypto.so.1.1.0i A função LoadLibHack que é responsável por encontrar as libs, procura primeiro pela lib sem versão nenhuma, então bastou ajustar para que ele procure primeiro pelo '.10' para que fosse realizado o carregamento da lib correta OpenSSLExt DE: DLLVersions: array[1..16] of string = ('', '.1.0.6', '.1.0.5', '.1.0.4', '.1.0.3', '.1.0.2', '.1.0.1','.1.0.0','.0.9.8', '.0.9.7', '.0.9.6', '.0.9.5', '.0.9.4', '.0.9.3', '.0.9.2', '.0.9.1'); PARA: DLLVersions: array[1..17] of string = ('.10','', '.1.0.6', '.1.0.5', '.1.0.4', '.1.0.3', '.1.0.2', '.1.0.1','.1.0.0','.0.9.8', '.0.9.7', '.0.9.6', '.0.9.5', '.0.9.4', '.0.9.3', '.0.9.2', '.0.9.1'); Usando a lib da série 1.0 a assinatura ocorreu corretamente tanto usando xsLibXml2 como xsXmlSec e a conexão com o webservice também funcionou normalmente Fiz alguns testes em C com as duas versões da lib série 1.0.2 e 1.1.0 para o método EVP_DigestInit, que é onde esta ocorrendo o erro usando a versão 1.1 da lib ao tentar assinar usando xsLibXml2. Foi preciso fazer várias pequenas modificações no código em C para funcionar na versão nova. Atualmente estou usando a versão 1.1 da lib OpenSSL para emissão de NFe e esta rodando corretamente, as exceções ficam por conta da xsLibXml2 que pode ser substituída pela xsXmlSec e o bug do tópico em questão no método GetNotAfter, verificando no site https://www.openssl.org/source/ o suporte a versão da série 1.0.2 (LTS) terminará em 31/12/2019 e eles recomendam que todos migrem para a próxima versão LTS 1.1.1 que tem suporte até setembro de 2023
    2 pontos
  19. Sim... Todos os componentes devem ser migrados para o ACBrLib (mas isso deve demorar vários meses) O Framework tinha mais o foco em C#, o ACBrLib está sendo escrito para ser compatível com todas e qualquer linguagem que conseguir carregar uma DLL... o ACBrLib será multiplataforma (Linux)
    2 pontos
  20. Boa noite Uma sugestão, dependendo do caso, se o problema for no provedor de internet tentar abrir/registrar um chamado junto a empresa, ou um BO se for o caso, registrando assim o início e fim do problema... Att Ricardo
    2 pontos
  21. Boa tarde a todos, Alessandro, fiz um merge das suas alterações e algumas correções. Joffas, implementei o método Download. Novos métodos implementados no componente ACBreSocial function ConsultaIdentificadoresEventosEmpregador(const CnpjEstab: String; tpEvt: TTipoEvento; PerApur: TDateTime): boolean; function DownloadEventos(const CnpjEmpr, PorID, PorNrRecibo: String): boolean; O primeiro como podem ver é especifico para Eventos do Empregador, tem ainda do Trabalhador e Tabelas que precisam ser implementados. O de Download devemos informar o CNPJ e o ID ou CNPJ e o Numero do Recibo. Exemplo: ACBreSocial.DownloadEventos(xCNPJ, xID, ''); ou ACBreSocial.DownloadEventos(xCNPJ, '', xRecibo); É preciso melhorar, sendo assim preciso que façam testes. Essas alterações já estão disponíveis no repositório. Se faz necessário agora alterar o programa exemplo, ou seja criar novos botões exemplificando esses novos métodos. Desde já o meu muito obrigado a todos.
    2 pontos
  22. Consegui fazer o cancelamento de uma nota. Em anexo estão os arquivos que precisei alterar para conseguir fazer o cancelamento. ACBrNFSeWebServices.pas Publica.ini
    2 pontos
  23. Foto por David Siglin em Unsplash. Olá pessoal, É bom quando encontramos uma ferramenta que facilita ou melhora nosso trabalho, não? Todos devem ter notado que ultimamente temos enviado vários commits ao SVN de remoção de warnings e hints, muitas vezes mencionando a ferramenta FixInsight. Para quem não conhece, essa ferramenta faz uma análise do seu código e aponta possíveis erros e sugere otimizações. Ela é uma ferramenta muito boa, tanto que foi comprada pela TMS e se tornou TMS FixInsight. Já tem um tempo que conheço a ferramenta e sempre tive o desejo de rodá-la em todo o código do ACBr. Mas devido ao tempo não tinha sido possível. Depois de um incentivo (valeu @Waldir Paim), eu resolvi baixar a versão trial e fazer isso. E que bom que fiz. Gostaríamos de compartilhar com vocês algumas coisas que encontramos no nosso código com a ajuda dessa ferramenta. Encontrando pequenos problemas num código gigante Vamos começar por um código que estava no ACBrValidador. Vejam esse código, onde a função ValidarCEP de baixo chama a função ValidarCEP de cima, e tente encontrar um problema: function ValidarCEP(const ACEP, AUF: String): String; begin Result := ValidarDocumento( docCEP, ACEP, AUF); end; function ValidarCEP(const ACEP: Integer; AUF: String): String; begin ValidarCEP( FormatarCEP(ACEP), AUF ); end; Conseguiu ver o problema? Essa função nunca retornaria que um CEP é inválido se você passasse o CEP como inteiro. Precisava de um “Result := ” no início. Simples? Nem tanto quando lembramos do tamanho do projeto ACBr. Temos mais de 200 componentes e mais de 779 mil linhas de código, contribuídos por dezenas ou talvez centenas de programadores, embora a nossa equipe de commiters seja realmente pequena. Só a unit ACBrValidador.pas em questão tem atualmente cerca de 2070 linhas. Não fica muito mais fácil quando uma ferramenta aponta pra você? [FixInsight Warning] ACBrValidador.pas(294): W521 Return value of function 'ValidarCEP' might be undefined Vamos a outro exemplo no pacote ACBrSerial, componente ACBrECF: [FixInsight Warning] ACBrECFDaruma.pas(4638): W503 Assignment right hand side is equal to its left hand side Veja o código (só a parte interessante): else if StrToIntDef(fsNumVersao, -1) >= 345 then begin RetCmd := EnviaComando( ESC + #240 ); RetCmd := Copy(RetCmd, 92, Length(RetCmd)); RetCmd := RetCmd; //<--- Viu aqui??? for A := 0 to fpAliquotas.Count-1 do begin fpAliquotas[A].Total := RoundTo( StrToFloatDef(Copy(RetCmd,(A*14)+1,14),0) / 100, -2 ); end; end; end; Uma linha que não faz absolutamente nada a não ser gastar espaço, memória e CPU. Uma linha desnecessária a menos no código. E você consegue encontrar um no seu aplicativo código que nunca será executado? Ainda no mesmo pacote, veja esse exemplo:  [FixInsight Warning] ACBrECFDataRegis.pas(1838): W509 Unreachable code Nesse código: if (fsArqPrgBcoTXT <> '') and (not FileExists( fsArqPrgBcoTXT )) then begin Msg := ACBrStr( 'Arquivo '+fsArqPrgBcoTXT+' não encontrado. '+ 'Valores padrões serão utilizados.' ) ; raise EACBrECFErro.Create( Msg ); fsArqPrgBcoTXT := '' ; //Essa linha nunca vai ser executada porque tem um raise acima. end ; Mais uma vez, tente imaginar procurar esse problema num projeto tão grande. Não é facilmente percebido se você não tiver olhos treinados e estiver procurando problemas. Vamos a outro exemplo ainda no componente ACBrECF:  [FixInsight Warning] ACBrECFEscECF.pas(1222): W517 Variable 'CHK' hides a class field, method or property Veja esse código: procedure TACBrECFEscECFResposta.SetResposta(const AValue: AnsiString); Var Soma, I, F, LenCmd : Integer ; CHK : Byte ; begin O problema desse código é que ele confunde uma variável local (CHK) com uma propriedade da classe (TACBrECFEscECFResposta.CHK). É preciso analisar todo código em cada lugar que isso acontece para ter certeza quando você está se referindo a propriedade e quando é a variável. Imagine se você confunde uma com a outra. Uma hora você pensa que sua variável está recebendo valores estranhos. Outra hora você pensa que sua propriedade não está sendo atualizada. Nesse caso específico, a variável foi renomeada para vCHK evitando a confusão com a propriedade CHK. O importante é que quando você for ler o código, não precise ficar pensando “Isso aqui é uma variável ou uma propriedade?”. Veja outro exemplo, agora no ACBrSMS: [FixInsight Warning] ACBrSMSClass.pas(192): W511 Object 'ListaSMS' created in TRY block begin try Self.Clear; if not FileExists(APath) then raise EACBrSMSException.CreateFmt('Arquivo "%s" não encontrado.', [APath]); ListaSMS := TStringList.Create; ListaSMS.LoadFromFile(APath); if ListaSMS.Count = 0 then Exit; //(bla bla bla...) finally FreeAndNil(ListaSMS); end; Não é apropriado esse código. O correto é mover a criação do objeto para fora do try..finally. Pense bem, se o objeto não for construído, você não quer que ele seja destruído. A mensagem ajudou a perceber também que esse bloco poderia ser escrito de outra maneira. Aquele raise não precisava estar dentro do try..finally. Evitando problemas futuros Rodando no pacote ACBrOpenSSL tivemos a seguinte mensagem no componente ACBrEAD: [FixInsight Optimization] ACBrEAD.pas(268): O804 Method parameter 'AChavePublicaOpenSSL' is declared but never used Quer dizer, parâmetro ‘AchavePublicaOpenSSL’ declarado mas não utilizado. Veja abaixo a a parte importante da função: function TACBrEAD.ConverteChavePublicaParaOpenSSH( const AChavePublicaOpenSSL: String): String; Var Buffer, Modulo, Expoente: AnsiString; {...} begin // https://www.netmeister.org/blog/ssh2pkcs8.html CalcularModuloeExpoente(Modulo, Expoente); Buffer := EncodeBufferSSH('ssh-rsa') + EncodeHexaSSH(Expoente) + EncodeHexaSSH('00'+Modulo); Result := 'ssh-rsa '+ EncodeBase64(Buffer); end; É estranho esse método ConverteChavePublicaParaOpenSSH não utilizar o parâmetro da chavePública. Qualquer pessoa que visse o método e tentasse chamar passando a chave pública não teria o resultado desejado. Analisando o código melhor vemos que o componente lê a chave pública por meio do método “LerChavePublica”. Nesse caso o correto seria remover o parâmetro para que não haja nenhuma confusão. E essa mensagem no TACBrBALToledo2090: [FixInsight Warning] ACBrBALToledo2090.pas(107): W508 Variable is assigned twice successively if (Length(wStrListDados[1]) = 16) then wDecimais := 1000; {APENAS BLOCO PROCESSADO} wResposta := wStrListDados[1]; //<---- sobreposto pela linha seguinte wResposta := Copy(wStrListDados[1], 5, 7); if (Length(wResposta) <= 0) then Exit; Veja que os dados de uma linha é sobreposta pela outra. O compilador nunca daria um aviso sobre isso. Mais dois exemplos de mensagens e o código a seguir: [FixInsight Warning] ACBrEscEpsonP2.pas(97): W514 Loop iterator could be out of range (missing -1?) [FixInsight Warning] ACBrEscEpsonP2.pas(100): W514 Loop iterator could be out of range (missing -1?) For I := 0 to Length(cTAGS_BARRAS) do TagsNaoSuportadas.Add( cTAGS_BARRAS[I] ); For I := 0 to Length(cTAGS_ALINHAMENTO) do TagsNaoSuportadas.Add( cTAGS_ALINHAMENTO[I] ); Essa eu não sei como não foi detectada antes. Por algum motivo não está sendo emitida a mensagem estouro quando o valor de I chega a 16 no primeiro caso e 3 no segundo. Encontrando erros gerados por Ctrl+C..Ctrl+V No pacote ACBrPAF veja a mensagem gerada: [FixInsight Optimization] ACBrPAF_T_Class.pas(137): O804 Method parameter 'ACampo2' is declared but never used function OrdenarT2(const ACampo1, ACampo2: Pointer): Integer; var Campo1, Campo2: String; begin Campo1 := FormatDateTime('YYYYMMDD', TRegistroT2(ACampo1).DT_MOV) + TRegistroT2(ACampo1).TP_DOCTO + TRegistroT2(ACampo1).SERIE + TRegistroT2(ACampo1).NUM_ECF; Campo2 := FormatDateTime('YYYYMMDD', TRegistroT2(ACampo1).DT_MOV) + TRegistroT2(ACampo1).TP_DOCTO + TRegistroT2(ACampo1).SERIE + TRegistroT2(ACampo1).NUM_ECF; Result := AnsiCompareText(Campo1, Campo2); end; Essa função é utilizada para ordenar os registros T2 do PAF. Mas veja que ela compara o registro “ACampo1” com ele mesmo. Suspeita: Ctrl+C e Ctrl+V... Quem nunca??... Outra situação diferente, mas relacionada com ordenação apareceu no ACBrSintegra. Na verdade 4 situações no ACBrSintegra, semelhantes entre si. Vou mostrar apenas uma, mas dessa vez a mensagem do FixInsight fica pra depois. Vamos a um jogo dos sete erros entre os ifs e else no código abaixo: function Sort60A(Item1, Item2: Pointer): Integer; var witem1, witem2 : TRegistro60A; begin witem1 := TRegistro60A(Item1); witem2 := TRegistro60A(Item2); if witem1.Emissao>witem2.Emissao then begin if witem1.NumSerie>witem2.NumSerie then Result:=1 else if witem1.NumSerie=witem2.NumSerie then Result:=0 else Result:=-1; end else if witem1.Emissao = witem2.Emissao then begin if witem1.NumSerie>witem2.NumSerie then Result:=1 else if witem1.NumSerie=witem2.NumSerie then Result:=0 else Result:=-1; end else begin if witem1.NumSerie>witem2.NumSerie then Result:=1 else if witem1.NumSerie=witem2.NumSerie then Result:=0 else Result:=-1; end; end; Conseguiu encontrar os erros? Bem, se você procurou diferenças, não deve ter encontrado nada. E não existe mesmo. Veja a mensagem da ferramenta: [FixInsight Warning] ACBrSintegra.pas(3410): W507 THEN statement is equal to ELSE statement São dois if e um else pra fazer a mesma coisa... A correção foi remover o IFs e ELSE.  Agora vamos ao pacote ACBrSPED. Depois de remover muitos e muitos parâmetros desnecessários apontados pelo FixInsight, veja esse código: function CodAjToStr(const AValue: TACBrCodAj): string; begin if AValue = codAjAcaoJudicial then Result := '01' else if AValue = codAjAcaoJudicial then Result := '02' else if AValue = codAjLegTributaria then Result := '03' else if AValue = codAjEspRTI then Result := '04' else if AValue = codAjOutrasSituacaoes then Result := '05' else if AValue = codAjEstorno then Result := '06'; end; A mensagem é a seguinte: [FixInsight Warning] ACBrEPCBlocos.pas(2071): W512 Odd ELSE-IF condition (review lines 2071 and 2073) Viu lá? Os dois primeiros ifs estão comparando AValue com o mesmo valor, "codAjAcaoJudicial". O segundo deveria ser "codAjProAdministrativo". Provavelmente mais um Ctrl+C..Ctrl+V. Mensagens para otimização de código Nem todas as mensagens geradas são de erros. Algumas são mensagens de otimização. Muitos dos commits que temos feito estão relacionados a uma mensagem como estas abaixo: [FixInsight Optimization] ACBrSATClass.pas(776): O801 CONST missing for unmodified string parameter 'CNPJvalue' [FixInsight Optimization] ACBrSATClass.pas(776): O801 CONST missing for unmodified string parameter 'assinaturaCNPJs' Ela pode ser gerada numa função como essa: function TACBrSATClass.AssociarAssinatura( CNPJvalue, assinaturaCNPJs : AnsiString) : String ; begin ...// um código que não altera nenhum dos parâmetros citados end; Essas mensagens estão dizendo que os parâmetros 'CNPJvalue' e ‘assinaturaCNPJs’ do tipo string não estão sendo alterados dentro da função a que eles pertencem. Nesse caso é bem provável que os parâmetros devessem ter um prefixo CONST na sua declaração, como abaixo: function TACBrSATClass.AssociarAssinatura(const CNPJvalue, assinaturaCNPJs : AnsiString) : String ; begin ...// um código que não altera nenhum dos parâmetros citados end; Não vou entrar em muitos detalhes sobre isso, mas usar CONST tem alguns benefícios, principalmente em caso de strings: A execução é mais rápida, porque o compilador pode otimizar o código. No caso de strings, não tem contagem de referências; O compilador garante que você não vai alterar os parâmetros passados gerando um efeito colateral indesejado em quem chamou as funções; O código fica mais legível, porque você pode ler que a intenção é não alterar o parâmetro passado; Como os parâmetros são imutáveis, pode tornar o código mais ThreadSafe; Se quer saber um pouco mais sobre isso, recomendo os seguintes links: All hail the “const” parameters! Is the use of ‘const’ dogmatic or rational? Concluindo... Bom pessoal, ainda temos bastante pra fazer. Contudo, queremos dizer que o FixInsight tem nos ajudado melhorar nosso código. Ficamos tão satisfeitos que entramos em contato com a TMS e eles generosamente nos cederam uma licença da versão Pro pra continuar nosso trabalho. Muito obrigado TMS. Agora, se você quer nossa opinião, essa é uma ferramenta altamente recomendada e está disponível pra toda versão do Delphi a partir do Delphi 2006. Se você tem alguma dúvida, baixe a versão trial e comece agora mesmo a usar no seu código. A versão trial limita as mensagens a 5 por units e funciona por 30 dias. Mas é o suficiente pra se perceber como é muito útil, como aconteceu com a gente. Quer um passo a passo em como utilizá-la? Veja o próximo post logo abaixo.
    1 ponto
  24. Olá pessoal, Para quem ainda não conhece, o Lazarus/FPC é uma poderosa IDE e compilador da Linguagem Object Pascal, muito semelhante ao Delphi, e desenvolvido totalmente em Código Aberto... ( Saiba mais em: https://www.lazarus-ide.org/index.php?page=about ) Hoje ocorreu o lançamento da versão 2.0.0 do Lazarus... O anúncio oficial, pode ser lido no fórum do Lazarus: http://forum.lazarus-ide.org/index.php/topic,44161.0.html Essa versão ainda usa o FPC (Free Pascal Compiler), na versão 3.0.4, então não devemos ter mudanças brusca na compilação dos projetos existentes... Você pode baixar o Lazarus 2.0, na página oficial do Projeto: https://www.lazarus-ide.org/ (Observe porém, que o Download sugerido, provavelmente será de um Compilador para Windows 64... O que muitas vezes não é o desejado, para manter a compatibilidade com as diferentes versões de Windows e as DLLs existentes) Portanto, recomendo selecionar a versão 32 Bits, conforme destacado, na imagem abaixo... Se você quer realmente gerar aplicações 64 bits, ainda poderá fazer um Cross-compiling , baixando um instalador complementar em: https://sourceforge.net/projects/lazarus/files/Lazarus Windows 32 bits/Lazarus 2.0.0/ O ACBr tem um ótimo suporte ao Lazarus/FPC, isso porque a maioria dos Consultores do Projeto ACBr, usam Lazarus/FPC como principal IDE para Desenvolvimento, e todos os nosso projetos, como: ACBrMonitorPLUS, e ACBrLib, são desenvolvidos em Lazarus/FPC. Abaixo segue um Screen Shot da minha IDE de trabalho (clique para aumentar) Quer conhecer mais aplicações desenvolvidas em Lazarus ? Veja esse Link: http://wiki.freepascal.org/Lazarus_Application_Gallery
    1 ponto
  25. Boa tarde. Podemos trabalhar com este que você iniciou agora, vcs está informando os links corretos? Você chegou a alterar algo? Att.
    1 ponto
  26. Boa tarde. Forneça mais detalhes....qual componente para impressão está usando, qual impressora? Att.
    1 ponto
  27. Rescisão complementar, enviada posteriormente ao desligamento. Você precisa gerar um S-1200 informando as rubricas pendentes no grupo infoPerAnt
    1 ponto
  28. Boa tarde Balena, Muito obrigado pela colaboração, ainda hoje estarei enviando para o repositório.
    1 ponto
  29. Desculpe Italo, atualizei agora e está sendo utilizado a Natureza da Operação. Falando exclusivamente da IPM, este é outro campo que não parece ser o mais adequado, visto que existe o CodigoTributacaoMunicipio. Anexei o atual alterado para analise. Obrigado. pnfsNFSeW_IPM.pas
    1 ponto
  30. Bom Dia Pessoal conversando hoje com um dos responsáveis da MF-e ele me repassou que até a próxima semana os Driver da MFe já vai estar liberado. Mais já tenho o link aqui para vc já iniciando as alterações. Windows https://servicos.sefaz.ce.gov.br/internet/download/projetomfe/WindowsZip.zip Linux 32x https://servicos.sefaz.ce.gov.br/internet/download/projetomfe/Linux32bitZip.zip Linux 64x https://servicos.sefaz.ce.gov.br/internet/download/projetomfe/Linux64bitZip.zip
    1 ponto
  31. Boa tarde. Obrigada por compartilhar a informação. Att.
    1 ponto
  32. Atualizei os fontes hoje de manha, na base de homologação está cancelando normal.
    1 ponto
  33. Bom dia. O problema é que a agência para este banco tem o tamanho 4, logo você deve passar 3700. Note o que diz o manual Na impressão do campo Agência/Código Beneficiário do boleto Bradesco, deverá ser preenchido com a informação que será fornecido pelo banco por ocasião do início dos testes. Exemplo: “3114-3 / 0176300-8” (campo numérico). Att.
    1 ponto
  34. Perfeito! Muito obrigado @Italo Jurisato Junior
    1 ponto
  35. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
    1 ponto
  36. 1 ponto
  37. Bom Dia ! Acabei de testar em ambiente produção e também recebi timeout. Att.
    1 ponto
  38. Humm.. boa pegada... Pode enviar os arquivos modificados ?
    1 ponto
  39. Verificado que no seu xml o valor total produtos (818,96) + voutro (81,89) seria 900,85. Diferença de 147,41 exatamente o valor do ICMS. ICMS Próprio não soma na NF .
    1 ponto
  40. Muito obrigado. Show de bola...
    1 ponto
  41. Boa noite, O seu tópico foi movido por ter postado no lugar errado. ACBrMDFe se refere a outro tipo de Documento Fiscal Eletrônico que não é a Nota Fiscal Eletrônica e sim o Manifesto de Documentos Fiscais Eletrônicos. O que você esta fazendo é enviar o Evento de Manifestação do Destinatário referente a uma Nota Fiscal Eletrônica, como pode ver são coisas totalmente diferentes. Respondendo a sua pergunta: Se tem o campo xMotivo é bem provável que tem o campo chamado cStat e nele contem o código.
    1 ponto
  42. Para programar, costumo ouvir os mortos.?
    1 ponto
  43. Boa tarde Bruno, Já tentou aumentar o valor da propriedade Timeout do componente?
    1 ponto
  44. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
    1 ponto
  45. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
    1 ponto
  46. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
    1 ponto
  47. Instalando o FixInsight para utilizar no seu projeto Para utilizar o TMS FixInsight no seu projeto, primeiro faça o download da versão trial no site oficial. O FixInsight está disponível para todas as versões do Delphi a partir do Delphi 2006. A versão pro possui linha de comando, permitindo você executar a ferramenta mesmo quando o Delphi não está aberto. Isso permite você integrar com seu sistema de Build ou sistema de integração contínua. A instalação é muito simples, bastando escolher em qual versão do Delphi você quer instalar. Após a instalação as seguintes entradas vão aparecer no menu Project: E também no "Project Manager" (clique com botão direito no projeto): A entrada "FixInsight Settings..." configura a ferramenta e pode habilitar ou desabilitar as mensagens geradas. Ela abre uma tela como essa: Na imagem acima você pode observar que a mensagem "C101 Method '%s' is too long (%d lines)" está selecionada e permite a configuração de quantas linhas para você um método, function ou procedure não deve exceder. Dá pra ver também que as mensagens C102 e C103 estão desabilitadas e assim não geram avisos. A entrada "Run FixInsight for unit1.pas" executa a ferramenta para a unit aberta atualmente (neste caso Unit1.pas). A entrada "Run FixInsight" executa a ferramenta no projeto atual inteiro. Rodando o FixInsight no seu projeto Como mencionado, é por meio da entrada 'Run FixInsight" que você executa a ferramenta no seu projeto. Então basta abrir o seu projeto e executar por meio do menu Project -> Run FixInsight. Ele vai ser executado e abrir uma aba na janela de mensagens como na imagem abaixo. Dois cliques te jogam na unit e linha relacionada a mensagem: Agora é com você. Você analisa a mensagem o código e verifica se algo pode ser feito.
    1 ponto
  48. Da uma olhada no fonte ae cara, se vc conseguir corrigir anexa no tópico. Tem sempre um commiter esperando contribuições. Abraços!
    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.

The popup will be closed in 10 segundos...