Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Envío de registros y sus respuestas (https://www.clubdelphi.com/foros/forumdisplay.php?f=66)
-   -   Demo con código Verifactu.dll para (delphi 7) (https://www.clubdelphi.com/foros/showthread.php?t=97004)

seccion_31 10-07-2025 13:45:41

Cita:

Empezado por starlet (Mensaje 566264)
Te pongo un ejemplo con los nodos:
Código:

<RegFactuSistemaFacturacion>
 <Cabecera>
 <ObligadoEmision>
  <NombreRazon>EMPRESA PRUEBA</NombreRazon>
  <NIF>00000006Y</NIF>
  </ObligadoEmision>
  </Cabecera>
 <RegistroFactura>
 <RegistroAlta>
  <IDVersion>1.0</IDVersion>
 <IDFactura>
  <IDEmisorFactura>00000006Y</IDEmisorFactura>
  <NumSerieFactura>2312-5</NumSerieFactura>
  <FechaExpedicionFactura>16-06-2025</FechaExpedicionFactura>
  </IDFactura>
  <RefExterna>20250906000023000001002000000005</RefExterna>
  <NombreRazonEmisor>EMPRESA</NombreRazonEmisor>
  <TipoFactura>F3</TipoFactura>
 <FacturasSustituidas>
        <IDFacturaSustituida>
                  <IDEmisorFactura>00000006Y</IDEmisorFactura>
                  <NumSerieFactura>23.1.1-6</NumSerieFactura>
                  <FechaExpedicionFactura>06-09-2025</FechaExpedicionFactura>
          </IDFacturaSustituida>
  </FacturasSustituidas>
  <DescripcionOperacion>CANJE DE TIQUET/S PETICION CLIENTE</DescripcionOperacion>
 <Destinatarios>
 <IDDestinatario>
  <NombreRazon>natural</NombreRazon>
  <NIF>BXXXXXXXX</NIF>
  </IDDestinatario>
  </Destinatarios>
 <Desglose>
 <DetalleDesglose>
  <ClaveRegimen>01</ClaveRegimen>
  <CalificacionOperacion>S1</CalificacionOperacion>
  <TipoImpositivo>4.00</TipoImpositivo>
  <BaseImponibleOimporteNoSujeto>2.88</BaseImponibleOimporteNoSujeto>
  <CuotaRepercutida>0.12</CuotaRepercutida>
  </DetalleDesglose>
  </Desglose>
  <CuotaTotal>0.12</CuotaTotal>
  <ImporteTotal>3.00</ImporteTotal>
 <Encadenamiento>
 <RegistroAnterior>
  <IDEmisorFactura>00000006Y</IDEmisorFactura>
  <NumSerieFactura>23.1.1-6</NumSerieFactura>
  <FechaExpedicionFactura>06-09-2025</FechaExpedicionFactura>
  <Huella>D595EAF45EDF1A18D3602AE2EC7D84C1F9F86A2D991622CDE2FF27A0F4254849</Huella>
  </RegistroAnterior>
  </Encadenamiento>
 <SistemaInformatico>
  <NombreRazon>papara</NombreRazon>
  <NIF>AXXXXXXXX</NIF>
  <NombreSistemaInformatico>pruebas</NombreSistemaInformatico>
  <IdSistemaInformatico>01</IdSistemaInformatico>
  <Version>T.1.0.7275-P.1.00.0759-C.1.00.0003</Version>
  <NumeroInstalacion>00000006Y NCentro:23 NTPV:1</NumeroInstalacion>
  <TipoUsoPosibleSoloVerifactu>S</TipoUsoPosibleSoloVerifactu>
  <TipoUsoPosibleMultiOT>N</TipoUsoPosibleMultiOT>
  <IndicadorMultiplesOT>N</IndicadorMultiplesOT>
  </SistemaInformatico>
  <FechaHoraHusoGenRegistro>2025-09-06T21:36:17+02:00</FechaHoraHusoGenRegistro>
  <TipoHuella>01</TipoHuella>
  <Huella>98171943CECAD4369F71E7124A5E31E9A11BAA8C8B3991C36E69CAD32D65B80F</Huella>
  </RegistroAlta>
  </RegistroFactura>
  </RegFactuSistemaFacturacion>

aparentemente es añadir este nodo por tantas facturas como se sustituyan en la F3.

Código:

<IDFacturaSustituida>
  <IDEmisorFactura>00000006Y</IDEmisorFactura>
  <NumSerieFactura>23.1.X-XX</NumSerieFactura>
  <FechaExpedicionFactura>XX-09-2025</FechaExpedicionFactura>
</IDFacturaSustituida>

Si puedes hacerlo sería fantástico. Me ofrezco voluntario para probarlo.

Mil gracias.

no puedo colocar un array dinamico de IDFacturaSustituida tendria que haber un limite, ¿por ejemplo 5 tickets para cambiarlos a una factura? (si lo h entendido bien lo que es la F3)

starlet 10-07-2025 14:02:33

En teoría se pueden sustituir varias facturas simplificadas en 1 nominal, pero si lo ves más sencillo en 1 también vale pq en la gran mayoría de los casos 1 simplificada -> 1 nominal .

El nodo es <FacturasSustituidas> y dentro el array.

Código:

<FacturasSustituidas>
        <IDFacturaSustituida>
                  <IDEmisorFactura>00000006Y</IDEmisorFactura>
                  <NumSerieFactura>23.1.1-6</NumSerieFactura>
                  <FechaExpedicionFactura>06-09-2025</FechaExpedicionFactura>
          </IDFacturaSustituida>
  </FacturasSustituidas>


seccion_31 11-07-2025 12:49:58

La versión 4.6 incluirá el tipo de factura F3.

Saludos !

starlet 11-07-2025 15:57:16

En teoría se pueden sustituir varias facturas simplificadas en 1 nominal, pero si lo ves más sencillo en 1 también vale pq en la gran mayoría de los casos 1 simplificada -> 1 nominal .

El nodo es <FacturasSustituidas> y dentro el array.

Código:

<FacturasSustituidas>
        <IDFacturaSustituida>
                  <IDEmisorFactura>00000006Y</IDEmisorFactura>
                  <NumSerieFactura>23.1.1-6</NumSerieFactura>
                  <FechaExpedicionFactura>06-09-2025</FechaExpedicionFactura>
          </IDFacturaSustituida>
  </FacturasSustituidas>


Neftali [Germán.Estévez] 14-07-2025 08:27:29

Ya está la subida la versión 4.6a
Que como ha comentado [sección_31] incluye las facturas de tipo F3

Está en el FTP del club:
https://terawiki.clubdelphi.com/Otro...%20Delphi%207/

mqm 14-07-2025 13:37:39

Da igual si tienes variuas series. Simpre es sobre la ultima y por lo que he visto hasta ahora lo esta haciendo bien.

seccion_31 14-07-2025 20:44:16

por cierto, yo diria que la ayuda de la 4.6a esta algo mal detallada sobre la F3, creo que con indicar los datos de cliente, emision, y el record de sustitucion deberia funcionar. Vamos que no lo tengo claro, pero funcionar, funciona.

Saludos !

: )

Matorral 16-07-2025 21:05:45

Consulta de RF enviados
 
Buenas tardes¡¡

Gracias anticipadas de nuevo a todos por el enorme esfuerzo.

Acabo de darme cuenta de que al realizar la consulta de la AEAT de registros de facturación enviados, me aparecen todos como Subsanacion = 'S' y PrimerRegistro = 'S'.

La consulta la hago por medio del componente, capturando los registros en el evento onRegConsultaD7.

Los RF los envío sin valor en el campo Subsanacion, y trazando la función AddRegistroInicial el valor fPrimero tiene valor False, no entiendo por que al hacer la consulta me devuelve 'S' en esos dos campos (Subsanacion y RegistroInicial).

El xml de envio esta bien generado y el encadenamiento es correcto. Y el xml de respuesta también es correcto

A alguien le pasa esto?

Matorral 16-07-2025 21:34:30

evento onRegTrasEspera
 
Quería comentaros, por si le sirve a alguien, que estoy utilizando el evento onRegTrasEspera para gestionar la cola de envío, y va de cine.

Mi software es de hostelería y comercio, y en principio había pensado en realizar los envíos cada vez que se cobra una factura, pero no las tenia todas conmigo, porque en muchos bares y comercios realizan varios cobros por minuto, y quien sabe si los banearían.

Para gestionar la cola de envíos hago lo siguiente:

Cuando cobro una factura compruebo la propiedad AutoEspera. Si está a False la pongo a true y realizo el envío. Y si esta a True guardo la factura en la cola (FIFO) sin realizar envío.

Código Delphi [-]
        if VerifactuD7.AutoEspera=false then begin    // si esta a false se puede enviar
          try
            HazAvisoVerifactu('Enviando registro de facturación ... ');

            VerifactuD7.AutoEspera:=true;    // ponemos en marcha onTrasEspera

            enviarVerifactu_Simplificada( cSer,cTicket,'A'); // Enviamos Verifactu

            CierraAvisoVerifactu(Proc_Ventas);

          except
            showmessage('Fallo al enviar Factura');
          end;
        end
        else
          Graba_Pendiente_Envio(cSerieTickets,TTicket.FieldByName('SERIE').AsString,TTicket.FieldByName('CODIG  O').AsString,'S', 'N', 'N', 'N');

Luego en el evento onTrasEspera, si hay registros pendientes realizo el envío de las facturas guardadas en cola y si no hay registros pendientes de envío vuelvo a poner a False la propiedad AutoEspera.

Código Delphi [-]
/////// VERIFACTU
// autoenvio automatico de facturas pendientes REGISTROSPENDIENTESENVIO.DB
procedure TProc_Ventas.OnTrasEsperaD7( Sender: TObject );
begin

  if TRegistrosPendientesEnvio.IsEmpty then
    VerifactuD7.AutoEspera:=False
  else
    enviarVerifactu_Pendientes;

end;

Espero que le pueda servir a alguien.

seccion_31 17-07-2025 10:20:15

Cita:

Empezado por Matorral (Mensaje 566392)
Buenas tardes¡¡

Gracias anticipadas de nuevo a todos por el enorme esfuerzo.

Acabo de darme cuenta de que al realizar la consulta de la AEAT de registros de facturación enviados, me aparecen todos como Subsanacion = 'S' y PrimerRegistro = 'S'.

La consulta la hago por medio del componente, capturando los registros en el evento onRegConsultaD7.

Los RF los envío sin valor en el campo Subsanacion, y trazando la función AddRegistroInicial el valor fPrimero tiene valor False, no entiendo por que al hacer la consulta me devuelve 'S' en esos dos campos (Subsanacion y RegistroInicial).

El xml de envio esta bien generado y el encadenamiento es correcto. Y el xml de respuesta también es correcto

A alguien le pasa esto?


uuummm...

revisa en la web de la AEAT como estan esos registros.

Si en la WEB DE LA AEAT estan correctos (es decir no aparece subsanacion y no son primer registro), entonces sera un problema de proceso de la consulta y lo reviso. Dimelo. (mira tambien si en el XML subsanacion no esta ni primer registro)

(Yo no he proceso la consulta para obtener de vuelta esos valores, me fijo en otros campos, de ahi que quizas esten mal procesados)

Saludos !

seccion_31 17-07-2025 10:22:08

:) por cierto a estas alturas, me gustaría saber cuantos están usando mi componente... por curiosidad.


el timer del que habla [matorral] fue una aportación de [Darkdudae]

rafa1963 17-07-2025 11:15:12

re
 
Buenos días seccion_31, Yo lo estoy utilizando en mi aplicación personal (en modo prueba) y va todo de lujo, si bien, lo que no he sido capaz aún es de insertar la firma en el signature. Todo funciona correctamente y voy adaptándolo según los mensajes de respuesta de la aeta y con los apreciados consejos que posteais.
Un millón de gracias a todos

Matorral 17-07-2025 11:35:15

Cita:

Empezado por seccion_31 (Mensaje 566402)
:) por cierto a estas alturas, me gustaría saber cuantos están usando mi componente... por curiosidad.

el timer del que habla [matorral] fue una aportación de [Darkdudae]

Yo sigo el componente desde el inicio. Mi aportación fue nula porque no llego al nivel. Siempre fui a remolque en esto de Verifactu. No sabia por donde empezar.
Me disteis la vida, porque ni por asombro podria conseguir todo esto por mi mismo. Creo que uno de los dias mas felices de mi vida fue cuando envie un RF a Hacienda y me contesto "Correcto" :D

A estas alturas aun sigo peleando con la implementación del componente en mis aplicaciones y lo que mas me aterra ahora mismo es el tratamiento de los errores que devuelva (aceptado con errores, etc ... ), porque aun no me he puesto con ello.

Pero que de verdad que os debo la vida¡¡

v:-)v||-||#:-)#

elguille 17-07-2025 11:40:58

Cita:

Empezado por seccion_31 (Mensaje 566402)
:) por cierto a estas alturas, me gustaría saber cuantos están usando mi componente... por curiosidad.


el timer del que habla [matorral] fue una aportación de [Darkdudae]

+1 Muchísimas gracias a ti y a todos los colaboradores

Matorral 17-07-2025 11:41:00

Cita:

Empezado por seccion_31 (Mensaje 566401)
uuummm...

revisa en la web de la AEAT como estan esos registros.

Si en la WEB DE LA AEAT estan correctos (es decir no aparece subsanacion y no son primer registro), entonces sera un problema de proceso de la consulta y lo reviso. Dimelo. (mira tambien si en el XML subsanacion no esta ni primer registro)

(Yo no he proceso la consulta para obtener de vuelta esos valores, me fijo en otros campos, de ahi que quizas esten mal procesados)

Saludos !

Alguien podría indicar un link a la web de la AEAT para consultar los envíos a la plataforma de pruebas? En el mensaje nº 1 no lo encontre.

seccion_31 17-07-2025 12:56:41

Cita:

Empezado por Matorral (Mensaje 566411)
Alguien podría indicar un link a la web de la AEAT para consultar los envíos a la plataforma de pruebas? En el mensaje nº 1 no lo encontre.

https://preportal.aeat.es/PRE-Exteri...cturacion.html

ramherfer 17-07-2025 13:23:49

[quote=seccion_31;566402]:) por cierto a estas alturas, me gustaría saber cuantos están usando mi componente... por curiosidad.

Yo y no me cansaré de dar las gracias primero a ti y despues a todos aquellos que han colaborado para que funcione correctamente este magnífico componente.
De momento no he detectado ningún problema

Matorral 17-07-2025 16:15:18

Cita:

Empezado por seccion_31 (Mensaje 566422)

Buenas tardes¡¡

Acabo de comprobar los registros enviados y las dos columnas me aparecen en blanco (Subsanación y Sin registro previo). O sea, que el componente envía bien la información. :).

seccion_31 17-07-2025 19:04:44

Cita:

Empezado por Matorral (Mensaje 566428)
Buenas tardes¡¡

Acabo de comprobar los registros enviados y las dos columnas me aparecen en blanco (Subsanación y Sin registro previo). O sea, que el componente envía bien la información. :).

acabo de revisar y pasa lo que ya anuncie con otros tipos en este mismo hilo.

En tipos serializados esa importación de delphi NO permite saber si tiene valor asignado o no.

La solucion es modificar el tipo SubsanacionType = (S, N);

y dejarlo:

SubsanacionType = (stNone, S, N);

Y cambiar algo el codigo de proceso de Consulta y asi funciona correcto.

Esto pasa con otros tipos.

Pero me parece muy intrusivo.

¿alguna idea mejor?

Saludos !

seccion_31 17-07-2025 19:46:08

Cita:

Empezado por seccion_31 (Mensaje 566433)
acabo de revisar y pasa lo que ya anuncie con otros tipos en este mismo hilo.

En tipos serializados esa importación de delphi NO permite saber si tiene valor asignado o no.

La solucion es modificar el tipo SubsanacionType = (S, N);

y dejarlo:

SubsanacionType = (stNone, S, N);

Y cambiar algo el codigo de proceso de Consulta y asi funciona correcto.

Esto pasa con otros tipos.

Pero me parece muy intrusivo.

¿alguna idea mejor?

Saludos !

Alterando un poco el codigo del interface soap y publicando las funciones _Specified creo que ya funciona !

Saludos !


La franja horaria es GMT +2. Ahora son las 17:11:13.

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