![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
Por si te sirve de algo la solución que yo he montado puede no ser la más elegante pero creo que es bastante simple y efectiva. Al emitirse una factura desde cualquier terminal se crea en una carpeta compartida un fichero .csv con la información de la factura y mi programa "enviador" lo que hace es estar atento a los ficheros que van apareciendo en esa carpeta, los va encolando por orden de llegada y los va enviando y borrando. De esta manera, en caso de problema y que todo se atasque sigo teniendo en la carpeta los ficheros pendientes de enviar. Saludos.
__________________
Be water my friend. |
|
#2
|
||||
|
||||
|
Cita:
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
|
#3
|
||||
|
||||
|
Buenos dias !
Crear una lista de facturas para enviar, ya sea en un csv u otro medio era tambien mi intencion, hasta la llegada del componente para D7. Pero con el componente y servidor para D7 la cosa cambia, al menos a mi modo de ver. Si tienes varios puestos enviando, cada uno arrancara su servidor B10. Cada terminal cuando haga una factura o ticket puede intentar enviar directamente el documento, sin mas desde D7: Eso si: Bloquear el momento de envío. (un Flag comun para todos los terminales) Enviar los documentos pendientes y el nuevo. Si lo envia Ok, perfecto, sino pasa a la lista de pendientes. (por el motivo que sea). Desbloquear envio Crear un formulario con los pendientes, y lanzarlo manualmente o mediante un timer, que envie. Cuando el formulario envia, de nuevo se bloquea mediante un flag, para que nadie mas pueda enviar. Desbloquear cuando se termina de enviar. Aunque parezca mas farragoso (explicado) pienso que es mas directo, porque todo queda dentro de la aplicación en D7 si se utiliza el componente del que va este hilo. Saludos En mi caso tras crear el documento, muestro la pantalla de pendientes, y realizo el envío. Y ya. (no hay mas). Luego le programare un timer, y lo mostrare al iniciar o cerrar la aplicacion. |
|
#4
|
||||
|
||||
|
Una vez enviado es muy sencillo cargar el resultado.
Este es un extracto del ejemplo incluido que carga desde la excel: Se envia, y se obtiene el resultado en el record resultado Si no se puede si quiera enviar, devuelve false, si hay envio devuelve true, y en resultado carga lo devuelto por la aeat Código:
if VeriFactuD7.envio(resultado) then // enviarlo !!
procesarEnvio(resultado) // procesar el resultado (mostrar en pantalla, y guardarlo en xmlFacturas)
else
begin
memoRes.lines.add('El Envio No Ha Podido Ser Realizado');
memoRes.lines.add(resultado.EstadoEnvio);
memoRes.lines.add(resultado.error);
end;
///////////////////////////////////////////////////////////
procedure TForm1.procesarEnvio(resultado:TResultadoEnvio);
var
desError,error,estado,factura, emisor:string;
j:integer;
_ok,_oke,_err:integer;
begin
memoXML.Lines.LoadFromFile(xmlEnvio);
memoXML.Text:=FormatXMLData(memoXML.Text);
memoRes.lines.clear;
memoRes.lines.Add('Se ha realizado el envío');
memoRes.Lines.Add('');
memoRes.Lines.Add('Estado Del Envio:'+resultado.EstadoEnvio );
memoRes.lines.Add('CSV: ' + resultado.CSV);
memoRes.lines.Add('TimeStamp: ' + resultado.Fecha+' '+resultado.Hora);
memoRes.Lines.Add('');
_ok :=0; // nº facturas OK
_oke :=0; // nº facturas OK ( pero aceptadas con errores )
_err :=0; // nº facturas con errores (no aceptadas)
for j:=0 to resultado.nFacturas-1 do
begin
factura := resultado.facturas[j].NumSerieFactura;
emisor := resultado.facturas[j].IDEmisorFactura;
estado := resultado.facturas[j].estado;
error := inttostr(resultado.facturas[j].errorcodigo);
desError := resultado.facturas[j].descripcionError;
memoRes.Lines.Add( factura + ' ' + estado + ' '+error+' '+desError ); // ver en pantalla
if resultado.facturas[j].OK then // Es correcto ó aceptado con errores
begin
// colocar el csv y huella en la factura
if facturasEnviadas.locate('emisor;NumSerieFactura',vararrayof([emisor, factura ]),[]) then
begin
FacturasEnviadas.edit;
FacturasEnviadas.fieldbyName('csv').text :=resultado.CSV;
FacturasEnviadas.FieldByName('huella').text :=resultado.facturas[j].huellaFactura;
FacturasEnviadas.fieldbyName('situacion').text:=estado;
FacturasEnviadas.post;
end;
if resultado.facturas[j].aceptadoConErrores then inc(_oke) else inc(_ok);
end
else
inc(_err); // Es erronea
end;
memoRes.Lines.Add('');
memoRes.Lines.Add('Facturas Aceptadas: '+inttostr(_ok) );
memoRes.Lines.Add('Facturas Aceptadas Con Errores: '+inttostr(_oke) );
memoRes.Lines.Add('Facturas Con Errores: '+inttostr(_err) );
// tiempo de espera:
if resultado.tiempoDeEspera<>'' then memoRes.Lines.Add('Se Ha Establecido Un Tiempo De Espera Proximo Envio De '+resultado.tiempoDeEspera);
end;
Solo hay que recorerlo y colocar los datos devueltos: Código:
for j:=0 to resultado.nFacturas-1 do
begin
factura := resultado.facturas[j].NumSerieFactura;
emisor := resultado.facturas[j].IDEmisorFactura;
estado := resultado.facturas[j].estado;
error := inttostr(resultado.facturas[j].errorcodigo);
desError := resultado.facturas[j].descripcionError;
|
|
#5
|
||||
|
||||
|
Es posible que me esté marcando todos los envios como incidencia.
Cita:
Venga muchas gracias, lo tengo implementado y ahora simplemente a pulir algunas cosas.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
|
#6
|
||||
|
||||
|
El componente distingue los tickets de las facturas, si se envían o no datos del cliente, con la factura. (El nif del cliente, debe estar en blanco para ser considerado un ticket).
Se marca con incidencia si la fecha de lo que estas enviando es distinta a la fecha del dia. Con solo una factura o ticket, fuera de fecha el envío es marcado con incidencia, porque no hay forma de hacerlo individualmente. ramherfer ¿cual ha sido tu experencia con la demo? ¿te ha costado mucho la implementacion? ¿has revisado que todo lo que estas enviando vaya bien? saludos ! Última edición por seccion_31 fecha: 31-01-2025 a las 13:37:09. |
|
#7
|
||||
|
||||
|
Cita:
Con respecto a la incidencia, el primer envío de hoy, faltaban datos (Descripción de la operacion -por error en el código de la aplicación-) y me ha dado error de envio, con lo cual el servidor indicaba un mensaje como "incidencia iniciada". Solucionada la incidencia y habiendo hecho el envío correcto, entiendo que habría que reiniciar el servidor, para que la incidencia se desactive. Las pruebas las estoy realizando con fecha de hoy todas y envio obedeciendo el tiempo marcado en la respuesta de la AEAT. Mi experiencia, "GENIAL".... MÁS QUE GENIAL. Funcionamiento sencillo y entendible cien por cien. Me faltaría estudiar un poco el codigo del servidor. ¿Que si me ha costado implementar? Menos de 5 días, ya que el equipo de desarrollo he tenido un problema con el disco duro y ante la duda la más peluda, lo he cambiado y he perdido 1 día de trabajo. El lunes creo que pusiste a disposición de todos esa MARAVILLA que has creado. Primero adapté la demo para trabajar con mis tablas y poder hacer envíos manuales de forma controlada. En segunda fase cuando todo estaba funcionando correctamente implementarlo ha sido muy, muy sencillo y lo tengo funcionando en la aplicación ya realizando pruebas iniciales y han funcionando correctamente. Me falta probar tickets y rectificativas, se que va a funcionar bien -seguro-. Las anulaciones de momento las descarto ya que trabajo directamente con las tablas y una factura numero 12345 de alta y 12345 baja pues como que no lo tengo muy claro. A nivel de control de Flujo hay una tabla (a nivel de empresa) con tres datos máximas_facturas_envio, tiempo_proximo_envio y envío_activo. Envio se activa al inicio de una transmisión, si cualquier terminal inicia otra transmisión queda encolada hasta que el envio_activo quede desactivado al finalizar el procedimiento ProcesarEnvio. Por otro lado la aplicación internamente comprueba que el número de facturas no sea igual a 1000 en cuyo caso inicia una transmisión de forma inmediata (1000 facturas mis clientes les cuesta un año hacerlas ) Pero por si algún caso se vuelven locos, está controlado. Imagino que te sonará la idea. Te tengo un monumento en mi puerta. Procesado el envío, envía un mensaje al registro SIF para que si está visible refresque la cola de envio y muestra una ventana con los resultados del último envio durante 20 segundos por si los quiere imprimir. A los 20 segundos se cierra la ventana de resultados de forma automática. Esto por configuración de empresa ya lo pondré de forma automática si se imprimen o no los resultados. Me falta implantar algunas utilidades (cotejamiento, Obtener QR, impresión de documentos, etc) desde el registro del SIF. Obtener el QR lo pongo por si algún caso ya que al finalizar el procedimiento ProcesarEnvio lo genero de forma automática y todo queda disponible para imprimir la(s) factura(s) cada una con su código QR. He variado los nombre de envío y resultados, anticipándole al nombre un timestamp (fecha,hora,minutos,segundos y milisegundos + nombre) quiero que lo guarde todo en la carpeta de cada ejercicio de la empresa. Aunque lo tenga la AEAT, mejor tener cada movimiento que realizo, por si algún tipo de duda. He estado comprobando las huellas que estén bien encadenadas y lo están. Me faltaría implantar algún proceso que vaya desde la última factura hacia atrás comprobando los datos de encadenamiento, pero esto es relativamente sencillo de hacer y lo implantaré en las próximas semanas. No tengo palabras y me faltaría vida, para poder agradecer tu aporte. Si encuentro alguna cosa que crea o vea que no funciona bien, rápidamente lo pongo. Por mi parte y con afán de ayuda, como a mi se me ayudó, cualquiera que tenga una duda sobre la demo u otras cuestiones comentadas, y mi conocimiento llega para poder ayudar, estaré encantado ya que considero que es lo mínimo que puedo hacer, dentro de mis posibilidades. Disculpar por la brasa y gracias Sección_31
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| 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 |
|