FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1101
|
||||
|
||||
Cita:
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.
__________________
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. |
#1102
|
||||
|
||||
Cita:
Gracias Germán. Apuntar que para que me llegara al evento le he tenido que añadir a la url el prefijo http://
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. |
#1103
|
|||
|
|||
Cita:
Gracias Neftali Voy con ello, a ver donde llego. |
#1104
|
||||
|
||||
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. |
#1105
|
||||
|
||||
Cita:
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. |
#1106
|
||||
|
||||
Cita:
¿Con este código se genera el xml de la(s) factura(s) y se enviaría (si la url es correcta)?. Lo comento ya que trato de añadir por ejemplo DatosControl y me genera un error de excepción añadiendo estas tres lineas: Código:
fact.RegistroFacturacion.Desglose := Desglose; //---------------------------------------Genera un error de excepción fact.DatosControl.Huella := 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYY'; fact.datosControl.TipoHash := TipoHashType._01; fact.datosControl.Incidencia := IncidenciaType.N; //--------------------------------------------------- // Factura 1 alta.RegistroAltaFacturas := RegistroAltaFacturas; ¿La huella de la factura, se tiene que generar desde este xml y de cada uno de los nodos <RegistroFacturacion> que contenga? Con el código original funciona perfectamente, genera el xml y realiza el envío, dando error ya que la url no existe. Lo he probado con Delphi 11 Community Edition. Voy a seguir los consejos de Germán @Neftali y voy a tratar de confeccionar una librería llamada desde delphi 7 y que reciba datos y los procese enviandolos y capturando las respuestas. Jamás he realizado proyecto que se asemeje a esto, por lo que pido ayuda y comprensión si molesto algo, con alguna pregunta cuyo concepto muchos dareis por sentado. Si lo consigo, como agradecimiento, colocare en este foro el código completo para que lo utilice cualquiera que lo necesite. Si no lo consigo... para que hablar más.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
#1107
|
||||
|
||||
Cita:
Cita:
Cita:
Por lo tanto, para cada factura habrá que calcular su huella y añadirla al bloque DatosControl que va junto a la factura. Si se van a enviar N facturas, todas ellas se añaden a un array (Array_Of_FacturasEmitidasType) que finalmente es lo que enviamos en la llamada a SOAP (única propiedad de AltaFactuSistemaFacturacion).
__________________
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. |
#1108
|
||||
|
||||
Cita:
Para eso debes añadir Tantos DetalleDesglose como necesites. Según el la documentación entre 1 y 10.
En el código anterior parte hemos creado 1 (1 detalle) y se ha añadido al Array, pero puedes crear varios y añadirlos.
Eso te añadirá varios al XML:
__________________
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. |
#1109
|
|||
|
|||
Nodo RegistroFacturacion
A alguien le ha ocurrido que al serializar el registro individual (no montado dentro de <AltaFactuSistemaFacturacion>) el nodo <RegistroFacturacion> aparece con su namespace
<?xml version="1.0" encoding="utf-8"?> <FacturasEmitidasType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RegistroFacturacion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd"> <IDFactura xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd"> <IDEmisorFactura> <NIF>xxxxxxxxx</NIF> </IDEmisorFactura> ........ pero al incorporarlo al nodo <AltaFactuSistemaFacturacion> para ser enviado la serialización elimina el namespace de dicho nodo <AltaFactuSistemaFacturacion xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Cabecera xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd"> <IDVersion>1.0</IDVersion> <ObligadoEmision> <NombreRazon>xxxxx</NombreRazon> <NIF>xxxxx</NIF> </ObligadoEmision> <TipoRegistroAEAT>T0</TipoRegistroAEAT> </Cabecera> <RegistroAltaFacturas xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd"> <RegistroFacturacion> <IDFactura xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd"> <IDEmisorFactura> .... Esto tiene la implicación de que el hash que calcularán en la aeat del nodo RegistroFacturacion no incluirá los carácteres relativos al namespace y por tanto, no coincidirá ¿ Alguien está en este caso ? |
#1110
|
||||
|
||||
Buenas noches.
A ver por favor estamos trabajando con 3 ficheros que subio German (Neftali): SistemaFacturacionSOAPv11.pas SistemaFacturacionSOAPv12.pas SistemaFacturacionSOAPvRec.pas Alguien podría indicar el proceso, los pasos para obtenerlos. Gracias.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
#1111
|
||||
|
||||
Desde el IDE de Delphi:
Código:
c:\Program Files (x86)\Borland\Delphi7\Bin>WSDLImp.exe -p -Dc:\temp -soap12 https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SistemaFacturacion.wsdl
__________________
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: 12-01-2024 a las 09:54:38. |
#1112
|
||||
|
||||
Cita:
De una forma o de otra yo creo que habrá que plantear crear un programa aparte que se encargue de recopilar las facturas según se vayan produciendo e ir enviándolas porque en ambientes de red ese trabajo tendrá que hacerlo un único terminal que tenga el certificado digital correspondiente instalado, o si a alguien se le ocurre otra forma mejor puede comentarlo. Saludos.
__________________
Be water my friend. |
#1113
|
||||
|
||||
Cita:
Bueno es una opción bastante lógica para algunos entornos, estoy pensando en empresas grandes con un ERP. En esos casos es bastante lógico pensar en un servicio que implemente una cola de envío. Pero en otros casos, por ejemplo en una tienda con 3 puestos de venta, tal vez es más sencillo que cada TPV/puesto genere sus facturas y las envíe. En el caso de TicketBAI, por ejemplo, ya está pensado y admiten certificados de dispositivo. Cada máquina tiene un certificado de dispositivo y simplifica todo el proceso (instalación, envío,...).
__________________
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. |
#1114
|
||||
|
||||
Cita:
Pues si te digo la verdad no tengo ni idea de lo que es un certificado de dispositivo pero en mi caso me resulta más fácil de mantener un único programa instalado en el servidor que andar peleando con los terminales que se averían y los reinstalan, cambian o quien sabe qué y todo eso hay que ir luego detrás configurando así que seguramente iré por esa vía. Saludos.
__________________
Be water my friend. |
#1115
|
||||
|
||||
Cita:
Bueno yo creo que las 2 pueden ser buenas. Cada uno deberá decidir para su programa cual es mejor. Creo que ambas tienen ventajas/inconvenientes.
__________________
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. |
#1116
|
|||
|
|||
Cita:
Las empresas que se dedican a hacer el envio tienen una cosa buena, es que con que le envies el tique/factura en un formato por ejemplo json, te devuelven el Qr y se encargan de todo lo demás. Algunas te dan el servico en tu misma red local y otras a través de servicios Rest. Os lo cuento para los que veais la cosa muy complicada sepais que opciones hay. |
#1117
|
|||
|
|||
Cita:
Si estoy en lo correcto, quizás la generación del xml sería por parte del equipo que genera la factura y que la dejaría en una carpeta "común" y por otro lado está el programa dedicado al envío de dichos ficheros xml a Hacienda, que no tiene por que hacerlo en tiempo real, ya que según he leído por ahí, la propia hacienda puede marcar el ritmo de envío y el número de facturas a enviar en cada envío. Per la verdad es que cuando te pones a pensar que puede haber varios equipos a la vez facturando con la misma serie, buff, la posibilidad de combinaciones es grande. Si se da el caso de que estén facturando simultáneamente, quizás el primer equipo aún no generó del todo el xml, y el segundo equipo está intentando leer información del xml que aún no se generó o no del todo... En fin... La otra opción que he pensado es con algún sistema de flags, que cada vez que algún equipo equipo genere una factura, un programa en el servidor genere todos los xml de las facturas que se hayan generado desde la última vez o algo así... Y la facturación en bloque de fin de mes, que se pueden generar cientos de facturas en un momento... En fin... Poco a poco... |
#1118
|
||||
|
||||
Cita:
Bueno, pero de eso no le podemos "echar la culpa" a VERI*FACTU, esos problemas ya los tenemos ahora...
__________________
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. |
#1119
|
|||
|
|||
Mmmm.... Empresa grande y ERP, pero no en el S.I.I.... ¿Habrá muchas?
|
#1120
|
|||
|
|||
Cita:
<AltaFactuSistemaFacturacion xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">La idea es que los espacios de nombres Alta y LR aparecen distintos dentro del documento pero en realidad son el mismo esquema. Habrá que probar con la herramienta de Hacienda pero creo que en XML es válido. Lo he hecho con dos espacios de nombres explícitos para que se entiende mejor, pero supongo que el segundo puede ser el espacio por defecto. Evidentemente hay que ponerlo para que al final lo que aparece en lo que se está enviando a Hacienda siga exactamente lo mismo que lo que se ha usado para calcular la huella y eventualmente firmar. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Hijo de Informáticos | gluglu | Humor | 3 | 13-03-2007 12:05:35 |
Adictos informaticos ... | Trigger | Humor | 2 | 11-10-2004 13:18:32 |
Nosotros los Informáticos | Trigger | Humor | 1 | 10-10-2004 15:58:09 |
Patrón de los Informáticos. | obiwuan | Varios | 20 | 10-09-2003 15:44:54 |
Chistes Informaticos | jhonny | Humor | 2 | 11-08-2003 22:59:09 |
|