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 09-01-2024
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: 18.286
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
A mi los tres ficheros generados con esas opciones me resultan similares.
Completando el código que has puesto, la llamada podría ser similar a esta:

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
var
  arrayDetalles : array of DetalleType;
  RegistroAltaFacturas: Array_Of_FacturasEmitidasType;
begin
  var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create;

  // Cabecera
  var cab := Cabecera.Create;
  cab.IDVersion := VersionType._1_0;

  cab.ObligadoEmision := PersonaFisicaJuridicaESType.Create;
  cab.ObligadoEmision.NombreRazon := 'Empresa pruebas';
  cab.ObligadoEmision.NIF := '11111111H';
  cab.TipoRegistroAEAT := TipoRegistroAEATType.T0;
  cab.FechaFinVeriFactu := '01/01/2026';
  alta.Cabecera := cab;

  // Factura
  var fact:FacturasEmitidasType;
  fact := FacturasEmitidasType.Create;
  fact.RegistroFacturacion := RegistroFacturacionType.Create;
  fact.RegistroFacturacion.IDFactura := IDFacturaExpedidaType.Create;
  fact.RegistroFacturacion.IDFactura.NumSerieFacturaEmisor := '23/123456';
  fact.RegistroFacturacion.IDFactura.FechaExpedicionFacturaEmisor := '31/12/23';
  fact.RegistroFacturacion.IDFactura.IDEmisorFactura := IDEmisorFactura.Create;
  fact.RegistroFacturacion.IDFactura.IDEmisorFactura.NIF := '3333333';
  fact.RegistroFacturacion.DescripcionOperacion := 'venta de mercaderías';

  // Detalle
  var detalle := DetalleType.Create;
  detalle.CuotaRepercutida := '100';
  detalle.TipoImpositivo := '21';
  SetLength(arrayDetalles, 1);
  arrayDetalles[0] := detalle;

  // desglose
  var desglose: DesgloseType := DesgloseType.Create();
  SetLength(Desglose, 1);
  Desglose[0] := detalle;
  fact.RegistroFacturacion.Desglose := Desglose;

  // Lista de facturas del envío
  SetLength(RegistroAltaFacturas, 1);
  RegistroAltaFacturas[0] := fact;

  // Factura 1
  alta.RegistroAltaFacturas := RegistroAltaFacturas;

  // envío
  try
    var res:RespuestaAltaFactuSistemaFacturacion := RespuestaAltaFactuSistemaFacturacion.Create;
    res := GetsfSOAP(False, '', HTTPRIO1).AltaFactuSistemaFacturacion(alta);

    ShowMessage('Se ha realizado el envío; ' + sLineBreak +
                '   CSV: ' + res.CSV  + sLineBreak +
                '   TimeStamp: ' + res.DatosPresentacion.TimestampPresentacion
                );
  except
    on E:Exception do begin
      ShowMessage(Format('Error al realizar el envío; (%s)-%s',[E.ClassName, E.Message]));
    end;
  end;
end;

En este caso genera un fichero como este:

Código:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
    <SOAP-ENV:Body xmlns:NS1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl" xmlns:NS2="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:NS3="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
        <NS1:AltaFactuSistemaFacturacion SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
            <AltaFactuSistemaFacturacion SOAP-ENC:id="1" xsi:type="NS2:AltaFactuSistemaFacturacion">
                <Cabecera SOAP-ENC:id="2" xsi:type="NS3:Cabecera">
                    <IDVersion xsi:type="NS3:VersionType">1.0</IDVersion>
                    <ObligadoEmision SOAP-ENC:id="3" xsi:type="NS3:PersonaFisicaJuridicaESType">
                        <NombreRazon xsi:type="xsd:string">Empresa pruebas</NombreRazon>
                        <NIF xsi:type="xsd:string">11111111H</NIF>
                    </ObligadoEmision>
                    <TipoRegistroAEAT xsi:type="NS3:TipoRegistroAEATType">T0</TipoRegistroAEAT>
                    <FechaFinVeriFactu xsi:type="xsd:string">01/01/2026</FechaFinVeriFactu>
                </Cabecera>
                <item SOAP-ENC:id="4" xsi:type="NS2:FacturasEmitidasType">
                    <RegistroFacturacion SOAP-ENC:id="5" xsi:type="NS3:RegistroFacturacionType">
                        <IDFactura SOAP-ENC:id="6" xsi:type="NS3:IDFacturaExpedidaType">
                            <IDEmisorFactura SOAP-ENC:id="7" xsi:type="NS3:IDEmisorFactura">
                                <NIF xsi:type="xsd:string">3333333</NIF>
                            </IDEmisorFactura>
                            <NumSerieFacturaEmisor xsi:type="xsd:string">23/123456</NumSerieFacturaEmisor>
                            <FechaExpedicionFacturaEmisor xsi:type="xsd:string">31/12/23</FechaExpedicionFacturaEmisor>
                        </IDFactura>
                        <NombreRazonEmisor xsi:type="xsd:string"/>
                        <TipoRegistroSIF xsi:type="NS3:TipoRegistroSIFType">S0</TipoRegistroSIF>
                        <TipoFactura xsi:type="NS3:ClaveTipoFacturaType">F1</TipoFactura>
                        <DescripcionOperacion xsi:type="xsd:string">venta de mercaderías</DescripcionOperacion>
                        <Desglose xsi:type="SOAP-ENC:Array" SOAP-ENC:itemType="NS3:DetalleType" SOAP-ENC:arraySize="1">
                            <item SOAP-ENC:id="8" xsi:type="NS3:DetalleType">
                                <ClaveRegimen xsi:type="NS3:IdOperacionesTrascendenciaTributariaType">01</ClaveRegimen>
                                <TipoImpositivo xsi:type="xsd:string">21</TipoImpositivo>
                                <BaseImponibleOimporteNoSujeto xsi:type="xsd:string"/>
                                <CuotaRepercutida xsi:type="xsd:string">100</CuotaRepercutida>
                            </item>
                        </Desglose>
                        <ImporteTotal xsi:type="xsd:string"/>
                        <EncadenamientoRegistroAnterior xsi:nil="true"/>
                        <SistemaInformatico xsi:nil="true"/>
                        <FechaGenRegistro xsi:type="xsd:string"/>
                        <HoraGenRegistro xsi:type="xsd:string"/>
                        <HusoHorarioGenRegistro xsi:type="NS3:HusoHorarioGenRegistroType">01</HusoHorarioGenRegistro>
                    </RegistroFacturacion>
                    <DatosControl xsi:nil="true"/>
                </item>
            </AltaFactuSistemaFacturacion>
        </NS1:AltaFactuSistemaFacturacion>
    </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

Adjunto los 3 ficheros generados al importar el WSDL y el propio fichero WSDL.
Archivos Adjuntos
Tipo de Archivo: zip FicherosWSDLGenerados.zip (33,0 KB, 55 visitas)
__________________
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
  #2  
Antiguo 09-01-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
A mi los tres ficheros generados con esas opciones me resultan similares.
Completando el código que has puesto, la llamada podría ser similar a esta:

Código Delphi [-]procedure TForm3.Button1Click(Sender: TObject); var arrayDetalles : array of DetalleType; RegistroAltaFacturas: Array_Of_FacturasEmitidasType; begin var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create; // Cabecera var cab := Cabecera.Create; cab.IDVersion := VersionType._1_0; cab.ObligadoEmision := PersonaFisicaJuridicaESType.Create; cab.ObligadoEmision.NombreRazon := 'Empresa pruebas'; cab.ObligadoEmision.NIF := '11111111H'; cab.TipoRegistroAEAT := TipoRegistroAEATType.T0; cab.FechaFinVeriFactu := '01/01/2026'; alta.Cabecera := cab; // Factura var fact:FacturasEmitidasType; fact := FacturasEmitidasType.Create; fact.RegistroFacturacion := RegistroFacturacionType.Create; fact.RegistroFacturacion.IDFactura := IDFacturaExpedidaType.Create; fact.RegistroFacturacion.IDFactura.NumSerieFacturaEmisor := '23/123456'; fact.RegistroFacturacion.IDFactura.FechaExpedicionFacturaEmisor := '31/12/23'; fact.RegistroFacturacion.IDFactura.IDEmisorFactura := IDEmisorFactura.Create; fact.RegistroFacturacion.IDFactura.IDEmisorFactura.NIF := '3333333'; fact.RegistroFacturacion.DescripcionOperacion := 'venta de mercaderías'; // Detalle var detalle := DetalleType.Create; detalle.CuotaRepercutida := '100'; detalle.TipoImpositivo := '21'; SetLength(arrayDetalles, 1); arrayDetalles[0] := detalle; // desglose var desglose: DesgloseType := DesgloseType.Create(); SetLength(Desglose, 1); Desglose[0] := detalle; fact.RegistroFacturacion.Desglose := Desglose; // Lista de facturas del envío SetLength(RegistroAltaFacturas, 1); RegistroAltaFacturas[0] := fact; // Factura 1 alta.RegistroAltaFacturas := RegistroAltaFacturas; // envío try var res:RespuestaAltaFactuSistemaFacturacion := RespuestaAltaFactuSistemaFacturacion.Create; res := GetsfSOAP(False, '', HTTPRIO1).AltaFactuSistemaFacturacion(alta); ShowMessage('Se ha realizado el envío; ' + sLineBreak + ' CSV: ' + res.CSV + sLineBreak + ' TimeStamp: ' + res.DatosPresentacion.TimestampPresentacion ); except on E:Exception do begin ShowMessage(Format('Error al realizar el envío; (%s)-%s',[E.ClassName, E.Message])); end; end; end;


En este caso genera un fichero como este:

Código:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
    <SOAP-ENV:Body xmlns:NS1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl" xmlns:NS2="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:NS3="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
        <NS1:AltaFactuSistemaFacturacion SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
            <AltaFactuSistemaFacturacion SOAP-ENC:id="1" xsi:type="NS2:AltaFactuSistemaFacturacion">
                <Cabecera SOAP-ENC:id="2" xsi:type="NS3:Cabecera">
                    <IDVersion xsi:type="NS3:VersionType">1.0</IDVersion>
                    <ObligadoEmision SOAP-ENC:id="3" xsi:type="NS3:PersonaFisicaJuridicaESType">
                        <NombreRazon xsi:type="xsd:string">Empresa pruebas</NombreRazon>
                        <NIF xsi:type="xsd:string">11111111H</NIF>
                    </ObligadoEmision>
                    <TipoRegistroAEAT xsi:type="NS3:TipoRegistroAEATType">T0</TipoRegistroAEAT>
                    <FechaFinVeriFactu xsi:type="xsd:string">01/01/2026</FechaFinVeriFactu>
                </Cabecera>
                <item SOAP-ENC:id="4" xsi:type="NS2:FacturasEmitidasType">
                    <RegistroFacturacion SOAP-ENC:id="5" xsi:type="NS3:RegistroFacturacionType">
                        <IDFactura SOAP-ENC:id="6" xsi:type="NS3:IDFacturaExpedidaType">
                            <IDEmisorFactura SOAP-ENC:id="7" xsi:type="NS3:IDEmisorFactura">
                                <NIF xsi:type="xsd:string">3333333</NIF>
                            </IDEmisorFactura>
                            <NumSerieFacturaEmisor xsi:type="xsd:string">23/123456</NumSerieFacturaEmisor>
                            <FechaExpedicionFacturaEmisor xsi:type="xsd:string">31/12/23</FechaExpedicionFacturaEmisor>
                        </IDFactura>
                        <NombreRazonEmisor xsi:type="xsd:string"/>
                        <TipoRegistroSIF xsi:type="NS3:TipoRegistroSIFType">S0</TipoRegistroSIF>
                        <TipoFactura xsi:type="NS3:ClaveTipoFacturaType">F1</TipoFactura>
                        <DescripcionOperacion xsi:type="xsd:string">venta de mercaderías</DescripcionOperacion>
                        <Desglose xsi:type="SOAP-ENC:Array" SOAP-ENC:itemType="NS3:DetalleType" SOAP-ENC:arraySize="1">
                            <item SOAP-ENC:id="8" xsi:type="NS3:DetalleType">
                                <ClaveRegimen xsi:type="NS3:IdOperacionesTrascendenciaTributariaType">01</ClaveRegimen>
                                <TipoImpositivo xsi:type="xsd:string">21</TipoImpositivo>
                                <BaseImponibleOimporteNoSujeto xsi:type="xsd:string"/>
                                <CuotaRepercutida xsi:type="xsd:string">100</CuotaRepercutida>
                            </item>
                        </Desglose>
                        <ImporteTotal xsi:type="xsd:string"/>
                        <EncadenamientoRegistroAnterior xsi:nil="true"/>
                        <SistemaInformatico xsi:nil="true"/>
                        <FechaGenRegistro xsi:type="xsd:string"/>
                        <HoraGenRegistro xsi:type="xsd:string"/>
                        <HusoHorarioGenRegistro xsi:type="NS3:HusoHorarioGenRegistroType">01</HusoHorarioGenRegistro>
                    </RegistroFacturacion>
                    <DatosControl xsi:nil="true"/>
                </item>
            </AltaFactuSistemaFacturacion>
        </NS1:AltaFactuSistemaFacturacion>
    </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>
