jueves, 12 de marzo de 2020

Recuperar datos de Aranduka a Excel

En esta entrada voy a poner información sobre un programa que estoy desarrollando para recuperar todos los datos de mi aranduka y cargarlos al excel via consulta ODBC. (Open Database Connectivity)

Si bien el Aranduka al hacer la exportación del archivo zip, genera dos archivos de textos con la extensión xls, ingresos.xls y egresos.xls esta seria otra forma de acceder a los datos.

Para eso debo tener instalado el driver ODBC de SQLite3
El driver de ODBC se puede encontrar en http://www.ch-werner.de/sqliteodbc/

Diver64B

Después debo instalar este Driver y Listo puedo realizar las consultas.
Voy a crear la carpeta C:\IRP y voy a copiar ahi la base de datos del Aranduka, para saber donde esta la base de datos ver en:

Base de datos del Aranduka

Conecto con la base de datos que esta en C:\IRP.

Creo tres consultas, las guardo en un Recordset y le doy recuperar en tres hojas, a los que voy a llamar contribuyentes, Ingresos y Egresos.

La estructura de la tabla del Aranduka es esta:

Tiene 6 tablas


Ejecutamos 3 Consultas y tenemos:

Ingresos:



Egresos:



Y por último los contribuyentes:



El código fuente es muy sencillo en VBA:
Hay que poner en un libro las hojas , contribuyente, Ingresos y Egresos, abrir VBA manager, agregar un modulo y copiar lo siguiente en el modulo:

Sub Extre_datos()

Dim conn As Object, rst As Object

Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")

' OPEN CONNECTION
conn.Open "DRIVER=SQLite3 ODBC Driver;Database=C:\IRP\2018.db;"
strSQL = "SELECT * FROM egresos;"

' OPEN RECORDSET
rst.Open strSQL, conn, 1, 1

' OUTPUT TO WORKSHEET
Worksheets("Egresos").Range("A2").CopyFromRecordset rst
 
For n = 0 To (rst.Fields.Count - 1)
Sheets("Egresos").Cells(1, n + 1) = rst.Fields(n).Name
Next

Set rst = Nothing: 'Set conn = Nothing
'***********************************************************************

Set rst = CreateObject("ADODB.Recordset")

strSQL = "SELECT * FROM ingresos;"

' OPEN RECORDSET
rst.Open strSQL, conn, 1, 1

' OUTPUT TO WORKSHEET
Worksheets("Ingresos").Range("A2").CopyFromRecordset rst
 
For n = 0 To (rst.Fields.Count - 1)
Sheets("Ingresos").Cells(1, n + 1) = rst.Fields(n).Name
Next


'***********************************************************************

Set rst = CreateObject("ADODB.Recordset")

strSQL = "SELECT * FROM contribuyentes;"

' OPEN RECORDSET
rst.Open strSQL, conn, 1, 1

' OUTPUT TO WORKSHEET
Worksheets("Contribuyentes").Range("A2").CopyFromRecordset rst
 
For n = 0 To (rst.Fields.Count - 1)
Sheets("Contribuyentes").Cells(1, n + 1) = rst.Fields(n).Name
Next


' FREE RESOURCES
Set rst = Nothing: Set conn = Nothing

End Sub


La estructura de Egresos en SQL es esta :

CREATE TABLE "egresos" (
    "id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "ruc"    VARCHAR(30) NOT NULL,
    "periodo"    INTEGER NOT NULL,
    "fecha"    NUMERIC DEFAULT (datetime('now','localtime')),
    "fecha_carga"    DATE DEFAULT (datetime('now','localtime')),
    "tipo"    TEXT NOT NULL,
    "tipo_texto"    TEXT,
    "tipo_egreso"    VARCHAR(30),
    "tipo_egreso_texto"    TEXT,
    "datos"    TEXT,
    "valor"    NUMERIC,
    "fecha_bitacora"    DATE DEFAULT (datetime('now','localtime')),
    "relacionado_tipo_identificacion"    TEXT(30),
    "relacionado_identificacion"    TEXT(30),
    "relacionado_nombres"    TEXT(250),
    "clasificacion_egreso"    VARCHAR(2),
    "timbrado_numero"    NUMERIC,
    "timbrado_documento"    TEXT
);


Me parece extraño que el campo fecha sea NUMERIC, en lugar de DATE.

La estructura de la tabla Ingresos es esta:

CREATE TABLE "ingresos" (
    "id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "ruc"    VARCHAR(30) NOT NULL,
    "periodo"    INTEGER NOT NULL,
    "fecha"    NUMERIC DEFAULT (datetime('now','localtime')),
    "fecha_carga"    DATE DEFAULT (datetime('now','localtime')),
    "tipo"    TEXT,
    "tipo_texto"    TEXT,
    "tipo_ingreso"    VARCHAR(30),
    "tipo_ingreso_texto"    TEXT,
    "datos"    TEXT,
    "valor"    NUMERIC,
    "fecha_bitacora"    DATE DEFAULT (datetime('now','localtime')),
    "relacionado_tipo_identificacion"    TEXT(30),
    "relacionado_identificacion"    TEXT(30),
    "relacionado_nombres"    TEXT(200),
    "valor_gravado"    NUMERIC,
    "valor_no_gravado"    NUMERIC,
    "timbrado_numero"    NUMERIC,
    "timbrado_documento"    TEXT
);


También el campo fecha es NUMERIC, en lugar de DATE.

Cambien se podría hacer consulta para alterar datos y cargar directamente desde el excel, solo que hay un inconveniente hay un campo llamado datos que tiene datos al parecer encryptados com MD5.

La tabla de familiares a cargo es un misterio, no pude encontrar donde se guardan los datos de los familiares a cargo.


Power Query

Otra forma de ver seria con Power Query de Ms Excel, debo tener instalada tambien ODBC de Sqlite3.

La forma seria asi, creo un archivo de texto con la extension "dqy" en este caso para egreso seria Egresos.dqy que contenga lo siguiente.

XLODBC
1
DSN=SQLite3 Datasource;Database=%HOMEPATH%\AppData\Local\aranduka\db\aranduka.db;StepAPI=0;SyncPragma=NORMAL;NoTXN=0;Timeout=100000;ShortNames=0;LongNames=0;NoCreat=0;NoWCHAR=0;FKSupport=0;JournalMode=;OEMCP=0;LoadExt=;BigInt=0;JDConv=0;
SELECT egresos_0.id, egresos_0.ruc, egresos_0.periodo, egresos_0.fecha, egresos_0.fecha_carga, egresos_0.tipo, egresos_0.tipo_texto, egresos_0.tipo_egreso, egresos_0.tipo_egreso_texto, egresos_0.datos, egresos_0.valor, egresos_0.fecha_bitacora, egresos_0.relacionado_tipo_identificacion, egresos_0.relacionado_identificacion, egresos_0.relacionado_nombres, egresos_0.clasificacion_egreso, egresos_0.timbrado_numero, egresos_0.timbrado_documento  FROM egresos egresos_0


id    ruc    periodo    fecha    fecha_carga    tipo    tipo_texto    tipo_egreso    tipo_egreso_texto    datos    valor    fecha_bitacora    relacionado_tipo_identificacion    relacionado_identificacion    relacionado_nombres    clasificacion_egreso    timbrado_numero    timbrado_documento



Luego grabar el archivo Egresos.dqy, darle doble click y se abrirá en una planilla excel los datos de egresos, esto solo debe ser para visualizar sus datos, cualquier cambio que se haga en la planilla puede afectar sus datos.

No hay comentarios.:

Publicar un comentario

Facturas

  Calculadora de IVA Calculadora de IVA Ingrese el monto: IVA (10%): 0 Retención de I...