Ir para conteúdo
  • Cadastre-se

dev botao

Quando Valido A Nfe, Caso Houver Algum Erro, Ao Inves De Aparecer A Msg, Trava A Aplicacao


rogercon
  • Este tópico foi criado há 3886 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Pessoal, é um seguinte, ja vasculhei tudo e nao encontrei o problema, tenho duas aplicacoes, 1 delas está ok, e a outra está com o erro que vou relatar abaixo, de antemão ja sei, oras se uma aplicacao funciona e a outra nao, entao o erro é na aplicacao e nao no acbr, mas vou postar o problema para ver se alguem ja passou por isso...

 

 

caso eu validar uma nfe e der algum erro, tipo falta de ncm, ou cst incorreto ou qualquer outro, dai o acbr vai mostrar a mensagem para o usuario correto, segue o codigo abaixo que está dentro do acbrnotasfiscais...

 

  for i:= 0 to Self.Count-1 do
   begin
 
     if pos('<Signature',Self.Items.XML) = 0 then
      Assinar;
     if not(NotaUtil.Valida(('<NFe xmlns' + RetornarConteudoEntre(Self.Items.XML, '<NFe xmlns', '</NFe>')+ '</NFe>'),
                            FMsg, Self.FConfiguracoes.Geral.PathSchemas, Self.FConfiguracoes.Geral.ModeloDF)) then
      begin
        Self.Items.ErroValidacaoCompleto := 'Falha na validação dos dados da nota '+
                                               IntToStr(Self.Items.NFe.Ide.nNF)+sLineBreak+
                                               Self.Items.Alertas+
                                               FMsg;
        Self.Items.ErroValidacao := 'Falha na validação dos dados da nota '+
                                       IntToStr(Self.Items.NFe.Ide.nNF)+sLineBreak+
                                       Self.Items.Alertas+
                                       IfThen(Self.FConfiguracoes.Geral.ExibirErroSchema,FMsg,'');
 
        raise EACBrNFeException.Create(Self.Items.ErroValidacao);
      end;
 
  end;
 
 
 
porém quando vai mostrar na tela,          raise EACBrNFeException.Create(Self.Items.ErroValidacao), gera uma excessao na aplicacao, e dai a mesma é fechada sozinha causando a indesejada janelinha de NAO ENVIAR do windows.
 
 
Alguma luz pessoal ? segue a janela do erro em anexo.
post-5082-0-23147400-1380592249_thumb.pn

 

Link para o comentário
Compartilhar em outros sites

eu tirei o raise e coloquei um showmessage no lugar dele, passa tranquilamente sem nenhum erro., mas com showmessage nao fica bom pois ele nao breca a rotina toda, no final acaba vindo a mensagem de NOTA FISCAL ELETRONICA VALIDA, sem ser de fato uma nota realmente valida, erros foram apresentados na tela.

Editado por rogercon
Link para o comentário
Compartilhar em outros sites

ok, segue o clique no botao VALIDAR que chama a rotina...

procedure Tfrmcadastropedidos.cxButton3Click(Sender: TObject);
begin
IF q_pedidos.IsEmpty then
begin
  ShowMessage('Nenhum pedidos selecionado!');
  exit;
end;
gerarnfe('VALIDAR');
 
end;
 
 
 
lobo abaixo segue toda a procedure GERARNFE que faz a validacao, observe que a parte que faz a validade está lá no final, após o ELSE.
 
 
//inicio gerarnfe
procedure tfrmcadastropedidos.gerarnfe(tipo: string);
var
 vAux : String;
 vNumLote : integer;
 CRT,NomeComp,CODCSOSN, COD_CST : string;
 LocNFeW : TNFeW;
 wchave: string;
 wnome_arquivo: string;
 Qtd_Prd_Frete, Qtd_Prd_Desc: integer;
 rat_frete, rat_desc, Total_desc,Total_Frete: real;
 Tot_CSOSN, Tot_vBCST,TOT_ICMS, TOT_ICMS_ST, TOT_BC_ICMS, TOT_BC_ICMS_ST : real;
 Tot_CST10,Tot_CST30,Tot_CST60,Tot_CST90 : Real;
 Para : String;
 CC: Tstrings;
 varbcicmsstVSaliq,varTotProdVSaliq: real;
 Vctofatura:string;
 itemTOT_ICMS_ST: Double;
 itemTOT_BC_ICMS_ST: Double;
begin
  TOT_ICMS := 0; TOT_ICMS_ST := 0; TOT_BC_ICMS := 0; TOT_BC_ICMS_ST:= 0;
  Tot_CST10:= 0; Tot_CST30 := 0; Tot_CST60 := 0; Tot_CST90 := 0;
 
  vAux := frmcadastropedidos.q_pedidoside_nnf.AsString;
//  vNumLote := frmcadastropedidos.q_pedidoside_nnf.AsString;
  vnumlote := StrToInt(FormatDateTime('yymmddhhmm', NOW));
 
  frmprincipal.ACBrNFe1.NotasFiscais.Clear;
  frmprincipal.ACBrNFe1.Configuracoes.Certificados.NumeroSerie:= dm.q_empresalogadaNSERIE_CERTIFICADO.AsString;
  frmprincipal.ACBrNFe1.Configuracoes.Certificados.Senha:= dm.q_empresalogadaSENHA_CERTIFICADO.AsString;
  frmprincipal.ACBrNFe1.DANFE.PathPDF:= ExtractFilePath(ParamStr(0))+'\nfe\pdf';
  frmprincipal.ACBrNFe1.Configuracoes.Arquivos.PathCan:= ExtractFilePath(ParamStr(0))+'\nfe\cancelar';
  frmprincipal.ACBrNFe1.Configuracoes.Arquivos.PathInu:= ExtractFilePath(ParamStr(0))+'\nfe\inutilizar';
  frmprincipal.ACBrNFe1.Configuracoes.Arquivos.PathNFe:= ExtractFilePath(ParamStr(0))+'\nfe\enviadas';
  frmprincipal.ACBrNFe1.Configuracoes.Arquivos.PathEvento:= ExtractFilePath(ParamStr(0))+'\nfe\eventos';
  frmprincipal.ACBrNFe1.Configuracoes.Arquivos.PathCCe:= ExtractFilePath(ParamStr(0))+'\nfe\cce';
 
 
 
 
  IF tipo='GERAR' then
  begin
  frmprincipal.ACBrNFe1.DANFE.Logo:= dm.q_empresalogadaCAMINHOLOGOTIPO.AsString;
  frmprincipal.ACBrNFeDANFERaveCB1.Logo:= dm.q_empresalogadaCAMINHOLOGOTIPO.AsString;
  end;
 
 
  with frmprincipal.ACBrNFe1.NotasFiscais.Add.NFe do
  begin
    Ide.natOp := copy(frmcadastropedidos.q_pedidosNATUREZA.AsString,0,59);
    Qry_Aux.close;
    Ide.nNF       := StrToInt(vAux);
    Ide.cNF       := StrToInt(vAux);
    Ide.modelo    := 55;
    Ide.serie     := 1;
    Ide.dEmi      := Date;
    Ide.dSaiEnt   := frmcadastropedidos.q_pedidosIDE_DSAIENT.AsDateTime;
    ide.hSaiEnt   := frmcadastropedidos.q_pedidosIDE_HSAIENT.AsDateTime;
 
    if dm.q_empresalogadaambiente.asstring='PRODUCAO' then
    begin
     Ide.tpAmb     := taProducao;
     frmprincipal.ACBrNFe1.Configuracoes.WebServices.Ambiente:= taProducao;
    end
    else
    begin
     Ide.tpAmb     := taHomologacao;
     frmprincipal.ACBrNFe1.Configuracoes.WebServices.Ambiente:= taHomologacao;
    end;
 
    if frmcadastropedidos.q_pedidoside_tpnf.asstring = 'ENTRADA' then
      Ide.tpNF      := tnEntrada
    else
      Ide.tpNF      := tnSaida;
 
      q_contas.close;
      q_contas.sql.clear;
      q_contas.sql.Add('select * from contas where cod_pedido = '+ quotedstr(q_pedidoscodigo.AsString));
      q_contas.open;
      if q_contas.IsEmpty then
      begin
      Ide.indPag    := ipVista;
      end else
      begin
      q_contas.First;
      while not q_contas.Eof do
      begin
        q_contas.edit;
        if q_contasDATA_VENCIMENTO.AsDateTime > frmcadastropedidos.q_pedidosIDE_DEMI.AsDateTime then
        Vctofatura:='APRAZO';
        q_contas.next;
      end;
      end;
 
      if Vctofatura='APRAZO' then
      Ide.indPag:= ipPrazo;
 
 
 
  //      Ide.indPag    := ipOutras
  //      Ide.indPag    := ipPrazo;
 
      Qry_Aux.close;
//////////////////////////////////////////////////////
    Ide.verProc   := '2.0.0.0';
    Ide.cUF := StrToIntDef(Copy(dm.q_empresalogadaCOD_UF.AsString, 1, 2), 0);
    Ide.cMunFG := StrToIntDef(dm.q_empresalogadaCOD_CIDADE.AsString, 0);
    if frmcadastropedidos.q_pedidoside_finnfe.asstring = 'NORMAL' then
     Ide.finNFe    := fnNormal
    else
    if frmcadastropedidos.q_pedidoside_finnfe.asstring = 'COMPLEMENTAR' then
    begin
     Ide.finNFe    := fnComplementar;
//Para NFe referenciada use os campos abaixo
     with Ide.NFref.Add do
      begin
{        refNFe       := frmcadastropedidos.q_pedidosNFE_REF.AsString;
        RefNF.cUF    := StrToIntDef(Copy(QryEmpCODCID.AsString, 1, 2), 0);
        RefNF.AAMM   := FormatDateTime('yymm', date);
        RefNF.CNPJ   := QryEmpCGC.AsString;
        RefNF.modelo := 1;
        RefNF.serie  := 1;
        RefNF.nNF    := StrToInt(vAux);}
      end;
    end
    else
     Ide.finNFe    := fnAjuste;
 
 
    Emit.CNPJCPF           := dm.q_empresalogadaCNPJ.AsString;
    Emit.IE                := dm.q_empresalogadaINSCEST.AsString;
    Emit.xNome             := dm.q_empresalogadaRAZAO.AsString;
    Emit.xFant             := dm.q_empresalogadaFANTASIA.AsString;
    Emit.EnderEmit.fone    := dm.q_empresalogadaTELEFONE.AsString;
    Emit.EnderEmit.CEP     := StrToInt(dm.q_empresalogadacep.AsString);
    Emit.EnderEmit.xLgr    := dm.q_empresalogadaLOGRADOURO.AsString;
    Emit.EnderEmit.nro     := dm.q_empresalogadaNUMERO.asstring;
    Emit.EnderEmit.xCpl    := dm.q_empresalogadaCOMPLEMENTO.AsString;
    Emit.EnderEmit.xBairro := dm.q_empresalogadaBAIRRO.asstring;
    Emit.EnderEmit.cMun    := StrToInt(dm.q_empresalogadacod_cidade.asstring);
    Emit.EnderEmit.xMun    := dm.q_empresalogadacidade.asstring;
    Emit.EnderEmit.UF      := dm.q_empresalogadauf.AsString;
    Emit.enderEmit.cPais   := 1058;
    Emit.enderEmit.xPais   := 'BRASIL';
 
    Emit.IEST              := '';  // NFE 2.0
    Emit.IM                := ''; // Preencher no caso de existir serviços na nota
    Emit.CNAE              := ''; // Verifique na cidade do emissor da NFe se é permitido
                                    // a inclusão de serviços na NFe
 
 
 
 
 
    if frmcadastropedidos.q_pedidosTIPO_DESTINO.AsString = 'E' then
    begin
      exporta.UFembarq   := frmcadastropedidos.q_pedidosUFEMBARQ.AsString;
      exporta.xLocEmbarq := frmcadastropedidos.q_pedidosXLOCEMBARQ.AsString;
    end;
 
    if dm.q_empresalogadaCOD_REGIME.AsString='1' then
    begin
      Emit.CRT               := crtSimplesNacional;   //nfe 2.0
      CRT := '1';
    end
    else
    if dm.q_empresalogadaCOD_REGIME.AsString='1' then
    begin
      Emit.CRT               := crtSimplesExcessoReceita;   //nfe 2.0
      CRT := '2';
    end
    else
    if dm.q_empresalogadaCOD_REGIME.AsString='1' then
    begin
      Emit.CRT               := crtRegimeNormal;   //nfe 2.0
      CRT := '3';
    end;
 
 
    q_clientes.close;
    q_clientes.sql.clear;
    q_clientes.sql.add('select * from clientes where codigo = '+ quotedstr(frmcadastropedidos.q_pedidosDEST_CODIGO.AsString));
    q_clientes.open;
    // se for uma nota de exportação devo limpar alguns campos
    if frmcadastropedidos.q_pedidosPAIS.AsString <> 'BRASIL' then
    begin
      Dest.CNPJCPF        := '';
      Dest.IE             := '';
      Dest.EnderDest.cMun := 9999999;
      Dest.EnderDest.xMun := 'EXTERIOR';
    end
    else
    begin
      if frmcadastropedidos.q_pedidosdest_TIPOPESSOA.AsString = 'J' then
        Dest.CNPJCPF           := q_clientesCPF.AsString
      else
        Dest.CNPJCPF           := removechar(q_clientescpf.AsString);
 
      Dest.IE                := q_clientesRG.AsString;
      Dest.EnderDest.cMun    := StrToInt(q_pedidosDEST_CODCIDADE.AsString);
      Dest.EnderDest.xMun    := q_pedidosDEST_XMUN.AsString;
    end;
    Dest.ISUF              := '';  //NFE2.0
    Dest.EnderDest.CEP     := StrToInt(q_pedidosDEST_CEP.AsString);
    Dest.EnderDest.xLgr    := q_pedidosDEST_XLGR.asstring;
    Dest.EnderDest.nro     := q_pedidosDEST_NRO.asstring;
    Dest.EnderDest.xCpl    := q_pedidosDEST_XCPL.AsString;
    Dest.EnderDest.xBairro := q_pedidosDEST_XBAIRRO.asstring;
    Dest.EnderDest.UF      := q_pedidosDEST_UF.AsString;
    Dest.EnderDest.Fone    := q_clientesTELEFONE.AsString;
    Dest.xNome             := q_clientesRAZAO.AsString;
    Dest.EnderDest.cPais   := strtoint(q_pedidosCODPAIS.AsString);
    Dest.EnderDest.xPais   := q_pedidosPAIS.AsString;
 
    //Use os campos abaixo para informar o endereço de retirada quando for diferente do Remetente/Destinatário
{      Retirada.CNPJCPF := '';
      Retirada.xLgr    := '';
      Retirada.nro     := '';
      Retirada.xCpl    := '';
      Retirada.xBairro := '';
      Retirada.cMun    := 0;
      Retirada.xMun    := '';
      Retirada.UF      := '';}
 
//Use os campos abaixo para informar o endereço de entrega quando for diferente do Remetente/Destinatário
{      Entrega.CNPJCPF := '';
      Entrega.xLgr    := '';
      Entrega.nro     := '';
      Entrega.xCpl    := '';
      Entrega.xBairro := '';
      Entrega.cMun    := 0;
      Entrega.xMun    := '';
      Entrega.UF      := '';}
 
//    QryProduto.Close;
//    QryProduto.Params.ParamByName('PNum').asinteger := frmcadastropedidos.q_pedidosCODIGO.AsInteger;
//    QryProduto.Open;
        q_buscaitem.close;
        q_buscaitem.sql.clear;
        q_buscaitem.sql.add('select * from itens where nroped = '+ QuotedStr(frmcadastropedidos.q_pedidosCODIGO.AsString));
        q_buscaitem.open;
 
        Qtd_Prd_Frete := q_buscaitem.RecordCount;
        Qtd_Prd_Desc  := q_buscaitem.RecordCount;
        Total_Frete   := frmcadastropedidos.q_pedidosVL_FRETE.AsFloat;
        Total_desc    := frmcadastropedidos.q_pedidosVL_DESCONTO.AsFloat;
 
        itemTOT_ICMS_ST:= 0;
        itemTOT_BC_ICMS_ST:= 0;
 
    q_buscaitem.first;
 
    While not q_buscaitem.eof do
    begin
 
      with Det.Add do
      begin
        Prod.nItem    := q_buscaitemNITEM.AsInteger;
        prod.NCM      := q_buscaitemNCM.AsString;  //NFe 2.0
 
        if q_buscaitemcod_anp.asstring <> '' then
        begin
        Prod.comb.cProdANP:= strtoint(q_buscaitemcod_anp.asstring);
        prod.comb.UFcons := 'SP';
        prod.comb.qTemp:= 1;
        end;
 
        if not q_buscaitem.isempty then
        begin
        Prod.CFOP     := q_buscaitemcfop.asstring;
        end else
        begin
        prod.cfop     := frmcadastropedidos.q_pedidoscfop.asstring;
        end;
 
        Prod.cProd    := q_buscaitemCODPRODUTO.AsString;
        Prod.EXTIPI   := '';  //NFE 2.0
        Prod.xProd    := q_buscaitemproduto.AsString;
        Prod.qCom     := q_buscaitemQUANTIDADE.AsFloat;
        Prod.uCom     := q_buscaitemUNIDADE.AsString;
        Prod.vProd    := q_buscaitemVALOR_TOTAL.AsFloat;
        Prod.vUnCom   := q_buscaitemPRECO.AsFloat;    // ver esse campo
//        prod.IndTot   := itNaoSomaTotalNFe;
 
        //Rateio do desconto
        rat_desc := Arredondar((Total_desc / Qtd_Prd_Desc),2);
        Prod.vDesc    := rat_desc;
        Total_desc := Total_desc - rat_desc;
        dec(Qtd_Prd_Desc);
 
       //fim rateio desconto
 
        Prod.qTrib    := q_buscaitemQUANTIDADE.AsFloat;
        Prod.uTrib    := q_buscaitemUNIDADE.AsString;
        Prod.vUnTrib  := q_buscaitemPRECO.AsFloat;
 
        //*Rateio do frete
        rat_frete := Arredondar((Total_Frete / Qtd_Prd_Frete),2);
        prod.vFrete   := rat_frete;
        Total_Frete := Total_Frete - rat_frete;
        dec(Qtd_Prd_Frete);
        //** fim rateio frete
        infAdProd      := ''; //NFE 2.
 
