Ver Mensaje Individual
  #28  
Antiguo 19-12-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
como ha comentado Neftali, son objetos de tipo class(TRemotable), y necesitas crearlos antes de llamar a sus elementos, yo suelo añadir en la propia clase la funcion create al propio objeto con la propiedad override, para dejar el código mas limpio,

Código Delphi [-]
var
  i:LongInt;
  ASuministroLRFacturasEmitidas:SuministroLRFacturasEmitidas;
  ARegistroLRFacturasEmitidas:Array_Of_LRfacturasEmitidasType;
  result:RespuestaLRFacturasEmitidas;
begin
  try
    //se crea un array con el numero de facturas que se van a emitir
    //en este ejemplo solo 1, pero pueden ser mas
    SetLength(ARegistroLRFacturasEmitidas, 1);

    //se introducen los datos de cada una de las facturas
//    for i := Low(ARegistroLRFacturasEmitidas) to High(ARegistroLRFacturasEmitidas) do begin

    //Se crean todas las estructuras de datos de la consulta
    ARegistroLRFacturasEmitidas[0]:=LRfacturasEmitidasType.Create;
    ARegistroLRFacturasEmitidas[0].IDFactura:=IDFacturaExpedidaType.create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida:=FacturaExpedidaType.create;

    (*
    //aqui tambien hay que crear el resto de objetos que haya que enviar
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.DatosInmueble:= ;                              //array of DatosInmuebleType;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.ImporteTransmisionSujetoAIVA:= ;               //ImporteSgn12_2Type =  type string;

    ARegistroLRFacturasEmitidas[0].FacturaExpedida.EmitidaPorTerceros:=EmitidaPorTercerosType(0); //EmitidaPorTercerosType = (S, N);
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte:= PersonaFisicaJuridicaType.create;
    // ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose:= TipoDesglose2.create;
    //...
    (**)

    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo:=PeriodoImpositivo.Create;

    With ARegistroLRFacturasEmitidas[0].IDFactura do begin
       IDEmisorFactura:= IDEmisorFactura3.create;
       IDEmisorFactura.NIF  :='123456789X';             // NIFType         =  type string;
       NumSerieFacturaEmisor:='algo';                   // TextoIDFacturaType =  type string;
       NumSerieFacturaEmisorResumenFin:='y algo mas';   // TextoIDFacturaType =  type string;
       FechaExpedicionFacturaEmisor:='15/12/2016';      // fecha           =  type string;
    end;

(*
    // ... rellenar aqui el resto de datos necesarios, no se exactamente a que se corresponden,
    // hay que mirar la documentacion correspondiente, algunos de estos datos pueden ser  tambien classes
    // con mas estructuras de datos

    ARegistroLRFacturasEmitidas[0].FacturaExpedida.DatosInmueble:=...;          //tipo DatosInmueble2
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.ImporteTransmisionSujetoAIVA://tipo  ImporteSgn12_2Type
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.EmitidaPorTerceros:          //tipo  EmitidaPorTercerosType
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte:                 //tipo  PersonaFisicaJuridicaType
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose:                //tipo  TipoDesglose2

(**)
    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.Ejercicio:='2016';         //YearType:  type string;

    //  TipoPeriodoType = ( _01, _02, _03, _04, _05, _06, _07, _08, _09, _10, _11, _12, _0A);
    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.periodo  :=TipoPeriodoType(11);

//    end;

    //se crea el objeto que se va a enviar
    ASuministroLRFacturasEmitidas := SuministroLRFacturasEmitidas.Create;
    ASuministroLRFacturasEmitidas.Cabecera := CabeceraSii.Create;
    ASuministroLRFacturasEmitidas.Cabecera.titular := PersonaFisicaJuridicaESType.Create;

    ASuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon:='tu nombre'; //creo que esto puede ser el nombre del cliente
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NIF:='tu nif';            // y esto el CIF del cliente

    //Un valor de la lista TipoComuniacion. Ver en la documentacion
    // definida como   ClaveTipoComunicacionType = (A0, A1, A4);
    ASuministroLRFacturasEmitidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(1);

    //se añade el array de facturas creado anteriormente
    ASuministroLRFacturasEmitidas.RegistroLRFacturasEmitidas:=ARegistroLRFacturasEmitidas;

    try
      // se hace la llamada a la funcion suministrada por el WS
      result := GetsiiSOAP.SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);

      //mostrar los resultados devueltos por la llamada
      for i := low(result.RespuestaLinea) to High(result.RespuestaLinea) do begin
        with result.RespuestaLinea[i] do begin
          Memo1.lines.add('factura: ' + IDFactura.NumSerieFacturaEmisor + ' ' + IDFactura.NumSerieFacturaEmisorResumenFin + ' ' + IDFactura.FechaExpedicionFacturaEmisor);
          //si el estado no es correcto, se muestran los errores
          if EstadoRegistro <> EstadoRegistroType(0) then begin
            Memo1.lines.add('Error no.: ' + InttoStr(CodigoErrorRegistro));
            Memo1.lines.add(DescripcionErrorRegistro);
          end;
        end;
      end;
    except
      On E:Exception do
        //El proceso de envio dio error
        MessageDlg(E.Message, mtError, [mbOK], 0);
    end;
  finally
    // se eliminan los objetos creados
    ASuministroLRFacturasEmitidas.Free;
    result.Free;
  end;

Este codigo, salvo la llamada, que no quiero hacerla por que los datos introducidos no son validos, no da access Violation
Responder Con Cita