Ir para conteúdo
  • Cadastre-se

Jemison Vidal

Membros
  • Total de ítens

    36
  • Registro em

  • Última visita

Posts postados por Jemison Vidal

  1. Bom dia,

    Estou atualizando os fontes, porém ao compilar o pacote ACBr_SPED estou enfrentando dificuldades em uma diretiva de compilação, Alguém poderia me ajudar por gentileza ?

    segue erro:

    [dcc32 Fatal Error] ACBr_SPED.dpk(4): E2280 Unterminated conditional directive

    Dados Adicionais:

    - Win 7

    - 64 Bits

    - Delphi XE8

     

  2. Bom dia !

    Conforme a necessidade de alguns Clientes em saber o código de rejeições, tarifas, custas, liquidações e baixas(Ocorrências), realizei a implementação nos dois arquivos "ACBrBoleto.pas" e "ACBrBancoSantander".

    Abaixo parte do layout do arquivo de retorno 240 do Santander, justificando minha alteração, peço que analisem e se possível a inclusão no SVN.

     Obrigado !

    Manual Santander 240.jpg

    ACBrBancoSantander.pas

    ACBrBoleto.pas

  3. Bom dia Ítalo,

    Seguindo as orientações passadas a emissão funcionou perfeitamente, porém a ultima questão levantada seria que ocorra algum erro dentro do Lote.

    Tenho um Lote com 50 NFS-e, porém 1 delas estava com erro de validação preciso informar o usuário qual RPS gerou o erro, como foi dito por você :

    Citar

    Caso algum RPS não seja validado pelo provedor, ou seja, contem alguma informação errada sempre é informado o numero do RPS.

    Estou realizando esse teste e verificando o código e na unit: ACBrNFSeNotasFiscais, na procedure: ValidarLotese , se a nota não for Valida o numero retornado é do lote e não do rps, Será q estou esquecendo alguma configuração :

    Agradeço Pela Atenção e ajuda.

    abaixo procedure  que realiza este processo:

    procedure TNotasFiscais.ValidarLote(const XMLLote, NomeArqSchema: String);
    var
      Erro, AXML: String;
      NotaEhValida: Boolean;
    begin
      AXML := XMLLote;
    
      with TACBrNFSe(FACBrNFSe) do
      begin
        NotaEhValida := SSL.Validar(AXML, NomeArqSchema, Erro);
    
        if not NotaEhValida then
        begin
          FErroValidacao := ACBrStr('Falha na validação dos dados do lote: ') +
            NumeroLote + sLineBreak + FAlertas ;
          FErroValidacaoCompleto := FErroValidacao + sLineBreak + Erro;
    
          raise EACBrNFSeException.CreateDef(
            IfThen(Configuracoes.Geral.ExibirErroSchema, ErroValidacaoCompleto,
            ErroValidacao));
        end;
      end;
    end;

     

  4. Bom dia,

    Estou com o mesmo problema de retorno do servidor, porém de momento estou utilizando um Timer para realizar o Envio de 50 NFS-e por vez e depois realizado a consulta em lote e vou atualizando na minha aplicação.

    Poderia me informar @Cleber como deixou duas configurações do componente ? pois aumentei mas mesmas mais sem sucesso, não queria fazer uso do Timer

    Obrigado desde já.

  5. Boa Tarde Italo,

    Muito Obrigado pelos esclarecimentos, consegui realizar a implementação na aplicação porém em alguns casos que realizo o envio de 20 rps no mesmo lote e recebo o retorno:

    O tempo limite da operação foi atingido - URL:https://homologacao.ginfes.com.br/ServiceGinfesImpl - SOAPAction:

    Estou pesquisando o porque esta retornando essa mensagem se souber de algo referente agradeço muito.

  6. Bom dia !

    Estou implementado a emissão de NFS-e em lote e estou com algumas dúvidas, se alguém conseguir me esclarecer essas dúvidas;

    - O Lote de NFS-e irá possuir o mesmo Número de RPS, exemplo: Tenho 10 Notas, as 10 precisam estar com o mesmo numero de rps(1 por exemplo), ou o RPS seria 1,2,3,....10 e um outro campo informando o numero do lote;

    - Estou enviando um lote de 50 NFS-e, porém no meio dessas notas uma possua algum tipo de erro ou falha, o retorno do que esta errado será com o numero do RPS ? ou no lote ?

    Agradeço desde já !

    Abraço.

  7. Boa Tarde, Apenas para Finalizar o Tópico.

    Verificando as diferenças entre o Demo_ACBrMDFe, foi identificado que o mesmo está setando a propriedade SSLLib com libCapicom, e minha aplicação estava  pegando conforme as diretivas do ACBr no create do componente o modo  libCapicomDelphiSoap;

    O modo libCapicomDelphiSoap, deve possuir algo que interfira nesta consulta, estou alterado para  libCapicom apenas para realizar está consulta e retornando para libCapicomDelphiSoap;

    Solução: ACBrMDFe1.Configuracoes.Geral.SSLLib := libCapicom

     

    Obrigado pela ajuda, Abraço !

  8. Bom dia,

    Ao pré-visualizar ou imprimir um cte cancelado, a Marca d´agua não estava saindo na impressão, o problema só estava visível para ambiente de produção;

    Abaixo Código como era:

    procedure Overlay1OnBeforePrint(Sender: TfrxComponent);
    begin
      Overlay1.Visible := <Identificacao."TpAmb"> = '2';
      if Overlay1.Visible then
      begin              
        Overlay1.Height        := Engine.PageHeight;
        memWatermark.Width     := Overlay1.Width;                                  
        memWatermark.Height    := Engine.PageHeight;
        memWatermark.Font.Size := 40;
      end;                  
    end;

    Como Ficou:

    procedure Overlay1OnBeforePrint(Sender: TfrxComponent);
    begin                                   
     if (<Parametros."Mensagem0"> <> '') then
      begin
        Overlay1.Visible       := True;                                                                            
        Overlay1.Height        := Engine.PageHeight;
        memWatermark.Width     := Overlay1.Width;                                  
        memWatermark.Height    := Engine.PageHeight;
        memWatermark.Font.Size := 40;
      end;                  
    end;
    

    Se possível, disponibilizar no SVN, Obrigado!

    DACTE.fr3

  9. Boa tarde, seguindo as mesmas alterações realizada para os documentos de CT-e e NF-e, a edição da estrutura e informações da NFS-e precisa ser bloqueada;

    Como era:

    PreviewOptions.Buttons    := [pbPrint, pbLoad, pbSave, pbExport, pbZoom, pbFind, pbOutline, pbPageSetup, pbTools, pbEdit, pbNavigator, pbExportQuick];

    Como Ficou:

    PreviewOptions.Buttons    := [pbPrint, pbZoom, pbFind, pbNavigator, pbExportQuick];

    Segue em anexo arquivo com a alteração, se possível poderia disponibilizar ao SVN ?

    Obrigado!

    ACBrNFSeDANFSeFR.pas

  10. Desculpa, deveria ter mandado no mesmo Post,  só mais uma alteração.

    Ao Realizar a impressão do CT-e, está sendo impresso o CEP do Recebedor e Expedidor mesmo se os mesmo não foram informados, no código está sendo colocado zeros(00000-000);

    Segue .pas em anexo;

    Como era:

    FieldByName('CEP').AsString     := FormatarCEP(Poem_Zeros(CEP, 8));

    Como Ficou:

    FieldByName('CEP').AsString     := FormatarCEP(IntToStr(CEP));

     

    Sendo assim, não será impresso zeros quando recebedor/expedidor não forem informados;

    ACBrCTeDACTEFR.pas

  11. @hleorj, uma alteração proposta não foi aplicada ao SVN, acabei esquecendo de descrever ela, porém foi enviada junto no .pas, a implementação se trata do bloqueio dos botões na visualização no fast report, o usuário consegue editar a estrutura e os dados impressos no relatório, por gentileza poderia rever essa sugestão novamente ? 

    abaixo código como era;

    with frxReport do
      begin
        ScriptLanguage := 'PascalScript';
        StoreInDFM     := False;
        OnBeforePrint  := frxReportBeforePrint;
        OnReportPrint  := 'frxReportOnReportPrint';
      end;

    Como ficou:

    with frxReport do
      begin
        ScriptLanguage := 'PascalScript';
        StoreInDFM     := False;
        OnBeforePrint  := frxReportBeforePrint;
        OnReportPrint  := 'frxReportOnReportPrint';
        PreviewOptions.Buttons :=[pbPrint, pbZoom, pbFind, pbNavigator, pbExportQuick];
      end;

     

    Obrigado desde já

    abraço.

  12. Boa Tarde @Daniel Simoes,

    Desculpa, mais o problema não foi resolvido, foi testado apenas com a unit errada.

    a uma maneira que encontrei seria retirar a necessidade de conversão para UTF8, Porém não reconheço a real necessidade do IFDEF FPC, saberia me dizer para que serve esse IFDEF ?, Obrigado e desculpa novamente;

    Abaixo código para evitar a conversão para UTF8;

    Antes: 

    procedure TDFeWebService.DefinirEnvelopeSoap;
    var
      Texto: String;
    begin
      { Sobrescrever apenas se necessário }
    
      {$IFDEF FPC}
       Texto := '<' + ENCODING_UTF8 + '>';    // Envelope já está sendo montado em UTF8
      {$ELSE}
       Texto := '';  // Isso forçará a conversão para UTF8, antes do envio
      {$ENDIF}
      Texto := Texto + '<' + FPSoapVersion + ':Envelope ' + FPSoapEnvelopeAtributtes + '>';
      if NaoEstaVazio(FPHeaderElement) then
      begin
        Texto := Texto + '<' + FPSoapVersion + ':Header>';
        Texto := Texto + '<' + FPHeaderElement + ' xmlns="' + Servico + '">';
        Texto := Texto + GerarCabecalhoSoap;
        Texto := Texto + '</' + FPHeaderElement + '>';
        Texto := Texto + '</' + FPSoapVersion + ':Header>';
      end;
      Texto := Texto + '<' + FPSoapVersion + ':Body>';
      Texto := Texto + '<' + FPBodyElement + ' xmlns="' + Servico + '">';
      Texto := Texto + DadosMsg;
      Texto := Texto + '</' + FPBodyElement + '>';
      Texto := Texto + '</' + FPSoapVersion + ':Body>';
      Texto := Texto + '</' + FPSoapVersion + ':Envelope>';
    
      FPEnvelopeSoap := Texto;
    end;

     

    Possível solução:

    procedure TDFeWebService.DefinirEnvelopeSoap;
    var
      Texto: String;
    begin
      { Sobrescrever apenas se necessário }
    
      Texto := '<' + ENCODING_UTF8 + '>';
      Texto := Texto + '<' + FPSoapVersion + ':Envelope ' + FPSoapEnvelopeAtributtes + '>';
      if NaoEstaVazio(FPHeaderElement) then
      begin
        Texto := Texto + '<' + FPSoapVersion + ':Header>';
        Texto := Texto + '<' + FPHeaderElement + ' xmlns="' + Servico + '">';
        Texto := Texto + GerarCabecalhoSoap;
        Texto := Texto + '</' + FPHeaderElement + '>';
        Texto := Texto + '</' + FPSoapVersion + ':Header>';
      end;
      Texto := Texto + '<' + FPSoapVersion + ':Body>';
      Texto := Texto + '<' + FPBodyElement + ' xmlns="' + Servico + '">';
      Texto := Texto + DadosMsg;
      Texto := Texto + '</' + FPBodyElement + '>';
      Texto := Texto + '</' + FPSoapVersion + ':Body>';
      Texto := Texto + '</' + FPSoapVersion + ':Envelope>';
    
      FPEnvelopeSoap := Texto;
    end;

     

  13. Bom dia @hleorj, Obrigado pela dica.. Vamos la.

    Segue em anexos e alterações baixo como era e como ficou.

    -Adicionado Carrega Modal Aquaviário e MultModal( Antes não existia);

    Agora:

    procedure TACBrCTeDACTEFR.CarregaMultiModal;
    begin
      if FCTe.ide.modal <> mdMultimodal then
        Exit;
    
      with cdsMultiModal, CTE.infCTeNorm do
      begin
        Append;
        FieldByName('COTM').AsString := multimodal.COTM;
        FieldByName('indNegociavel').AsString := indNegociavelToStr(multimodal.indNegociavel);
        Post;
      end;
    end;

     

    procedure TACBrCTeDACTEFR.CarregaModalAquaviario;
    var
       i: Integer;
       xBalsa: String;
    begin
      if FCTe.ide.modal <> mdAquaviario then
        Exit;
    
      with cdsModalAquaviario, CTe.infCTeNorm.aquav do
         begin
    //       CreateDataSet;
           Append;
    
           FieldByName('vPrest').AsFloat    := vPrest;
           FieldByName('vAFRMM').AsFloat    := vAFRMM;
           FieldByName('nBooking').AsString := nBooking;
           FieldByName('nCtrl').AsString    := nCtrl;
           FieldByName('xNavio').AsString   := xNavio;
           FieldByName('nViag').AsString    := nViag;
    
           case direc of
              drNorte: FieldByName('direc').AsString := 'NORTE';
              drLeste: FieldByName('direc').AsString := 'LESTE';
              drSul:   FieldByName('direc').AsString := 'SUL';
              drOeste: FieldByName('direc').AsString := 'OESTE';
           end;
    
           FieldByName('prtEmb').AsString := prtEmb;
           FieldByName('prtTrans').AsString := prtTrans;
           FieldByName('prtDest').AsString := prtDest;
    
           case tpNav of
              tnInterior:  FieldByName('tpNav').AsString := 'INTERIOR';
              tnCabotagem: FieldByName('tpNav').AsString := 'CABOTAGEM';
           end;
    
           FieldByName('irin').AsString := irin;
           FieldByName('xNavio').AsString := FieldByName('xNavio').AsString;
    
           for i := 0 to balsa.Count-1 do
              xBalsa := xBalsa + balsa.Items[i].xBalsa +',';
           FieldByName('xBalsa').AsString := Copy(xBalsa,1,Length(xBalsa)-1);
    
           Post;
          end;
    end;

     

    -Adicionado TClientDataSet e  TfrxDBDataset para Aquaviário e MultModal( Antes não existia);

    Antes:

    // CDS
        cdsIdentificacao        : TClientDataSet;
        cdsEmitente             : TClientDataSet;
        cdsDestinatario         : TClientDataSet;
        cdsDadosNotasFiscais    : TClientDataSet;
        cdsParametros           : TClientDataSet;
        cdsInformacoesAdicionais: TClientDataSet;
        cdsVolumes              : TClientDataSet;
        cdsTomador              : TClientDataSet;
        cdsExpedidor            : TClientDataSet;
        cdsRecebedor            : TClientDataSet;
        cdsRemetente            : TClientDataSet;
        cdsCalculoImposto       : TClientDataSet;
        cdsComponentesPrestacao : TClientDataSet;
        cdsSeguro               : TClientDataSet;
        cdsModalRodoviario      : TClientDataSet;
        cdsModalAereo           : TClientDataSet;
        cdsRodoVeiculos         : TClientDataSet;
        cdsRodoValePedagio      : TClientDataSet;
        cdsRodoMotorista        : TClientDataSet;
        cdsDocAnterior          : TClientDataSet;
        cdsAnuladoComple        : TClientDataSet;
        cdsEventos              : TClientDataSet;
    
        // frxDB
        frxIdentificacao        : TfrxDBDataset;
        frxEmitente             : TfrxDBDataset;
        frxDestinatario         : TfrxDBDataset;
        frxDadosNotasFiscais    : TfrxDBDataset;
        frxParametros           : TfrxDBDataset;
        frxVolumes              : TfrxDBDataset;
        frxInformacoesAdicionais: TfrxDBDataset;
        frxTomador              : TfrxDBDataset;
        frxExpedidor            : TfrxDBDataset;
        frxRecebedor            : TfrxDBDataset;
        frxRemetente            : TfrxDBDataset;
        frxCalculoImposto       : TfrxDBDataset;
        frxComponentesPrestacao : TfrxDBDataset;
        frxSeguro               : TfrxDBDataset;
        frxModalRodoviario      : TfrxDBDataset;
        frxModalAereo           : TfrxDBDataset;
        frxRodoVeiculos         : TfrxDBDataset;
        frxRodoValePedagio      : TfrxDBDataset;
        frxRodoMotorista        : TfrxDBDataset;
        frxDocAnterior          : TfrxDBDataset;
        frxAnuladoComple        : TfrxDBDataset;
        frxEventos              : TfrxDBDataset;
    
        frxBarCodeObject: TfrxBarCodeObject;

    Agora:

    // CDS
        cdsIdentificacao        : TClientDataSet;
        cdsEmitente             : TClientDataSet;
        cdsDestinatario         : TClientDataSet;
        cdsDadosNotasFiscais    : TClientDataSet;
        cdsParametros           : TClientDataSet;
        cdsInformacoesAdicionais: TClientDataSet;
        cdsVolumes              : TClientDataSet;
        cdsTomador              : TClientDataSet;
        cdsExpedidor            : TClientDataSet;
        cdsRecebedor            : TClientDataSet;
        cdsRemetente            : TClientDataSet;
        cdsCalculoImposto       : TClientDataSet;
        cdsComponentesPrestacao : TClientDataSet;
        cdsSeguro               : TClientDataSet;
        cdsModalRodoviario      : TClientDataSet;
        cdsModalAereo           : TClientDataSet;
        cdsMultiModal           : TClientDataSet;
        cdsModalAquaviario      : TClientDataSet;
        cdsRodoVeiculos         : TClientDataSet;
        cdsRodoValePedagio      : TClientDataSet;
        cdsRodoMotorista        : TClientDataSet;
        cdsDocAnterior          : TClientDataSet;
        cdsAnuladoComple        : TClientDataSet;
        cdsEventos              : TClientDataSet;
    
        // frxDB
        frxIdentificacao        : TfrxDBDataset;
        frxEmitente             : TfrxDBDataset;
        frxDestinatario         : TfrxDBDataset;
        frxDadosNotasFiscais    : TfrxDBDataset;
        frxParametros           : TfrxDBDataset;
        frxVolumes              : TfrxDBDataset;
        frxInformacoesAdicionais: TfrxDBDataset;
        frxTomador              : TfrxDBDataset;
        frxExpedidor            : TfrxDBDataset;
        frxRecebedor            : TfrxDBDataset;
        frxRemetente            : TfrxDBDataset;
        frxCalculoImposto       : TfrxDBDataset;
        frxComponentesPrestacao : TfrxDBDataset;
        frxSeguro               : TfrxDBDataset;
        frxModalRodoviario      : TfrxDBDataset;
        frxModalAereo           : TfrxDBDataset;
        frxMultiModal           : TfrxDBDataset;
        frxModalAquaviario      : TfrxDBDataset;
        frxRodoVeiculos         : TfrxDBDataset;
        frxRodoValePedagio      : TfrxDBDataset;
        frxRodoMotorista        : TfrxDBDataset;
        frxDocAnterior          : TfrxDBDataset;
        frxAnuladoComple        : TfrxDBDataset;
        frxEventos              : TfrxDBDataset;
    
        frxBarCodeObject: TfrxBarCodeObject;

    Criação dos Campos no aquaviário:

     cdsModalAquaviario := TClientDataSet.Create(nil);
      with cdsModalAquaviario, FieldDefs do
      begin
        Close;
        Clear;
        Add('vPrest', ftFloat);
        Add('vAFRMM', ftFloat);
        Add('nBooking', ftString, 10);
        Add('nCtrl', ftString, 10);
        Add('xNavio', ftString, 60);
        Add('nViag', ftInteger);
        Add('direc', ftString, 8);
        Add('prtEmb', ftString, 60);
        Add('prtTrans', ftString, 60);
        Add('prtDest', ftString, 60);
        Add('tpNav', ftString, 10);
        Add('irin', ftString, 10);
        Add('xBalsa', ftString, 190);
        CreateDataSet;
      end;

    Criação dos Campos MultiModal:

     cdsMultiModal := TClientDataSet.Create(nil);
      with cdsMultiModal, FieldDefs do
      begin
        Close;
        Clear;
        Add('COTM', ftString, 20);
        Add('indNegociavel', ftString, 1);
        CreateDataSet;
      end;

    -Criando frxDbDataset para o Modal Aquaviario(Antes não existia)

    Agora:

      frxModalAquaviario := TfrxDBDataset.Create(nil);
      with frxModalAquaviario do
      begin
        UserName       := 'ModalAquaviario';
        OpenDataSource := False;
        DataSet        := cdsModalAquaviario;
      end;

     

    -Cirando frcDbDataSet para o Modal MultiModal(Antes não existia)

    Agora:

     frxMultiModal := TfrxDBDataset.Create(nil);
      with frxMultiModal do
      begin
        UserName       := 'MultiModal';
        OpenDataSource := False;
        DataSet := cdsMultiModal;
      end;

    -Adicionado no método Destroy

    Agora: 

    cdsModalAquaviario.Free;
    cdsMultiModal.Free;
    
    frxModalAquaviario.Free;
    frxMultiModal.Free;

     

    -Adicionado a procedure limpa dados 

     *OBS: Removido CdsEventos.EmptyDataSet, pois na na impressão do evento, o xml do evento é carregando antes do xml do cte, e ao executar o limpa dados ele estava limpando os dados do evento e realizando a impressão em branco, lembrando que ao carregar os dados do evento ja é executado o emptyDataSet, sendo necessário apenas remover do limpaDados;

    Antes:

    procedure TACBrCTeDACTEFR.LimpaDados;
    begin
      cdsIdentificacao.EmptyDataSet;
      cdsEmitente.EmptyDataSet;
      cdsDestinatario.EmptyDataSet;
      cdsDadosNotasFiscais.EmptyDataSet;
      cdsParametros.EmptyDataSet;
      cdsInformacoesAdicionais.EmptyDataSet;
      cdsVolumes.EmptyDataSet;
      cdsTomador.EmptyDataSet;
      cdsExpedidor.EmptyDataSet;
      cdsRecebedor.EmptyDataSet;
      cdsRemetente.EmptyDataSet;
      cdsCalculoImposto.EmptyDataSet;
      cdsComponentesPrestacao.EmptyDataSet;
      cdsSeguro.EmptyDataSet;
      cdsModalRodoviario.EmptyDataSet;
      cdsRodoVeiculos.EmptyDataSet;
      cdsRodoValePedagio.EmptyDataSet;
      cdsRodoMotorista.EmptyDataSet;
      cdsModalAereo.EmptyDataSet;
      cdsDocAnterior.EmptyDataSet;
      cdsAnuladoComple.EmptyDataSet;
      cdsEventos.EmptyDataSet;
    
    end;

    Agora:

    procedure TACBrCTeDACTEFR.LimpaDados;
    begin
      cdsIdentificacao.EmptyDataSet;
      cdsEmitente.EmptyDataSet;
      cdsDestinatario.EmptyDataSet;
      cdsDadosNotasFiscais.EmptyDataSet;
      cdsParametros.EmptyDataSet;
      cdsInformacoesAdicionais.EmptyDataSet;
      cdsVolumes.EmptyDataSet;
      cdsTomador.EmptyDataSet;
      cdsExpedidor.EmptyDataSet;
      cdsRecebedor.EmptyDataSet;
      cdsRemetente.EmptyDataSet;
      cdsCalculoImposto.EmptyDataSet;
      cdsComponentesPrestacao.EmptyDataSet;
      cdsSeguro.EmptyDataSet;
      cdsModalRodoviario.EmptyDataSet;
      cdsRodoVeiculos.EmptyDataSet;
      cdsRodoValePedagio.EmptyDataSet;
      cdsRodoMotorista.EmptyDataSet;
      cdsModalAereo.EmptyDataSet;
      cdsMultiModal.EmptyDataSet;
      cdsModalAquaviario.EmptyDataSet;
      cdsDocAnterior.EmptyDataSet;
      cdsAnuladoComple.EmptyDataSet;
    end;

    -Adicionado FrxModalAéreo e multiModal ao relatório

    Antes:

    procedure TACBrCTeDACTEFR.SetDataSetsToFrxReport;
    begin
      frxReport.DataSets.Clear;
    
      with frxReport.EnabledDataSets do
      begin
        Clear;
        Add(frxIdentificacao);
        Add(frxEmitente);
        Add(frxDestinatario);
        Add(frxDadosNotasFiscais);
        Add(frxParametros);
        Add(frxVolumes);
        Add(frxInformacoesAdicionais);
        Add(frxTomador);
        Add(frxExpedidor);
        Add(frxRecebedor);
        Add(frxRemetente);
        Add(frxCalculoImposto);
        Add(frxComponentesPrestacao);
        Add(frxSeguro);
        Add(frxModalRodoviario);
        Add(frxModalAereo);
        Add(frxRodoVeiculos);
        Add(frxRodoValePedagio);
        Add(frxRodoMotorista);
        Add(frxDocAnterior);
        Add(frxAnuladoComple);
        Add(frxEventos);
      end;
    end;

    Agora:

    procedure TACBrCTeDACTEFR.SetDataSetsToFrxReport;
    begin
      with frxReport.EnabledDataSets do
      begin
        Clear;
        Add(frxIdentificacao);
        Add(frxEmitente);
        Add(frxDestinatario);
        Add(frxDadosNotasFiscais);
        Add(frxParametros);
        Add(frxVolumes);
        Add(frxInformacoesAdicionais);
        Add(frxTomador);
        Add(frxExpedidor);
        Add(frxRecebedor);
        Add(frxRemetente);
        Add(frxCalculoImposto);
        Add(frxComponentesPrestacao);
        Add(frxSeguro);
        Add(frxModalRodoviario);
        Add(frxModalAquaviario);
        Add(frxModalAereo);
        Add(frxMultiModal);
        Add(frxRodoVeiculos);
        Add(frxRodoValePedagio);
        Add(frxRodoMotorista);
        Add(frxDocAnterior);
        Add(frxAnuladoComple);
        Add(frxEventos);
      end;
    end;

     

    -Adicionado CarregaMultiModal e CarregaAquaviário no procedure Carrega Dados

    Antes:

    procedure TACBrCTeDACTEFR.CarregaDados;
    begin
      LimpaDados;
    
      CarregaIdentificacao;
      CarregaTomador;
      CarregaEmitente;
      CarregaRemetente;
      CarregaDestinatario;
      CarregaExpedidor;
      CarregaRecebedor;
      CarregaDadosNotasFiscais;
      CarregaParametros;
      CarregaCalculoImposto;
      CarregaVolumes;
      CarregaComponentesPrestacao;
      CarregaInformacoesAdicionais;
      CarregaSeguro;
      CarregaModalRodoviario;
      CarregaModalAereo;
      CarregaDocumentoAnterior;
      CarregaCTeAnuladoComplementado;
    end;

    Agora:

    procedure TACBrCTeDACTEFR.CarregaDados;
    begin
      LimpaDados;
    
      CarregaIdentificacao;
      CarregaTomador;
      CarregaEmitente;
      CarregaRemetente;
      CarregaDestinatario;
      CarregaExpedidor;
      CarregaRecebedor;
      CarregaDadosNotasFiscais;
      CarregaParametros;
      CarregaCalculoImposto;
      CarregaVolumes;
      CarregaComponentesPrestacao;
      CarregaInformacoesAdicionais;
      CarregaSeguro;
      CarregaModalRodoviario;
      CarregaModalAereo;
      CarregaMultiModal;
      CarregaModalAquaviario;
      CarregaDocumentoAnterior;
      CarregaCTeAnuladoComplementado;
    end;

     

    -Alterado CarregaDadosAéreo

    Antes:

    procedure TACBrCTeDACTEFR.CarregaModalAereo;
    begin
      if FCTe.ide.modal <> mdAereo then
        Exit;
    
      with cdsModalAereo, CTE.infCTeNorm do
      begin
        Append;
        FieldByName('nMinu').AsInteger := aereo.nMinu;
        FieldByName('nOCA').AsString := aereo.nOCA;
        FieldByName('dPrevAereo').AsDateTime := aereo.dPrevAereo;
        FieldByName('xLAgEmi').AsString := aereo.xLAgEmi;
        FieldByName('IdT').AsString := aereo.IdT;
        FieldByName('CL').AsString := aereo.tarifa.CL;
        FieldByName('cTar').AsString := aereo.tarifa.cTar;
        FieldByName('vTar').AsCurrency := aereo.tarifa.vTar;
        FieldByName('xDime').AsString := aereo.natCarga.xDime;
        FieldByName('cInfManu').AsInteger := aereo.natCarga.cinfManu;
        FieldByName('cIMP').AsString := aereo.natCarga.cIMP;      
        Post;
      end;
    end;

    Agora:

    procedure TACBrCTeDACTEFR.CarregaModalAereo;
    begin
      if FCTe.ide.modal <> mdAereo then
        Exit;
    
      with cdsModalAereo, CTE.infCTeNorm do
      begin
        Append;
        FieldByName('nMinu').AsInteger := aereo.nMinu;
        FieldByName('nOCA').AsString := aereo.nOCA;
        FieldByName('dPrevAereo').AsDateTime := aereo.dPrevAereo;
        FieldByName('xLAgEmi').AsString := aereo.xLAgEmi;
        FieldByName('IdT').AsString := aereo.IdT;
        FieldByName('CL').AsString := aereo.tarifa.CL;
        FieldByName('cTar').AsString := aereo.tarifa.cTar;
        FieldByName('vTar').AsCurrency := aereo.tarifa.vTar;
        FieldByName('xDime').AsString := aereo.natCarga.xDime;
        FieldByName('cInfManu').AsInteger := aereo.natCarga.cinfManu;
        FieldByName('cIMP').AsString := aereo.natCarga.cIMP;
        FieldByName('xOrig').AsString := CTe.compl.fluxo.xOrig;
        FieldByName('xDest').AsString := CTe.compl.fluxo.xDest;
        FieldByName('xRota').AsString := CTe.compl.fluxo.xRota;
        Post;
      end;
    end;

     

    -Adicionar três campos(xOrig,xDest,xRota) para Modal Aéreo:

    Antes:

    cdsModalAereo := TClientDataSet.Create(nil);
      with cdsModalAereo, FieldDefs do
      begin
        Close;
        Clear;
        Add('nMinu', ftInteger);
        Add('nOCA', ftString, 11);
        Add('dPrevAereo', ftDateTime);
        Add('xLAgEmi', ftString, 20);
        Add('IdT', ftString, 14);
        Add('CL', ftString, 1);
        Add('cTar', ftString, 4);
        Add('vTar', ftCurrency);
        Add('xDime', ftString, 14);
        Add('cInfManu', ftInteger);
        Add('cIMP', ftString, 3);   
        CreateDataSet;
      end;

    Agora:

    cdsModalAereo := TClientDataSet.Create(nil);
      with cdsModalAereo, FieldDefs do
      begin
        Close;
        Clear;
        Add('nMinu', ftInteger);
        Add('nOCA', ftString, 11);
        Add('dPrevAereo', ftDateTime);
        Add('xLAgEmi', ftString, 20);
        Add('IdT', ftString, 14);
        Add('CL', ftString, 1);
        Add('cTar', ftString, 4);
        Add('vTar', ftCurrency);
        Add('xDime', ftString, 14);
        Add('cInfManu', ftInteger);
        Add('cIMP', ftString, 3);
        Add('xOrig',ftString,15);
        Add('xDest',ftString,15);
        Add('xRota',ftString,15);
        CreateDataSet;
      end;

     

    - Adicionado Campo "vValePed";

    Antes:

    cdsRodoValePedagio := TClientDataSet.Create(nil);
      with cdsRodoValePedagio, FieldDefs do
      begin
        Close;
        Clear;
        Add('CNPJPg', ftString, 18);
        Add('CNPJForn', ftString, 18);
        Add('nCompra', ftString, 14);
        CreateDataSet;
      end;

    Agora:

    cdsRodoValePedagio := TClientDataSet.Create(nil);
      with cdsRodoValePedagio, FieldDefs do
      begin
        Close;
        Clear;
        Add('CNPJPg', ftString, 18);
        Add('CNPJForn', ftString, 18);
        Add('nCompra', ftString, 14);
        Add('vValePed', ftFloat);
        CreateDataSet;
      end;

     

    -Alterado preenchido do RNTRC DO veiculo, para que seja impresso mesmo que o veiculo seja próprio;

    Antes:

      with cdsRodoVeiculos do
      begin
    
    {$IFDEF PL_200}
        for i := 0 to CTE.infCTeNorm.rodo.veic.Count - 1 do
        begin
          with CTE.infCTeNorm.rodo.veic.Items[i] do
          begin
    {$ELSE}
        for i := 0 to CTE.rodo.veic.Count - 1 do
        begin
          with CTE.rodo.veic.Items[i] do
          begin
    {$ENDIF}
            Append;
            case tpVeic of
              tvTracao: FieldByName('tpVeic').AsString  := 'Tração';
              tvReboque: FieldByName('tpVeic').AsString := 'Reboque';
            end;
            FieldByName('placa').AsString := placa;
            FieldByName('UF').AsString    := UF;
            FieldByName('RNTRC').AsString := Prop.RNTRC;
            Post;
          end;
        end;
      end;

    Agora:

     with cdsRodoVeiculos do
      begin
    
    {$IFDEF PL_200}
        for i := 0 to CTE.infCTeNorm.rodo.veic.Count - 1 do
        begin
          with CTE.infCTeNorm.rodo.veic.Items[i] do
          begin
    {$ELSE}
        for i := 0 to CTE.rodo.veic.Count - 1 do
        begin
          with CTE.rodo.veic.Items[i] do
          begin
    {$ENDIF}
            Append;
            case tpVeic of
              tvTracao: FieldByName('tpVeic').AsString  := 'Tração';
              tvReboque: FieldByName('tpVeic').AsString := 'Reboque';
            end;
            FieldByName('placa').AsString := placa;
            FieldByName('UF').AsString    := UF;
            if tpProp = tpProprio then
               FieldByName('RNTRC').AsString := CTe.infCTeNorm.rodo.RNTRC
            else
               FieldByName('RNTRC').AsString := Prop.RNTRC;
            Post;
          end;
        end;
      end;

     

    -Corrigido impressão do Resumo

    Antes:

     vResumo := '';
        // if DACTEClassOwner.ExibirResumoCanhoto then
        // begin
        // if NotaUtil.EstaVazio(DANFEClassOwner.ExibirResumoCanhoto_Texto) then
        // vResumo := 'Emissão: ' + NotaUtil.FormatDate(DateToStr(FNFe.Ide.DEmi)) + '  Dest/Reme: ' + FNFe.Dest.XNome + '  Valor Total: ' + NotaUtil.FormatFloat(FNFe.Total.ICMSTot.VNF)
        // else
        // vResumo := DANFEClassOwner.ExibirResumoCanhoto_Texto;
        // end;
        FieldByName('ResumoCanhoto').AsString := vResumo;

    Agora:

    vResumo := 'EMIT: '+ FCTe.Emit.xNome + ' - ' +
                         'EMISSÃO: ' + FormatDateTime('DD/MM/YYYY',FCTe.Ide.dhEmi) + '  - '+
                         'TOMADOR: ';
              if FCTe.Ide.Toma4.xNome = '' then
                 begin
                    case FCTe.Ide.Toma03.Toma of
                       tmRemetente:    vResumo := vResumo + FCTe.Rem.xNome;
        	              tmExpedidor:    vResumo := vResumo + FCTe.Exped.xNome;
                       tmRecebedor:    vResumo := vResumo + FCTe.Receb.xNome;
        	              tmDestinatario: vResumo := vResumo + FCTe.Dest.xNome;
                    end
                 end
              else
                 vResumo := vResumo + FCTe.Ide.Toma4.xNome;
    
              vResumo := vResumo + ' - VALOR A RECEBER: R$ ' + FormatFloat('###,###,###,##0.00',FCTe.vPrest.vRec);
           end;
        FieldByName('ResumoCanhoto').AsString := vResumo;

     

    -Implementando impressão do canhoto no cabeçalho/Rodapé(Igual antes no Quick,antes no fast não existia)

    Agora:

    if DACTEClassOwner.PosCanhoto = prCabecalho then
           FieldByName('PrintCanhoto').AsString := '0'
        else
           FieldByName('PrintCanhoto').AsString := '1';

     

    -Correção da impressão Modal, estava fixo Rodoviario

    Antes: FieldByName('modal').AsString := IfThen(modal = mdRodoviario, '0', '0');

    Agora: FieldByName('modal').AsString := TpModalToStr(CTe.ide.modal);

     

    -Implementado protocolo do cte, na impressão do evento (igual no quick)

    antes: FieldByName('xJust').AsString         := InfEvento.detEvento.xJust;

    agora: FieldByName('xJust').AsString         := 'Protocolo do CTe Cancelado:' + InfEvento.detEvento.nProt +sLineBreak+InfEvento.detEvento.xJust;

    ACBrCTeDACTEFR.pas

    DACTE.fr3

  14. Certo, o problema segundo a minha análise está ocorrendo durante a conversão para UTF-8, devido a acentuação, retirando a necessidade de conversão a consulta é realizada com sucesso, não sei dizer se o problema está relacionado com o compilador(Delphi XE6), apenas esse processo está com problema. segue sugestão e arquivo para analise;

    Código Atual:

    procedure TDFeWebService.DefinirEnvelopeSoap;
    var
      Texto: String;
    begin
      { Sobrescrever apenas se necessário }
    
      {$IFDEF FPC}
       Texto := '<' + ENCODING_UTF8 + '>';    // Envelope já está sendo montado em UTF8
      {$ELSE}
       Texto := '';  // Isso forçará a conversão para UTF8, antes do envio
      {$ENDIF}
    
      Texto := Texto + '<' + FPSoapVersion + ':Envelope ' + FPSoapEnvelopeAtributtes + '>';
      if NaoEstaVazio(FPHeaderElement) then
      begin
        Texto := Texto + '<' + FPSoapVersion + ':Header>';
        Texto := Texto + '<' + FPHeaderElement + ' xmlns="' + Servico + '">';
        Texto := Texto + GerarCabecalhoSoap;
        Texto := Texto + '</' + FPHeaderElement + '>';
        Texto := Texto + '</' + FPSoapVersion + ':Header>';
      end;
      Texto := Texto + '<' + FPSoapVersion + ':Body>';
      Texto := Texto + '<' + FPBodyElement + ' xmlns="' + Servico + '">';
      Texto := Texto + DadosMsg;
      Texto := Texto + '</' + FPBodyElement + '>';
      Texto := Texto + '</' + FPSoapVersion + ':Body>';
      Texto := Texto + '</' + FPSoapVersion + ':Envelope>';
    
      FPEnvelopeSoap := Texto;
    end;

    Código com Alteração:

    procedure TDFeWebService.DefinirEnvelopeSoap;
    var
      Texto: String;
    begin
      { Sobrescrever apenas se necessário }
      Texto := '<?xml version="1.0" encoding="UTF-8"?>';
      Texto := Texto + '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
                                       ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"' +
                                       ' xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">';
      Texto := Texto +   '<soap12:Header>';
      Texto := Texto +     '<mdfeCabecMsg xmlns="' + Servico + '">';
      Texto := Texto +       GerarUFSoap;
      Texto := Texto +       GerarVersaoDadosSoap;
      Texto := Texto +     '</mdfeCabecMsg>';
      Texto := Texto +   '</soap12:Header>';
      Texto := Texto +   '<soap12:Body>';
      Texto := Texto +     '<mdfeDadosMsg xmlns="' + Servico + '">';
      Texto := Texto +       DadosMsg;
      Texto := Texto +     '</mdfeDadosMsg>';
      Texto := Texto +   '</soap12:Body>';
      Texto := Texto + '</soap12:Envelope>';
    
      FPEnvelopeSoap := Texto;
    end;

     

     

     

    ACBrDFeWebService.pas

  15. Olá Sr. Daniel Bom dia,

    Os Fontes estão atualizados e não foram modificados, realizei a exclusão dos arquivos e baixei novamente sem sucesso.

    Efetuamos uma alteração no SetCodePage, colocando o parâmetro Convert para True, dessa maneira o processo foi efetuado com sucesso.

    Dentro desse ambiente oque podemos fazer para resolver, sendo que essa function está no ACBrUtil ? lembrando que estou utilizando o Delphi XE6;

    function ACBrStrToUTF8( AString : String ) : AnsiString;
    {$IFNDEF FPC}
    {$IFDEF UNICODE}
    var
      RBS: RawByteString;
    {$ENDIF}
    {$ENDIF}
    begin
      {$IFNDEF FPC}
       {$IFDEF UNICODE}
        RBS := UTF8Encode(AString);
        SetCodePage(RBS, 0, False);
        Result := AnsiString(RBS);
       {$ELSE}
        Result := UTF8Encode(AString);
       {$ENDIF}
      {$ELSE}
       Result := AString;
      {$ENDIF}
    end;

     

    Realizando outro teste utilizei a mesma forma que estava sendo preenchida no trunk1 e funcionou corretamente, lembrando que no trunk1 a conversão não é necessária porque os valores estão sendo passados corretamente para o envelopSoap, segue abaixo código utilizado no trunk1.

    procedure TWebServicesBase.DefinirEnvelopeSoap;
    var
      Texto: AnsiString;
    begin
      { Sobrescrever apenas se necessário }
    
      Texto := '<?xml version="1.0" encoding="UTF-8"?>';
      Texto := Texto + '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
                                       ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"' +
                                       ' xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">';
      Texto := Texto +   '<soap12:Header>';
      Texto := Texto +     '<mdfeCabecMsg xmlns="' + Servico + '">';
      Texto := Texto +       GerarUFSoap;
      Texto := Texto +       GerarVersaoDadosSoap;
      Texto := Texto +     '</mdfeCabecMsg>';
      Texto := Texto +   '</soap12:Header>';
      Texto := Texto +   '<soap12:Body>';
      Texto := Texto +     '<mdfeDadosMsg xmlns="' + Servico + '">';
      Texto := Texto +       DadosMsg;
      Texto := Texto +     '</mdfeDadosMsg>';
      Texto := Texto +   '</soap12:Body>';
      Texto := Texto + '</soap12:Envelope>';
    
      FEnvelopeSoap := Texto;
    end;

    Se alguém teve ou estiver com o mesmo problema e possui alguma solução.

    Desde Já Agradeço, Abrado.

     

×
×
  • 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.