//Declaração de Importação. Pode ser adicionada várias através do comando Prod.DI.Add
//        if frmcadastropedidos.q_pedidosIMP_DI.AsString <> '' then
//        begin
//           with Prod.DI.Add do
//            begin
//              nDi         := '1';
//              dDi         := date;
//              xLocDesemb  := '';
//              UFDesemb    := '';
//              dDesemb     := date;
//              cExportador := '';
//
//              with adi.Add do
//               begin
//                 nAdicao     := '';
//                 nSeqAdi     := '';
//                 cFabricante := '';
//                 vDescDI     := '';
//               end;
//            end;
//         end;
 
        with Imposto do
        begin
          with ICMS do
          begin
            if CRT = '1' then
            begin
 
              // inicio teste CSOSN
              if q_buscaitemCSOSN.AsString = '101' then
              begin
                Orig := q_buscaitemORIGEM.AsVariant;
                CSOSN := csosn101;
                pCredSN :=  q_buscaitemICMS.AsCurrency;
                vCredICMSSN := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat)*((q_buscaitemICMS.AsCurrency) / 100);
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end
              else
              if q_buscaitemCSOSN.AsString = '102' then
              begin
                Orig := q_buscaitemORIGEM.AsVariant;
                CSOSN := csosn102;
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end
              else
              if q_buscaitemCSOSN.AsString = '103' then
              begin
                Orig := q_buscaitemORIGEM.AsVariant;
                CSOSN := csosn103;
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end
              else
              if q_buscaitemCSOSN.AsString = '201' then
              begin
                ICMS.Orig := q_buscaitemORIGEM.AsVariant;
                ICMS.CSOSN := csosn201;
                ICMS.modBCST := q_buscaitemICMS_BC_ST_MOD.AsVariant;
                ICMS.pMVAST  := q_buscaitemICMS_PMVAST.AsVariant;
                ICMS.pRedBCST := q_buscaitemICMS_REDUCAO_ST.AsVariant;
 
                if (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'AJUSTE') or  (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'COMPLEMENTAR') then
                begin
                  ICMS.VBCST   := frmcadastropedidos.q_pedidosBS_ICMS_ST.AsFloat;
                  ICMS.VICMSST := frmcadastropedidos.q_pedidosVL_ICMS_ST.value;
                end
                else
                begin
                  ICMS.vBCST := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                  ICMS.VICMSST := ((ICMS.vBCST +  (ICMS.vBCST * q_buscaitemICMS_PMVAST.AsVariant / 100)) * q_buscaitemICMS_ALIQ_ST.AsVariant / 100);
 
                end;
                ICMS.pICMSST := q_buscaitemICMS_ALIQ_ST.AsVariant;
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
 
                pCredSN  := 0;
                vCredICMSSN := 0;
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end
              else
              if q_buscaitemCSOSN.AsString = '202' then
              begin
                ICMS.Orig := q_buscaitemORIGEM.AsVariant;
                ICMS.CSOSN := csosn202;
                ICMS.modBCST := q_buscaitemICMS_BC_ST_MOD.AsVariant;
                ICMS.pMVAST  := q_buscaitemICMS_PMVAST.AsVariant;
                ICMS.pRedBCST := q_buscaitemICMS_REDUCAO_ST.AsVariant;
 
                if (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'AJUSTE') or  (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'COMPLEMENTAR') then
                begin
                  ICMS.VBCST   := frmcadastropedidos.q_pedidosBS_ICMS_ST.AsFloat;
                  ICMS.VICMSST := frmcadastropedidos.q_pedidosVL_ICMS_ST.AsFloat;
                end
                else
                begin
                  ICMS.vBCST := (q_buscaitemVALOR_TOTAL.value * q_buscaitemICMS_PMVAST.value) / 100;
 
                  varbcicmsstVSaliq:= ((ICMS.vBCST+q_buscaitemVALOR_TOTAL.value)* q_buscaitemICMS_ALIQ_ST.value) / 100;
                  varTotProdVSaliq:= (q_buscaitemVALOR_TOTAL.value) * (q_buscaitemICMS_ALIQ_ST.value / 100);
                  ICMS.VICMSST :=   varbcicmsstVSaliq - varTotProdVSaliq;
 
                end;
                ICMS.pICMSST := q_buscaitemICMS_ALIQ_ST.value;
//                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
//                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST+(ICMS.VBCST+q_buscaitemVALOR_TOTAL.value);
 
                TOT_ICMS_ST := TOT_ICMS_ST+ ICMS.VICMSST;
                CODCSOSN := q_buscaitemCSOSN.AsString;
                ICMS.vBCST:= ICMS.vBCST+q_buscaitemVALOR_TOTAL.value;
              end
              else
              if q_buscaitemCSOSN.AsString = '203' then
              begin
                Orig := q_buscaitemORIGEM.AsVariant;
                CSOSN := csosn203;
                modBCST := q_buscaitemICMS_BC_ST_MOD.AsVariant;
                pMVAST  := q_buscaitemICMS_PMVAST.AsVariant;
                pRedBCST := q_buscaitemICMS_REDUCAO_ST.AsVariant;
 
                if (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'AJUSTE') or  (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'COMPLEMENTAR') then
                begin
                  ICMS.VBCST   := frmcadastropedidos.q_pedidosBS_ICMS_ST.AsFloat;
                  ICMS.VICMSST := frmcadastropedidos.q_pedidosVL_ICMS_ST.AsFloat;
                end
                else
                begin
                  vBCST     :=  Tot_vBCST + (Tot_vBCST * q_buscaitemICMS_PMVAST.AsVariant / 100);
                  ICMS.VICMSST := ((ICMS.vBCST +  (ICMS.vBCST * q_buscaitemICMS_PMVAST.AsVariant / 100)) * q_buscaitemICMS_ALIQ_ST.AsVariant / 100);
                end;
                pICMSST := q_buscaitemICMS_ALIQ_ST.AsVariant;
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
 
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end
              else
              if q_buscaitemCSOSN.AsString = '300' then
              begin
                Orig := q_buscaitemORIGEM.AsVariant;
                CSOSN := csosn300;
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end
              else
              if q_buscaitemCSOSN.AsString = '400' then
              begin
                Orig := q_buscaitemORIGEM.AsVariant;
                CSOSN := csosn400;
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end
              else
              if q_buscaitemCSOSN.AsString = '500' then
              begin
                Orig := q_buscaitemORIGEM.AsVariant;
                CSOSN := csosn500;
                vBCSTRet := 0; //??
                vICMSSTRet := 0; //?
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end
              else
              if q_buscaitemCSOSN.AsString = '900' then
              begin
                Orig := q_buscaitemORIGEM.AsVariant;
                CSOSN := csosn900;
                modBC := q_buscaitemICMS_BC_MOD.AsVariant;
                vBC := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                pRedBC := q_buscaitemICMS_REDUCAO.AsVariant;
                pICMS := q_buscaitemICMS.AsCurrency;
                vICMS :=  (vBC * q_buscaitemICMS.AsCurrency) / 100;
                modBCST :=  q_buscaitemICMS_BC_ST_MOD.AsVariant;
                pMVAST :=  q_buscaitemICMS_PMVAST.AsVariant;
                pRedBCST := q_buscaitemICMS_REDUCAO_ST.AsVariant;
                vBCST := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                pICMSST := q_buscaitemICMS_ALIQ_ST.AsVariant;
 
                ICMS.VICMSST := ((ICMS.vBCST +  (ICMS.vBCST * q_buscaitemICMS_PMVAST.AsVariant / 100)) * q_buscaitemICMS_ALIQ_ST.AsVariant / 100);
 
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
 
                TOT_BC_ICMS := TOT_BC_ICMS + ICMS.VBC;
                TOT_ICMS := TOT_ICMS + ICMS.VICMS;
 
                pCredSN := 0; //??
                vCredICMSSN := 0;  // ??
                CODCSOSN := q_buscaitemCSOSN.AsString;
              end;
             // fim teste CSOSN
            end
            else
            begin
 
 
              if q_buscaitemCST.AsString = '0' then
              begin
                ICMS.CST         :=  cst00;
                ICMS.Orig  := q_buscaitemORIGEM.AsVariant;
                ICMS.ModBC := q_buscaitemICMS_BC_MOD.AsVariant;
                if (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'AJUSTE') or  (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'COMPLEMENTAR') then
                begin
                  ICMS.VBC   := frmcadastropedidos.q_pedidosBS_ICMS.AsFloat;
                  ICMS.VICMS := frmcadastropedidos.q_pedidosVL_ICMS.AsFloat;
                end
                else
                begin
                  ICMS.VBC   := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                  ICMS.VICMS := (ICMS.vBC * q_buscaitemICMS.AsCurrency) / 100;
                end;
                ICMS.PICMS :=  q_buscaitemICMS.AsCurrency;
                COD_CST := '0';
                TOT_BC_ICMS := TOT_BC_ICMS + ICMS.VBC;
                TOT_ICMS := TOT_ICMS + ICMS.VICMS;
              end;
               if q_buscaitemCST.AsString = '10' then
               begin
                ICMS.CST         :=  cst10;
                ICMS.Orig      := q_buscaitemORIGEM.AsVariant;
                ICMS.ModBC := q_buscaitemICMS_BC_MOD.AsVariant;
                ICMS.VBC   := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                ICMS.PICMS := q_buscaitemICMS.AsCurrency;
                ICMS.VICMS     := (ICMS.vBC * q_buscaitemICMS.AsCurrency) / 100;
                ICMS.ModBCST   := q_buscaitemICMS_BC_ST_MOD.AsVariant;
                ICMS.PMVAST    := q_buscaitemICMS_PMVAST.AsVariant;
                ICMS.PRedBCST  := q_buscaitemICMS_REDUCAO_ST.AsVariant;
                ICMS.VBCST     := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                ICMS.PICMSST   := q_buscaitemICMS_ALIQ_ST.AsVariant;
 
                Tot_CST10 := q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat;
 
                ICMS.VICMSST := ((Tot_CST10 +  (Tot_CST10 * q_buscaitemICMS_PMVAST.AsVariant / 100)) * q_buscaitemICMS_ALIQ_ST.AsVariant / 100)
                        - ICMS.VICMS;
 
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
 
                TOT_BC_ICMS := TOT_BC_ICMS + ICMS.VBC;
                TOT_ICMS := TOT_ICMS + ICMS.VICMS;
                COD_CST := '10';
               end;
 
               if q_buscaitemCST.AsString = '20' then
               begin
                ICMS.CST         :=  cst20;
                ICMS.Orig   := q_buscaitemORIGEM.AsVariant;
                ICMS.ModBC := q_buscaitemICMS_BC_MOD.AsVariant;
                ICMS.PRedBC := q_buscaitemICMS_REDUCAO.AsVariant;
                ICMS.VBC   := ((q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) - ((q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) * q_buscaitemICMS_REDUCAO.AsVariant /100));
                ICMS.PICMS := q_buscaitemICMS.AsCurrency;
                ICMS.VICMS     := (ICMS.vBC * q_buscaitemICMS.AsCurrency) / 100;
                TOT_BC_ICMS := TOT_BC_ICMS + ICMS.VBC;
                TOT_ICMS := TOT_ICMS + ICMS.VICMS;
                COD_CST := '20';
               end;
               if q_buscaitemCST.AsString = '30' then
               begin
                ICMS.CST         :=  cst30;
                ICMS.Orig     := q_buscaitemORIGEM.AsVariant;
                ICMS.ModBCST   := q_buscaitemICMS_BC_ST_MOD.AsVariant;
                ICMS.PMVAST    := q_buscaitemICMS_PMVAST.AsVariant;
                ICMS.PRedBCST  := q_buscaitemICMS_REDUCAO_ST.AsVariant;
                ICMS.VBCST     := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                ICMS.PICMSST   := q_buscaitemICMS_ALIQ_ST.AsVariant;
 
                Tot_CST30 := q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat;
 
                ICMS.VICMSST := ((Tot_CST30 +  (Tot_CST30 * q_buscaitemICMS_PMVAST.AsVariant / 100)) * q_buscaitemICMS_ALIQ_ST.AsVariant / 100)
                        - ICMS.VICMS;
 
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
 
                COD_CST := '30';
               end;
               if q_buscaitemCST.AsString = '40' then
               begin
                ICMS.CST         :=  cst40;
                ICMS.Orig := q_buscaitemORIGEM.AsVariant;
                COD_CST := '40';
               end;
               if q_buscaitemCST.AsString = '41' then
               begin
                ICMS.CST         :=  cst41;
                ICMS.Orig := q_buscaitemORIGEM.AsVariant;
                COD_CST := '41';
               end;
               if q_buscaitemCST.AsString = '50' then
               begin
                ICMS.CST         :=  cst50;
                ICMS.Orig := q_buscaitemORIGEM.AsVariant;
                COD_CST := '50';
               end;
               if q_buscaitemCST.AsString = '51' then
               begin
                ICMS.CST         :=  cst51;
                ICMS.Orig   := q_buscaitemORIGEM.AsVariant;
                ICMS.ModBC := q_buscaitemICMS_BC_MOD.AsVariant;
                ICMS.PRedBC := q_buscaitemICMS_REDUCAO.AsVariant;
                ICMS.VBC   := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                ICMS.PICMS := q_buscaitemICMS.AsCurrency;
                ICMS.VICMS     := (ICMS.vBC * q_buscaitemICMS.AsCurrency) / 100;
                TOT_BC_ICMS := TOT_BC_ICMS + ICMS.VBC;
                TOT_ICMS := TOT_ICMS + ICMS.VICMS;
                COD_CST := '51';
               end;
               if q_buscaitemCST.AsString = '60' then
               begin
                ICMS.CST         :=  cst60;
                ICMS.Orig    := q_buscaitemORIGEM.AsVariant;
                ICMS.VBCST     := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
 
                Tot_CST60 := q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat;
 
                ICMS.VICMSST := ((Tot_CST60 +  (Tot_CST60 * q_buscaitemICMS_PMVAST.AsVariant / 100)) * q_buscaitemICMS_ALIQ_ST.AsVariant / 100)
                        - ICMS.VICMS;
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
                COD_CST := '60';
               end;
               if q_buscaitemCST.AsString = '70' then
               begin
                ICMS.CST         :=  cst70;
                ICMS.Orig     := q_buscaitemORIGEM.AsVariant;
 
                case q_buscaitemICMS_BC_MOD.AsVariant of
                   0: ICMS.modBC   := dbiMargemValorAgregado;
                   1: ICMS.modBC   := dbiPauta;
                   2: ICMS.modBC   := dbiPrecoTabelado;
                   3: ICMS.modBC   := dbiValorOperacao;
                 end;
 
                ICMS.PRedBC := q_buscaitemICMS_REDUCAO.AsVariant;
//                ICMS.VBC   := ((q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) - ((q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) * q_buscaitemICMS_REDUCAO.AsVariant /100));
                ICMS.VBC   := ((q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) * q_buscaitemICMS_REDUCAO.AsVariant /100);
                ICMS.PICMS := q_buscaitemICMS.AsCurrency;
                ICMS.VICMS     := (ICMS.vBC * q_buscaitemICMS.AsCurrency) / 100;
 
                case q_buscaitemICMS_BC_ST_MOD.AsVariant of
                   0: ICMS.modBCST := dbisPrecoTabelado;
                   1: ICMS.modBCST := dbisListaNegativa;
                   2: ICMS.modBCST := dbisListaPositiva;
                   3: ICMS.modBCST := dbisListaNeutra;
                   4: ICMS.modBCST := dbisMargemValorAgregado;
                   5: ICMS.modBCST := dbisPauta;
                end;
 
                ICMS.PMVAST    := q_buscaitemICMS_PMVAST.AsVariant;
                ICMS.PRedBCST  := q_buscaitemICMS_REDUCAO_ST.AsVariant;
