Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2020
QuiqueSalamanca QuiqueSalamanca is offline
Miembro
 
Registrado: mar 2014
Posts: 35
Poder: 0
QuiqueSalamanca Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Tal vez deberías mostrar qué código estás utilizamdo y dónde te está dando error.

Ese error es muy genérico como para darte una solución que sea algo más concreta que "utilizar correctamente los interfaces".

Hola Germán!

Pues estoy utilizando el código del proyecto que subió newtron.

Código:
procedure TfrmAEATSII.sbInformarEmitidasClick(Sender: TObject);
var
  i:LongInt;
  ASuministroLRFacturasEmitidas:SuministroLRFacturasEmitidas;
  ARegistroLRFacturasEmitidas:Array_Of_LRfacturasEmitidasType;
  result:RespuestaLRFacturasEmitidas;

  CERTIFICADO :Pointer;
  IVAS: DesgloseIva2;
  cTotal : Currency;
  j : integer;

  a,mes,d:word;
begin
    if comboBox1.itemindex<0 then exit;



    //***CSY
    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(1);       // 0.1
    ASuministroLRFacturasEmitidas.Cabecera.titular := PersonaFisicaJuridicaESType.Create;
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon:=edEmpresa.Text;          // NOMBRE DEL PRESENTADOR (CUALQUIERA VALE)
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NIF:=BBDD.zSacaNombre('EMPRESAS', 'IDEmpresa=' + Empresa.ToString,
                                                                         'CIF');             // CIF del PRESENTADOR (DEBE COINCIDIR CON EL CERTIFICADO SELECCIONADO)
    // (0) A0 - ALTA
    // (1) A1-  MODIFICACION
    // (2) A4-  MODIFICACION REGIMEN VIAJEROS
    ASuministroLRFacturasEmitidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(0);
   ///wlpl/SSII-FACT/ws/fr/SiiFactFRV1SOAP
    //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].PeriodoImpositivo:=PeriodoImpositivo.Create;

    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.Ejercicio:=edEjercicio.text;                       //  AÑO
    decodeDate(spEnlaceLoad.FieldByName('FechaDoc').AsDateTime,a,mes,d);

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


    With ARegistroLRFacturasEmitidas[0].IDFactura do
    begin
       IDEmisorFactura:= IDEmisorFactura3.Create;
       IDEmisorFactura.NIF  :=BBDD.zSacaNombre('EMPRESAS', 'IDEmpresa=' + Empresa.ToString,
                                               'CIF');                         // NUESTRO NIF, COMO EMISOR = TITULAR LIBRO REGISTRO = CERTIFICADO DIGITAL
       NumSerieFacturaEmisor:=spEnlaceLoad.FieldByName('NUMDOC').AsString;   // NUMERO Y SERIE DE LA FACTURA entiendo: 9999999X
       FechaExpedicionFacturaEmisor:=FormatDateTime('dd-mm-yyyy',
                                                    spEnlaceLoad.FieldByName('FechaDoc').AsDateTime);                 // FECHA DE EXPEDICION FACTURA    (dd-mm-yyyy)
    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
    cTotal := spEnlaceLoad.FieldByName('Base').Value  +
              spEnlaceLoad.FieldByName('CuotaIVA').Value +
              spEnlaceLoad.FieldByName('CuotaReq').Value;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.ImporteTotal:=StringReplace(StringReplace(CurrToStr(cTotal), '.', '', []), ',', '.', []);                       //  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:=spEnlaceLoad.FieldByName('Nombre').Value;           // NOMBRE DEL CLIENTE
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NIFRepresentante:='';
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NIF:=spEnlaceLoad.FieldByName('NIF').Value;                      // 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:= TipoDesglose.create;       // ATENCION: TipoDesglose2 (facturas)   TipoDesglose (inmuebles)
    BBDD.zSetSQL( zDataSet2, 'SELECT * FROM T_FACTURASVENTA_IMP WHERE ID=' + spEnlaceLoad.FieldByName('IDDOC').AsString);
    BBDD.zExec( zDataSet2 );
    setLength(IVAS, zDataSet2.RecordCount);  // numeros de iVAs en factura
    j := 0;


    zDataSet2.First;
    while not zDataSet2.Eof do
    begin
      IVAS[j]:=DetalleIVA2.create;             // CREAR primer IVA
      IVAS[j].BaseImponible:= StringReplace(StringReplace(zDataSet2.FieldByName('Base').AsString,
                                            '.', '', []), ',', '.', []);            // BASE IMPONIBLE
      IVAS[j].TipoImpositivo:=StringReplace(StringReplace(zDataSet2.FieldByName('PORCIVA').AsString,
                                            '.', '', []), ',', '.', []);             // IVA %
      IVAS[j].CuotaRepercutida:=StringReplace(StringReplace(zDataSet2.FieldByName('CUOTA').AsString,
                                            '.', '', []), ',', '.', []);           // IMPORTE IVA
      IVAS[j].TipoRecargoEquivalencia:='0';    // REQ %
      IVAS[j].CuotaRecargoEquivalencia:='0';   // IMPORTE RECARGO
      zDataSet2.Next;
      Inc(j);
    end;

    //   opcion 1
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desgloseFactura:=TipoSinDesgloseType.create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desgloseFactura.sujeta:=SujetaType.create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desgloseFactura.sujeta.noexenta:=NoExenta.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); //<-- Puñetero error Interface not supported

      //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;

          Memo1.Visible := True;
        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;
  //https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInmediatoInfo.wsdl
end;
Y la función GetsiiSOAP es:

Código:
function GetsiiSOAP(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): siiSOAP;
const
  //defWSDL = 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInmediatoInfo.wsdl';
  defWSDL = 'https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
  defURL  = 'http://schemas.xmlsoap.org/wsdl/';
  defSvc  = 'siiService';
  //defPrt  = 'SuministroFacturasPruebas';
  defPrt  = 'SuministroFactEmitidasPruebas';


var
  RIO: THTTPRIO;
begin
UseWSDL:=True;
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as siiSOAP);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;
Básicamente he cogido el código, y para probar si me funcionaba con una sola factura.

Tengo un TADOStoredProcedure que me devuelve las facturas del Libro de IVA y es con lo que relleno los campos que se envían. Hay también funciones que devuelven datos de la BBDD que, depurando, devuelven los valores correctos.

El error es en el envío.

Gracias!
Responder Con Cita
  #2  
Antiguo 07-04-2020
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.214
Poder: 24
newtron Va camino a la fama
Hola.


Desde que se puso ese código los wsdl han cambiado. Tendrás que importar los nuevos, los puedes sacar de la web de hacienda.


Saludos
__________________
Be water my friend.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco keys Internet 4524 Hace 2 Días 16:17:40
AEAT envio de datos vía Webservice problemas con WSDL CelsoO Internet 11 09-10-2019 20:03:41
webService Soap de la Administración Digital Española notific@ apicito Internet 3 31-01-2017 11:25:28
Error en Webservice funcion envio de sms webmasterplc Delphi para la web 5 25-07-2013 20:10:29
Problemas con envío de XML a un WebService davidvamo Internet 1 13-02-2007 15:49:20


La franja horaria es GMT +2. Ahora son las 07:22:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi