Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-07-2017
javi_valencia44 javi_valencia44 is offline
Miembro
 
Registrado: mar 2017
Posts: 50
Poder: 10
javi_valencia44 Va por buen camino
Cita:
Empezado por Homine Ver Mensaje
Son los mismo que producción pero cambiando la URL por el sitio www7.aeat.es
Me da error de versión 0.7 no válida, hace días me iba sin problemas
Responder Con Cita
  #2  
Antiguo 24-07-2017
CMB CMB is offline
Miembro
 
Registrado: ene 2017
Posts: 349
Poder: 10
CMB Va por buen camino
Cita:
Empezado por javi_valencia44 Ver Mensaje
Me da error de versión 0.7 no válida, hace días me iba sin problemas
Prueba de poner <?xml version="1.0"...

Saludos,
Responder Con Cita
  #3  
Antiguo 24-07-2017
xamminf xamminf is offline
Miembro
 
Registrado: ene 2017
Posts: 216
Poder: 10
xamminf Va por buen camino
Cita:
Empezado por javi_valencia44 Ver Mensaje
Me da error de versión 0.7 no válida, hace días me iba sin problemas
Cambia el IDVersion con el que envias desde 0.7 a la version 1.0

El mensaje de error que obtienes, y que no pegas aquí, seguramente te lo está diciendo.
Responder Con Cita
  #4  
Antiguo 24-07-2017
Homine Homine is offline
Miembro
NULL
 
Registrado: jun 2017
Posts: 26
Poder: 0
Homine Va por buen camino
Cita:
Empezado por javi_valencia44 Ver Mensaje
Me da error de versión 0.7 no válida, hace días me iba sin problemas
Debes indicar que empleas la versión 1.0, que es la última, en el elemento <sii:IDVersionSii>1.0</sii:IDVersionSii>

Saludos
Responder Con Cita
  #5  
Antiguo 19-12-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Hola foro, aqui el codigo de llamada un poco mas desarrollado:

Código Delphi [-]
var
  ASuministroLRFacturasEmitidas:SuministroLRFacturasEmitidas;
  ARegistroLRFacturasEmitidas:Array_Of_LRfacturasEmitidasType;
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

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

    // ... 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;
    ARegistroLRFacturasEmitidas[0].PeriodoImpositivo.periodo  :=TipoPeriodoType(11);  //  TipoPeriodoType = ( _01, _02, _03, _04, _05, _06, _07, _08, _09, _10, _11, _12, _0A);

//    end;


    //se crea el objeto que se va a enviar
    ASuministroLRFacturasEmitidas := SuministroLRFacturasEmitidas.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
    ASuministroLRFacturasEmitidas.Cabecera.TipoComunicacion:=ClaveTipoComunicacionType(1); // definida como   ClaveTipoComunicacionType = (A0, A1, A4);

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

    try
      // se hace la llamada a la funcion suministrada por el WS
      GetsiiSOAP.SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);
    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;
    setLength(ARegistroLRFacturasEmitidas, 0);
  end;


Este código compila sin problemas, pero los parámetros hay que ver en la propia documentación a que corresponden y cuales son opcionales u obligatorios. Las partes de información de facturación desabilitadas pueden a su vez ser mas classes con mas propiedades.

Un Saludo
Responder Con Cita
  #6  
Antiguo 19-12-2016
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
newtron,
no tengo código, simplemente me llamó la atención la pregunta y he leido los links que pusiste. No me dedico a ésto.

el chiste es montar los xml con los formatos que te dan ( en la propia documentación te muestran esquemáticamente cómo quedaría el árbol del xml, y luego hacer la llamada a la superfunción que hace todo.

Código Delphi [-]
SuministroLRFacturasEmitidas(const SuministroLRFacturasEmitidas: SuministroLRFacturasEmitidas): RespuestaLRFacturasEmitidas

todas las clases las tienes definidas en la unidad SuministroInmediatoInfo.pas

En este caso SuministroLRFacturasEmitidas para la llamada y RespuestaLRFacturasEmitidas para la respuesta.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 19-12-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.449
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por newtron Ver Mensaje
me da el error: E2010 Incompatible types: 'IDFacturaExpedidaType' and 'string'
¿Puede ser porque el IDFactura no es un tipo simple?
Tal y como está en el documento que han adjuntado más arriba...

Código Delphi [-]
  LRfacturasEmitidasType = class(RegistroSii)
  private
    FIDFactura: IDFacturaExpedidaType;
    FFacturaExpedida: FacturaExpedidaType;
  public
    destructor Destroy; override;
  published
    property IDFactura:       IDFacturaExpedidaType  read FIDFactura write FIDFactura;
    property FacturaExpedida: FacturaExpedidaType    read FFacturaExpedida write FFacturaExpedida;
  end;

Y el tipo IDFacturaExpedidaType está definido tal que así:

Código Delphi [-]

  // ************************************************************************ //
  // XML       : IDFacturaExpedidaType, global, 
  // Namespace : https://www2.agenciatributaria.gob.e...nformacion.xsd
  // ************************************************************************ //
  IDFacturaExpedidaType = class(TRemotable)
  private
    FIDEmisorFactura: IDEmisorFactura3;
    FNumSerieFacturaEmisor: TextoIDFacturaType;
    FNumSerieFacturaEmisorResumenFin: TextoIDFacturaType;
    FNumSerieFacturaEmisorResumenFin_Specified: boolean;
    FFechaExpedicionFacturaEmisor: fecha;
    procedure SetNumSerieFacturaEmisorResumenFin(Index: Integer; const ATextoIDFacturaType: TextoIDFacturaType);
    function  NumSerieFacturaEmisorResumenFin_Specified(Index: Integer): boolean;
  public
    destructor Destroy; override;
  published
    property IDEmisorFactura:                 IDEmisorFactura3    read FIDEmisorFactura write FIDEmisorFactura;
    property NumSerieFacturaEmisor:           TextoIDFacturaType  read FNumSerieFacturaEmisor write FNumSerieFacturaEmisor;
    property NumSerieFacturaEmisorResumenFin: TextoIDFacturaType  Index (IS_OPTN) read FNumSerieFacturaEmisorResumenFin write SetNumSerieFacturaEmisorResumenFin stored NumSerieFacturaEmisorResumenFin_Specified;
    property FechaExpedicionFacturaEmisor:    fecha               read FFechaExpedicionFacturaEmisor write FFechaExpedicionFacturaEmisor;
  end;

Es un comentario.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 19-12-2016
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.215
Poder: 24
newtron Va camino a la fama
Bucanero, fjcg02, Neftali, gracias por vuestros comentarios.

Estoy probando el nuevo código de Bucanero y, en la primera línea

Código Delphi [-]
    ARegistroLRFacturasEmitidas[0].IDFactura.IDEmisorFactura.NIF  :='123456789X';             // NIFType         =  type string;

me da un error "Access Violation".

Sigo probando.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 19-12-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
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
  #10  
Antiguo 19-12-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.449
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Se trata de hacerlo en orden inverso.
Ir creando los objetos a medidas que los vas necesitando....

Código Delphi [-]
var
  ASuministroLRFacturasEmitidas:SuministroLRFacturasEmitidas;
  ARegistroLRFacturasEmitidas:Array_Of_LRfacturasEmitidasType;
  IDFact:IDFacturaExpedidaType;
  IDEmisorFact:IDEmisorFactura3;
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);

    // Crear el emisor
    IDEmisorFact := IDEmisorFactura3.Create();
    IDEmisorFact.NIF := '12345678M';

    // Crear
    IDFact := IDFacturaExpedidaType.Create();
    IDFact.IDEmisorFactura := IDEmisorFact;
    IDFact.NumSerieFacturaEmisor := 'Texto factura';
    IDFact.NumSerieFacturaEmisorResumenFin := 'Num serie fact. ';
    IDFact.FechaExpedicionFacturaEmisor := '31/12/2016';

    //se introducen los datos de cada una de las facturas
    ARegistroLRFacturasEmitidas[1].IDFactura := IDFact;
    ARegistroLRFacturasEmitidas[1].FacturaExpedida := ...

Se me han adelantado...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 19-12-2016
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.215
Poder: 24
newtron Va camino a la fama
Bucanero, Neftali, gracias por vuestra respuesta.

Efectivamente ya no da errores. Como yo soy más lanzado no he tenido problemas en hacer la llamada "a ver qué pasa", y en principio me decía: Invalid url 'xxxxxxxxx'

Echando un vistazo al código veo que esa url está informada en este trozo de código:

Código Delphi [-]
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';
  defURL  = 'xxxxxxxxxxx';
  defSvc  = 'siiService';
  defPrt  = 'SuministroFacturasPruebas';
var
  RIO: THTTPRIO;
begin


En principio he pensado que habría que sustituir 'xxxxxxxxxxxx' por alguna url válida y he mirado en la documentación algo relacionado con esto pero no he encontrado nada. Luego me he dado cuenta de que dependiendo del parámetro "UseWSDL" si está en True o False coge la constante defWSDL o defURL así que he cambiado el valor a true de la definición de la función

Código Delphi [-]
function GetsiiSOAP(UseWSDL: Boolean=System.True; Addr: string=''; HTTPRIO: THTTPRIO = nil): siiSOAP;

con lo cual ahora coge el valor de defWSDL y hace correctamente la llamada (parece) pero, claro, ahora me dice que se requiere un certificado para completar la autenticación del cliente.

Yo tengo un certificado instalado pero imagino que esto no se entera. ¿Hay alguna forma de informar del certificado?

Saludos

Edito:

También he cambiado el valor de defPrt = 'SuministroFacturas' a 'SuministroFacturasPruebas' para hacer las pruebas.
__________________
Be water my friend.

Última edición por newtron fecha: 19-12-2016 a las 17:44:38.
Responder Con Cita
  #12  
Antiguo 09-01-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.215
Poder: 24
newtron Va camino a la fama
Hola a tod@s y Feliz Año.

¿Hay algún avance sobre este tema? Lo que quedaba era poder hacer la llamada informando de alguna manera del certificado digital con el que se hace la llamada.

Saludos
__________________
Be water my friend.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 4530 02-07-2026 14:09:59
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 19:34:20.


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