//                ICMS.VBCST     := ((q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) - ((q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) * q_buscaitemICMS_REDUCAO_ST.AsVariant /100));
                ICMS.VBCST     := ((q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) * q_buscaitemICMS_REDUCAO_ST.AsVariant /100);
                ICMS.PICMSST   := q_buscaitemICMS_ALIQ_ST.AsVariant;
                ICMS.VBCST     := (ICMS.VBCST +  (ICMS.VBCST * q_buscaitemICMS_PMVAST.AsVariant / 100));
 
                ICMS.VICMSST := ((ICMS.VBCST  * q_buscaitemICMS_ALIQ_ST.AsVariant / 100) - ICMS.VICMS);
 
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
 
                TOT_BC_ICMS := TOT_BC_ICMS + ICMS.VBC;
                TOT_ICMS := TOT_ICMS + ICMS.VICMS;
 
                COD_CST := '70';
               end;
               if q_buscaitemCST.AsString = '90' then
               begin
                ICMS.CST         :=  cst90;
                ICMS.Orig     := q_buscaitemORIGEM.AsVariant;
                ICMS.ModBC := q_buscaitemICMS_BC_MOD.AsVariant;
                ICMS.PRedBC := q_buscaitemICMS_REDUCAO.AsVariant;
                ICMS.VBC   := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                ICMS.PICMS := q_buscaitemICMS.AsCurrency;
                ICMS.VICMS     := (ICMS.vBC * q_buscaitemICMS.AsCurrency) / 100;
 
                ICMS.ModBCST   := q_buscaitemICMS_BC_ST_MOD.AsVariant;
                ICMS.PMVAST    := q_buscaitemICMS_PMVAST.AsVariant;
                ICMS.PRedBCST  := q_buscaitemICMS_REDUCAO_ST.AsVariant;
                ICMS.VBCST     := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                ICMS.PICMSST   := q_buscaitemICMS_ALIQ_ST.AsVariant;
 
                Tot_CST90 := q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat;
 
                ICMS.VICMSST := ((Tot_CST90 +  (Tot_CST90 * q_buscaitemICMS_PMVAST.AsVariant / 100)) * q_buscaitemICMS_ALIQ_ST.AsVariant / 100)
                        - ICMS.VICMS;
 
                TOT_BC_ICMS_ST := TOT_BC_ICMS_ST + ICMS.VBCST;
                TOT_ICMS_ST := TOT_ICMS_ST + ICMS.VICMSST;
 
                TOT_BC_ICMS := TOT_BC_ICMS + ICMS.VBC;
                TOT_ICMS := TOT_ICMS + ICMS.VICMS;
                COD_CST := '90';
               end;
 
 
            end;
 
         end; // fim do icms
 
          with IPI do
             begin
               if q_buscaitemIPI_SIT.AsString = '00' then
               begin
                 CST      := ipi00;
                 pIPI   := q_buscaitemIPI.AsFloat;
                 VBC   :=  (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 vIPI   := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) *  q_buscaitemIPI.AsFloat/100;
               end
               else
               if q_buscaitemIPI_SIT.AsString = '01' then
                 CST      := ipi01
               else
               if q_buscaitemIPI_SIT.AsString = '02' then
                 CST      := ipi02
               else
               if q_buscaitemIPI_SIT.AsString = '03' then
                 CST      := ipi03
               else
               if q_buscaitemIPI_SIT.AsString = '04' then
                 CST      := ipi04
               else
               if q_buscaitemIPI_SIT.AsString = '05' then
                 CST      := ipi05
               else
               if q_buscaitemIPI_SIT.AsString = '49' then
               begin
                 CST      := ipi49;
                 pIPI   := q_buscaitemIPI.AsFloat;
                 VBC   :=  (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 vIPI   := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) *  q_buscaitemIPI.AsFloat/100;
               end
               else
               if q_buscaitemIPI_SIT.AsString = '50' then
               begin
                 CST      := ipi50;
                 pIPI   := q_buscaitemIPI.AsFloat;
                 VBC   :=  (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 vIPI   := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) *  q_buscaitemIPI.AsFloat/100;
               end
               else
               if q_buscaitemIPI_SIT.AsString = '51' then
                 CST      := ipi51
               else
               if q_buscaitemIPI_SIT.AsString = '52' then
                 CST      := ipi52
               else
               if q_buscaitemIPI_SIT.AsString = '53' then
                 CST      := ipi53
               else
               if q_buscaitemIPI_SIT.AsString = '54' then
                 CST      := ipi54
               else
               if q_buscaitemIPI_SIT.AsString = '55' then
                 CST      := ipi55
               else
               if q_buscaitemIPI_SIT.AsString = '99' then
               begin
                 CST      := ipi99;
                 pIPI   := q_buscaitemIPI.AsFloat;
                 VBC   :=  (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 vIPI   := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat) *  q_buscaitemIPI.AsFloat/100;
               end
              end;
 
             with PIS do
             begin
               if q_buscaitemCOD_PIS.AsString = '01' then
               begin
                 CST      := pis01;
                 PIS.vBC  := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 PIS.pPIS := q_buscaitemALIQ_PIS.AsFloat;
                 PIS.vPIS :=  (PIS.vBC * q_buscaitemALIQ_PIS.AsCurrency) / 100;
               end
               else
               if q_buscaitemCOD_PIS.AsString = '02' then
               begin
                 CST      := pis02;
                 PIS.vBC  := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 PIS.pPIS := q_buscaitemALIQ_PIS.AsFloat;
                 PIS.vPIS :=  (PIS.vBC * q_buscaitemALIQ_PIS.AsCurrency) / 100;
               end
               else
               if q_buscaitemCOD_PIS.AsString = '03' then
               begin
                 CST      := pis03;
                 PIS.qBCProd   := q_buscaitemQUANTIDADE.AsCurrency;
                 PIS.vAliqProd := q_buscaitemALIQ_PIS_VALOR.AsFloat;
                 PIS.vPIS      := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemALIQ_PIS_VALOR.AsFloat);
               end
               else
               if q_buscaitemCOD_PIS.AsString = '04' then
               begin
                 CST      := pis04;
               end
               else
               if q_buscaitemCOD_PIS.AsString = '06' then
               begin
                 CST      := pis06;
               end
               else
               if q_buscaitemCOD_PIS.AsString = '07' then
               begin
                 CST      := pis07;
               end
               else
               if q_buscaitemCOD_PIS.AsString = '08' then
               begin
                 CST      := pis08;
               end
               else
               if q_buscaitemCOD_PIS.AsString = '09' then
               begin
                 CST      := pis09;
                 PIS.vBC  := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 PIS.pPIS := q_buscaitemALIQ_PIS.AsFloat;;
                 PIS.qBCProd   := q_buscaitemQUANTIDADE.AsCurrency;
                 PIS.vAliqProd := q_buscaitemALIQ_PIS_VALOR.AsFloat;
                 PIS.vPIS :=  (PIS.vBC * q_buscaitemALIQ_PIS.AsCurrency) / 100; // em cima do valor ou porcentagem??
               end;
             end;
 
             with COFINS do
             begin
               if q_buscaitemCOD_COFINS.AsString = '01' then
               begin
                 CST            := cof01;
                 COFINS.vBC     := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 COFINS.pCOFINS := q_buscaitemALIQ_COFINS.AsFloat;
                 COFINS.vCOFINS := (COFINS.vBC * q_buscaitemALIQ_COFINS.AsCurrency) / 100;
               end
               else
               if q_buscaitemCOD_COFINS.AsString = '02' then
               begin
                 CST            := cof02;
                 COFINS.vBC     := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 COFINS.pCOFINS := q_buscaitemALIQ_COFINS.AsFloat;
                 COFINS.vCOFINS := (COFINS.vBC * q_buscaitemALIQ_COFINS.AsCurrency) / 100;
               end
               else
               if q_buscaitemCOD_COFINS.AsString = '03' then
               begin
                 CST            := cof03;
                 COFINS.qBCProd   := q_buscaitemQUANTIDADE.AsCurrency;;
                 COFINS.vAliqProd := q_buscaitemALIQ_COFINS_VALOR.AsFloat;;
                 COFINS.vCOFINS := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemALIQ_COFINS_VALOR.AsFloat);;
               end
               else
               if q_buscaitemCOD_COFINS.AsString = '04' then
               begin
                 CST            := cof04;
               end
               else
               if q_buscaitemCOD_COFINS.AsString = '06' then
               begin
                 CST            := cof06;
               end
               else
               if q_buscaitemCOD_COFINS.AsString = '07' then
               begin
                 CST            := cof07;
               end
               else
               if q_buscaitemCOD_COFINS.AsString = '08' then
               begin
                 CST            := cof08;
               end
               else
               if q_buscaitemCOD_COFINS.AsString = '09' then
               begin
                 CST            := cof09;
               end
               else
               if q_buscaitemCOD_COFINS.AsString = '99' then
               begin
                 CST            := cof99;
                 COFINS.vBC     := (q_buscaitemQUANTIDADE.AsCurrency * q_buscaitemPRECO.AsFloat);
                 COFINS.pCOFINS := q_buscaitemALIQ_COFINS.AsFloat;
                 COFINS.qBCProd   := q_buscaitemQUANTIDADE.AsCurrency;
                 COFINS.vAliqProd := q_buscaitemALIQ_COFINS_VALOR.AsFloat;
                 COFINS.vCOFINS := (COFINS.vBC * q_buscaitemALIQ_COFINS.AsCurrency) / 100;
               end;
             end;
        end;
        end;
 
      q_buscaitem.Next;
    end;
 
    if not q_contas.isempty then
    begin
    q_contas.first;
    While not q_contas.eof do
    begin
      with Cobr.Dup.Add do
      begin
        nDup:= q_contascodigo.AsString;
        dVenc:= q_contasDATA_VENCIMENTO.AsDateTime;
        vDup:= q_contasVALOR_TOTAL.AsFloat;
      end;
       q_contas.Next;
    end;
    end;
    q_contas.Close;
 
    If frmcadastropedidos.q_pedidosFRETE_CONTA.AsString = '0' then
      Transp.modFrete:= mfContaEmitente
    else
    If frmcadastropedidos.q_pedidosFRETE_CONTA.AsString = '1' then
      Transp.modFrete:= mfContaDestinatario
    else
    If frmcadastropedidos.q_pedidosFRETE_CONTA.AsString = '2' then
      Transp.modFrete:= mfContaTerceiros
    else
    If frmcadastropedidos.q_pedidosFRETE_CONTA.AsString = '9' then
      Transp.modFrete:= mfSemFrete;
 
    if frmcadastropedidos.q_pedidosCOD_TRANSP.AsInteger <> 0 then
    begin
      Qry_Transp.Close;
      Qry_Transp.ParamByName('PCOD').asinteger := frmcadastropedidos.q_pedidosCOD_TRANSP.AsInteger;
      Qry_Transp.Open;
 
      Transp.Transporta.xNome := Qry_TranspRAZAO.AsString;
      if Qry_TranspCPF.AsString <> '' then
        Transp.Transporta.CNPJCPF:= Qry_TranspCpf.AsString;
      Transp.Transporta.xEnder:= Qry_TranspENDERECO.AsString;
      Transp.Transporta.xMun:= Qry_TranspCIDADE.AsString;
      Transp.Transporta.UF:= Qry_TranspUF.AsString;
      Transp.Transporta.IE:= '';
      with Transp.Vol.Add do
      begin
        qVol:= frmcadastropedidos.q_pedidosTRANS_QTDE_VOLUMES.AsInteger;
        esp:= frmcadastropedidos.q_pedidosTRANS_ESPECIE_VOLUMES.AsString;
        marca:= frmcadastropedidos.q_pedidosTRANS_MARCA_VOLUM.AsString;
        nVol:= frmcadastropedidos.q_pedidosTRANS_NUMERO.AsString;
        pesoL:= frmcadastropedidos.q_pedidosTRANS_PELO_LIQUIDO.AsFloat;
        pesoB:= frmcadastropedidos.q_pedidosTRANS_PESO_BRUTO.AsFloat;
      end;
      Qry_Transp.Close;
    end;
 
    Total.ICMSTot.vOutro  := frmcadastropedidos.q_pedidosVL_DESPESAS.AsFloat;
    Total.ICMSTot.vIPI  := frmcadastropedidos.q_pedidosVL_IPI.AsFloat;
    Total.ICMSTot.vFrete := frmcadastropedidos.q_pedidosVL_FRETE.AsFloat;
    Total.ICMSTot.vSeg  := frmcadastropedidos.q_pedidosVL_SEGURO.AsFloat;
    Total.ICMSTot.vDesc := frmcadastropedidos.q_pedidosVL_DESCONTO.AsFloat;
 
    if (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'AJUSTE') or  (frmcadastropedidos.q_pedidoside_finnfe.asstring = 'COMPLEMENTAR') then
    begin
      Total.ICMSTot.vBCST   := frmcadastropedidos.q_pedidosBS_ICMS_ST.AsFloat;
      Total.ICMSTot.vST     := frmcadastropedidos.q_pedidosVL_ICMS_ST.AsFloat;
      Total.ICMSTot.vBC   := frmcadastropedidos.q_pedidosBS_ICMS.AsFloat;
      Total.ICMSTot.vICMS := frmcadastropedidos.q_pedidosVL_ICMS.AsFloat;
    end
    else
    begin