Adjunto los 3 ficheros generados al importar el WSDL y el propio fichero WSDL.



Gracias Germán por el ejemplo. El problema es que ese código a mi no me compila en mi Delphi Berlín, se ve que este tipo de instrucciones no le gustan:


Código Delphi [-]


  var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create;

¿Hay alguna forma de modificar eso para que compile en Delphi Berlín?

Gracias de nuevo y un saludo.

__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 09-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Gracias Germán por el ejemplo. El problema es que ese código a mi no me compila en mi Delphi Berlín, se ve que este tipo de instrucciones no le gustan:


Código Delphi [-]


  var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create;

¿Hay alguna forma de modificar eso para que compile en Delphi Berlín?

Gracias de nuevo y un saludo.

Prueba a poner:
Código:
var
  alta :   AltaFactuSistemaFacturacion;
....

begin
  alta := AltaFactuSistemaFacturacion.Create;
....
end

Última edición por nincillo fecha: 09-01-2024 a las 11:04:38.
Responder Con Cita
  #4  
Antiguo 09-01-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por nincillo Ver Mensaje
Prueba a poner:
Código:
var
  alta :   AltaFactuSistemaFacturacion;
....

begin
  alta := AltaFactuSistemaFacturacion.Create;
....
end

Gracias pero no va, me marca error aquí:


Código Delphi [-]
var
  alta :   AltaFactuSistemaFacturacion;


Saludos.
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 09-01-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 872
Poder: 3
ermendalenda Va por buen camino
Certificados electrónicos para el envio

Hay otra cosa, por si alguien quiere consultarlo ya al correo de verifactu, o esperar a la OM.
En el proyecto de la OM, dice que el envío se realizará con el certificado del emisor de la factura???? Y so
I lo quiero enviar a través de un tercero, tal y como lo haremos muchos, nos van a obligar a usar repositorios de certificados?
Responder Con Cita
  #6  
Antiguo 09-01-2024
CarlosMz CarlosMz is offline
Miembro
 
Registrado: jul 2020
Posts: 23
Poder: 0
CarlosMz Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Hay otra cosa, por si alguien quiere consultarlo ya al correo de verifactu, o esperar a la OM.
En el proyecto de la OM, dice que el envío se realizará con el certificado del emisor de la factura???? Y so
I lo quiero enviar a través de un tercero, tal y como lo haremos muchos, nos van a obligar a usar repositorios de certificados?
Interesante cuestión... Si obligan a usar el certificado de cada cliente y lo tenemos que almacenar con su clave tendremos que ser proveedores de confianza (reglamento eIDAS) ?
Responder Con Cita
  #7  
Antiguo 09-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Gracias pero no va, me marca error aquí:


Código Delphi [-]
var
  alta :   AltaFactuSistemaFacturacion;


Saludos.
¿Qué error te pone?

¿Qué importación del wsdl estás utilizando?. ¿La que publicó @Neftali junto en el mismo post con el código de ejemplo o una importación que has hecho tu directamente?
Responder Con Cita
  #8  
Antiguo 09-01-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por nincillo Ver Mensaje
¿Qué error te pone?

¿Qué importación del wsdl estás utilizando?. ¿La que publicó @Neftali junto en el mismo post con el código de ejemplo o una importación que has hecho tu directamente?

He actualizado el fichero SistemaFacturacion.pas y ahora si me lo coge. Sigo revisando.


Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 09-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
He actualizado el fichero SistemaFacturacion.pas y ahora si me lo coge. Sigo revisando.


Gracias y un saludo.
Perdona la insistencia, pero es por curiosidad de acuerdo al "misterio" que tengo yo al importar los wsdl, que dependiendo de la versión que escoja a la hora de importar, me lo importa diferente.

La "actualización" a la que te refieres, la hiciste descargando el wsdl mediante la url correspondiente o lo hiciste sustituyendo con el fichero que publicó @Neftali.

a) En el caso de hacerlo mediante la url, ¿puedes decirme en el dialogo de delphi que te sale durante la importación, cual de las 3 opciones escogiste?.
b) En el caso de utilizar el fichero publicado por @Neftali, la versión antigua, ¿también era del fichero publicado por @Neftali días atrás?.

Gracias y un saludo.
Responder Con Cita
  #10  
Antiguo 09-01-2024
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: 18.286
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
Gracias Germán por el ejemplo. El problema es que ese código a mi no me compila en mi Delphi Berlín, se ve que este tipo de instrucciones no le gustan:


Código Delphi [-]
  var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create;


¿Hay alguna forma de modificar eso para que compile en Delphi Berlín?
Gracias de nuevo y un saludo.

Si. Perdón por no pensar en las versiones antiguas.
Simplemente hay que desdoblar en 2 líneas la definición y el uso.

Código Delphi [-]
  
var 
  alta:AltaFactuSistemaFacturacion;
  ...
begin
  ...
  AltaFactuSistemaFacturacion:= AltaFactuSistemaFacturacion.Create;
__________________
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 09-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
A mi los tres ficheros generados con esas opciones me resultan similares.

Aquí vuelve el pesado de turno da dar la brasa. Disculpas por anticipado si estoy diciendo tonterías, pero entiendo que cambios si que ha habido.

En su momento posteaste los ficheros generados tras importar la wsdl: https://www.clubdelphi.com/foros/sho...&postcount=971 y si los comparas con los que posteas ahora podrás ver que no son iguales. Los "antiguos" tienen 1713 líneas y los "nuevos" tienen 2112 líneas. Así que algo si que ha cambiado entre ambas importaciones,

A mi me genera la importación de 1713 líneas si lo hago en automático o 1.1 y la de 2112 si la hago en modo 1.2.
Responder Con Cita
  #12  
Antiguo 09-01-2024
edari edari is offline
Miembro
 
Registrado: jun 2021
Posts: 178
Poder: 3
edari Va por buen camino
Buenas tardes,


Voy a empezar a generar el xml y tengo un par de dudas iniciales


El fichero xml se entiende que es mejor ya generarlo entero sin retornos de carro por el tema del hash que viene después...?


Calculo el hash con los lo que hay entre las etiquetas "RegistroAltaFacturas" sin retornos de carro con todas las etiquetas seguidas


Ese hash tiene ser al 100% como el que genere Hacienda en su comprobación y mi duda es


Cómo se puede comprobar que el hash que he calculado es el correcto, el que espera hacienda?


Graciass
Responder Con Cita
  #13  
Antiguo 09-01-2024
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: 18.286
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 edari Ver Mensaje
El fichero xml se entiende que es mejor ya generarlo entero sin retornos de carro por el tema del hash que viene después...?
Si generas el XML utilizando la unit que te genera el el IDE al importar el WSDL, ya se genera sin saltos de carro.
Si lo generas manualmente puedes hacerlo como quieras

Cita:
Empezado por edari Ver Mensaje
Cómo se puede comprobar que el hash que he calculado es el correcto, el que espera hacienda?
Si el código de cálculo es correcto y no has modificado la parte del XML después del cálculo (por ejemplo en el envío, como a veces pasa) el hash se calculará correctamente. Puedes comprobar el cálculo que tú hagas utilizando alguna de las herramientas online que hay.
__________________
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
  #14  
Antiguo 09-01-2024
edari edari is offline
Miembro
 
Registrado: jun 2021
Posts: 178
Poder: 3
edari Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Si generas el XML utilizando la unit que te genera el el IDE al importar el WSDL, ya se genera sin saltos de carro.
Si lo generas manualmente puedes hacerlo como quieras



Si el código de cálculo es correcto y no has modificado la parte del XML después del cálculo (por ejemplo en el envío, como a veces pasa) el hash se calculará correctamente. Puedes comprobar el cálculo que tú hagas utilizando alguna de las herramientas online que hay.

Gracias Neftali


Voy con ello, a ver donde llego.
Responder Con Cita
  #15  
Antiguo 11-01-2024
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 51
Poder: 11
ramherfer Va por buen camino
Hola buenos días. Por favor, alquien a conseguido importar lo wsdl con Delphi 7. Lo he intentado con el WSDL Importer, pero me genera un fichero de pocas lineas y creo que no es correcto. ¡Gracias!
Código:
unit SistemaFacturacion;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Borland types; however, they could also 
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:AltaFactuSistemaFacturacion - "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd"
  // !:RespuestaAltaFactuSistemaFacturacion - "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/RespuestaSuministro.xsd"
  // !:BajaFactuSistemaFacturacion - "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd"
  // !:RespuestaBajaFactuSistemaFacturacion - "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/RespuestaSuministro.xsd"


  // ************************************************************************ //
  // Namespace : https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : document
  // binding   : sfBinding
  // service   : sfService
  // port      : SistemaFacturacion
  // URL       : xxxxxxxxxx
  // ************************************************************************ //
  sfSOAP = interface(IInvokable)
  ['{20282F52-013C-FB3F-C901-1B37EB939FA1}']
    function  AltaFactuSistemaFacturacion(const AltaFactuSistemaFacturacion: AltaFactuSistemaFacturacion): RespuestaAltaFactuSistemaFacturacion; stdcall;
    function  BajaFactuSistemaFacturacion(const BajaFactuSistemaFacturacion: BajaFactuSistemaFacturacion): RespuestaBajaFactuSistemaFacturacion; stdcall;
  end;

function GetsfSOAP(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): sfSOAP;


implementation

function GetsfSOAP(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): sfSOAP;
const
  defWSDL = 'Y:\Ramiro\Escritorio\VERIFACTU\FORMATOS-0.4\SistemaFacturacion.wsdl';
  defURL  = 'xxxxxxxxxx';
  defSvc  = 'sfService';
  defPrt  = 'SistemaFacturacion';
var
  RIO: THTTPRIO;
begin
  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 sfSOAP);
    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;


initialization
  InvRegistry.RegisterInterface(TypeInfo(sfSOAP), 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl', 'UTF-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(sfSOAP), '');
  InvRegistry.RegisterInvokeOptions(TypeInfo(sfSOAP), ioDocument);
  InvRegistry.RegisterInvokeOptions(TypeInfo(sfSOAP), ioLiteral);

end.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
Responder Con Cita
  #16  
Antiguo 11-01-2024
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: 18.286
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 ramherfer Ver Mensaje
Hola buenos días. Por favor, alquien a conseguido importar lo wsdl con Delphi 7. Lo he intentado con el WSDL Importer, pero me genera un fichero de pocas lineas y creo que no es correcto. ¡Gracias!

He probado a importarlo con una versión antigua de Delphi (la 7 precisamente) que tenía en una máquina virtual y me genera lo mismo que a ti.
Aunque Delphi no deja de sorprenderme.
Los ficheros generados con las nuevas versiones se pueden "retorcar" para que compilen con Delphi 7 sinmuchos problemas. Incluso el código anterior que genera el XML también se puede ejecutar sin mayores problemas.


Parece mentira que con una versión de hace 20 años se pueda hacer esto.

Eso si, al ejecutar el código falla con el siguiente error:





El cual veo más complicado, porque me parece que las estructuras generadas son demasiado complejas para esa versión.
Como te he comentado en privado, tal vez tendrás que optar con generar una DLL/BPL con una versión más nueva de Delphi (que no tenga 20 años ) y llamarla desde tu aplicación de delphi 7.
__________________
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
  #17  
Antiguo 09-01-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
[quote='Neftali [Germán.Estévez];553902']
En este caso genera un fichero como este:

Código:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
    <SOAP-ENV:Body xmlns:NS1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl" xmlns:NS2="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:NS3="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
        <NS1:AltaFactuSistemaFacturacion SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
            <AltaFactuSistemaFacturacion SOAP-ENC:id="1" xsi:type="NS2:AltaFactuSistemaFacturacion">
                <Cabecera SOAP-ENC:id="2" xsi:type="NS3:Cabecera">
                    <IDVersion xsi:type="NS3:VersionType">1.0</IDVersion>
                    <ObligadoEmision SOAP-ENC:id="3" xsi:type="NS3:PersonaFisicaJuridicaESType">
                        <NombreRazon xsi:type="xsd:string">Empresa pruebas</NombreRazon>
                        <NIF xsi:type="xsd:string">11111111H</NIF>
                    </ObligadoEmision>
                    <TipoRegistroAEAT xsi:type="NS3:TipoRegistroAEATType">T0</TipoRegistroAEAT>
                    <FechaFinVeriFactu xsi:type="xsd:string">01/01/2026</FechaFinVeriFactu>
                </Cabecera>
                <item SOAP-ENC:id="4" xsi:type="NS2:FacturasEmitidasType">
                    <RegistroFacturacion SOAP-ENC:id="5" xsi:type="NS3:RegistroFacturacionType">
                        <IDFactura SOAP-ENC:id="6" xsi:type="NS3:IDFacturaExpedidaType">
                            <IDEmisorFactura SOAP-ENC:id="7" xsi:type="NS3:IDEmisorFactura">
                                <NIF xsi:type="xsd:string">3333333</NIF>
                            </IDEmisorFactura>
                            <NumSerieFacturaEmisor xsi:type="xsd:string">23/123456</NumSerieFacturaEmisor>
                            <FechaExpedicionFacturaEmisor xsi:type="xsd:string">31/12/23</FechaExpedicionFacturaEmisor>
                        </IDFactura>
                        <NombreRazonEmisor xsi:type="xsd:string"/>
                        <TipoRegistroSIF xsi:type="NS3:TipoRegistroSIFType">S0</TipoRegistroSIF>
                        <TipoFactura xsi:type="NS3:ClaveTipoFacturaType">F1</TipoFactura>
                        <DescripcionOperacion xsi:type="xsd:string">venta de mercaderías</DescripcionOperacion>
                        <Desglose xsi:type="SOAP-ENC:Array" SOAP-ENC:itemType="NS3:DetalleType" SOAP-ENC:arraySize="1">
                            <item SOAP-ENC:id="8" xsi:type="NS3:DetalleType">
                                <ClaveRegimen xsi:type="NS3:IdOperacionesTrascendenciaTributariaType">01</ClaveRegimen>
                                <TipoImpositivo xsi:type="xsd:string">21</TipoImpositivo>
                                <BaseImponibleOimporteNoSujeto xsi:type="xsd:string"/>
                                <CuotaRepercutida xsi:type="xsd:string">100</CuotaRepercutida>
                            </item>
                        </Desglose>
                        <ImporteTotal xsi:type="xsd:string"/>
                        <EncadenamientoRegistroAnterior xsi:nil="true"/>
                        <SistemaInformatico xsi:nil="true"/>
                        <FechaGenRegistro xsi:type="xsd:string"/>
                        <HoraGenRegistro xsi:type="xsd:string"/>
                        <HusoHorarioGenRegistro xsi:type="NS3:HusoHorarioGenRegistroType">01</HusoHorarioGenRegistro>
                    </RegistroFacturacion>
                    <DatosControl xsi:nil="true"/>
                </item>
            </AltaFactuSistemaFacturacion>
        </NS1:AltaFactuSistemaFacturacion>
    </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

Germán.



Cómo accedes a ese XML sin hacer el envío porque yo lo saco desde el evento "OnBeforeExecute" del componente HTTPRIO pero claro, si no se hace el envío porque no tenemos todavía las direcciones no llega a ese evento. Todo esto se me ocurre porque hará falta generar la huella de cada factura y no sé cómo aislar el nodo de cada factura para generar la huella.


Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #18  
Antiguo 09-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
[quote=newtron;553916]
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
En este caso genera un fichero como este:

Código:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
    <SOAP-ENV:Body xmlns:NS1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl" xmlns:NS2="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:NS3="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
        <NS1:AltaFactuSistemaFacturacion SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
            <AltaFactuSistemaFacturacion SOAP-ENC:id="1" xsi:type="NS2:AltaFactuSistemaFacturacion">
                <Cabecera SOAP-ENC:id="2" xsi:type="NS3:Cabecera">
                    <IDVersion xsi:type="NS3:VersionType">1.0</IDVersion>
                    <ObligadoEmision SOAP-ENC:id="3" xsi:type="NS3:PersonaFisicaJuridicaESType">
                        <NombreRazon xsi:type="xsd:string">Empresa pruebas</NombreRazon>
                        <NIF xsi:type="xsd:string">11111111H</NIF>
                    </ObligadoEmision>
                    <TipoRegistroAEAT xsi:type="NS3:TipoRegistroAEATType">T0</TipoRegistroAEAT>
                    <FechaFinVeriFactu xsi:type="xsd:string">01/01/2026</FechaFinVeriFactu>
                </Cabecera>
                <item SOAP-ENC:id="4" xsi:type="NS2:FacturasEmitidasType">
                    <RegistroFacturacion SOAP-ENC:id="5" xsi:type="NS3:RegistroFacturacionType">
                        <IDFactura SOAP-ENC:id="6" xsi:type="NS3:IDFacturaExpedidaType">
                            <IDEmisorFactura SOAP-ENC:id="7" xsi:type="NS3:IDEmisorFactura">
                                <NIF xsi:type="xsd:string">3333333</NIF>
                            </IDEmisorFactura>
                            <NumSerieFacturaEmisor xsi:type="xsd:string">23/123456</NumSerieFacturaEmisor>
                            <FechaExpedicionFacturaEmisor xsi:type="xsd:string">31/12/23</FechaExpedicionFacturaEmisor>
                        </IDFactura>
                        <NombreRazonEmisor xsi:type="xsd:string"/>
                        <TipoRegistroSIF xsi:type="NS3:TipoRegistroSIFType">S0</TipoRegistroSIF>
                        <TipoFactura xsi:type="NS3:ClaveTipoFacturaType">F1</TipoFactura>
                        <DescripcionOperacion xsi:type="xsd:string">venta de mercaderías</DescripcionOperacion>
                        <Desglose xsi:type="SOAP-ENC:Array" SOAP-ENC:itemType="NS3:DetalleType" SOAP-ENC:arraySize="1">
                            <item SOAP-ENC:id="8" xsi:type="NS3:DetalleType">
                                <ClaveRegimen xsi:type="NS3:IdOperacionesTrascendenciaTributariaType">01</ClaveRegimen>
                                <TipoImpositivo xsi:type="xsd:string">21</TipoImpositivo>
                                <BaseImponibleOimporteNoSujeto xsi:type="xsd:string"/>
                                <CuotaRepercutida xsi:type="xsd:string">100</CuotaRepercutida>
                            </item>
                        </Desglose>
                        <ImporteTotal xsi:type="xsd:string"/>
                        <EncadenamientoRegistroAnterior xsi:nil="true"/>
                        <SistemaInformatico xsi:nil="true"/>
                        <FechaGenRegistro xsi:type="xsd:string"/>
                        <HoraGenRegistro xsi:type="xsd:string"/>
                        <HusoHorarioGenRegistro xsi:type="NS3:HusoHorarioGenRegistroType">01</HusoHorarioGenRegistro>
                    </RegistroFacturacion>
                    <DatosControl xsi:nil="true"/>
                </item>
            </AltaFactuSistemaFacturacion>
        </NS1:AltaFactuSistemaFacturacion>
    </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

Germán.



Cómo accedes a ese XML sin hacer el envío porque yo lo saco desde el evento "OnBeforeExecute" del componente HTTPRIO pero claro, si no se hace el envío porque no tenemos todavía las direcciones no llega a ese evento. Todo esto se me ocurre porque hará falta generar la huella de cada factura y no sé cómo aislar el nodo de cada factura para generar la huella.


Gracias y un saludo.
Esa pregunta me la hago yo también.

Porque si no lo he entendido mal, deberíamos de generar un fichero individual por factura y luego cuando se vaya a hacer el envío leer esos ficheros y enviarlos todos juntos en una llamada al SOAP.

O sea, sería bueno saber, como generar primero esos ficheros individuales y luego como cargarlos para hacer la llamada SOAP. ¿No?.
Responder Con Cita
  #19  
Antiguo 09-01-2024
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: 18.286
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
Germán.
Cómo accedes a ese XML sin hacer el envío porque yo lo saco desde el evento "OnBeforeExecute" del componente HTTPRIO pero claro, si no se hace el envío porque no tenemos todavía las direcciones no llega a ese evento. Todo esto se me ocurre porque hará falta generar la huella de cada factura y no sé cómo aislar el nodo de cada factura para generar la huella.
Si llega al evento si en la URL colocas lo que sea que sea diferente a vacío.
Luego falla por URL, pero al evento llega.

Código modificado a partir de lo que puso un compañero (perdón que no recuerdo quien) mensajes atrás:

Código Delphi [-]
procedure TForm3.HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
  sTmp: TStringList;
  nFile: string;
begin
  sTmp := TStringList.Create;
  try
    SOAPRequest.Position := 0;
    sTmp.LoadFromStream(SOAPRequest);
    nFile := ExtractFilePath(Application.ExeName) + 'VeriFactu_PeticionEnviada.xml';
    sTmp.SaveToFile(nFile);
    Memo1.Lines.LoadFromFile(nFile);
  finally
    FreeAndNil(sTmp);
  end;
end;

Y en el fichero generado por SOAP, modifica esta variable y le asignas cualquier valor( que actualmente está a cadena vacía)...
Código Delphi [-]
  defURL  = 'me_la_he_inventado_';
__________________
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.

Última edición por Neftali [Germán.Estévez] fecha: 09-01-2024 a las 16:43:39.
Responder Con Cita
  #20  
Antiguo 09-01-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Y en el fichero generado por SOAP, modifica esta variable y le asignas cualquier valor( que actualmente está a cadena vacía)...
Código Delphi [-] defURL = 'me_la_he_inventado_';

Gracias Germán. Apuntar que para que me llegara al evento le he tenido que añadir a la url el prefijo http://


Código Delphi [-]
  defURL  = 'http://me_la_he_inventado_';


Lo que sigo con la duda es de cómo capturar el texto del nodo de cada factura para poder calcular el hash.

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
Hijo de Informáticos gluglu Humor 3 13-03-2007 11:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 12:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 14:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 21:59:09


La franja horaria es GMT +2. Ahora son las 21:54:59.


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