Ver Mensaje Individual
  #118  
Antiguo 08-02-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Reputación: 8
seccion_31 Va por buen camino
Este es mi código para consultar facturas emitidas, colocando sus resultados en una base de datos.


Código:
//    memoErrores.lines.Clear;
    if dbRespuesta.active then dbRespuesta.Active:=false;

    dbRespuesta.FieldDefs.Clear;
    dbRespuesta.FieldDefs.Add('numero',ftstring,30,false);
    dbRespuesta.FieldDefs.Add('fecha',ftDate,0,false);
    dbRespuesta.FieldDefs.Add('cliente',ftstring,100,false);
    dbRespuesta.FieldDefs.Add('nif',ftstring,50,false);
    dbRespuesta.FieldDefs.Add('tipo',ftstring,5,false);
    dbRespuesta.FieldDefs.Add('exenta',ftstring,5,false);
    dbRespuesta.FieldDefs.Add('tipostr',ftstring,50,false);
    dbRespuesta.FieldDefs.Add('regimen',ftstring,5,false);
    dbRespuesta.FieldDefs.Add('operacion',ftstring,200,false);
    dbRespuesta.FieldDefs.Add('terceros',ftstring,5,false);
    dbRespuesta.FieldDefs.Add('total',ftfloat,0,false);
    dbRespuesta.FieldDefs.Add('cobros',ftstring,5,false);
    dbRespuesta.FieldDefs.Add('noexenta',ftstring,5,false);
    dbRespuesta.FieldDefs.Add('estado',ftstring,100,false);
    dbRespuesta.FieldDefs.Add('descripcio',ftstring,300,false);
    for h := 0 to 6 do
    begin
        dbRespuesta.FieldDefs.Add('iva'+inttostr(h),ftFloat,0,false);
        dbRespuesta.FieldDefs.Add('impiva'+inttostr(h),ftFloat,0,false);
        dbRespuesta.FieldDefs.Add('baseimp'+inttostr(h),ftFloat,0,false);
    end;
    dbRespuesta.CreateTable;
    dbRespuesta.Active:=true;

    //***CSY
    CERTIFICADO := BUSCAR_CERTIFICADO(comboBox1.text); //<----- SELECCIONAR CERTIFICADO
    if(CERTIFICADO = nil) then begin
       ShowMessage('No encuento el certificado');
       Exit();
    end;

    emitidas.HTTPWebNode.ClientCertificate.SerialNum := Buscar_Certificado_SERIAL(comboBox1.text);
    //****

  try
     /////////////////////////////////////////////////////////////////////////////
    ////  PRESENTADOR OSEA  -> NOSOTROS    //////////////////////////////////////
    //    se crea el objeto que se va a enviar:
     /////////////////////////////////////////////////////////////////////////////
    aConsultaLRFacturasEmitidas := ConsultaLRFacturasEmitidas.Create;
    aConsultaLRFacturasEmitidas.Cabecera:=CabeceraConsultaSii.Create;
    // DATOS:
    aConsultaLRFacturasEmitidas.Cabecera.IDVersionSii:=VersionSiiType(0);       // 0.1
    aConsultaLRFacturasEmitidas.Cabecera.titular := PersonaFisicaJuridicaUnicaESType.Create;
    aConsultaLRFacturasEmitidas.Cabecera.Titular.NombreRazon:=_PRESENTADOR;          // NOMBRE DEL PRESENTADOR (CUALQUIERA VALE)
    aConsultaLRFacturasEmitidas.Cabecera.Titular.NIF:=_NIF_EMISOR;              // CIF del PRESENTADOR (DEBE COINCIDIR CON EL CERTIFICADO SELECCIONADO)

    aConsultaLRFacturasEmitidas.FiltroConsulta:=LRFiltroEmitidasType.Create;
    aConsultaLRFacturasEmitidas.FiltroConsulta.PeriodoImpositivo:=PeriodoImpositivo.Create;
    aConsultaLRFacturasEmitidas.FiltroConsulta.PeriodoImpositivo.Ejercicio:=edit2.text;
    aConsultaLRFacturasEmitidas.FiltroConsulta.PeriodoImpositivo.Periodo:=TipoPeriodoType( comboBox2.itemIndex  );

    try
      // se hace la llamada a la funcion suministrada por el WS
      result := GetsiiSOAP(true,'',emitidas).ConsultaLRFacturasEmitidas(aConsultaLRFacturasEmitidas);
      memoComs.Lines.Add( getEnumName(typeInfo(ResultadoConsultaType), ord(result.resultadoConsulta) ) );

      //mostrar los resultados devueltos por la llamada
      for i := low(result.RegistroRespuestaConsultaLRFacturasEmitidas) to High(result.RegistroRespuestaConsultaLRFacturasEmitidas) do
      begin
          _noexenta:='';
          _numero:='';
          _fechaStr:='';
          _tipo:='';
          _tipoStr:='';
          _regimen:='';
          _operacion:='';
          _exenta:='';
          _terceros:='';
          _cliente:='';
          _nif:='';
          _tipodesglose:='';
          _cobros:='';
          _estado:='';
          _estadoFactura:='';
          _ImporteTotal:=0;
          _descripcion:='';

        with result.RegistroRespuestaConsultaLRFacturasEmitidas[i] do
        begin
            try
                if result.RegistroRespuestaConsultaLRFacturasEmitidas[i].datosfacturaemitida.tipodesglose.desglosetipooperacion<>nil then
                  _exenta:=GetEnumName( TypeInfo(CausaExencionType),ord(DatosFacturaEmitida.TipoDesglose.DesgloseTipoOperacion.Entrega.Sujeta.exenta.CausaExencion));
            except
            end;

            _tipo:=GetEnumName(TypeInfo(clavetipoFacturaType), Ord(DatosFacturaEmitida.TipoFactura));
            _tipoSTR:=tipoSTR( DatosFacturaEmitida.TipoFactura );
            _regimen:=GetEnumName( TypeInfo(IdOperacionesTrascendenciaTributariaType),  Ord(DatosFacturaEmitida.ClaveRegimenEspecialOTrascendencia) );

            _ImporteTotal:=strToFloat( SII_Numero( DatosFacturaEmitida.ImporteTotal ) );

            _operacion:=DatosFacturaEmitida.DescripcionOperacion;
            _terceros:=GetEnumName(typeInfo( EmitidaPorTercerosType ), ord( DatosFacturaEmitida.EmitidaPorTerceros ) );
            _numero:=IDFactura.NumSerieFacturaEmisor;

            try
              if DatosFacturaEmitida.contraparte<>nil then    // POR SI NO LLEVA CONTRAPARTE:
              begin
                _cliente:=DatosFacturaEmitida.contraparte.NombreRazon;
                _NIF:=DatosFacturaEmitida.contraparte.NIF;

                if DatosFacturaEmitida.TipoDesglose.DesgloseFactura<>nil then
                begin
                  _tipodesglose:=GetEnumName( typeInfo(TipoOperacionSujetaNoExentaType), ord(DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.TipoNoExenta) );
                  _noexenta:=getEnumName(typeInfo( TipoOperacionSujetaNoExentaType ) ,  ord(DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.TipoNoExenta ) );
                end;
                if DatosFacturaEmitida.contraparte.IDOtro<>nil then
                begin
                    if _NIF='' then
                        _NIF:=DatosFacturaEmitida.contraparte.IDOtro.ID;
                end;
              end
              else                                         // POSIBLE ERROR:
              BEGIN
                  _cliente:='SIN CLIENTE';
                   MemoComs.lines.add('factura: ' + IDFactura.NumSerieFacturaEmisor + ' SIN CLIENTE');
              end;

              if DatosFacturaEmitida.TipoDesglose.DesgloseFactura<>NIL then
              begin
                for h := low(DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA) to high( DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA) do
                begin
                    with DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA[h] do
                    begin
                          base[h]:= strTofloat( SII_numero( baseImponible ) );
                          tipo[h]:=strTofloat(SII_numero( tipoImpositivo ) );
                          cuota[h]:=strTofloat(SII_numero( cuotarepercutida ) );
                    end;
                end;
              end;
              _cobros:=getEnumName( typeInfo(FacturaARType),   ord(DatosFacturaEmitida.Cobros) );

              _fechaStr:=copy(IDFactura.FechaExpedicionFacturaEmisor,1,10);
              _fechaStr:=stringReplace(_fechaStr,'-','/',[rfReplaceAll]);
              _fecha:=strTodate( _fechaStr );
              _estado:=estadoFactura.EstadoRegistro;
              _descripcion:=DatosFacturaEmitida.DescripcionOperacion;

            MemoComs.lines.add('factura: ' + IDFactura.NumSerieFacturaEmisor + ' ' + IDFactura.NumSerieFacturaEmisorResumenFin + ' ' + IDFactura.FechaExpedicionFacturaEmisor);


            // guardar en la base de datos:
            dbRespuesta.Insert;
            dbRespuesta.fieldbyName('numero').Text:=_numero;
            dbRespuesta.fieldbyName('fecha').asdatetime:=_fecha;
            dbRespuesta.fieldbyName('cliente').Text:=_cliente;
            dbRespuesta.fieldbyName('nif').Text:=_nif;
            dbRespuesta.fieldbyName('tipo').Text:=_tipo;
            dbRespuesta.fieldbyName('tipostr').Text:=_tipostr;
            dbRespuesta.fieldbyName('exenta').Text:=_exenta;
            dbRespuesta.fieldbyName('regimen').Text:=_regimen;
            dbRespuesta.fieldbyName('operacion').Text:=_operacion;
            dbRespuesta.fieldbyName('terceros').Text:=_terceros;
            dbRespuesta.fieldbyName('total').asfloat:=_ImporteTotal;
            dbRespuesta.fieldbyName('cobros').text:=_cobros;
            dbRespuesta.fieldbyName('fecha').asdatetime:=_fecha;
            dbRespuesta.fieldbyName('estado').text:=_estado;
            dbRespuesta.fieldbyName('descripcio').text:=_descripcion;
            dbRespuesta.fieldbyName('Noexenta').text:=_noexenta;

            if DatosFacturaEmitida.TipoDesglose.DesgloseFactura<>NIL then
            begin
              for h := low(DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA) to high( DatosFacturaEmitida.TipoDesglose.DesgloseFactura.Sujeta.NoExenta.DesgloseIVA) do
              begin
                  dbRespuesta.fieldbyName('iva'+inttostr(h)).asfloat:=tipo[h];
                  dbRespuesta.fieldbyName('impiva'+inttostr(h)).asfloat:=cuota[h];
                  dbRespuesta.fieldbyName('baseimp'+inttostr(h)).asfloat:=base[h];
              end;
            end;

            dbRespuesta.Post;
        except
            On E:Exception do
            begin
              MemoErrores.lines.Add(_numero);
              MemoErrores.lines.Add(E.Message);
              MemoErrores.lines.Add('--------------------');
            end;

        end;


        end;
      end;
    except
      On E:Exception do
        //El proceso de envio dio error
        MemoErrores.lines.Add(E.Message);
    end;
  finally
    // se eliminan los objetos creados
    aConsultaLRFacturasEmitidas.Free;
    result.Free;

    dbRespuesta.Active:=true;
  end;
end;
Y Ahora me faltaria:

* Facturas recibidas intracomunitarias y autofactura....
* Factura a Canarias?

Aunque lo estoy mirando ahora, ¿Por favor, podeis postear algún ejemplo? ...

Saludos !
Responder Con Cita