Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-01-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
¿ seguro que sacara esa opción para enviar el XML (y cuando?) ?

Modificando el ejemplo anterior, estoy a punto de poder completar el envío de una factura.... pero cuando te falta algún campo los errores que saca son imprecisos.

Ahora mismo me dice que me falta la "contraparte" pero la estoy enviando, ya creo tenerlo bastante completo.... en cuanto lo complete os lo posteare, a ver si lo consigo.

En mi caso si voy bien haría las dos cosas...
Responder Con Cita
  #2  
Antiguo 25-01-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
Cita:
'Received content of invalid Content-Type setting: text/html - SOAP expects "text/xml"
Ese error creo que te lo saca... (creo) por usar un certificado que no estaba bien. Yo también me lo vi al principio.
Responder Con Cita
  #3  
Antiguo 25-01-2017
soykarloscc soykarloscc is offline
Registrado
NULL
 
Registrado: ene 2017
Posts: 4
Poder: 0
soykarloscc Va por buen camino
Cool

Cita:
Empezado por seccion_31 Ver Mensaje
Ese error creo que te lo saca... (creo) por usar un certificado que no estaba bien. Yo también me lo vi al principio.
Buenas aunque no sea el sitio, ando metido en lo mismo, pero con C#, y fijandome un poco en el ejemplo he conseguido avanzar pero me he quedado en lo mismo.

Received content of invalid Content-Type setting: text/html - SOAP expects "text/xml


Aunque aun no he realizado la llamado con el certificado...

Aun así gracias a todos por la informacion!!
Responder Con Cita
  #4  
Antiguo 25-01-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
Poder: 22
keys Va por buen camino
Tienes razón. Es problema del certificado, estaba seleccionando uno que estaba caducado. Poniendo otro el error que me genera ya es otro. He detectado que si no se hace la parte del certificado, a la hora de hacer la llamada el mismo te muestra una ventana para seleccionar el certificado.

En la documentación de hacienda pone lo siguiente :

Suministro Inmediato de Información: modos de envío
1. Envío inmediato, de forma continua mediante “web service”. Desde el propio sistema de facturación se envía la información (agrupada según sus ciclos de proceso), con un margen de pocos días desde la expedición de la factura. La comunicación es automática “máquina a máquina”

2. Cumplimentación de un “formulario web” para aquellos de un “formulario web” para aquellos sujetos pasivos que realizan muy pocas operaciones.

Ya no se si lo cumpliran o no.

En cuanto la forma de generar el fichero xml, no veo la forma de que el delphi te genere con Xml DataBinding una estructura a través de dos ficheros xsd que es como lo da hacienda.

Última edición por keys fecha: 25-01-2017 a las 15:25:00. Razón: Añadir Cambios
Responder Con Cita
  #5  
Antiguo 26-01-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
Bueno, este es mi código que no funciona:

da error 4102: falta contraparte. Llevo repasándolo bastantes horas y nada. Luego llamo a la AEAT:

Pero... ¿podeis x favor, decirme como haceis para enviar el XML? porque viendo el tiempo que estoy perdiendo con esto, puedo intentar componer el XML.

hay unas pocas constantes que hay que añadir, e iria justo debajo de: setCERTIFICADO(CERTIFICADO);

CONST
_PRESENTADOR='xxxxx';
_NIF_EMISOR='xxxxxxx';

_NIF_CLI='xxxxxx';
_NOMBRE_CLI='xxxxxx';