//      'totais'
      Total.ICMSTot.vBCST   := TOT_BC_ICMS_ST;
      Total.ICMSTot.vST     := TOT_ICMS_ST;
      Total.ICMSTot.vBC   := TOT_BC_ICMS;
      Total.ICMSTot.vICMS := TOT_ICMS;
    end;
    Total.ICMSTot.vProd := frmcadastropedidos.q_pedidosVL_PROD.AsFloat;
    Total.ICMSTot.vNF   := frmcadastropedidos.q_pedidosVL_TOTAL.AsFloat + TOT_ICMS_ST;
    InfAdic.infCpl     :=  frmcadastropedidos.q_pedidosmensagem.AsString;
    InfAdic.infAdFisco :=  '';
  end;
 
  if tipo='GERAR' then
  begin
  try
    try
  frmprincipal.ACBrNFe1.Enviar(vNumLote,True);
  frmprincipal.MemoResp.Lines.Text := UTF8Encode(frmprincipal.ACBrNFe1.WebServices.Retorno.RetWS);
  frmprincipal.memoRespWS.Lines.Text := UTF8Encode(frmprincipal.ACBrNFe1.WebServices.Retorno.RetornoWS);
  frmprincipal.memolog.Lines.Add(UTF8Encode(frmprincipal.ACBrNFe1.WebServices.Retorno.RetWS));
  frmprincipal.LoadXML(frmprincipal.MemoResp, frmprincipal.WBResposta);
  frmprincipal.ACBrNFe1.NotasFiscais.Items[0].SaveToFile;
     // Salvar a nota em PDF
//     frmprincipal.ACBrNFe1.DANFE.PathPDF := dm.q_empresalogadaCAMINHOARQUIVO.AsString;
     frmprincipal.ACBrNFe1.NotasFiscais.Items[0].ImprimirPDF;
     LocNFeW := TNFeW.Create(frmprincipal.ACBrNFe1.NotasFiscais.Items[0].Nfe);
     LocNFeW.schema := TsPL006;
     LocNFeW.Opcoes.GerarTXTSimultaneamente:=true;
     LocNFeW.GerarXml;
     wchave:=frmprincipal.ACBrNFe1.NotasFiscais.Items[0].Nfe.InfNFe.ID;
     if length(wchave)>44 then
     wchave:=copy(wchave,(length(wchave)-44)+1,44);
     wnome_arquivo:=frmprincipal.ACBrNFe1.Configuracoes.Geral.PathSalvar+wchave+'-nfe.txt';
     LocNFeW.Gerador.SalvarArquivo(wnome_arquivo,fgTXT);
     LocNFeW.Free;
     frmcadastropedidos.q_pedidos.edit;
     frmcadastropedidos.q_pedidosRETORNOWS_CHAVEACESSO.AsString:= frmprincipal.ACBrNFe1.WebServices.Retorno.ChaveNFe;
     frmcadastropedidos.q_pedidosRETORNOWS_MOTIVO.AsString:= frmprincipal.ACBrNFe1.WebServices.Retorno.xMotivo;
     frmcadastropedidos.q_pedidosRETORNOWS_PROTOCOLO.AsString:= frmprincipal.ACBrNFe1.WebServices.Retorno.Protocolo;
     frmcadastropedidos.q_pedidosRETORNOWS_RECIBO.AsString:= frmprincipal.ACBrNFe1.WebServices.Retorno.Recibo;
     frmcadastropedidos.q_pedidosSITUACAO.AsString:='APROVADA';
     emailcliente:= frmcadastropedidos.q_pedidosEMAIL.asstring;
     frmcadastropedidos.q_pedidos.Post;
     dm.conexao.commit;
 
//********************Enviar email******************
     if dm.q_empresalogadaenviaremailauto.asstring='SIM' then
     begin
       mmEmailMsg.Lines.Add(dm.q_empresalogadaMENSAGEM.AsString+#13+'Chave de Acesso para consulta da NFE: '+ frmcadastropedidos.q_pedidosRETORNOWS_CHAVEACESSO.AsString+#13+ 'Atenciosamente'+#13+dm.q_empresalogadaRAZAO.AsString);
 
 
       if (dm.q_empresalogadaEMAIL.AsString<>'') and (frmcadastropedidos.q_pedidosemail.AsString<>'') then
       begin
        CC:=TstringList.Create;
        CC.Add(dm.q_empresalogadaEMAIL_CONTADOR.AsString); //especifique um email válido
        CC.Add(dm.q_empresalogadaEMAIL.AsString);    //especifique um email válido
        CC.Add('[email protected]');    //especifique um email válido
 
 
        frmprincipal.ACBrNFe1.NotasFiscais.Items[0].EnviarEmail(dm.q_empresalogadaSMTP.AsString //host
                                             , dm.q_empresalogadaPORTA.AsString //porta
                                             , dm.q_empresalogadaUSUARIO.AsString //usuario
                                             , dm.q_empresalogadaSENHA.AsString //senha
                                             , dm.q_empresalogadaEMAIL.AsString //usuario smtp
                                             , frmcadastropedidos.q_pedidosEMAIL.AsString //para(destinatarios
                                             , dm.q_empresalogadaRAZAO.asstring+' - '+ dm.q_empresalogadaassunto.asstring //assunto
                                             , mmEmailMsg.Lines
                                             , False // SSL - Conexão Segura
                                             , True //Enviar PDF junto
                                             , cc //Lista com emails que serão enviado cópias - TStrings
                                             , nil // Lista de anexos - TStrings
                                             , False  //Pede confirmação de leitura do email
                                             , False  //Aguarda Envio do Email(não usa thread)
                                             , dm.q_empresalogadaFANTASIA.AsString // Nome do Rementente
                                             , True ); // Auto TLS
    CC.Free;
    end;
    end;
////********************Enviar email******************
 
 
 
  frmprincipal.ACBrNFe1.NotasFiscais.Clear;
  CODCSOSN := '';
  CRT := '';
  except
    on E: EXCEPTION DO
    showmessage('Ocorreu um erro: '+ E.Message);
 
  end;
  finally
    try
 
    except
 
    end;
 
  end;
  end else if tipo='VALIDAR' then
  begin
    frmprincipal.ACBrNFe1.NotasFiscais.Valida;
 
    if frmprincipal.ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
    frmprincipal.MemoLOG.Lines.Add('Alertas: '+frmprincipal.ACBrNFe1.NotasFiscais.Items[0].Alertas);
    showmessage('Nota Fiscal Eletrônica Valida!');
    frmprincipal.ACBrNFe1.NotasFiscais.Clear;
    CODCSOSN := '';
    CRT := '';
  end;
end;
 
//final gerarnfe
 
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3886 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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