![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#341
|
||||
|
||||
Cita:
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
#342
|
||||
|
||||
La demo no se cómo se comporta con facturas no aceptadas y huellas. En su envío, luego lo miro
Elimina facturas.xml y comienza otras pruebas Saludos |
#343
|
||||
|
||||
La demo solo coloca y añade la huella en las facturas enviadas OK. El resto lo ignorara en su BD xml.
He tenido que modificar un poco el programa demo para que lo ordene cronologicamente bien. y envie como huella anterior la ultima aceptada. (que en una aplicacion real, seria la ultima generada). Como digo es una demo. Estas modificaciones iran en la version 3.0 |
#344
|
||||
|
||||
donde si tiene un error es en la anulacion (DLL)
en la 3.0 estara corregido pero si quereis corregirlo ya: uverifactuFuncs.pas (D10): reemplazar esta funcion: Código:
function anulacionfactura_verifactu(sesion:integer; cabecera:TVeriFactuInicio; indice:integer):RegistroFacturaType; var Factura : RegistroFacturaType; Destinatario : PersonaFisicaJuridicaType; ListaDestinatarios : Destinatarios; ListaDesglose : DesgloseType; DetalleDesglose : DetalleType; XSDatetime : TXSDatetime; j:integer; _huellaAnterior : string; facturaRegistro : TRegistrofactura; begin facturaRegistro:=sesiones[sesion].facturas[indice]; Factura := RegistroFacturaType.Create; Factura.RegistroAnulacion := RegistroAnulacion.Create; Factura.RegistroAnulacion.IDVersion := VersionType._1_0; Factura.RegistroAnulacion.IDFactura := IDFacturaExpedidaBajaType.Create; Factura.RegistroAnulacion.IDFactura.IDEmisorFacturaAnulada := cabecera.emisor.nifEmisor; Factura.RegistroAnulacion.IDFactura.NumSerieFacturaAnulada := facturaRegistro.numSerieFactura; Factura.RegistroAnulacion.IDFactura.FechaExpedicionFacturaAnulada := verifactuFecha( facturaRegistro.fechafactura ) ; // (dd-mm-yyyy) // Encadenamiento Factura.RegistroAnulacion.Encadenamiento := Encadenamiento2.Create; // ¿ es el primer registro ? if sesiones[sesion].facturas[indice-1].huella='' then Factura.RegistroAnulacion.Encadenamiento.PrimerRegistro:=PrimerRegistroCadenaType(0) // S else begin Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior:=EncadenamientoFacturaAnteriorType.Create; Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior.IDEmisorFactura :=cabecera.emisor.nifEmisor; Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior.NumSerieFactura :=sesiones[sesion].facturas[indice-1].numSerieFactura; Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior.FechaExpedicionFactura :=sesiones[sesion].facturas[indice-1].fechaFactura; Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior.Huella :=sesiones[sesion].facturas[indice-1].huella; end; // Sin registro previo: (anulacion de facturas fuera de verifactu) if sesiones[sesion].facturas[indice].sinregistroPrevio then Factura.RegistroAnulacion.SinRegistroPrevio:=SinRegistroPrevioType.S; // sistemaInformatico sistemaInformatico( cabecera, Factura ); //XSDatetime XSDatetime := TXSDatetime.Create; XSDatetime.UseZeroMilliseconds := False; XSDatetime.AsDateTime := Now; XSDatetime.Millisecond := 0; XSDatetime.UseZeroMilliseconds := False; XSDatetime.FractionalSeconds := 0; Factura.RegistroAnulacion.FechaHoraHusoGenRegistro := XSDatetime; // Formato: YYYY-MM-DDThh:mm:ssTZD (ej: 2024-01-01T19:20:30+01:00) (ISO 8601) // Huella facturaRegistro.Huella := GenerarHuella_anulacion_RegistroVerifactu( Factura.RegistroAnulacion ); sesiones[sesion].facturas[indice].huella:=facturaRegistro.Huella; Factura.RegistroAnulacion.TipoHuella := TipoHuellaType._01; Factura.RegistroAnulacion.Huella := facturaRegistro.Huella; // fin, devolver el objeto RegistroFacturacionAnulacionType creado desde la informacion contenida en el record TRegistroFactura (ver utiles.pas) result:=factura; end; |
#345
|
||||
|
||||
Cita:
Código:
<Encadenamiento> <RegistroAnterior> <IDEmisorFactura>25000000Z</IDEmisorFactura> <NumSerieFactura>37734AAA13D8E2D74A4FBDDAD7B34C4EA026C3112A80334FFEDC500ADFDE0128</NumSerieFactura> <FechaExpedicionFactura>04/04/2025</FechaExpedicionFactura> <Huella>37734AAA13D8E2D74A4FBDDAD7B34C4EA026C3112A80334FFEDC500ADFDE0128</Huella> </RegistroAnterior> </Encadenamiento> Le estoy pasando los parametros correctos, pero la simulación me graba esos datos en el registro de anulación. Estoy dando de baja una factura enviada ayer. En las altas funciona bien.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. Última edición por ramherfer fecha: Hace 3 Semanas a las 18:01:16. |
#346
|
||||
|
||||
Cita:
slds |
#347
|
||||
|
||||
Cita:
¡Gracias!
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
#348
|
||||
|
||||
nueva version 3.0
En espera de su publicacion Cita:
|
#349
|
||||
|
||||
Ya está publicada la versión 3.0 en el FTP del club.
__________________
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. |
#350
|
||||
|
||||
TRegistroFacturaStatus:
empezamos bien: para que funcione correctamente el tema del status segun la automatizacion ejecutada por el componente, algo que puede venir bien para documentar el registro, hay que cambiar esto en la unidad uverifactuFuncs (D10) y recompilar la DLL El resto de funciones estan correctas. Este cambio y otros apareceran la semana que viene en el 3.1 Código:
procedure clearStatus(sesion, indice:integer); begin sesiones[sesion].status[indice].exenta :=false; sesiones[sesion].status[indice].canarias :=false; sesiones[sesion].status[indice].sujetoPasivo:=false; sesiones[sesion].status[indice].cee :=false; sesiones[sesion].status[indice].exporta :=false; end; Código:
function altafactura_F1_F2_R4_R5_verifactu( sesion:integer; cabecera:TVeriFactuInicio; indice:integer ): RegistroFacturaType; var Factura : RegistroFacturaType; Destinatario : PersonaFisicaJuridicaType; ListaDestinatarios : Destinatarios2; ListaDesglose : DesgloseType; DetalleDesglose : DetalleType; XSDatetime : TXSDatetime; FacturaRegistro : TRegistroFactura; rectificadasArray : FacturasRectificadas2; rectificada : IDFacturaARType; j:integer; begin FacturaRegistro:=sesiones[sesion].facturas[indice]; clearStatus(sesion, indice); Factura := RegistroFacturaType.Create; Factura.RegistroAlta := RegistroAlta.Create; Factura.RegistroAlta.IDVersion := SistemaFacturacion.VersionType(0); Factura.RegistroAlta.NombreRazonEmisor := cabecera.emisor.NombreRazonEmisor; Factura.RegistroAlta.IDFactura := IDFacturaExpedidaType.Create; Factura.RegistroAlta.IDFactura.IDEmisorFactura := cabecera.emisor.nifEmisor; Factura.RegistroAlta.IDFactura.NumSerieFactura := facturaRegistro.numSerieFactura; Factura.RegistroAlta.IDFactura.FechaExpedicionFactura := verifactuFecha( facturaRegistro.fechafactura ) ; // (dd-mm-yyyy) Factura.RegistroAlta.DescripcionOperacion := facturaRegistro.DescripcionOperacion; if facturaRegistro.subsanacion then Factura.RegistroAlta.Subsanacion:=SubsanacionType.S; if facturaRegistro.rechazoPrevioExiste then Factura.RegistroAlta.RechazoPrevio:=RechazoPrevioType.S; if facturaRegistro.rechazoPrevioNoExiste then Factura.RegistroAlta.RechazoPrevio:=RechazoPrevioType.X; if facturaRegistro.refExterna<>'' then // informacion libre Factura.RegistroAlta.RefExterna := facturaRegistro.refExterna; // 1 destinatario (cliente): if facturaRegistro.clienteNIF<>'' then // es una factura con destinatario TIPO F1 begin if facturaRegistro.total<0 then Factura.RegistroAlta.TipoFactura := ClaveTipoFacturaType.R4 else Factura.RegistroAlta.TipoFactura := ClaveTipoFacturaType.F1; Destinatario := PersonaFisicaJuridicaType.Create; Destinatario.NombreRazon := facturaRegistro.cliente; // si no es españa puede ser comunitario o exportacion if facturaRegistro.clienteCodPais<>'ES' then begin Destinatario.IDOtro := IDOtroType.Create; Destinatario.IDOtro.CodigoPais := verifactu_codigoPais( facturaRegistro.clienteCodPais ); if facturaRegistro.clientetipoNIF<>'' then Destinatario.IDOtro.IdType := verifactu_tipoNIF ( facturaRegistro.clientetipoNIF ) else begin if CodpaisEuropea(facturaRegistro.clienteCodPais) then Destinatario.IDOtro.IdType :=PersonaFisicaJuridicaIDTypeType._02 else Destinatario.IDOtro.IdType :=PersonaFisicaJuridicaIDTypeType._06; end; Destinatario.IDOtro.ID := facturaRegistro.clienteNIF; end else Destinatario.NIF := facturaRegistro.clienteNIF; // España // El destinatario (cliente) a la lista (solo 1 cliente x factura) ListaDestinatarios:= destinatarios2.Create(); SetLength(ListaDestinatarios, 1); ListaDestinatarios[0] := Destinatario; Factura.RegistroAlta.Destinatarios := ListaDestinatarios; end else // Es un ticket o factura F2 con el cliente sin identificar begin if facturaRegistro.total<0 then Factura.RegistroAlta.TipoFactura := ClaveTipoFacturaType.R5 else Factura.RegistroAlta.TipoFactura := ClaveTipoFacturaType.F2; Factura.RegistroAlta.FacturaSinIdentifDestinatarioArt61d:=CompletaSinDestinatarioType.S; end; // Desglose de iva y exenciones: (Nacional, Comunitario, o Exportacion) ListaDesglose := DesgloseType.Create(); // Exenciones for j:=0 to facturaRegistro.nexentas-1 do // x cada exencion begin if (facturaRegistro.exenta[j].baseImp<>0)and(facturaRegistro.exenta[j].tipoExenta<>'') then begin DetalleDesglose:= DetalleType.Create; if facturaRegistro.exenta[j].claveRegimen<>'' then DetalleDesglose.ClaveRegimen :=codigoTrascendencia_verifactu( facturaRegistro.exenta[j].claveRegimen); if facturaRegistro.exenta[j].calificacionOperacion<>'' then DetalleDesglose.CalificacionOperacion:=codigoCalificacion_verifactu( facturaRegistro.exenta[j].calificacionOperacion ); DetalleDesglose.OperacionExenta :=codigoExenta_verifactu(facturaRegistro.exenta[j].tipoExenta); DetalleDesglose.BaseImponibleOimporteNoSujeto := NumeroVeriFactu( facturaRegistro.exenta[j].baseImp ); sesiones[sesion].status[indice].exenta:=true; // colocar el desglose en la lista SetLength( ListaDesglose, Length(ListaDesglose) +1 ); ListaDesglose[ High(ListaDesglose ) ] := DetalleDesglose ; end; end; // IVA for j:=0 to facturaRegistro.nivas-1 do // x cada iva: Begin DetalleDesglose := DetalleType.Create; DetalleDesglose.ClaveRegimen := IdOperacionesTrascendenciaTributariaType._01; // Tipo de calificacion y exenta segun pais if facturaRegistro.clienteCodPais='ES' then // España: begin if not facturaRegistro.canarias then // Si no es canarias: begin // ¿inversion del sujeto pasivo? if NOT facturaRegistro.inversionSujetoPasivo then // Factura Normal begin DetalleDesglose.CalificacionOperacion := CalificacionOperacionType.S1; DetalleDesglose.TipoImpositivo := NumeroVeriFactu( facturaRegistro.iva[j].iva ); DetalleDesglose.CuotaRepercutida := NumeroVeriFactu( facturaRegistro.iva[j].impiva ); if facturaRegistro.iva[j].req<>0 then // ¿ lleva recargo de equivalencia ? begin DetalleDesglose.ClaveRegimen :=IdOperacionesTrascendenciaTributariaType._18; DetalleDesglose.TipoRecargoEquivalencia := NumeroVeriFactu( facturaRegistro.iva[j].req ); DetalleDesglose.CuotaRecargoEquivalencia := NumeroVeriFactu( facturaRegistro.iva[j].impreq ); end; end else // Con inversion del sujeto pasivo begin sesiones[sesion].status[indice].sujetopasivo :=true; DetalleDesglose.CalificacionOperacion := CalificacionOperacionType.S2; DetalleDesglose.TipoImpositivo := NumeroVeriFactu( 0 ); DetalleDesglose.CuotaRepercutida := NumeroVeriFactu( 0 ); end; end else // caso especifico Canarias ceuta y melilla entrega de bienes begin DetalleDesglose.ClaveRegimen := IdOperacionesTrascendenciaTributariaType._02; DetalleDesglose.OperacionExenta := OperacionExentaType.E2; end; end else // exportacion o comunidad Europea begin DetalleDesglose.OperacionExenta:= verifactu_tipoDesglose( facturaRegistro.clienteCodPais ); if DetalleDesglose.OperacionExenta=OperacionExentaType.E5 then // UE begin sesiones[sesion].status[indice].cee:=true; DetalleDesglose.ClaveRegimen := IdOperacionesTrascendenciaTributariaType._01; end; if DetalleDesglose.OperacionExenta=OperacionExentaType.E2 then // Exportacion fuera de la UE begin sesiones[sesion].status[indice].exporta:=true; DetalleDesglose.ClaveRegimen := IdOperacionesTrascendenciaTributariaType._02; end; end; // Base Imponible DetalleDesglose.BaseImponibleOimporteNoSujeto := NumeroVeriFactu( facturaRegistro.iva[j].baseImp ); // colocar el desglose en la lista SetLength( ListaDesglose, Length(ListaDesglose) +1 ); ListaDesglose[ High(ListaDesglose ) ] := DetalleDesglose ; end; // asignar los desgloses de iva recien creados, al objeto de factura: Factura.RegistroAlta.Desglose:= ListaDesglose; // totales de factura ¿inversion sujeto pasivo? if NOT facturaRegistro.inversionSujetoPasivo then // Factura Normal begin Factura.RegistroAlta.CuotaTotal := NumeroVeriFactu( facturaRegistro.cuotatotal ) ; Factura.RegistroAlta.ImporteTotal := NumeroVeriFactu( facturaRegistro.total ); end else begin Factura.RegistroAlta.CuotaTotal := NumeroVeriFactu( 0 ); // inversion sujeto pasivo Factura.RegistroAlta.ImporteTotal := NumeroVeriFactu( facturaRegistro.iva[0].baseImp ); end; // factura rectificada: (1 x factura) if facturaRegistro.total <0 then begin setLength(rectificadasArray,1); rectificada:=IDFacturaARType.Create; rectificada.IDEmisorFactura :=cabecera.emisor.nifEmisor; rectificada.NumSerieFactura :=facturaRegistro.facturaRectificada; rectificada.FechaExpedicionFactura:=facturaRegistro.fechaFacturaRectificada; rectificadasArray[0]:=rectificada; Factura.RegistroAlta.FacturasRectificadas :=rectificadasArray; Factura.RegistroAlta.TipoRectificativa :=ClaveTipoRectificativaType(1); end; // Encadenamiento con factura anterior Factura.RegistroAlta.Encadenamiento := Encadenamiento3.Create; // ¿ es el primer registro ? if sesiones[sesion].facturas[indice-1].huella='' then Factura.RegistroAlta.Encadenamiento.PrimerRegistro:=PrimerRegistroCadenaType(0) // S else begin // no es el primer registro, colocar encadenamiento anterior Factura.RegistroAlta.Encadenamiento.RegistroAnterior:=EncadenamientoFacturaAnteriorType.Create; Factura.RegistroAlta.Encadenamiento.RegistroAnterior.IDEmisorFactura :=cabecera.emisor.nifEmisor; Factura.RegistroAlta.Encadenamiento.RegistroAnterior.NumSerieFactura :=sesiones[sesion].facturas[indice-1].numSerieFactura; Factura.RegistroAlta.Encadenamiento.RegistroAnterior.FechaExpedicionFactura :=sesiones[sesion].facturas[indice-1].fechaFactura; Factura.RegistroAlta.Encadenamiento.RegistroAnterior.Huella :=sesiones[sesion].facturas[indice-1].huella; end; // sistemaInformatico sistemaInformatico( cabecera, Factura ); // XSDatetime XSDatetime := TXSDatetime.Create; XSDatetime.UseZeroMilliseconds := False; XSDatetime.AsDateTime := Now; XSDatetime.Millisecond := 0; XSDatetime.UseZeroMilliseconds := False; XSDatetime.FractionalSeconds := 0; Factura.RegistroAlta.FechaHoraHusoGenRegistro := XSDatetime; // Formato: YYYY-MM-DDThh:mm:ssTZD (ej: 2024-01-01T19:20:30+01:00) (ISO 8601) // Huella Factura.RegistroAlta.TipoHuella := TipoHuellaType._01; Factura.RegistroAlta.Huella := GenerarHuella_alta_RegistroVerifactu(sesion,indice,Factura.RegistroAlta); sesiones[sesion].facturas[indice].huella:=Factura.RegistroAlta.Huella; // fin, devolver el objeto registroFacturaType.RegistroAlta creado desde la informacion contenida en el record TRegistroFactura (ver utiles.pas) result:=factura; end; |
#351
|
||||
|
||||
Generacion de huella
este es un tema sobre el que tengo dudas. el componente, genera la huella durante el envio de la factura. Si enviamos en el momento de hacer la factura, no hay problema. La huella generada coincide con la generacion de la factura. Si la factura no pasa (por motivos tecnicos, fallo de la AEAT o de internet), no se cambia nada de la factura, y se reenvia de nuevo, se generara otra huella con la fecha y hora actualizadas. Que podria diferir del momento de la generacion de la factura. ( Eso si: si la fecha de la factura es distinta a la actual se activara el flag de incidencia, pero con una fecha de generacion de registro actual que NO coincidira con la fecha de la factura ) |
#352
|
||||
|
||||
Cita:
Es como lo entiendo y veo. Por favor corregirme si estoy en un error. Un saludo,
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
#353
|
||||
|
||||
Cita:
Yo creo que, aunque no se pueda enviar la factura por lo que sea, la huella no habría que cambiarla. La factura se ha emitido en un momento determinado y eso no se debería de cambiar. Yo en particular no cambio absolutamente nada de la factura aunque la envíe más tarde, lo único es el parámetro de incidencia si veo que se retrasa más de lo estipulado. Saludos.
__________________
Be water my friend. |
#354
|
||||
|
||||
Cita:
hare pruebas, en principio se me ha ocurrido: 1) un evento que se enviara al calcular la huella de una factura, asi pase lo que pase, siempre se podra guardar, y/o bien al añadir la factura. (ya hay una funcion sin uso, que podria hacer eso) (es mas seguro guardar la huella antes del envio, que recogerla tras el envio como se hace ahora) 2) al añadir la factura, se adjunta la huella archivada (lo cual indicaria de facto una incidencia), o no se adjunta, lo cual indicaria que es la primera vez que se intenta enviar, por tanto se enviara el evento. 3) enviar con incidencia o no segun ocurra. Saludos ! Última edición por seccion_31 fecha: Hace 3 Semanas a las 21:03:30. |
#355
|
|||
|
|||
capicom
como hacemos si no usamos capicom para los certificados, de que forma puedo indicar el certificado y el password para poder transmitir la factura a la aeat.
No hay posibilidad de decirle nombre de certificado y password ????? |
#356
|
||||
|
||||
Cita:
en passwordcertificado pues eso. |
#357
|
||||
|
||||
Ya esta todo prácticamente modificado. Para que funcione en esos "envios fallidos".
Pero.. una pregunta mas El encadenamiento de esa factura reenviada, contra que se hace? ¿El encadenamiento original de cuando se genero el registro? ¿o el nuevo encadenamiento del registro anterior? Saludos ! |
#358
|
||||
|
||||
Cita:
Yo creo que ese comportamiento es erróneo según la documentación. Creo que la huella dela factura, los encadenamientos, los QR,... se deben generar en el momento de crear la factura, independientemente de cuando se envíe. Si por lo que sea el envío no puede hacerse, el sistema debe seguir funcionando de forma "normal". Perdonad, si no estáis refiriéndoos a esto y estoy "meando fuera de tiesto".
__________________
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. |
#359
|
||||
|
||||
Fecha a Guardar Encadenamieno
Cita:
Cita:
Hola, lo que teneis que tener en cuenta es que el dato Código:
<FechaHoraHusoGenRegistro> Se validará que la FechaHoraHusoGenRegistro sea menor o igual que la fecha del sistema de la AEAT, admitiéndose un margen de error. En caso de superar el umbral, se devolverá un aviso de error (no generará rechazo). No pide la fechaca hora del envio, el envio puede ser despues, por varios motivos, incluso no haber envio, si estamos en no Verifactu. Por logica se tiene que guardar en el momento de emitir/crear la factura/registro, no en el momento del envio, tampoco se puede modificar y "Siempre", consultar los datos del ultimo HASH, del encadenamiento para continuar con la cadena, sea de lo que sea, porque si encadenamos las acciones, hemos de encadenar con su cadena independiente a los de registros de facturacion. Si a lo que te refieres es si se ha de cambiar el encadenamiento , no de ningun modo, el encadenamiento se refiere a cada registro. Código:
<RegistroAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd"> xxxxx xxxxx </RegistroAlta> Asignando en la cabecera , si ha habido algun error, etc... Espero que entre todos lo dejemos mas claro.
__________________
Uno se alegra de ser útil. (Isaac Asimov) Última edición por bmfranky fecha: Hace 3 Semanas a las 14:09:02. Razón: Nodo equivocado |
#360
|
||||
|
||||
gracias por las aclaraciones
En la proxima actualizacion sera posible enviar una factura con su huella original y anterior original. si han pasado mas de 2 minutos desde la huella proporcionada, marcara como incidencia ese envio. ¿ ese tiempo de 2 minutos esta bien ? En principio la forma de trabajar con el componente sería, de forma simplificada. INICIO 1) hago una factura 2) inmedatamente la envio, (con exito, o no, me da lo mismo, igual que imprimo la envio) 3) obtendre su huella, la archivo en la factura 4) proceso el envio (si es posible, podria ser que no, debido a causas externas, si es posible guardo el csv ) FIN ADICIONALMENTE: 1) Crear una lista de facturas pendientes de envio 2) Enviarlas en cuanto sea posible, reutilizando esa huella y huella anterior almacenada Creo que el proceso cumple. Para procesos de facturacion individuales. Con este tema, creo que queda cerrado ya todos los flecos a falta de probarlo. Su implementacion en los que lo esten usando sera muy simple. gracias ! Nota: en mi caso particular, ni pregunto, ni hago pausas, se pulsa el boton de facturar y se envia la factura, despues se imprime. por tanto generacion del registro y envio van de la mano. Si el envio NO se completa, queda archivada la huella que sera reutilizada en su reenvio. Última edición por seccion_31 fecha: Hace 3 Semanas a las 14:52:46. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Verifactu o por requerimiento (no-verifactu) ¿decisión del usuario? | Maska10 | Temas legales | 2 | 07-12-2024 12:34:47 |
Demo de una applicación para una estación de enfermera con RAD Studio | AgustinOrtu | La Taberna | 1 | 21-07-2015 17:41:35 |
Demo Delphi, EMail | Caral | Internet | 1 | 19-12-2006 00:37:56 |
Demo de delphi 2005 | mazinger | Varios | 2 | 18-12-2004 09:23:09 |
El Rave que viene con Delphi es una Demo? | apicito | Impresión | 0 | 04-06-2003 11:33:36 |
![]() |
|