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)

newtron 10-02-2025 20:03:06

Cita:

Empezado por ramherfer (Mensaje 561914)
Hola buenas tardes.
A ver si alguien me puede dar un empujoncito con respecto a la anulación.
Tenemos el siguiente planteamiento:

Oper. NumFra Fecha Fra
ALTA F240001 21/01/2024
ALTA F240002 22/01/2024
BAJA F240001 21/01/2024
ALTA F240003 22/01/2024
ALTA F240004 22/01/2024
ALTA F240005 22/01/2024
ALTA F240006 22/01/2024

En la hoja excel lo tengo claro y lo veo y sin ningún problema. pero me lleva loco el tema de la anulación y ostras, no soy capaz de encaminarlo. Como orientais el asunto en la base de datos si la tabla tiene como índice principal NumFra y tenemos ya el registro de alta con el número F240001. Sería sencillo y básico botón derecho en el alta correspondiente y opción anual factura, automáticamente se duplica el registro con la operación de baja y su fecha, pero no llego ni a probarlo ya que automáticamente me daría registros duplicados en la tabla de cabecera de facturas.

Si alguno me diera una pista de como orientar el tema se lo agradecería. No pensaba utilizar el tema de anulación, pero creo que se va a dar el caso en más de una vez y me gustaría tenerlo previsto.

Disculpar mi torpeza.
Un saludo,


No sé cómo piensas orientar el tema de las bajas pero yo lo veo peliagudo. Primero te crea problemas para manejar ese dato en la misma tabla de facturas (como ya estás comprobando) y segundo que no creo que sea muy recomendable anular facturas.


Si te sirve de algo yo he optado por no dejar anular facturas y en cambio generar facturas rectificativas. A partir de una factura determinada que se quiera modificar por algún motivo creo en memoria una copia para hacer los cambios que se quieran y si se aceptan muevo la factura original a otra tabla y se queda la rectificada con un nuevo número de otra serie. Si lo que se quiere es directamente eliminar la factura lo que hago es un abono. Este proceso, como tantas cosas, es discutible pero creo que es legal y no me marea mucho el programa.


Saludos.

ramherfer 10-02-2025 20:05:52

Esto es como todo, en enviar pregunta y se aparece la iluminación divina....

Tratar el indice principal con un autoincrement y un secundario mantenido con número de factura. Pasa que no soy muy amigo de los autoincrement, pero como no afecta a los datos, me daría igual que este variara en cualquier momento y por cualquier motivo.
El problema es que no se a nivel de aplicación como me afectaría, en la busqueda de facturas.

J...r estoy encasquillado con el tema.

ramherfer 10-02-2025 20:13:00

Cita:

Empezado por newtron (Mensaje 561918)
No sé cómo piensas orientar el tema de las bajas pero yo lo veo peliagudo. Primero te crea problemas para manejar ese dato en la misma tabla de facturas (como ya estás comprobando) y segundo que no creo que sea muy recomendable anular facturas.


Si te sirve de algo yo he optado por no dejar anular facturas y en cambio generar facturas rectificativas. A partir de una factura determinada que se quiera modificar por algún motivo creo en memoria una copia para hacer los cambios que se quieran y si se aceptan muevo la factura original a otra tabla y se queda la rectificada con un nuevo número de otra serie. Si lo que se quiere es directamente eliminar la factura lo que hago es un abono. Este proceso, como tantas cosas, es discutible pero creo que es legal y no me marea mucho el programa.


Saludos.

Pues mira creo que tienes razón newtron, yo opté por esa opción en un principio, pero al verlo tan sencillo para el usuario, anular y volver a enviar un nuevo alta, "el empecinamiento creo que es mi mayor enemigo" y no me deja ver con claridad. Y creo que así se va a quedar, error -> abono y vuelta a empezar, que se fijen antes de facturar y ya vendrán mejores tiempos, e un mondo difichile!!, que nuestro trabajo no está pagado.

Gracias Darkdudae y Newtron por los aportes.

Neftali [Germán.Estévez] 11-02-2025 08:58:25

Cita:

Empezado por ramherfer (Mensaje 561914)
En la hoja excel lo tengo claro y lo veo y sin ningún problema. pero me lleva loco el tema de la anulación y ostras, no soy capaz de encaminarlo. Como orientais el asunto en la base de datos si la tabla tiene como índice principal NumFra y tenemos ya el registro de alta con el número F240001. Sería sencillo y básico botón derecho en el alta correspondiente y opción anual factura, automáticamente se duplica el registro con la operación de baja y su fecha, pero no llego ni a probarlo ya que automáticamente me daría registros duplicados en la tabla de cabecera de facturas.


Nosotros tenemos en la tabla de facturas un campo de ESTADO, que en un momento dado nos marca si la factura está ANULADA (y otros estados por los que puede pasar).
Por otro lado, tenemos una tabla de RegistrosDeFacturación, donde se almacena un registro por cada operación que se le realiza a una factura, y por lo tanto podemos tener varios registros (sobre la misma factura):

ALTA
MODIFICACION
MODIFICACION
ANULACION

Además, esa segunda tabla se puede consultar, para acceder rápidamente al "historial" de una factura y debe permitir descargar el RegistroDeFacturación de cada factura.


seccion_31 11-02-2025 13:48:53

Vamos a ver si entendi lo de las bajas, como creo que lo he entendido siempre. bajo la experiencia del SII

Las bajas son una factura mas para la AEAT, tiene su huella: la que tuvo durante el alta y encadenamiento.

Cuando das de alta una nueva siguiente a la baja la encadenas con ella y listo.

El lugar de la baja no se puede ocupar porque dara error 3000.

¿esto es asi? lo unico que tienes que marcar es un flag en el archivo de facturas que te indique cual es su estado, sin mas.

Saludos

Nota: gracias a la demo de darkdudae, el componente con total seguridad abandonara el servidor de mensajes, y pasara a funcionar bajo DLL. No hay que modificar nada en el código de los programas que usan el componente. La semana que viene lo publicare.

ramherfer 11-02-2025 14:34:52

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561925)
Por otro lado, tenemos una tabla de RegistrosDeFacturación, donde se almacena un registro por cada operación que se le realiza a una factura, y por lo tanto podemos tener varios registros (sobre la misma factura):

Además, esa segunda tabla se puede consultar, para acceder rápidamente al "historial" de una factura y debe permitir descargar el RegistroDeFacturación de cada factura.


Hola Germán. Esa segunda tabla podría tener esta estructura, partiendo los envios desde la misma

Código:

Id        N.Factura        Fec.Factura  Operacion        Notificada
1        FR250001        02/06/2025        A                  S
2        FR250002        02/07/2025        A                  S
3        FR250003        02/07/2025        A                  S
4        FR250003        02/07/2025        M                  S
5        FR250004        02/10/2025        A                  S                    Encadenada a la 3
6        FR250001        02/06/2025        B                  S                    Encadenada a la 4???
7        FR250005        02/11/2025        A                  S                    Encadenada a la 1???
8        FR250006        02/11/2025        A                  S                    Encadenada a la 6


Cita:

debe permitir descargar el RegistroDeFacturación de cada factura.
Esto me ha dejado muerto...
Gracias.

Neftali [Germán.Estévez] 11-02-2025 15:35:37

Cita:

Empezado por ramherfer (Mensaje 561933)
Hola Germán. Esa segunda tabla podría tener esta estructura, partiendo los envios desde la misma
...

Similar a la que tengo yo, aunque en la mía hay más campos.
Por ejemplo, en cada registro de facturación tengo el HASH, tengo el contenido del registro en formato XML,...

En esa tabla me lía un poco las fechas que has puesto.
En cuanto al encadenamiento, se va haciendo con el último RegistroDeFacturación generado, digamos de forma conológica (independientemente si lo último ha sido un alta, una subsanación o una anulación).


Cita:

Empezado por ramherfer (Mensaje 561933)
debe permitir descargar el RegistroDeFacturación de cada factura.

Digamos que tenemos una pantalla que muestra todos los registros de facturación dedicada a posibles inspecciones. Desde esa pantalla puedes buscar una fcatura y deberías ver su "historial" y su estado actual (todas sus operacion o registros de facturación); La mayoría aparecerán 1 vez como Alta aceptada, pero también podrás encontrar un Alta + Baja o Alta + Modificacion + Modificación + Baja,...

Y tal como pone la documentación se debe poder ver o descargar el registro de facturación (XML), por eso lo guardamos tal cual en un campo.

DarkDudae 11-02-2025 16:11:50

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561936)
Y tal como pone la documentación se debe poder ver o descargar el registro de facturación (XML), por eso lo guardamos tal cual en un campo.

Con el “registro de facturación” en XML te refieres a la respuesta que devuelve Hacienda o a una suerte de “Factura Electrónica” con los metadatos de la factura?

CarlosArjonomia 12-02-2025 09:50:01

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561936)
Similar a la que tengo yo, aunque en la mía hay más campos.
Por ejemplo, en cada registro de facturación tengo el HASH, tengo el contenido del registro en formato XML,...

En esa tabla me lía un poco las fechas que has puesto.
En cuanto al encadenamiento, se va haciendo con el último RegistroDeFacturación generado, digamos de forma conológica (independientemente si lo último ha sido un alta, una subsanación o una anulación).



Digamos que tenemos una pantalla que muestra todos los registros de facturación dedicada a posibles inspecciones. Desde esa pantalla puedes buscar una fcatura y deberías ver su "historial" y su estado actual (todas sus operacion o registros de facturación); La mayoría aparecerán 1 vez como Alta aceptada, pero también podrás encontrar un Alta + Baja o Alta + Modificacion + Modificación + Baja,...

Y tal como pone la documentación se debe poder ver o descargar el registro de facturación (XML), por eso lo guardamos tal cual en un campo.

No se si me he perdido algo, pero si le meto una huella incorrecta en el encadenamiento del registro anterior se lo traga sin error. ¿Es esto normal?.

Neftali [Germán.Estévez] 12-02-2025 15:17:32

Cita:

Empezado por DarkDudae (Mensaje 561939)
Con el “registro de facturación” en XML te refieres a la respuesta que devuelve Hacienda o a una suerte de “Factura Electrónica” con los metadatos de la factura?

El registro de facturación es el fichero XML que debemos generar para cada factura (en realidad uno para cada alta, modificación o anulación). Si estamos en Verifactu, ese fichero/XML se envía, si estamos en NO-Verifactu, ese XML se firma y se guarda.
En cualquier momento esos XML se deen poder acceder y descargar.

https://sede.agenciatributaria.gob.e...generales.html

seccion_31 12-02-2025 17:48:08

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561986)
El registro de facturación es el fichero XML que debemos generar para cada factura (en realidad uno para cada alta, modificación o anulación). Si estamos en Verifactu, ese fichero/XML se envía, si estamos en NO-Verifactu, ese XML se firma y se guarda.
En cualquier momento esos XML se deen poder acceder y descargar.

https://sede.agenciatributaria.gob.e...generales.html

bueno en el caso de verifactu en ese xml de envio no ira solamente 1 factura, pueden ir docenas.

Pienso que lo ideal a parte de quizas guardarlo en disco en una carpeta, con un nombre serializado, seria incluirlo en una tabla con un codigo y desde la factura(s) enlazarlo, con dos campos binarios, uno para el envio y otro la respuesta.

Saludos !

DarkDudae 12-02-2025 18:53:07

Cita:

Empezado por seccion_31 (Mensaje 561992)
bueno en el caso de verifactu en ese xml de envio no ira solamente 1 factura, pueden ir docenas.

Pienso que lo ideal a parte de quizas guardarlo en disco en una carpeta, con un nombre serializado, seria incluirlo en una tabla con un codigo y desde la factura(s) enlazarlo, con dos campos binarios, uno para el envio y otro la respuesta.

Saludos !

Es justo como lo estoy planteando yo en mi sistema.

Tengo una tabla llamada: verifactu_logcomunicaciones con la siguiente estructura:

Código:

ID (Autonumérico Entero)
FechaHora (TIMESTAMP)
XMLEnvio (BLOB comprimido con COMPRESS de MySQL)
XMLRespuesta (BLOB comprimido con COMPRESS de MySQL)
CSVRespuesta (VARCHAR)

Como al hacer un envío nos devuelve un CSV, y este CSV yo lo guardo en la tabla verifactu_registrofacturas cuando hago un envío, pues simplemente relaciono esos dos campos y ya tengo el XML de envío y de recepción de cada una de las facturas a nivel individual y/o colectivo.

bmfranky 12-02-2025 20:58:21

Cita:

Empezado por seccion_31 (Mensaje 561992)
bueno en el caso de verifactu en ese xml de envio no ira solamente 1 factura, pueden ir docenas.

Pienso que lo ideal a parte de quizas guardarlo en disco en una carpeta, con un nombre serializado, seria incluirlo en una tabla con un codigo y desde la factura(s) enlazarlo, con dos campos binarios, uno para el envio y otro la respuesta.

Saludos !

Hola, pero puedes perfectamente guardar solo el XML de la factura, no hace faltya que sea del envio completo, es mas lo que se guarda en el no verifactu es exactamente eso , solo el nodo RegistroAlta, por ejemplo.
Código:

<sum1:RegistroAlta xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
    <sum1:IDVersion>1.0</sum1:IDVersion>
    <sum1:IDFactura>
        <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura>
        <sum1:NumSerieFactura>12345678-G66</sum1:NumSerieFactura>
        <sum1:FechaExpedicionFactura>03-02-2025</sum1:FechaExpedicionFactura>
    </sum1:IDFactura>
    <sum1:NombreRazonEmisor>certificado uno telematicas</sum1:NombreRazonEmisor>
    <sum1:Subsanacion>N</sum1:Subsanacion>
    <sum1:RechazoPrevio>N</sum1:RechazoPrevio>
    <sum1:TipoFactura>R3</sum1:TipoFactura>
    <sum1:TipoRectificativa>I</sum1:TipoRectificativa>
    <sum1:FacturasRectificadas>
        <sum1:IDFacturaRectificada>
            <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura>
            <sum1:NumSerieFactura>12345600-G66</sum1:NumSerieFactura>
            <sum1:FechaExpedicionFactura>01-04-2024</sum1:FechaExpedicionFactura>
        </sum1:IDFacturaRectificada>
    </sum1:FacturasRectificadas>
    <sum1:FechaOperacion>03-02-2025</sum1:FechaOperacion>
    <sum1:DescripcionOperacion>fecha entrega</sum1:DescripcionOperacion>
    <sum1:Destinatarios>
        <sum1:IDDestinatario>
            <sum1:NombreRazon>certificado dos telematicas</sum1:NombreRazon>
            <sum1:NIF>89890002E</sum1:NIF>
        </sum1:IDDestinatario>
    </sum1:Destinatarios>
    <sum1:Desglose>
        <sum1:DetalleDesglose>
            <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
            <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
            <sum1:TipoImpositivo>4</sum1:TipoImpositivo>
            <sum1:BaseImponibleOimporteNoSujeto>10</sum1:BaseImponibleOimporteNoSujeto>
            <sum1:CuotaRepercutida>0.4</sum1:CuotaRepercutida>
        </sum1:DetalleDesglose>
        <sum1:DetalleDesglose>
            <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
            <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
            <sum1:TipoImpositivo>21</sum1:TipoImpositivo>
            <sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
            <sum1:CuotaRepercutida>21</sum1:CuotaRepercutida>
        </sum1:DetalleDesglose>
        <sum1:DetalleDesglose>
            <sum1:ClaveRegimen>05</sum1:ClaveRegimen>
            <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
            <sum1:TipoImpositivo>10</sum1:TipoImpositivo>
            <sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
            <sum1:CuotaRepercutida>10</sum1:CuotaRepercutida>
        </sum1:DetalleDesglose>
    </sum1:Desglose>
    <sum1:CuotaTotal>41.4</sum1:CuotaTotal>
    <sum1:ImporteTotal>241.4</sum1:ImporteTotal>
    <sum1:Encadenamiento>
        <sum1:RegistroAnterior>
            <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura>
            <sum1:NumSerieFactura>12345677-G33</sum1:NumSerieFactura>
            <sum1:FechaExpedicionFactura>15-04-2024</sum1:FechaExpedicionFactura>
            <sum1:Huella>C9AF4AF1EF5EBBA700350DE3EEF12C2D355C56AC56F13DB2A25E0031BD2B7ED5</sum1:Huella>
        </sum1:RegistroAnterior>
    </sum1:Encadenamiento>
    <sum1:SistemaInformatico>
        <sum1:NombreRazon>CERTIFICADO UNO TELEMATICAS</sum1:NombreRazon>
        <sum1:NIF>89890001K</sum1:NIF>
        <sum1:NombreSistemaInformatico>NombreSistemaInformatico</sum1:NombreSistemaInformatico>
        <sum1:IdSistemaInformatico>77</sum1:IdSistemaInformatico>
        <sum1:Version>1.0.03</sum1:Version>
        <sum1:NumeroInstalacion>383</sum1:NumeroInstalacion>
        <sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu>
        <sum1:TipoUsoPosibleMultiOT>N</sum1:TipoUsoPosibleMultiOT>
        <sum1:IndicadorMultiplesOT>N</sum1:IndicadorMultiplesOT>
    </sum1:SistemaInformatico>
    <sum1:FechaHoraHusoGenRegistro>2025-02-03T14:30:00+01:00</sum1:FechaHoraHusoGenRegistro>
    <sum1:TipoHuella>01</sum1:TipoHuella>
    <sum1:Huella>FF954378B64ED331A9B2366AD317D86E9DEC1716B12DD0ACCB172A6DC4C105AA</sum1:Huella>



Este es el ejemplo de la aeat.


Y de la respuesta lo mismo , puedes deserializar los nodosde la respuesta por separado y almacenar solo el resultado de ese nodo en particular.
Seleccionas el nodo correspondiente a tu factura.
Código:

<RespuestaLinea>
<IDFactura>
<IDEmisorFactura>89890001K</IDEmisorFactura>
<NumSerieFactura>12345677-G33</NumSerieFactura>
<FechaExpedicionFactura>15-04-2024</FechaExpedicionFactura>
</IDFactura>
<EstadoRegistro>AceptadoConErrores</EstadoRegistro>
<CodigoErrorRegistro>2004</CodigoErrorRegistro>
<DescripcionErrorRegistro>El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del sistema de la AEAT, admitiéndose un margen de error de: 120 segundos.</DescripcionErrorRegistro>
</RespuestaLinea>


seccion_31 13-02-2025 06:57:39

Cita:

Empezado por bmfranky (Mensaje 562000)
Hola, pero puedes perfectamente guardar solo el XML de la factura, no hace faltya que sea del envio completo, es mas lo que se guarda en el no verifactu es exactamente eso , solo el nodo RegistroAlta, por ejemplo.
Código:

<sum1:RegistroAlta xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
    <sum1:IDVersion>1.0</sum1:IDVersion>
    <sum1:IDFactura>
        <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura>
        <sum1:NumSerieFactura>12345678-G66</sum1:NumSerieFactura>
        <sum1:FechaExpedicionFactura>03-02-2025</sum1:FechaExpedicionFactura>
    </sum1:IDFactura>
    <sum1:NombreRazonEmisor>certificado uno telematicas</sum1:NombreRazonEmisor>
    <sum1:Subsanacion>N</sum1:Subsanacion>
    <sum1:RechazoPrevio>N</sum1:RechazoPrevio>
    <sum1:TipoFactura>R3</sum1:TipoFactura>
    <sum1:TipoRectificativa>I</sum1:TipoRectificativa>
    <sum1:FacturasRectificadas>
        <sum1:IDFacturaRectificada>
            <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura>
            <sum1:NumSerieFactura>12345600-G66</sum1:NumSerieFactura>
            <sum1:FechaExpedicionFactura>01-04-2024</sum1:FechaExpedicionFactura>
        </sum1:IDFacturaRectificada>
    </sum1:FacturasRectificadas>
    <sum1:FechaOperacion>03-02-2025</sum1:FechaOperacion>
    <sum1:DescripcionOperacion>fecha entrega</sum1:DescripcionOperacion>
    <sum1:Destinatarios>
        <sum1:IDDestinatario>
            <sum1:NombreRazon>certificado dos telematicas</sum1:NombreRazon>
            <sum1:NIF>89890002E</sum1:NIF>
        </sum1:IDDestinatario>
    </sum1:Destinatarios>
    <sum1:Desglose>
        <sum1:DetalleDesglose>
            <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
            <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
            <sum1:TipoImpositivo>4</sum1:TipoImpositivo>
            <sum1:BaseImponibleOimporteNoSujeto>10</sum1:BaseImponibleOimporteNoSujeto>
            <sum1:CuotaRepercutida>0.4</sum1:CuotaRepercutida>
        </sum1:DetalleDesglose>
        <sum1:DetalleDesglose>
            <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
            <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
            <sum1:TipoImpositivo>21</sum1:TipoImpositivo>
            <sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
            <sum1:CuotaRepercutida>21</sum1:CuotaRepercutida>
        </sum1:DetalleDesglose>
        <sum1:DetalleDesglose>
            <sum1:ClaveRegimen>05</sum1:ClaveRegimen>
            <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
            <sum1:TipoImpositivo>10</sum1:TipoImpositivo>
            <sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
            <sum1:CuotaRepercutida>10</sum1:CuotaRepercutida>
        </sum1:DetalleDesglose>
    </sum1:Desglose>
    <sum1:CuotaTotal>41.4</sum1:CuotaTotal>
    <sum1:ImporteTotal>241.4</sum1:ImporteTotal>
    <sum1:Encadenamiento>
        <sum1:RegistroAnterior>
            <sum1:IDEmisorFactura>89890001K</sum1:IDEmisorFactura>
            <sum1:NumSerieFactura>12345677-G33</sum1:NumSerieFactura>
            <sum1:FechaExpedicionFactura>15-04-2024</sum1:FechaExpedicionFactura>
            <sum1:Huella>C9AF4AF1EF5EBBA700350DE3EEF12C2D355C56AC56F13DB2A25E0031BD2B7ED5</sum1:Huella>
        </sum1:RegistroAnterior>
    </sum1:Encadenamiento>
    <sum1:SistemaInformatico>
        <sum1:NombreRazon>CERTIFICADO UNO TELEMATICAS</sum1:NombreRazon>
        <sum1:NIF>89890001K</sum1:NIF>
        <sum1:NombreSistemaInformatico>NombreSistemaInformatico</sum1:NombreSistemaInformatico>
        <sum1:IdSistemaInformatico>77</sum1:IdSistemaInformatico>
        <sum1:Version>1.0.03</sum1:Version>
        <sum1:NumeroInstalacion>383</sum1:NumeroInstalacion>
        <sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu>
        <sum1:TipoUsoPosibleMultiOT>N</sum1:TipoUsoPosibleMultiOT>
        <sum1:IndicadorMultiplesOT>N</sum1:IndicadorMultiplesOT>
    </sum1:SistemaInformatico>
    <sum1:FechaHoraHusoGenRegistro>2025-02-03T14:30:00+01:00</sum1:FechaHoraHusoGenRegistro>
    <sum1:TipoHuella>01</sum1:TipoHuella>
    <sum1:Huella>FF954378B64ED331A9B2366AD317D86E9DEC1716B12DD0ACCB172A6DC4C105AA</sum1:Huella>



Este es el ejemplo de la aeat.


Y de la respuesta lo mismo , puedes deserializar los nodosde la respuesta por separado y almacenar solo el resultado de ese nodo en particular.
Seleccionas el nodo correspondiente a tu factura.
Código:

<RespuestaLinea>
<IDFactura>
<IDEmisorFactura>89890001K</IDEmisorFactura>
<NumSerieFactura>12345677-G33</NumSerieFactura>
<FechaExpedicionFactura>15-04-2024</FechaExpedicionFactura>
</IDFactura>
<EstadoRegistro>AceptadoConErrores</EstadoRegistro>
<CodigoErrorRegistro>2004</CodigoErrorRegistro>
<DescripcionErrorRegistro>El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del sistema de la AEAT, admitiéndose un margen de error de: 120 segundos.</DescripcionErrorRegistro>
</RespuestaLinea>


Buenos dias,

Tecnicamente me gusta la idea, si x favor, me cedes el código para hacerlo lo incluyo en el componente, y que el usuario seleccione lo que desea archivar.

El componente ya no necesita de una aplicacion servidora, funciona bajo DLL, e incorpora bastantes cambios, incluyendo una demo muy mejorada. El fin de semana lo publicare. Las aplicaciones ya desarrolladas usandolo no van a necesitar cambio alguno.

Saludos !

Neftali [Germán.Estévez] 13-02-2025 09:24:07

Cita:

Empezado por seccion_31 (Mensaje 561992)
bueno en el caso de verifactu en ese xml de envio no ira solamente 1 factura, pueden ir docenas.


Ojo que son cosas diferentes.
RegistroDeFacturación: Nos referimos a la información referente a 1 factura (en formato XML), que va firmada o no dependiendo si estamos en Verifactu o no-verifactu.
Otra cosa es el envío (sólo en la modalidad verifactu). en el envío cómo han dicho pueden ir 1..1000 registros de facturación incluídos.

El RegistrodeFacturación es el que hay que guardar de forma obligatoria y debe ser accesible y descargable.

La información del envío, no es obligatorio guardarla, y cada uno puede decidir cómo y qué guardar (para luego gestionar toda esa lógica desde el programa). Si guardar todo el paquete (con las 1000 fcaturas), si guardar la respuesta en el formato que la da la AEAT, si guardar sólo los códigos,...

seccion_31 13-02-2025 09:48:14

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 562006)
Ojo que son cosas diferentes.
RegistroDeFacturación: Nos referimos a la información referente a 1 factura (en formato XML), que va firmada o no dependiendo si estamos en Verifactu o no-verifactu.
Otra cosa es el envío (sólo en la modalidad verifactu). en el envío cómo han dicho pueden ir 1..1000 registros de facturación incluídos.

El RegistrodeFacturación es el que hay que guardar de forma obligatoria y debe ser accesible y descargable.

La información del envío, no es obligatorio guardarla, y cada uno puede decidir cómo y qué guardar (para luego gestionar toda esa lógica desde el programa). Si guardar todo el paquete (con las 1000 fcaturas), si guardar la respuesta en el formato que la da la AEAT, si guardar sólo los códigos,...

Opcion 1:
Vale, sin intencion de hacerme el pesado, en tu opinion, (porque me acabo de enterar ahora) si guardamos todo el envio, asociado a cada factura, ¿estariamos cumpliendo? porque tecnicamente la informacion del registroDeFacturacion se encuentra alli. Encontrarla es tan facil como hacer una busqueda de texto.

Opcion 2:
Me gustaria poder sacar esa informacion del XML de envio, a ver si me podeis hacer llegar ese codigo ( bmfranky ) para incorporarlo.

¿Puedes por favor neftali resumir brevemente que es necesario guardar y disponer en un sistema verifactu? porque en el foro la informacion esta muy dispersa, para ver que le falta al componente y como incorporarlo.

gracias !

Neftali [Germán.Estévez] 13-02-2025 10:09:02

Extraído directamente de la documentación de la AEAT (cuestiones generales):
Capacidad de exportar los registros

Todos los sistemas informáticos de facturación producidos y comercializados deberán tener capacidad de exportar y transmitir en línea los registros de facturación. Cuando la modalidad elegida sea NO VERI* FACTU, en caso de que se requieran por parte de la Administración Tributaria dichos registros, los mismos podrán ser directamente enviados a través de un procedimiento simplificado y automatizado.


La transmisión:
Verifactu: La transmisión es inmediata
No-verifactu: deben implementar la transmisión de registros bajo requrimiento.


Capacidad de exportar.
Yo creo que no deja dudas, desde el programa hay que poder exportar un registro de facturación.
El cómo lo hagamamos ya es cuestión de cada uno.

Digamos que en nuestro programa tenemos FACTURAS, para cada factura sabemos que hay 1..N REGISTROSDEFACTURACION (alta, subsanación, anuulación).
Nosotros hemos barajado varias opciones:

* Desde la factura exportar todos los registros asociados a esa factura (1..N)
* Desde la facttura, acceder a sus registros de facturación (1..N) -es como ver el historial de las operaciones sobre esa factura- y desde ahí poder exportarlos 1 a 1.

Neftali [Germán.Estévez] 13-02-2025 10:12:39

Cita:

Empezado por seccion_31 (Mensaje 562007)
Opcion 1:
Vale, sin intencion de hacerme el pesado, en tu opinion, (porque me acabo de enterar ahora) si guardamos todo el envio, asociado a cada factura, ¿estariamos cumpliendo? porque tecnicamente la informacion del registroDeFacturacion se encuentra alli. Encontrarla es tan facil como hacer una busqueda de texto.

Opcion 2:
Me gustaria poder sacar esa informacion del XML de envio, a ver si me podeis hacer llegar ese codigo ( bmfranky ) para incorporarlo.


Yo creo que es más sencillo enfocarlo a cada registro de facturación que enfocarlo al envío.
Al grabar la factura DEBES generar el registro, por lo tanto creo que en ese momento es el punto fácil para guardarlo.

También puedes enfocarlo al envío, pero creo que es más complejo a la hora de recuperar los registros.
Pienso en que si has hecho varias operaciones sobre una factura (ALTA, SUBSANACION, ANULACION) si queres obtener todo la información de esa factura (y sus registros de facturación) vas a tener que ir navegando por diferentes envíos e ir extrayendo de cada uno de ellos el registro de facturación correspondiente a esa operación. Se puede hacer, pero creo que es más complejo.

seccion_31 13-02-2025 11:03:59

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 562009)
Yo creo que es más sencillo enfocarlo a cada registro de facturación que enfocarlo al envío.
Al grabar la factura DEBES generar el registro, por lo tanto creo que en ese momento es el punto fácil para guardarlo.

También puedes enfocarlo al envío, pero creo que es más complejo a la hora de recuperar los registros.
Pienso en que si has hecho varias operaciones sobre una factura (ALTA, SUBSANACION, ANULACION) si queres obtener todo la información de esa factura (y sus registros de facturación) vas a tener que ir navegando por diferentes envíos e ir extrayendo de cada uno de ellos el registro de facturación correspondiente a esa operación. Se puede hacer, pero creo que es más complejo.

Al grabar la factura, la coloco en el objeto de la AEAT y no puedo o no se, recuperar ese XML parcial hasta su envio.

El plan desde mi ignorancia es enviar, guardar el XML completo y mediante alguna funcion extraer cada registrodefacturacion procesado para las facturas aceptadas. Si alguien tiene ese codigo para extraer una seccion del XML dado el numSerie de la factura, me evitaria trabajo de investigacion, o que se quedara pendiente.

Con Darkduae estamos mejorando la demo y el parseo de la respuesta de la AEAT para cubrir mas casos.

Neftali [Germán.Estévez] 13-02-2025 11:19:29

Cita:

Empezado por seccion_31 (Mensaje 562016)
Al grabar la factura, la coloco en el objeto de la AEAT y no puedo o no se, recuperar ese XML parcial hasta su envio.


Creo que hay varios mensajes donde está cómo hacerlo.
Por ejemplo este, genera el registro con SOAP y en un momento dado extrae el XML del registro de facturación.
https://www.clubdelphi.com/foros/sho...postcount=1428

Código Delphi [-]
...
 try
   newNode := Factura.RegistroFacturacion.ObjectToSOAP( ARootNode, ARootNode, MOPToSoapDomConvert, 'RegistroFacturacionType',
   Swdsl,'T',[ocoDontPrefixNode,ocoDontPutTypeAttr], RefId  ); //ocoDontPrefixNode

   XML.DocumentElement := ARootNode;
   XML.XML.SaveToFile('RegistroFacturacion.xml',TEncoding.UTF8);
   XML.Active := False;

 Except
   On E : Exception do Begin
    Showmessage(E.Message);
    XML.DocumentElement := ARootNode;
    XML.XML.SaveToFile('RegistroFacturacionError.xml',TEncoding.UTF8);
    XML.Active := False;
 End;
 ...


La franja horaria es GMT +2. Ahora son las 06:21:58.

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