FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Buenos dias !
He leido el hilo atentamente, pero no soy capaz de importar los wsdl desde las siguientes direcciones: Entrada: https://prewww2.aeat.es/static_files...nformacion.xsd Salida: https://prewww2.aeat.es/static_files...Suministro.xsd Al importar, me da un error: " WSDL Import Error An error was encontered importing.... .... Please verify that yo've entered the correct URL.... " ¿Podeis darme una mano por favor? Con lo que aprendi en este foro de los SII, creo que luego podre seguir mas o menos solo, pero aqui ya no puedo continuar. Saludos a tod@s gracias |
#2
|
||||
|
||||
Cita:
https://prewww2.aeat.es/static_files...nformacion.xsd https://prewww2.aeat.es/static_files...Suministro.xsd Yo he probado a generarlos importante desde el IDE y me ha creado esto (os adjunto los fuentes); No os he revisado mucho pero no parece que tengan nada raro.
__________________
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. |
#3
|
|||
|
|||
muchas gracias por los archivos !
sin tener demasiado idea de esto, porque voy muy perdido (lo siento) en estos archivos que he descargado tenemos: interface(IXMLNode) mientras a los que estoy acostumbrado con el SII, son: class(TRemotable) Entiendo que los archivos descargados con los interfaces IXMLNode, son para construir el archivo XML, que mas adelante sera firmado y enviado. (todavia no se muy bien como). Podria crear el archivo XML de forma manual, pero veo mas conveniente intentarlo asi. Voy a ver. Saludos ! |
#4
|
||||
|
||||
Cita:
Perdón. Ahora que lo comentas, los he mirado con más detenimiento y les faltan las funciones que usamos para crear los XML. Revisando la generación, he visto que la primera vez que lo he generado, no he seleccionado la opción siguiente: Si los volvemos a generar y asignamos un nombre coherente, ahora sí aparecen las funciones que usamos para generar/cargar los XML. En el caso de la petición estas:
Y en el caso de la respuesta estas:
A partir de ahí para generar un XML nuevo, deberíamos empezar por NewPeticionFacturacionAlta y para cargar la respuesta obtenida deberíamos usar LoadRespuestaFacturacionAlta o GetRespuestaFacturacionAlta. Adjunto los nuevos ficheros.
__________________
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. |
#5
|
|||
|
|||
Cita:
Yo estaba utilizando el archivo wsdl, para generar los XML y he visto este post de nuestro compañero Neftali . ¿Qué utilizáis vosotros? los xsd o wsdl ? Estuve en su momento mirando los xsd, pero no me salían las funciones que se utilizan para generar los xml y las descarté. No se ve en el post, que opciones se puso apara que generara dichas funciones, ¿La sabéis? Muchas Gracias. |
#6
|
||||
|
||||
Cita:
En las primeras pruebas estuvimos haciendo importaciones, como tú dices, con WSDL y los XSD. Pero parece que la opción que "llega a buen puerto" es mediante WSDL. Que además parece que cuadra más con lo que piden: "El envío se realizará por vía telemática, concretamente mediante Servicios Web SOAP"
__________________
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. |
#7
|
|||
|
|||
Cita:
Muchas Gracias. |
#8
|
|||
|
|||
Buenos dias !
Os presento mi duda mas importante a la hora de generar el XML, usando el databinding, segun el esquema XSD que amablemente me envio Neftali.
Hasta ahi sencillo, tengo el objeto XML de alta de factura, y me deja indicar la cabecera y todo lo que de ella pende. Perfecto. ¿pero y el resto de nodos que tengo que añadir? ¿como lo hago? (tengo las definiciones en el .pas con los interfaces pero no se como usarlos mas alla de este pequeño codigo). he tratado de mil maneras y no consigo añadirlos. x favor, ¿alguien puede sacarme de esta duda? Saludos cordiales. |
#9
|
||||
|
||||
Cita:
__________________
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. |
#10
|
|||
|
|||
gracias x la respuesta tan rapida.
las funciones las tenia, como se ve en el pequeño ejemplo de codigo que publique. hasta ahi perfecto. Y como digo, puedo como bien indicas acceder al objeto cabecera, y todos sus descendientes:
Pero sigo sin entender, como creo un objeto nuevo, con digamos: PeriodoLiquidacion ó RegistroFacturacion Para seguir con la generacion del XML Es decir algo asi:
Eso es lo que no se hacer. Saludos cordiales |
#11
|
|||
|
|||
He creado este codigo que genera un archivo XML, calcado al del ejemplo de ermendalenda:
Es un codigo muy basico, pero quizas a alguien le ayude, ahora voy a mirar como calcular la huella, que creo ha sido tratado en este foro. (no lo formateo porque lo altera para mal) Código Delphi [-]type TSistemaInformatico=record nombreRazon:string; NIF:string; IdsistemaInformatico:string; version:string; numeroInstalacion:string; TipoUsoSistema:string; end; TEncadenamiento=record IdEmisorFacturaAnterior:string; NumSerieFacturaAnterior:string; FechaExpedicionFacturaAnterior:Tdatetime; HuellaFacturaAnterior:string; end; TPeriodoliquidacion=record ejercicio:string; periodo:string; end; TIDFactura=record IdEmisor_nif:string; NumSerieFacturaEmisor:string; FechaExpedicionFacturaEmisor:Tdatetime; end; TDesglose=record claveRegimen:string; CalificacionOperacion:string; TipoImpositivo:real; BaseImponibleOImporteNoSujeto:real; CuotaRepercutida:real; end; TRegistroFactura=record PeriodoLiquidacion:TPeriodoliquidacion; IDFactura:TIDFactura; tipoFactura:string; FechaOperacion:Tdatetime; DescripcionOperacion:String; Desglose:array of TDesglose; ImporteTotal:real; EncadenamientoFacturaAnterior:TEncadenamiento; SistemaInformatico:TSistemaInformatico; end; procedimientos: Código:
function moneda(n:real):string; begin FormatSettings.DecimalSeparator := '.'; result:=trim(Format('%8.2f',[n])); end; function nodo(clave, valor:string):string; begin result:='<'+clave+'>'+valor+'</'+clave+'>'; end; procedure cabecera(xmlLista:TStringList; idVersion:string; NombreRazon, Nif:string); begin if idVersion='' then idVersion:='0.1'; xmlLista.add('<?xml version="1.0" encoding="UTF-8"?>'); xmlLista.add('<SistemaFacturacionAltaFact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">'); xmlLista.add('<Cabecera>'); xmlLista.add(nodo('IDVersion',idVersion)); xmlLista.add('<ObligadoEmision>'); xmlLista.add(nodo('NombreRazon',NombreRazon)); xmlLista.add(nodo('NIF',Nif)); xmlLista.add('</ObligadoEmision>'); xmlLista.add('</Cabecera>'); end; procedure iniciaRegistroAltaFacturas(xmlLista:TStringList); begin xmlLista.add('<RegistroAltaFacturas>'); end; function moneda(n:real):string; begin FormatSettings.DecimalSeparator := '.'; result:=trim(Format('%8.2f',[n])); end; procedure registroFacturacion(xmlLista:TStringList; registroFactura:TRegistroFactura); var I:integer; begin xmlLista.add('<RegistroFacturacion>'); xmlLista.add('<PeriodoLiquidacion>'); xmlLista.add(nodo('Ejercicio',registroFactura.PeriodoLiquidacion.ejercicio) ); xmlLista.add(nodo('Periodo',registroFactura.PeriodoLiquidacion.periodo)); xmlLista.add('</PeriodoLiquidacion>'); xmlLista.add('<IdFactura>'); xmlLista.add('<IdEmisorFactura>'); xmlLista.add(nodo('NIF',registroFactura.IDFactura.IdEmisor_nif)); xmlLista.add('</IdEmisorFactura>'); xmlLista.add(nodo('NumSerieFacturaEmisor',registroFactura.IDFactura.NumSerieFacturaEmisor )); xmlLista.add(nodo('FechaExpedicionFacturaEmisor',datetostr(registroFactura.IDFactura.FechaExpedicionFacturaEmisor) )); xmlLista.add('</IdFactura>'); xmlLista.add(nodo('TipoFactura',registroFactura.tipoFactura)); xmlLista.add(nodo('FechaOperacion',datetostr(registroFactura.FechaOperacion))); xmlLista.add(nodo('DescripcionOperacion',registroFactura.DescripcionOperacion)); // array de desgloses xmlLista.add('<Desglose>'); for I := Low(registroFactura.Desglose) to High(registroFactura.Desglose) do begin xmlLista.add('<DetalleDesglose>'); xmlLista.add(nodo('ClaveRegimen',registroFactura.Desglose[i].claveRegimen )); xmlLista.add(nodo('CalificacionOperacion',registroFactura.Desglose[i].CalificacionOperacion )); xmlLista.add(nodo('TipoImpositivo',moneda(registroFactura.Desglose[i].TipoImpositivo))); xmlLista.add(nodo('BaseImponibleOimporteNoSujeto',moneda(registroFactura.Desglose[i].BaseImponibleOImporteNoSujeto))); xmlLista.add(nodo('CuotaRepercutida',moneda(registroFactura.Desglose[i].CuotaRepercutida))); xmlLista.add('</DetalleDesglose>'); end; xmlLista.add('</Desglose>'); xmlLista.add(nodo('ImporteTotal',moneda(registroFactura.ImporteTotal))); xmlLista.add('<EncadenamientoFacturaAnterior>'); xmlLista.add(nodo('IDEmisorFacturaAnterior',registroFactura.EncadenamientoFacturaAnterior.IdEmisorFacturaAnterior)); xmlLista.add(nodo('NumSerieFacturaAnterior',registroFactura.EncadenamientoFacturaAnterior.NumSerieFacturaAnterior)); xmlLista.add(nodo('FechaExpedicionFacturaAnterior',datetostr(registroFactura.EncadenamientoFacturaAnterior.FechaExpedicionFacturaAnterior))); xmlLista.add(nodo('HuellaFacturaAnterior',registroFactura.EncadenamientoFacturaAnterior.HuellaFacturaAnterior)); xmlLista.add('</EncadenamientoFacturaAnterior>'); xmlLista.add('<SistemaInformatico>'); xmlLista.add(nodo('NombreRazon',registroFactura.SistemaInformatico.nombreRazon )); xmlLista.add(nodo('NIF', registroFactura.SistemaInformatico.NIF ) ); xmlLista.add(nodo('IdSistemaInformatico', registroFactura.SistemaInformatico.IdsistemaInformatico ) ); xmlLista.add(nodo('Version',registroFactura.SistemaInformatico.version)); xmlLista.add(nodo('NumeroInstalacion',registroFactura.SistemaInformatico.numeroInstalacion)); xmlLista.add(nodo('TipoUsoSistema',registroFactura.SistemaInformatico.TipoUsoSistema)); xmlLista.add('</SistemaInformatico>'); xmlLista.add('</RegistroFacturacion>'); end; function finalizaRegistroAltaFacturas(xmlLista:TStringList):string; var _huella:string; begin // calculo de la huella: (por hacer) _huella:='005948F5A441A56ABF584804036409719AB89892608FD708BAB8AE5088C896AD'; result:=_huella; // xmlLista.add('<DatosControl>'); xmlLista.add(nodo('Huella',_huella) ); xmlLista.add(nodo('TipoHash','01') ); xmlLista.add(nodo('FechaGenRegistro',dateTostr(date)) ); xmlLista.add(nodo('HoraGenRegistro',timeTostr(time)) ); xmlLista.add(nodo('HUsoHorarioGenRegistro','02') ); xmlLista.add('</DatosControl>'); xmlLista.add('</RegistroAltaFacturas>'); xmlLista.add('</SistemaFacturacionAltaFact>'); end; // datos de la factura "desde la base de datos:" procedure anadeDatosFactura(var factura:TRegistroFactura); begin factura.PeriodoLiquidacion.ejercicio:='2022'; factura.PeriodoLiquidacion.periodo:='3T'; factura.IDFactura.IdEmisor_nif:='00000006Y'; factura.IDFactura.NumSerieFacturaEmisor:='84.2.1.2566'; factura.IDFactura.FechaExpedicionFacturaEmisor:=strtodate('31/07/2022'); factura.tipoFactura:='F2'; factura.FechaOperacion:=factura.IDFactura.FechaExpedicionFacturaEmisor; factura.DescripcionOperacion:='VENTA MINORISTA'; setLength(factura.Desglose,1); factura.Desglose[0].claveRegimen:='01'; factura.Desglose[0].CalificacionOperacion:='S1'; factura.Desglose[0].TipoImpositivo:=4; factura.Desglose[0].BaseImponibleOImporteNoSujeto:=1; factura.Desglose[0].CuotaRepercutida:=0.04; factura.ImporteTotal:=1.04; // encadenamiento factura anterior factura.EncadenamientoFacturaAnterior.IdEmisorFacturaAnterior:='00000006Y'; factura.EncadenamientoFacturaAnterior.NumSerieFacturaAnterior:='84.2.1.2565'; factura.EncadenamientoFacturaAnterior.FechaExpedicionFacturaAnterior:=strTodate('31/07/2022'); factura.EncadenamientoFacturaAnterior.HuellaFacturaAnterior:='9yYI6U89U3IUIQE345EUGWEBsd7EKFCBP9trtYUJSD0JFFKJKrtthAuysfadfWPE'; // sistema informatico factura.SistemaInformatico.nombreRazon:='SISTEMAS INFORMATICOS TPV'; factura.SistemaInformatico.NIF:='00000006Y'; factura.SistemaInformatico.IdsistemaInformatico:='IDENTIFICADOR AEAT XXXX'; factura.SistemaInformatico.version:='46.243.1'; factura.SistemaInformatico.numeroInstalacion:='45'; factura.SistemaInformatico.TipoUsoSistema:='01'; end; Código:
procedure TForm2.Button6Click(Sender: TObject); var xml:TStringList; factura:TRegistroFactura; begin xml:=TStringList.Create; cabecera(xml, '0.1', 'EMPRESA DE PRUEBA, S.A.','00000006Y'); iniciaRegistroAltaFacturas(xml); <-- inicia la carga de facturas // por cada factura: anadeDatosFactura(factura); // <-- carga de datos de la factura desde la "BD" registroFacturacion(xml, factura); <-- carga la factura en el XML // final finalizaRegistroAltaFacturas(xml); xml.SaveToFile('c:\final.xml'); xml.Free; end; Última edición por Neftali [Germán.Estévez] fecha: 10-07-2023 a las 08:25:18. Razón: el codigo lo paso con errores al formatear |
|
|
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 |
|