Jump to content

Leandro Araújo

Membros
  • Content Count

    124
  • Joined

  • Last visited

Community Reputation

10 Good

About Leandro Araújo

  • Rank
    Membro
  • Birthday 12/12/1990

Contact Methods

Profile Information

  • Sexo
    Masculino
  • Localização
    Campo Verde - Mato Grosso - Brasil

Recent Profile Visitors

962 profile views
  1. Boa tarde. Gostaria de relatar um problema que ocorreu com nosso sistema emissor, com relação ao preview/impressão da Carta de Correção da NF-e. O que acontece é que após exibir um DANFE e depois tentar exibir o preview de uma Carta de Correção ocorre um Access Violation, nesse caso testei apenas usando a engine FastReport. Percebi que o erro ocorre nos métodos "PrepareReport" e "frxReportBeforePrint" da unit "Fontes\ACBrDFe\ACBrNFe\DANFE\NFe\Fast\ACBrNFeDANFEFRDM.pas". Ao que parece o objeto NFe (FNFe) que é usado dentro deles está assigned mas suas propriedades estão nil, ele passa na verificação do Assigned(), mas ao acessar as propriedades elas estão nil. Se carregar uma NF-e no componente ACBrNFe e emitir um DANFE ele fica com referências apontadas internamente no DANFE associado ao ACBrNFe, então mesmo se der um ACBrNFe.NotasFiscais.Clear e carregar somente o XML do evento de CCe o erro ocorre. O que eu fiz foi apenas passar nil para as variáveis FNFe e FEvento ao final de cada método "ImprimirDANFE", "ImprimirDANFEResumido", "ImprimirDANFEPDF", "ImprimirEVENTO", "ImprimirEVENTOPDF", "ImprimirINUTILIZACAO", "ImprimirINUTILIZACAOPDF", para assim não apontar para uma referência inválida e a verificação funcionar corretamente em "PrepareReport" e "frxReportBeforePrint". // Está em "ImprimirDANFE", "ImprimirDANFEResumido", "ImprimirDANFEPDF", "ImprimirEVENTO", "ImprimirEVENTOPDF", "ImprimirINUTILIZACAO", "ImprimirINUTILIZACAOPDF": { DONE -oLeandro : (03/09/2019) - Alteração para não causar AccessViolation após: 1 - Imprimir um DANFE; 2 - Imprimir um Evento (Carta de Correção); AccessViolation ocorre nos métodos: * PrepareReport * frxReportBeforePrint Provável motivo: Objeto NFe (FNFe) está assigned mas suas propriedades estão nil. } FNFe := nil; FEvento := nil; Segue o arquivo ACBrNFeDANFEFRDM.pas em anexo, as alterações estão marcadas com um "DONE -oLeandro :" , se a alteração proceder e for útil, peço aos administradores que adicionem a alteração no svn. Muito obrigado. ACBrNFeDANFEFRDM.pas
  2. Entendi. No caso, aqui com MySQL usamos o tipo Decimal com escala/precisão de 25,10, ficando: Decimal(25,10), em alguns outros casos para quantidades e outros valores usamos o Double(25,10). Deixamos o banco gravar um bom número de decimais, mesmo que não use, e tratamos o arredondamento nos cálculos do lado da aplicação usando o método SimpleRoundTo, não tivemos mais problemas com arredondamentos. As máscaras dos campos também ficam dinâmicas, configuradas na inicialização do sistema conforme uma configuração pré-definida. Não seria melhor você aumentar a quantidade de casas decimais para o banco gravar e tratar esses arredondamentos no código? Outra coisa, tem algum outro tipo pra monetário no FireBird?
  3. Boa tarde. Qual banco de dados você usa e como está a precisão desses campos no banco?
  4. Boa tarde @Vicente Carletto Scalfoni, legal! Estava aguardando uma confirmação para enviar alterações. No caso deixei da seguinte forma, tendo que colocar na uses a "pcnConversao" claro, não sei se estaria misturando as coisas, mas só pra poder usar as funções "EnumeradoToStr/StrToEnumerado": // Valores Indicador Origem Processo const TACBrOrigemProcessoStr: array [0 .. 5] of string = ('0', '1', '2', '3', '9', ''); // ... function OrigemProcessoToStr(AValue: TACBrOrigemProcesso): string; begin Result := EmptyStr; Result := EnumeradoToStr(AValue, TACBrOrigemProcessoStr, [opSefaz, opJusticaFederal, opJusticaEstadual, opSecexRFB, opOutros, opNenhum]); end; function StrToOrigemProcesso(const AValue: string): TACBrOrigemProcesso; var WOk: Boolean; begin Result := opNenhum; Result := StrToEnumerado(WOk, AValue, TACBrOrigemProcessoStr, [opSefaz, opJusticaFederal, opJusticaEstadual, opSecexRFB, opOutros, opNenhum]); end; Mas no caso da sua correção, você manteve o padrão que jé tem nas funções da "ACBrEFDBlocos". Só uma pergunta, vi que anexou também o arquivo "ACBrEFDBloco_G_Class.pas", qual foi a correção feita nele? Obrigado!
  5. Bom dia. Tenho uma dúvida, com relação às funções "OrigemProcessoToStr" e "StrToOrigemProcesso" da unit "ACBrEFDBlocos". No Guia Prático da EFD, versão 2.0.21/2.0.22 o campo "07 - IND_PROC" do Registro "E116" recebe como valores válidos [0, 1, 2, 9], mas tive um problema ao validar o arquivo pelo PVA e percebi que nas funções são tratados apenas os valores [1, 3, 9], vide os tipos opJusticaFederal, opSecexRFB e opOutros. // Enumeração para string function OrigemProcessoToStr(AValue: TACBrOrigemProcesso): string; begin if (AValue = opJusticaFederal) then Result := '1' else if (AValue = opSecexRFB) then Result := '3' else if (AValue = opOutros) then Result := '9' else Result := ''; end; // string para enumeração function StrToOrigemProcesso(const AValue: string): TACBrOrigemProcesso; begin if AValue = '1' then Result := opJusticaFederal else if AValue = '3' then Result := opSecexRFB else if AValue = '9' then Result := opOutros else Result := opNenhum; end; /// Indicador da origem do processo TACBrOrigemProcesso = (opSefaz, // 0 - Sefaz opJusticaFederal, // 1 - Justiça Federal opJusticaEstadual, // 2 - Justiça Estadual opSecexRFB, // 3 - Secex/RFB opOutros, // 9 - Outros opNenhum // Preencher vazio ); Gostaria de saber se realmente são dessa forma as duas funções citadas ou se alguém teve também algum problema relacionado. De momento vou fazer a conversão do valor a parte para não modificar fontes do ACBr. Obrigado.
  6. Obrigado @Daniel S Ferreira, aqui deu certo também, no meu caso deixei assim: // Caso tenha que adicionar mais alguma UF: if (CUF in [51]) then // Quando MT adicionar caractere pipe entre o IdCSC e CSC. begin sCSC := cIdCSC + '|' + cCSC; end else begin sCSC := cIdCSC + cCSC; end; Sim @BigWings, não bate com as orientações do algoritmo indicado pelo manual, mas aqui no MT não está autorizando sem colocar o caractere pipe entre o IdCSC e o CSC. Seria algum erro do ambiente autorizador? Vou enviar um e-mail perguntando a eles se realmente no MT é assim, pra não correr o risco de ter que fazer alterações no componente novamente. Obrigado.
  7. Verifiquei o mesmo erro, quando em Debug, e mais especialmente quando no grupo dos impostos é informado o indicador de Simples Nacional, com outras tributações não aconteceu esse erro. Teria alguma coisa a ver com a estrutura do .xml ao componente ler o mesmo para gerar o DACTE? <ICMS> <ICMSSN> <indSN>1</indSN> </ICMSSN> </ICMS> Observei que sempre estoura no abaixo método da unit frxClass.pas: function TfrxCustomMemoView.CalcAndFormat(const Expr: WideString; Format: TfrxFormat): WideString; // ... begin // .... Result := FormatData(FValue, Format); // <- Para nessa linha (6812 na versão do FastReport que tenho) finally end; end; Ao que tudo indica alguma coisa com algum memo do .fr3, mas não consegui identificar.
  8. @CleitonMaciel, Exatamente, é só seguir os passos e dá certo... Algum problema com a tela de exportação do próprio Fast Report, removendo e adicionando novamente o componente resolve. Muito obrigado.
  9. Boa tarde. Me corrijam se eu estiver errado, mas com relação a esse erro o que acontece é que para quem tinha uma revisão anterior do ACBr, a propriedade ImprimirUnQtVlComercial que está na unit ACBrNFeDANFEFR dos fontes do ACBr era do tipo Boolean, porém o tipo dessa propriedade foi atualizado para TImprimirUnidQtdeValor, no código fonte está atualizado, mas para o componente em design-time para se trabalhar no IDE (o arquivo .bpl) ainda continua como tipo Boolean, ao recompilar os pacotes pelo instalador do ACBr as .bpl's são geradas novamente, com o tipo correspondente nos fontes. // Unit ...\ACBr\Fontes\ACBrDFe\ACBrNFe\DANFE\NFe\Fast\ACBrNFeDANFEFR.pas // Linha 120: // (Aqui antes era Boolean, necessário recompilar para gerar o tipo corrento na .bpl para usar em tempo de design no projeto, // caso contrário é realizada a tentativa de injetar um valor Boolean dentro de uma propriedade do tipo Enum, // por isso o erro "EReadError, invalid property value"): property ImprimirUnQtVlComercial: TImprimirUnidQtdeValor read FImprimirUnQtVlComercial write FImprimirUnQtVlComercial; Eu também estava com esse problema, recompilei e resolvi. Dica: Para evitar possíveis erros de compilação, remova da library do seu Delphi os path's referentes a componentes de terceiros, deixando somente suítes de relatórios, JEDI e o essencial, depois disso volte como estava, com os caminhos do ACBr junto, obviamente. Boa sorte e bom trabalho a todos.
  10. Bom dia. Era isso mesmo que queria saber. Então aqui no meu caso só irei consultar o recibo em um caso de falha na comunicação, etc, já que o componente realiza essa consulta imediata no envio. Obrigado.
  11. Observei o comportamento do componente, e ele faz a consulta do recibo automaticamente: // Se utilizar a chamada: ...Enviar(FLote, FImprimir); Pois na unit 'ACBrCTeWebServices' linhas 2970-2982, internamente ele faz a consulta imediata do recibo. // 'ACBrCTeWebServices' linhas 2970-2982: function TWebServices.Envia(ALote: String): Boolean; begin FEnviar.Lote := ALote; if not Enviar.Executar then Enviar.GerarException( Enviar.Msg ); FRetorno.Recibo := FEnviar.Recibo; if not FRetorno.Executar then FRetorno.GerarException( FRetorno.Msg ); Result := True; end; Sendo assim, não preciso realizar a consulta manualmente do recibo em uma primeira tentativa de envio, certo? Obrigado.
  12. Sobre modal Rodoviário Outros Serviços era essa a dúvida que eu precisava tirar, já que nele possui o TAF. Muito obrigado @Italo Jurisato Junior, já li bastante o manual, inclusive comparando com o da versão 2.00, vou observar com mais atenção, mas agora ficou mais esclarecido sobre esse ponto. Obrigado.
  13. É pessoal, acho que não tem o que discutir mesmo, é o que o manual e o o pacote de liberação PL_CTe_300 indicam. E também aqui nessa página Análise Técnica das Diferenças no Manual do CTe v3.00 fala que todo o grupo de Veículos (0-4) foi excluído, portanto agora podendo ser informado 1 no grupo rodoOS. Independentemente, muito obrigado a todos, alguém quiser dizer alguma coisa sobre o assunto é bem-vindo.
×
×
  • Create New...