Solucionado: Exportar todas las tablas en archivos separados

Estimados,

Luego de algunos dolores de cabeza logré hacer un JS que exporte todos los datos de todas las tablas, en un archivo separaddo CSV para luego editar. Se aceptan obviamente sugerencias de mejoras.

Adjunto el script


------------------------------- INICIO ------------------------------
// ExportarTodasLasTablas.js
// Todas las tablas del proyecto y heredados

// Importamos las clases que vamos a necesitar
importClass( “VTextFile” );
importClass( “VFile” );

// Inicializamos varibles

var tablas = “”;
var fichero = “”;
var senda = “c:/temp”;
var file = “”;

var theMainProject = theApp.mainProjectInfo();
var list = new VRegisterList(theRoot);

if ( theMainProject )
{

for( var nIndex=0; nIndex < theMainProject.allTableCount(); nIndex++ )
{

// Objeto vTableInfo de la tabla
var tableInfo = theMainProject.allTableInfo( nIndex );

// Obtengo el idRef. Notar que debe ser idRef y no al revés
var Ref = tableInfo.idRef();

// Asigno una lista a la tabla
var AsigOk = list.setTable(Ref);

if ( tableInfo )
{

// Montamos la cabecera
for( var field = 0; field < tableInfo.fieldCount(); field++ )
{
file += tableInfo.fieldId( field ).toLowerCase() ;
if ( tableInfo.fieldCount() - 1 > field )
file += “|”;
}

// Añadimos fin de línea
file += “\n”;

// Cargo la lista
var CargaOK = list.load(“ID”,[]);
var NumRegistros = list.size();

// Recorremos la lista montando el fichero
for( var reg=0; reg < NumRegistros; reg++ )
{

var register = list.readAt( reg );

if (register.isOK() )
{

for( var field = 0; field < tableInfo.fieldCount(); field++ )
{
file += register.fieldToString( field );
if ( field < tableInfo.fieldCount() - 1 )
file += “|”;
}
// Añadimos fin de línea
if ( reg < NumRegistros - 1 )
file += “\n”;
}
}

// Grabo el archivo

// Declaro el objeto archivo
var archivo = new VTextFile( “c:\temp\exportTablas\” + tableInfo.id() + “.csv”);
alert (archivo.fileName());

// Abro archivo
if ( archivo.open( VFile.OpenModeWriteOnly || VFile.OpenModeTruncate) )
{
archivo.write( file );

// Cierro
archivo.close();

}
else
{
// Si no ha sido posible abrir el fichero se muestra error
alert(“Error. No se ha podido generar el fichero.\n” + “\n” + archivo.error() + “\nFinaliza el proceso.”);

}

} // if (tableInfo)

} // for (bucle ntablas)

} // if (theMainProject)

----------------------------------- FIN ------------------------

Buen aporte amigo Spicer, habrá que probarlo.

Hola, buenos días.

No consigo hacer funcionar este script, lo he incluido en el proyecto y lo lanzo con un proceso, pero no hace nada.

¿ Hay que modificar el código js?

Muchas gracias.

He encontrado que hay que sustituir ciertos carácteres al pegar el código: las dobles comillas y el signo de la resta.
Se borra y se reescribe y con la ruta de los ficheros creada, empieza a funcionar.

Un saludo.

Hola Spicer. Por favor, ¿tienes una versión actualizada de tu script para “Exportar todas las tablas”? Aunque si corre, está exportando un revuelto de tablas en cada lista. ¿Existe alguna solución similar en el vERP que exporte todas las tablas de una vez? Te agradezco tu ayuda.

Por favor, ¿alguien tiene un proceso para Exportar todas las tablas a csv? No he podido con el tema :frowning:

Hola solucionamos.

Exportar todas las tablas de una Base de datos a CSV es una petición muy extraña. No le veo mucha utilidad. Hay muchos campos que no admiten exportación directa a CSV (objetos, fechas, punteros, …) ya que necesitan especificar la codificación de salida y otras cuestiones.

En cualquier caso, es un proceso muy sencillo, aunque es necesario unos conocimientos básicos de javascript y haberse leído bien la documentación del API.

Puedes probar con una sola tabla y una vez dominado el tema, extenderlo a varias tablas.

Saludos
Paco Satué

A casi todos mis clientes les realizan auditorías y les exigen backups de su información. Mi solución está en la nube, y no es la excepción.

A mis clientes les estuve pasando unos backups automáticos de la carpeta de datos de Velneo pero prefieren unos simples archivos .csv que puedan utilizar inmediatamente y sin depender de nadie.

Aunque no es la solución ideal, tener estos archivos planos (además de los backups de la base de datos) les brindaría una gran sensación de seguridad y además me facilitaría la comercialización de mi producto :smiley:

Mi aplicación no maneja campos especiales ni tampoco maneja datos masivos, así que los
archivos planos no serían demasiado grandes. Si alguien pudiera colaborarme con esta utilidad quedaría muy agradecido.

Lo que pienso es ejecutar un proceso automático que me exporte archivos por cada tabla, comprimir todo y que se envíe periódicamente a una carpeta de Dropbox del Cliente. Todo está resuelto; sólo estoy ilusionado es con un proceso que me exporte todo a archivos .csv.

No conozco mucho javascript y he estado bastante ocupado en estos días. Por eso he pedido la ayuda. Muchas gracias :blush: