juanp, te cuento.
Lo cierto es que estuve dando bastantes vueltas para ver qué sistema me simplificaría más las cosas, y además y muy importante, no afectara al resto del funcionamiento del programa. Dado que tenemos bastantes cientos de usuarios registrados, y de momento sólo cinco o seis van a ser los que van a utilizarlo, por ello que no quiero que el tema del SII sea muy "intrusivo" en la interfaz. De este modo llegué a la conclusión de crear un registro único para todos los documentos y un menú "aparte" en el programa que sólo se activara si el usuario desea utilizar el SII.
De este modo tengo esta tabla
- Code: Select all Expand view RUN
DEFINE DATABASE SII NAME "Registro SII"
FIELD IDSII TYPE N LEN 6 BROWSE 1 NAME "Identificador para relacionar documentos con tabla SII"
FIELD FECHA TYPE D LEN 8 BROWSE 3 NAME "Fecha de la factura"
FIELD FECHAREC TYPE D LEN 8 BROWSE 4 NAME "Fecha de recepción del documento"
FIELD DOCUMENTO TYPE C LEN 30 BROWSE 5 NAME "Documento"
FIELD TIPODOC TYPE C LEN 50 BROWSE 6 NAME "Tipo Documento"
FIELD TIPOFAC TYPE C LEN 2 NAME "Tipo de factura"
FIELD TIPOFACL TYPE C LEN 100 BROWSE 7 NAME "Literal tipo de factura"
FIELD REGIMEN TYPE C LEN 2 NAME "Clave de regimen especial o trascendencia"
FIELD REGIMENL TYPE C LEN 100 BROWSE 8 NAME "Literal regimen especial o trascendencia"
FIELD SIIDESC TYPE C LEN 50 BROWSE 9 NAME "Descripción de la operación"
// Estados
FIELD MODIFICADO TYPE L LEN 1 BROWSE 10 NAME "Modificado"
FIELD BAJA TYPE L LEN 1 BROWSE 11 NAME "Marcado para baja"
FIELD ES_BAJA TYPE L LEN 1 BROWSE 12 NAME "Registro dado de baja"
FIELD ENVIADO TYPE L LEN 1 BROWSE 12 NAME "Registro enviado"
FIELD EXITO TYPE L LEN 1 BROWSE 13 NAME "Enviado con éxito"
// Registros de envio
FIELD CSV TYPE C LEN 50 NAME "Identificador CSV - Respuesta del SII"
FIELD VSII TYPE C LEN 10 NAME "Versión SII de la comunicación - Respuesta del SII"
FIELD ESTADOENV TYPE C LEN 50 NAME "Estado envío - Respuesta del SII"
FIELD TIMESTAMP TYPE C LEN 50 BROWSE 14 NAME "TimeStamp - Respueta del SII"
// Información extra
FIELD PARTIDA TYPE C LEN 13 NAME "Partida de la factura"
INDEX IDSII TO SII1
END DATABASE
En esta tabla el campo IDSII lo tengo creado también en facturas de compra y facturas de venta. Cuando se crea una factura, directamente creo un registro en la tabla SII con el mismo IDSII que no puede repetirse. Luego tengo una opción en el menú para acceder directamente a la tabla SII y de ahí hacer las operaciones de selección, envío y comprobación de resultados.
Básicamente el esquema de funcionamiento es :
- Creo factura : creo registro en SII
- Modifico factura : si SII->ENVIADO=.F. , dejo modificar, si SII->ENVIADO=.T. también dejo modificar pero aviso y marco el campo SII->MODIFICADO a .T.
- Borro factura : si SII->ENVIADO=.F., dejo borrar, si SII->ENVIADO=.T. también dejo borrar pero aviso y marco el campo SII->BAJA a .T.
De este modo cuando voy a hacer el envío al SII se los registros que tengo que añadir (ENVIADO=.F.), modificar (ENVIADO=.T. .AND. MODIFICADO=.T.) ó dar de baja (ENVIADO=.T. .AND. BAJA=.T.).
Con el resultado si va todo bien ya voy marcando , ENVIADO a .T. , EXITO a .T., pongo BAJA a .F. y ES_BAJA a .T. (esto último por tener claro si ya ha sido transmitido y dado de baja o si aún está pendiente de transmitir).
Por otro lado tengo otro fichero de líneas relacionado con la tabla SII donde guardo el resultado de la comunicación de cada registro de la tabla SII ya que pueden ser varios (alta, modificaciones varias, bajas ) De este modo se puede ver todo lo que ha pasado con cada factura.
Te pego un pantallazo que a veces se ve más claro porque menudo "tocho" me ha quedado