Ver Mensaje Individual
  #3457  
Antiguo 07-01-2024
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 194
Reputación: 21
muli Va por buen camino
LLevo unos dias peleandome con lo del SII, mirando unidades de aqui, de allí, del FTP, he conseguido compilar sin errores usando las unidades que están en este hilo, solo de SuministroFactEmitidas, es lo unico que necesito. y ahora me pregunto lo siguiente, utilizo como la gran mayoria el componente HTTPRIO1, cuando se llama la funcion GetSiiSoap de la unidad de SuministroFactEmitidas, que tengo con las siguientes constantes:
Código Delphi [-]
const
  defWSDL = 'http://www.agenciatributaria.es/static_files/AEAT/Contenidos_Comunes/La_Agencia_Tributaria/Modelos_y_formularios/Suministro_inmediato_informacion/FicherosSuministros/V_1_1/SuministroFactEmitidas.wsdl';
  defURL  = 'https://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
  defSvc  = 'siiService';
  defPrt  = 'SuministroFactEmitidas';

Me arroja el siguiente error:
Código Delphi [-]
Project Project1.exe raised exception class Exception with message 'Unable to load WSDL File/Location: http://www.agenciatributaria.es/stat...tEmitidas.wsdl.  Error [Error sending data: (12002) Se superó el tiempo de espera para la operación]'.

Entiendo que las direcciones indicadas no son correctas, donde puedo encontrar las correctas?, ya no entro si estoy en periodo de pruebas o no, me da igual, lo que quiero es enviar una factura emitida con el certificado seleccionado (eso creo que lo hago bien). Gracias por todo, agradecería algún ejemplo completo de un envio de una factura emitida y puestos a pedir tambien de la consulta de emitidas.
También secundo la proposición que hizo un miembro del foro, de unir todo lo realmente útil en un solo post, yo por mi parte, una vez que tenga hecho lo de las facturas emitidas, colgaré todo el proyecto en el FTP, aunque mio no tiene mucho, es una modificación de lo que había. Ahh, por cierto me olvidaba, como puedo guardar para ver a posteriori el XML generado antes del envio, pongo todo el código por si alguien me puede ayudar, como dije es código descargado del foro del club.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i:LongInt;
  ASuministroLRFacturasEmitidas: SuministroLRFacturasEmitidas;
  ARegistroLRFacturasEmitidas:Array_Of_LRfacturasEmitidasType;
  result:RespuestaLRFacturasEmitidas;
  CERTIFICADO :Pointer;
  IVAS: DesgloseIva3;
  a,mes,d:word;

begin
  if comboBox1.itemindex<0 then exit;
  CERTIFICADO := BUSCAR_CERTIFICADO(comboBox1.text);
   if(CERTIFICADO = nil) then begin
       ShowMessage('No encuento el certificado');
       Exit();
    end;
    setCERTIFICADO(CERTIFICADO);

  try
    ASuministroLRFacturasEmitidas := SuministroLRFacturasEmitidas.Create;
    ASuministroLRFacturasEmitidas.Cabecera := CabeceraSii.Create;
    // DATOS:
    ASuministroLRFacturasEmitidas.Cabecera.IDVersionSii:=VersionSiiType(0);       // 0.1
    ASuministroLRFacturasEmitidas.Cabecera.titular := PersonaFisicaJuridicaESType.Create;
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon:=Edit1.Text;          
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NIF:=Edit2.Text;              
    // (0) A0 - ALTA
    // (1) A1-  MODIFICACION
    // (2) A4-  MODIFICACION REGIMEN VIAJEROS
    ASuministroLRFacturasEmitidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(0);

    //Se crean todas las estructuras de datos de la consulta

    SetLength(ARegistroLRFacturasEmitidas, 1);
    ARegistroLRFacturasEmitidas[0]:=LRfacturasEmitidasType.Create;
    ARegistroLRFacturasEmitidas[0].IDFactura:=IDFacturaExpedidaType.create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida:=FacturaExpedidaType.create;               // <- clase para tipo de factura
    ARegistroLRFacturasEmitidas[0].PeriodoLiquidacion:=PeriodoLiquidacion11.Create;

    ARegistroLRFacturasEmitidas[0].PeriodoLiquidacion.Ejercicio:=Edit8.text;                       //  AÑO
    decodeDate(strtodate(edit7.Text),a,mes,d);

    ARegistroLRFacturasEmitidas[0].PeriodoLiquidacion.periodo  :=TipoPeriodoType(mes - 1);          //  PERIODO 01- ENERO ... 12-DICIEMBRE  (0A - ANUAL )


    With ARegistroLRFacturasEmitidas[0].IDFactura do
    begin
       IDEmisorFactura:= IDEmisorFactura3.Create;
       IDEmisorFactura.NIF  :=Edit2.text;                      
       NumSerieFacturaEmisor:=Edit6.text;                    
       FechaExpedicionFacturaEmisor:=Edit7.Text;          
    end;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.tipofactura:=ClaveTipoFacturaType(0);      //  F1- FACTURA / F2 TICKET / ...
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.ClaveRegimenEspecialOTrascendencia:=IdOperacionesTrascendenciaTributariaType(0);  // 01-REGIMEN COMUN / 02-BIENES USADOS... 15-EXPORTACION
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.ImporteTotal:=Edit12.Text;                       //  TOTAL (opcional)
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.descripcionOperacion:='Nuestra Factura';   //  DESCRIPCION FACTURA (LIBRE)

    // CONTRAPARTE:
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte:=PersonaFisicaJuridicaType.Create;  // CREAR CLIENTE:
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NombreRazon:=Edit4.Text;           // NOMBRE DEL CLIENTE
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NIFRepresentante:='';
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NIF:=Edit5.Text;                      // NIF DEL CLIENTE

(*
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro:=IDOtroType.Create;          // identifiacion del nif.
   //ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.CodigoPais:=countryType2(10);  // EN CASO DE ESPAÑA NO ES NECESARIO
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.IDType:=PersonaFisicaJuridicaIDTypeType(0);   // 2-NIF / 3-PASAPORTE / 4- DOCUMENTO OFICIAL IDENT. PAIS RESIDENCIA
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.ID:='';         // EN CASO DE 3 Ó 4 INDICAR EL ID.
*)

   // EMPEZAMOS CON LOS DESGLOSES (IVAs)
    ARegistroLRFacturasEmitidas[0].FacturaExpedidA.TipoDesglose:= TipoDesglose3.create;

    setLength(IVAS,1);
    IVAS[0]:=DetalleIvaEmitidaType.Create;
    IVAS[0].BaseImponible:=Edit9.Text;            // BASE IMPONIBLE
    IVAS[0].TipoImpositivo:=Edit10.Text;            // IVA %
    IVAS[0].CuotaRepercutida:=Edit11.Text;          // IMPORTE IVA
    IVAS[0].TipoRecargoEquivalencia:='0';    // REQ %
    IVAS[0].CuotaRecargoEquivalencia:='0';   // IMPORTE RECARGO
    //   opcion 1
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desgloseFactura:=TipoSinDesgloseType.create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desgloseFactura.sujeta:=SujetaType.create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desgloseFactura.sujeta.noexenta:=NoExenta2.create;
    // ASIGNAR IVAS
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desglosefactura.sujeta.noexenta.desgloseIVA:=IVAS;
                                        // documento pais residencia (extranjero)
    //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(true,'',HTTPRIO1).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;
end;

Gracias. Y saludos a todos.
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita