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
SetLength(ARegistroLRFacturasEmitidas, 1);
ARegistroLRFacturasEmitidas[0]:=LRfacturasEmitidasType.Create;
ARegistroLRFacturasEmitidas[0].IDFactura:=IDFacturaExpedidaType.create;
ARegistroLRFacturasEmitidas[0].FacturaExpedida:=FacturaExpedidaType.create;
ARegistroLRFacturasEmitidas[0].PeriodoImpositivo:=PeriodoImpositivo.Create;
With ARegistroLRFacturasEmitidas[0].IDFactura do begin
IDEmisorFactura:= IDEmisorFactura3.create;
IDEmisorFactura.NIF :='123456789X'; NumSerieFacturaEmisor:='algo'; NumSerieFacturaEmisorResumenFin:='y algo mas'; FechaExpedicionFacturaEmisor:='15/12/2016'; end;
ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.Ejercicio:='2016';
ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.periodo :=TipoPeriodoType(11);
ASuministroLRFacturasEmitidas := SuministroLRFacturasEmitidas.Create;
ASuministroLRFacturasEmitidas.Cabecera := CabeceraSii.Create;
ASuministroLRFacturasEmitidas.Cabecera.titular := PersonaFisicaJuridicaESType.Create;
ASuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon:='tu nombre'; ASuministroLRFacturasEmitidas.Cabecera.Titular.NIF:='tu nif';
ASuministroLRFacturasEmitidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(1);
ASuministroLRFacturasEmitidas.RegistroLRFacturasEmitidas:=ARegistroLRFacturasEmitidas;
try
result := GetsiiSOAP.SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);
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);
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
MessageDlg(E.Message, mtError, [mbOK], 0);
end;
finally
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