Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Envío de registros y sus respuestas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-01-2025
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 162
Poder: 14
ramherfer Va por buen camino
Buenos días.
Como planteais el maldito control de flujo. En una instalacion monopuesto lo tengo, está claro, pero en una instalación multipuesto que funciona al libre albedrio y que cada usuario puede hacer facturas teniendo la misma serie de facturación, ya que los contadores están a nivel de ejercicio me está volviendo loco.
No se si la solución sería cada usuario un SIF distinto, envio independiente de un mismo (OT) y que cada uno envíe y encadene sus registros. Para esto creo que tambien cada usuario debería tener su serie de facturas y su propio servidor de envío.
A ver si me podeis echar un cable, un rayito de luz a esto.
Gracias.
Un saludo.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
  #2  
Antiguo 28-01-2025
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.214
Poder: 24
newtron Va camino a la fama
Cita:
Empezado por ramherfer Ver Mensaje
Buenos días.
Como planteais el maldito control de flujo. En una instalacion monopuesto lo tengo, está claro, pero en una instalación multipuesto que funciona al libre albedrio y que cada usuario puede hacer facturas teniendo la misma serie de facturación, ya que los contadores están a nivel de ejercicio me está volviendo loco.
No se si la solución sería cada usuario un SIF distinto, envio independiente de un mismo (OT) y que cada uno envíe y encadene sus registros. Para esto creo que tambien cada usuario debería tener su serie de facturas y su propio servidor de envío.
A ver si me podeis echar un cable, un rayito de luz a esto.
Gracias.
Un saludo.

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.
  #3  
Antiguo 28-01-2025
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 162
Poder: 14
ramherfer Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
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.
Claro que me sirve, es un comienzo de algo que me trae loco. Esto no se trata de elegancia, si no que sea funcional y funcione. ¡Gracias!
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
  #4  
Antiguo 29-01-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
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.


Cita:
Empezado por ramherfer Ver Mensaje
Claro que me sirve, es un comienzo de algo que me trae loco. Esto no se trata de elegancia, si no que sea funcional y funcione. ¡Gracias!
  #5  
Antiguo 29-01-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
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;
En el array resultado.facturas esta incluidas el resultado para cada factura.
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;
  #6  
Antiguo 31-01-2025
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 162
Poder: 14
ramherfer Va por buen camino
Es posible que me esté marcando todos los envios como incidencia.

Cita:
<RemisionVoluntaria xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<Incidencia>S</Incidencia>
</RemisionVoluntaria>
¿Como distingue los tickets de las facturas ordinarias?

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.
  #7  
Antiguo 31-01-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
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.
Tema Cerrado


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 02:55:31.


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
Copyright 1996-2007 Club Delphi