Código:
 try

     /////////////////////////////////////////////////////////////////////////////
    ////  PRESENTADOR OSEA  -> NOSOTROS    //////////////////////////////////////
    //    se crea el objeto que se va a enviar:
     /////////////////////////////////////////////////////////////////////////////
    ASuministroLRFacturasEmitidas := SuministroLRFacturasEmitidas.Create;
    ASuministroLRFacturasEmitidas.Cabecera := CabeceraSii.Create;
    // DATOS:
    ASuministroLRFacturasEmitidas.Cabecera.IDVersionSii:=VersionSiiType(0);       // 0.1
    ASuministroLRFacturasEmitidas.Cabecera.titular := PersonaFisicaJuridicaESType.Create;
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon:=_PRESENTADOR;          // NOMBRE DEL PRESENTADOR (CUALQUIERA VALE)
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NIF:=_NIF_EMISOR;              // 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);

    //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;               // <- clase para tipo de factura
    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo:=PeriodoImpositivo.Create;

    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.Ejercicio:='2016';                       //  AÑO
    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.periodo  :=TipoPeriodoType(11);          //  PERIODO 01- ENERO ... 12-DICIEMBRE  (0A - ANUAL )


    With ARegistroLRFacturasEmitidas[0].IDFactura do
    begin
       IDEmisorFactura:= IDEmisorFactura3.Create;
       IDEmisorFactura.NIF  :=_NIF_EMISOR;                         // NUESTRO NIF, COMO EMISOR = TITULAR LIBRO REGISTRO = CERTIFICADO DIGITAL
       NumSerieFacturaEmisor:='20169999F';                         // NUMERO Y SERIE DE LA FACTURA entiendo: 9999999X
       FechaExpedicionFacturaEmisor:='15/12/2016';                 // 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
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.ImporteTotal:='121';                       //  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:=_NOMBRE_CLI;           // NOMBRE DEL CLIENTE
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NIFRepresentante:='';
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NIF:=_NIF_CLI;                      // NIF DEL CLIENTE

    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro:=IDOtroType.Create;          // identifiacion del nif.
    //ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.CodigoPais:=countryType2(10);

    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.IDType:=PersonaFisicaJuridicaIDTypeType(0);   // 2-NIF / 3-PASAPORTE / 4- DOCUMENTO OFICIAL IDENT. PAIS RESIDENCIA
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.ID:='';                                       // documento pais residencia (extranjero)


    // EMPEZAMOS CON LOS DESGLOSES (IVAs)
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose:= TipoDesglose.create;       // ATENCION: TipoDesglose2 (facturas)   TipoDesglose (inmuebles)

    setLength(IVAS,1);                       // numeros de iVAs en factura
    IVAS[0]:=DetalleIVA2.create;             // CREAR primer IVA
    IVAS[0].BaseImponible:='100';            // BASE IMPONIBLE
    IVAS[0].TipoImpositivo:='21';            // IVA %
    IVAS[0].CuotaRepercutida:='21';          // 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:=NoExenta.create;
    // ASIGNAR IVAS
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desglosefactura.sujeta.noexenta.desgloseIVA:=IVAS;



    //  opcion 2 : (nada)
(*
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion:=TipoConDesgloseType.create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion.entrega:=TipoSinDesgloseType.Create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion.entrega.sujeta:=SujetaType.Create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion.entrega.sujeta.noexenta:=NoExenta.Create;
     // ASIGNAR IVAS
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion.entrega.sujeta.noexenta.desgloseIVA:=IVAS;
*)


    //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;
Responder Con Cita
  #6  
Antiguo 26-01-2017
CMB CMB is offline
Miembro
 
Registrado: ene 2017
Posts: 349
Poder: 8
CMB Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
Bueno, este es mi código que no funciona:

da error 4102: falta contraparte. Llevo repasándolo bastantes horas y nada. Luego llamo a la AEAT:

Pero... ¿podeis x favor, decirme como haceis para enviar el XML? porque viendo el tiempo que estoy perdiendo con esto, puedo intentar componer el XML.

hay unas pocas constantes que hay que añadir, e iria justo debajo de: setCERTIFICADO(CERTIFICADO);
Para "seccion_31"

Saludos a todos. Soy un poco nuevo en este tema, pero estoy viendo que se trata de dos operaciones diferentes:

1. Crear el XML según normas de la AEAT en el documento SII_Descripcion_ServicioWeb.pdf
2. Enviarlo por Webservice

El primer paso no tiene ningún problema. Hay varias maneras de hacerlo. Es muy entretenido pero no es difícil.

Ahora bien, una vez tienes el XML, ¿cuáles son los pasos para enviarlo?

El proceso de Delphi con el "WSDL Importer" funciona perfectamente, incluso en Delphi 7. Te crea el SuministroInmediatoInfo.pas con todas las funciones que puedes llamar. ¡Fantástico! Pero eso no lo soluciona todo.

¿Qué viene después? ¿Hay que usar un componente SOAP de Delphi para el envío o no es necesario?

¿Cómo hay que tratar lo del certificado digital?

¿Y el NIF que tiene que ser validado contra la Base de Datos Centralizada de la AEAT?

¿Habrá alguien por ahí tan generoso que pueda explicarlo paso a paso?

Muchas gracias.

Última edición por CMB fecha: 26-01-2017 a las 15:21:09. Razón: Error ortográfico
Responder Con Cita
  #7  
Antiguo 26-01-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
Poder: 22
keys Va por buen camino
Hola. En un mensaje anterior de este hilo tienes un ejemplo que te muestra como hacer todo el tema de la conexión de la aeat, asi como lo de los certificados.

Un Saludo
Responder Con Cita
  #8  
Antiguo 26-01-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
Hola !

Ya he conseguido enviar el XML no es muy difícil. (pero tela, para el que no sabe)

1) desde el objeto HTTPRIO se puede obtener el código XML resultante que es al final el que se envía, se puede guardar en disco.

2) desde ese mismo objeto se puede "alterar" en el momento del envio el XML que vas a enviar, o guardar el que ya tienes calculado (1)

3) hay que alterar la llamada de esta forma:

Código:
....
  try
      // se hace la llamada a la funcion suministrada por el WS
      result := GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);
4)

Colocar este evento:

Código:
procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string;
  SOAPRequest: TStream);
var
  ss:TFileStream;
begin
    SOAPRequest.Size:=0;
    ss:=TFileStream.Create('C:\1.xml', fmOpenRead);
    SOAPRequest.Position := 0;
    SOAPRequest.CopyFrom( ss, ss.Size);
    ss.Free;

    SOAPRequest.Position := 0;
end;
Y listo.

5) eso sustituirá el XML que iba a enviar por el vuestro.

Pero.... y aquí viene lo gordo:


En mi caso en TODOS LOS ENVIOS ya sean mios o COPIANDO EL EJEMPLO DE LA AEAT (cambiando únicamente el NIF emisor) me sale error en la contraparte.


El colmo es que guarda la factura(s) y a la segunda llamada me dice que la factura esta repetida.

6) Sigo esperando respuesta de la AEAT.

A ver si conseguimos algo, porque veo cosas raras... o me equivoco mucho todo el rato. no se ya....
Responder Con Cita
  #9  
Antiguo 27-01-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Hola de nuevo.

¿Al final has desistido de enviarlo por código?

Cita:
Empezado por seccion_31 Ver Mensaje
Bueno, este es mi código que no funciona:

da error 4102: falta contraparte. Llevo repasándolo bastantes horas y nada. Luego llamo a la AEAT:

Pero... ¿podeis x favor, decirme como haceis para enviar el XML? porque viendo el tiempo que estoy perdiendo con esto, puedo intentar componer el XML.

hay unas pocas constantes que hay que añadir, e iria justo debajo de: setCERTIFICADO(CERTIFICADO);

CONST
_PRESENTADOR='xxxxx';
_NIF_EMISOR='xxxxxxx';

_NIF_CLI='xxxxxx';
_NOMBRE_CLI='xxxxxx';


Código:
 try

     /////////////////////////////////////////////////////////////////////////////
    ////  PRESENTADOR OSEA  -> NOSOTROS    //////////////////////////////////////
    //    se crea el objeto que se va a enviar:
     /////////////////////////////////////////////////////////////////////////////
    ASuministroLRFacturasEmitidas := SuministroLRFacturasEmitidas.Create;
    ASuministroLRFacturasEmitidas.Cabecera := CabeceraSii.Create;
    // DATOS:
    ASuministroLRFacturasEmitidas.Cabecera.IDVersionSii:=VersionSiiType(0);       // 0.1
    ASuministroLRFacturasEmitidas.Cabecera.titular := PersonaFisicaJuridicaESType.Create;
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon:=_PRESENTADOR;          // NOMBRE DEL PRESENTADOR (CUALQUIERA VALE)
    ASuministroLRFacturasEmitidas.Cabecera.Titular.NIF:=_NIF_EMISOR;              // 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);

    //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;               // <- clase para tipo de factura
    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo:=PeriodoImpositivo.Create;

    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.Ejercicio:='2016';                       //  AÑO
    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.periodo  :=TipoPeriodoType(11);          //  PERIODO 01- ENERO ... 12-DICIEMBRE  (0A - ANUAL )


    With ARegistroLRFacturasEmitidas[0].IDFactura do
    begin
       IDEmisorFactura:= IDEmisorFactura3.Create;
       IDEmisorFactura.NIF  :=_NIF_EMISOR;                         // NUESTRO NIF, COMO EMISOR = TITULAR LIBRO REGISTRO = CERTIFICADO DIGITAL
       NumSerieFacturaEmisor:='20169999F';                         // NUMERO Y SERIE DE LA FACTURA entiendo: 9999999X
       FechaExpedicionFacturaEmisor:='15/12/2016';                 // 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
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.ImporteTotal:='121';                       //  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:=_NOMBRE_CLI;           // NOMBRE DEL CLIENTE
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NIFRepresentante:='';
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.NIF:=_NIF_CLI;                      // NIF DEL CLIENTE

    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro:=IDOtroType.Create;          // identifiacion del nif.
    //ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.CodigoPais:=countryType2(10);

    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.IDType:=PersonaFisicaJuridicaIDTypeType(0);   // 2-NIF / 3-PASAPORTE / 4- DOCUMENTO OFICIAL IDENT. PAIS RESIDENCIA
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.Contraparte.IDotro.ID:='';                                       // documento pais residencia (extranjero)


    // EMPEZAMOS CON LOS DESGLOSES (IVAs)
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose:= TipoDesglose.create;       // ATENCION: TipoDesglose2 (facturas)   TipoDesglose (inmuebles)

    setLength(IVAS,1);                       // numeros de iVAs en factura
    IVAS[0]:=DetalleIVA2.create;             // CREAR primer IVA
    IVAS[0].BaseImponible:='100';            // BASE IMPONIBLE
    IVAS[0].TipoImpositivo:='21';            // IVA %
    IVAS[0].CuotaRepercutida:='21';          // 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:=NoExenta.create;
    // ASIGNAR IVAS
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.desglosefactura.sujeta.noexenta.desgloseIVA:=IVAS;



    //  opcion 2 : (nada)
(*
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion:=TipoConDesgloseType.create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion.entrega:=TipoSinDesgloseType.Create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion.entrega.sujeta:=SujetaType.Create;
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion.entrega.sujeta.noexenta:=NoExenta.Create;
     // ASIGNAR IVAS
    ARegistroLRFacturasEmitidas[0].FacturaExpedida.TipoDesglose.DesgloseTipoOperacion.entrega.sujeta.noexenta.desgloseIVA:=IVAS;
*)


    //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;
¿Puedes poner el trozo de código donde declaras estas variables?

Código Delphi [-]
    setLength(IVAS,1);                       // numeros de iVAs en factura
    IVAS[0]:=DetalleIVA2.create;             // CREAR primer IVA
    IVAS[0].BaseImponible:='100';            // BASE IMPONIBLE
    IVAS[0].TipoImpositivo:='21';            // IVA %
    IVAS[0].CuotaRepercutida:='21';          // IMPORTE IVA
    IVAS[0].TipoRecargoEquivalencia:='0';    // REQ %
    IVAS[0].CuotaRecargoEquivalencia:='0';   // IMPORTE RECARGO

Saludos
__________________
Be water my friend.
Responder Con Cita
  #10  
Antiguo 28-01-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
Hola !

lo tengo en el trabajo, el lunes lo miro y lo posteo. Por cierto, he descargado un nuevo interface SOAP wsd desde la AEAT algo diferente al publicado. (pero la versión es la misma, cambia el nombre de las clases) de memoria ese campo es un tipo, que es un array de DetalleIVA2 se llama desgloseIVA2 creo puedes verlo en el campo desgloseIVA. cada elemento del array es DetalleIVA2.

Por código funciona muy bien, siempre que NO envíes el campo IDOtro de la contraparte (esto lo digo de memoria, no me acuerdo bien, pero funciona). A ver si responde la AEAT en ambos casos por código o XML el NIF debe existir de lo contrario la factura pasa pero da error. (o aviso), porque pasa. Lo que ocurre es que dice: NIF sin identificar y piensas que es un error de código, y no es asi.

Asi que con código ahora mismo pasarían las facturas nacionales sin problemas. Ya estoy trabajando en el programa final de envio, que espero tenerlo listo a mediados de la semana que viene como muy tarde.

De no tener ni idea de SOAP he pasado a enterarme ya medianamente bien, gracias al primer ejemplo. en fin... ya veremos.

Hasta el lunes no vuelvo a postear. Os colocare un ejemplo completo con el interface publicado en el .rar.

Saludos !


Por otro lado, me gustaría saber:


1) si la AEAT en ese formulario que va a crear, dara opción de subir el XML.

2) si habrá una web de la AEAT donde consultar las facturas subidas.

ambas cosas serian fundamentales pienso yo para hacer las cosas bien.
Responder Con Cita
  #11  
Antiguo 08-02-2017
jlegido jlegido is offline
Miembro
NULL
 
Registrado: feb 2017
Posts: 17
Poder: 0
jlegido Va por buen camino
Cita:
Empezado por soykarloscc Ver Mensaje
Buenas aunque no sea el sitio, ando metido en lo mismo, pero con C#, y fijandome un poco en el ejemplo he conseguido avanzar pero me he quedado en lo mismo.

Received content of invalid Content-Type setting: text/html - SOAP expects "text/xml


Aunque aun no he realizado la llamado con el certificado...

Aun así gracias a todos por la informacion!!

Hola soykarloscc,
Bueno, yo tambien ando en el tema, pero en VB.NET -muy similar a C# en estructura- por lo que me gustaria, si es posible intercambiar info contigo sobre el tema-. Mi mail es jslegido@gmail.com

Un saludo
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 4170 Hace 2 Semanas 17:29:05
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 10:06:29.


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