Ir para conteúdo
  • Cadastre-se

rogercon

Membros
  • Total de ítens

    296
  • Registro em

  • Última visita

Posts postados por rogercon

  1. Rogercon,

     

    Você esta utilizando um certificado digital para assinar o CT-e e enviar para SEFAZ, correto?

     

    Esse certificado é de uma pessoa juridica?

     

    Se sim, trata-se de uma transportadora?

     

    Se sim, foi feito o credenciamento junto a SEFAZ da UF que ela é contribuinte?

    sim para tudo, inclusive até configurei corretamente o RNTRC da transportadora, lembrando que pelo emissor gratuito o cte é transmitido com sucesso!.

  2. Bom dia Rogercon,

     

    Uma coisa não tem nada haver com outra.

     

    A propriedade tpMed se refere ao tipo de medida como por exemplo "Peso Bruto" ou "Peso Liquido", etc. logo temos que alimentar essa propriedade, caso contrario ocorre erro ao validar o XML do CT-e.

     

    O erro informando que não é possível se conectar com a SEFAZ ai já é outra história, você tem que checar se esse erro não esta sendo causado por Firewall, antivirus, proxy, ou até mesmo a falta de acesso a internet.

    resolvido, obrigado.

  3. pessoal agora meu problema mudou, como estou iniciando ainda estou presenciando vários problemas, vamos lá...

     

     

    após todas as validações, creio que estou na última delas, EMISSOR NAO HABILITADO PARA EMISSÃO DO CTE.

     

     

    Fiz um teste pelo emissor gratuito da sefaz e validou e transmitiu o cte normalmente , somente no demo do acbr que estou com este problema.

     

    agradeço desde já.

  4.  

    italo, o caso acima foi resolvido, lendo eu resolvi isso usando o txt que vem na pasta do exemplo do acbr, porem agora meu problema é mais sério, olha só o codigo abaixo.

     

    //          // UnidMed = (uM3,uKG, uTON, uUNIDADE, uLITROS);
              with infCTeNorm.infCarga.InfQ.Add do
               begin
                cUnid  := uKg;
    //            tpMed  := 'Peso Bruto'; // se escrever trava
    //            tpMed  := ''; // se deixar em branco, nao valida, diz que tpmed nao pode ser value = ''
                qCarga := RoundTo(100, -2);
               end;
     
     
    o campo tpmed, se eu deixar em branco, a nota nao valida, pois diz que falta um valor neste campo, porém reparei que o campo é string, se eu por qualquer valor(string) neste campo, simplesmente da erro dizendo que nao foi possivel se conectar na sefaz, se precisar posto o print do erro, desde já agradeço.

     

     

     

    OK RESOLVIDO, COLOQUEI uM3 e passou.

  5. italo, o caso acima foi resolvido, lendo eu resolvi isso usando o txt que vem na pasta do exemplo do acbr, porem agora meu problema é mais sério, olha só o codigo abaixo.

     

    //          // UnidMed = (uM3,uKG, uTON, uUNIDADE, uLITROS);
              with infCTeNorm.infCarga.InfQ.Add do
               begin
                cUnid  := uKg;
    //            tpMed  := 'Peso Bruto'; // se escrever trava
    //            tpMed  := ''; // se deixar em branco, nao valida, diz que tpmed nao pode ser value = ''
                qCarga := RoundTo(100, -2);
               end;
     
     
    o campo tpmed, se eu deixar em branco, a nota nao valida, pois diz que falta um valor neste campo, porém reparei que o campo é string, se eu por qualquer valor(string) neste campo, simplesmente da erro dizendo que nao foi possivel se conectar na sefaz, se precisar posto o print do erro, desde já agradeço.
  6. ítalo boa tarde,

     

    estou tentando emitir a cte, após migrar para 2.0 no acbr.inc, começou a dar erro dizendo que a série está em branco, eu tentei passar a seria de 3 formas observe. mesmo passando das 3 formas, ta dizendo que a serie é vazio, ja tentei serie 1 2 e 3. desde já obrigado.

     

     

    Ide.serie:=1;

       Ide.nCT:=1;
       Ide.dhEmi:=Now;
       Ide.tpImp:=tiRetrato;
    //
     
       with infCTeNorm.infDoc.infNF.Add do
       begin
       modelo:=moNF011AAvulsa;
       serie:='3';
       dEmi:= now;
       nDoc:='2';
     
     
    //   nCT:=1;
    //   dhEmi:=Now;
    //   tpImp:=tiRetrato;
       end;
      infCTeNorm.infDoc.infNF.Items[0].dEmi:=now;
      infCTeNorm.infDoc.infNF.Items[0].serie:='3';
      infCTeNorm.infDoc.infNF.Items[0].nCFOP:=5201;
  7. Boa noite pessoal, estou iniciando no mundo da nfse, e estou encontrando alguns problemas, para resumir ainda nao sei nada sobre nfse, ou quase nada, em minha empresa tenho login e senha do GINFES para emitir direto pelo site, mas com o demo do acbr estou encontrando problemas...

     

    segue o erro em anexo quando tento GERAR E ENVIAR LOTE.

     

     

    Outra dúvida, eu tenho um certificado digital da NFE aqui modelo A1, o que tem haver com  NFSE, sendo que no demo pede para por o número do certificado ? nao entendi... o certificado digital serve tanto para NFE quanto para NFSE. ?

     

    obrigado desde já.

     

    post-5082-0-68969800-1382748456_thumb.jp

  8. 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
     
  9. 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

     

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