Painel de líderes
Conteúdo popular
Showing content with the highest reputation on 12-02-2019 em todas as áreas
-
Funcionou, fizemos 2 coisas a saber: 1) No gmail assinalamos "Acesso para aplicativos menos seguros". 2) Na configuração do ACBrMonitor no campo codificação colocamos "UTF_8. Não sei qual resolveu o problema. Mas está funcionando. Agradeço vossa atenção.4 pontos
-
Recebemos o seguinte e-mail do SEFAZ-CE Informativo MFE Novos endereços do Integrador e Validador Fiscal A Secretaria da Fazenda (Sefaz) comunica que serão utilizados novos endereços para o ambiente do Integrador e Validador Fiscal e que, até a data 14/02/2019, devem ser acrescentados, no firewall dos clientes, a saída para a lista abaixo: –https://storeintegradorsefazce.blob.core.windows.net/integrador –https://validadorsefazce.azurewebsites.net/ –https://integradorsefazce.azurewebsites.net/ –http://validadorsefazce.azurewebsites.net/ –http://integradorsefazce.azurewebsites.net/ A mudança se faz necessária para que o funcionamento do sistema de Módulo Fiscal Eletrônico (MFe) não sofra nenhuma indisponibilidade. Informamos também que será disponibilizada até a data 11/02/2019 no endereço http://cfe.sefaz.ce.gov.br/mfe/informacoes/downloads#/ uma nova versão do Driver MFe para TESTES que permitirá os Aplicativos Comerciais comunicar diretamente com o Módulo Fiscal usando a biblioteca de funções do Driver, sem a necessidade de passar pelo Integrador. O uso do Integrador continua obrigatório para o envio de informações de pagamento e emissão de NFC-e. Para utilizar a nova versão do Driver que está sendo produzido, será exigida a atualização do Integrador, com previsão de disponibilização até o dia 14/02. Para mais informações, utilize o Call Center (85) 3108-2200, opção 4 (informática). Fortaleza, 08 de fevereiro de 2019. Secretaria da Fazenda do Estado do Ceará Equipe MFe/Sefaz-CE3 pontos
-
Existe o idDocAntPap e o o idDocAntEle. O primeiro serve para informar os documentos anteriores em papel, ou seja, não é um CT-e. Já o segundo serve para informar os documentos anteriores eletrônicos que neste caso devemos informar a chave do CT-e emitido anteriormente.2 pontos
-
Atenção para esse XML de exemplo que não é um XML válido, já que foi reconstruído usando um software de terceiros (FSist). https://www.sefaz.rs.gov.br/cte/cte-val.aspx Se você solicitar o XML original da nota deverá constar nela as tags <idDocAntPap> já que é o que é informado na consulta pública pelo site. O que não significa que isso seja um procedimento correto, se estão sendo informadas as NFe como documento de transporte anterior.2 pontos
-
Boa tarde Armando, Muito obrigado pela colaboração, ainda hoje estarei enviando para o repositório.2 pontos
-
Boa tarde Atualize para ultima versão... Note que seu XML não gerou tag (ANTT / CIOT). Na ultima versão aparentemente está gerando correto...2 pontos
-
Boa tarde, Claro, fico feliz em ajudar.... Vou realizar as alterações para o evento 2240 e postar aqui os fontes... Só que como é a primeira vez que estou alterando o fonte do ACBR peço que me revisem e me sinalizem os problemas encontrados, para que não ocorra em uma próxima vez, pode ser?2 pontos
-
Vc precisa solicitar uma consultoria para analisar esse tipo de operação, porque não sei se ela se enquadra nos critérios da subcontratação. Ao meu ver deveria ser emitido um CT-e normal.2 pontos
-
Boa tarde Ocorreu a mesma situação comigo e resolvi setando a propriedade DANFE do ACBrNFSe. Abraço.2 pontos
-
Boa tarde Adilson, Usamos dois componentes, o ACBrNFSe e o ACBrNFSeDANFSERL (Fortes Report) ou ACBrNFSeDANFSEFR (Fast Report). No ACBrNFSe existe uma propriedade que você "linka" os dois componentes, isso esta sendo feito?2 pontos
-
boa tarde Waldir! DEU CERTO! sabe o que era!? estava gravando um arguivo txt de log no evento ontransmit do acbrnfe, o que derrubava a conexão com o servidor da sefaz: procedure TServerMethods1.ACBrNFe1Transmit(const Dados, URL, SoapAction, MimeType: string; var Resposta: string; var HTTPResultCode, InternalErrorCode: Integer); begin Writeln(varq, 'ACBrNFe1Transmit01' ); end; Consegui enviar para sefaz e foi recebido normalmente, o acbr é muita ferramenta, vs estão de parabéns. permite que eu tenha n camadas de aplicação, demais. obrigado a todos!2 pontos
-
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado2 pontos
-
Boa tarde Altere a configuração de "Largura" no componente de impressão NFCe, experimente deixar com 280, ou realize testes alterando essa propriedade...2 pontos
-
Agora entendi @Felipe E. Resende Mesquita e @BigWings Obrigado pela força RESOLVIDO2 pontos
-
2 pontos
-
Você pode usar o visualizador que a Caixa disponibiliza. http://www.caixa.gov.br/empresa/pagamentos-recebimentos/recebimentos/nova-cobranca-bancaria/Paginas/default.aspx Pelo que vi esse campo não é mesmo disponibilizado no retorno. Se você quer saber a data do pagamento do boleto o correto é usar DataOcorrencia conforme o Felipe sugeriu.2 pontos
-
O Erro deve ficar registrado no Log ou no Memo de respostas (se o Monitor estiver habilitado para exibir as respostas)2 pontos
-
Então @Felipe E. Resende Mesquita a data da ocorrência já traz veja na imagem...2 pontos
-
30/12/1899 é data em branco, valor 0 no tipo TDateTime. Significa que a data da baixa não está sendo retornada ou capturada. Veja no arquivo de retorno se a informação existe.2 pontos
-
Estou em outro local, a emissão está em máquina remota. Vou verificar no Gmail a liberação "Acesso para aplicativos menos seguros" nas configurações de segurança da conta. Se não der certo faço novo remoto e anexo o log. Com relação a mensagem de erro: o programa não diz nada. Apenas não faz.2 pontos
-
2 pontos
-
Atualizei, reinstalei e testei, está funcionando. Obrigado.2 pontos
-
Ótimo dia, Leonardo! O SAT faz o Rateio de Desconto no ST em cada item utilizando a fórmula: Desconto = Valor Item/Total CFE * Desconto ST. Feito isto, o valor é arredondado. Depois, os valores dos Rateios são somados e, caso haja saldo positivo, o mesmo é jogado no item de maior valor. E quanto ao Valor Líquido do Item estar zerado, não tem problema, pois foi aceito pela SEFAZ. Abaixo um exemplo de como é feito o cálculo: Qualquer dúvida, estou à disposição!2 pontos
-
vi uma dica do Italo, para não só atualizar mas deletar antes todo conteúdo da pasta acbr e fazer update. fiz isso, reinstalei apagando os arquivos anteriores, resolveu meu problema.2 pontos
-
Subi as alterações para o repositório. Favor atualizar os fontes e efetuar os testes.2 pontos
-
vi uma dica do Italo, para não só atualizar mas deletar antes todo conteúdo da pasta acbr. fiz isso, reinstalei apagando os arquivos anteriores, resolveu meu problema.2 pontos
-
2 pontos
-
ok... cliente, acha q consegue as informacoes comercial de algum cpf ou cnpj... vou repassar a resposta a ele.. (espero q ele entenda) obrigado a todos !!2 pontos
-
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 Testes usando os componentes e Demos do ACBr Utilizamos a versão 3.2.1 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: https://www.projetoacbr.com.br/forum/files/file/364-posprintertesteexe/ Durante os testes deixamos as configurações desta forma: Modelo: ppEscPosEpson; Porta: COM1; Colunas: 48; Espaços: 30; Linhas Pular: 7; Pag. codigo: pc860; KC1: 1; KC2: 0; FatorX: 1; FatorY: 1; Demais configurações não alteramos; Resultados: Page Mode: Funcionou conforme o esperado, permitindo o uso de DANFCe com QRCode Lateral 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: Deve-se primeiro, apagar o logotipo presente na memória da impressora antes de gravar um novo. O motivo, deve-se à impressora travar se enviado apenas o comando de gravação. 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: pc860: 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 firmware da impressora, não imprimindo o QRCode de tipo 4 e o logotipo, usando em conjunto, os comandos de pagemode. Os testes foram realizados com o uso do SATTeste na versão 2.1. Ele é um demo do ACBrSAT, parte do projeto ACBr. Ele está disponível neste link:2 pontos
-
Bom dia José, Vou tentar levantar essa informação com o pessoal do banco. Qualquer novidade volto a comentar.2 pontos
-
Bom dia Conforme mencionado acima, não tem essa configuração no componente ACBr em Fortes, mas você tem os fontes... Pode alterar se desejar. Precisa conhecer um pouco sobre os componentes da paleta Fortes Report CE. Se você já utiliza o Fast, essa questão de montagem de layout em tela é bem parecido no Fortes...2 pontos
-
bom dia.. https://acbr.sourceforge.io/ACBrMonitor/NFEImprimirDANFEPDF.html2 pontos
-
Boa tarde Carlos, Sim, para contemplar a impressão dos dados referente a Retirada e Entrega.2 pontos
-
Boa tarde, Esse método ConsultaCadastro é oferecido pela SEFAZ sendo assim a pessoa jurídica (CNPJ) ou pessoa física (CPF) que se pretende consultar tem que ser contribuinte do ICMS. Portanto não serve para obter dados gerais de pessoas físicas/jurídicas.2 pontos
-
Só para dar um retorno, realmente o meu problema eram os componentes que estavam sendo criados e não estavam sendo destruídos, consegui fazer a varredura do projeto revisando alguns Timer bem antigos em que não estavam sendo devidamente validados a criação/destruição dos componentes (Querys, conexões e DataTables). Deixei rodando um teste que já está a 80 horas sem apresentar falhas, foram por volta de 50 milhões de loops (Situação bem forçada e bem acima da realidade). Antes o problema ocorria antes das primeiras 24 horas por volta dos 15 milhões de loops.2 pontos
-
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
-
Só para constar, no meu caso o antivirus é o Norton. Mesmo desativando ele não estava instalando. Não sei dizer se é isto, meu HD é SSD, então grava e lê muito rápido. NO meu caso para dar certo, no momento da instalação eu abri a pasta onde o arquivo de log ( log_Delphi_10.2_Tokyo.txt ) era gerado. A cada 3 segundos mais o menos eu selecionava e apertava "del " para apagar o arquivo. O Sistema de instalação então criava o arquivo novamente e depois de uns 3 a 5 segundos eu apagava novamente. Desta forma a instalação deu certo.1 ponto
-
1 ponto
-
Mariana, A coisa esta feia, cada dia que passa esses provedores arrumam algo para complicar.1 ponto
-
Boa tarde Júlio, Favor anexar os arquivos que você alterou para que possamos analisar. Desde já muito obrigado pela colaboração.1 ponto
-
Caros, já resolvi a questão, essa tela de solicitação de impressão existe para configurar a propriedade ACBrNFe1.DANFE.NumCopias, e no caso eu devo setar para 0 (zero). Isso está no meu software. Obrigado,1 ponto
-
Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.1 ponto
-
Boa tarde Juliano, Favor entrar em contato com o provedor, somente eles podem informar o que esta ocorrendo.1 ponto
-
Boa tarde Eduardo, Notei que o CFOP do CT-e que foi autorizado é diferente do que o seu. O seu é 5353 e o que foi autorizado é 5351.1 ponto
-
vc tentou essa tag? <idDocAntPap> <tpDoc>02</tpDoc> <serie>123</serie> <nDoc>114212</nDoc> <dEmi>2011-05-08</dEmi> </idDocAntPap> With infCTeNorm.docAnt.emiDocAnt.Add do begin CNPJCPF := DM.qryFreteNfs.FieldByName('CpfCnpj').AsString; IE := DM.qryFreteNfs.FieldByName('InscricaoEstadual').AsString; UF := DM.qryFreteNfs.FieldByName('UF').AsString; xNome := DM.qryFreteNfs.FieldByName('RazaoSocial').AsString; With idDocAnt.Add.idDocAntPap.Add do begin // TpcteTipoDocumentoAnterior = (daCTRC, daCTAC, daACT, daNF7, daNF27, daCAN, daCTMC, daATRE, daDTA, daCAI, daCCPI, daCA, daTIF, daOutros); tpDoc := daOutros; serie := Trim(Copy(DM.qryFreteNFs.FieldByName('SerieNF').AsString+space(3),1,3)); subser := ''; nDoc := DM.qryFreteNFs.FieldByName('NFiscal').AsString; dEmi := DM.qryFreteNFs.FieldByName('DTEmissao').AsDateTime; end; end; end;1 ponto
-
Bom dia Anderson, Acredito que são códigos da tabela 19 do eSocial - Motivos de Desligamento1 ponto
-
Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.1 ponto
-
Bom dia Italo! Resposta da Empresa: Somente para Rio Verde. As demais segue o que está no manual!1 ponto
-
Obrigado por reportar... De qualquer forma os ajustes realizados pelo Italo estará atualizado na próxima versão.1 ponto
-
Opa Daniel, no caso, se eu fosse fazer os testes com o ERP via DLL, eu conseguiria utilizar o Emulador, correto?1 ponto