Saltar a contenido

Automatizar Sage 50 con scripts de S50Info

run ejecuta archivos Python con el contexto activo de S50Info. Úsalo para varias consultas, varias salidas, selección interactiva o una confirmación antes de una acción operativa.

Decide si necesitas un script

Situación Solución
Una consulta de diagnóstico s50info sql
Una exportación puntual s50info export
Varias operaciones relacionadas s50info run
Selección de datasets preparados s50info run script/ejemplo_lite_sage50bi.py
Revisión y posible vaciado de logs s50info run script/visualizar_log_analisis_excel_reseteo.py

Ejecutar archivos y carpetas

s50info run script/exportacion_articulos.py
s50info run script
s50info run

Cuando ejecutas una carpeta, un error no detiene los archivos siguientes. S50Info muestra cada fallo y devuelve un código de error al terminar si alguno falló.

Contexto disponible

S50Info inyecta el objeto proceso y funciones auxiliares. No necesitas duplicar la configuración de conexión.

Recurso Uso
proceso.query_to_dict(sql, ...) Ejecuta una consulta y devuelve una lista de diccionarios.
proceso.imprimir_diccionarios(datos, ...) Exporta a TXT, CSV, JSON, XML o XLSX.
proceso.samplebi(nombre, ...) Ejecuta un dataset preparado.
proceso.samples_disponibles() Lista los datasets disponibles.
proceso.seleccionar_samples() Abre el selector de datasets.
proceso.exportar_samples(nombres) Ejecuta varios datasets.
proceso.reset_log() Vacía logs; úsalo solo tras confirmación explícita.

Los scripts no heredan la garantía de solo lectura

El validador de lectura pertenece a los comandos sql y export. Los helpers de scripts no ofrecen esa garantía general. Revisa el código y los permisos antes de ejecutarlo.

datos = proceso.query_to_dict(
    "select codigo, nombre from #clientes",
    sqlyear="+",
)

if datos:
    proceso.imprimir_diccionarios(
        datos,
        formato="xlsx",
        nombre_archivo="clientes",
    )

Ejecuta el archivo con s50info run ruta/al/script.py para que reciba el contexto.

Ejemplo: exportar artículos

s50info run script/exportacion_articulos.py
Función Operación Salida
exportar_articulos_base() Último ejercicio. resultados/articulos_base.xlsx
exportar_articulos_por_year() Ejercicio ilustrativo 2025JX. resultados/articulos_2025JX.csv
exportar_articulos_multi_year_agrupados() Todos los ejercicios, agrupados por codigo. resultados/articulos_groupby.json
exportar_formatos_posibles() Último ejercicio en dos formatos. TXT y XML bajo resultados

Sustituye 2025JX por un ejercicio que exista en la salida de s50info info antes de ejecutar el ejemplo completo.

Ejemplo: seleccionar datasets preparados

s50info run script/ejemplo_lite_sage50bi.py

El ejemplo permite seleccionar uno o varios datasets y crea un XLSX por cada resultado correcto. Es una muestra técnica desde la CLI; Sage50BI sigue siendo la opción visual para usuarios finales.

Tecla Acción
Flechas arriba y abajo Mover el cursor.
Espacio Marcar o desmarcar.
T / N Seleccionar o deseleccionar todos.
Enter Confirmar.
Esc Cancelar.

Ejemplo: revisar y vaciar logs

s50info run script/visualizar_log_analisis_excel_reseteo.py

El script consulta log_analisis, crea resultados/log_analisis.xlsx y solicita confirmación. Solo llama a proceso.reset_log() si respondes s, si, y o yes; esa acción vacía tanto log_analisis como log_error.

Checklist antes de programarlo

  • El script se ejecuta con s50info run.
  • Las rutas son estables y el usuario puede escribir en el destino.
  • Los ejercicios y comunes corresponden al entorno de destino.
  • Las listas vacías y los errores tienen una recuperación definida.
  • Las acciones destructivas exigen una confirmación explícita.
  • La tarea se ha probado con el mismo usuario y carpeta del Programador de tareas.

Crear tu propio script

Estructura mínima

# mi_script.py
# No necesitas importar nada: S50Info inyecta 'proceso' automáticamente.

datos = proceso.query_to_dict(
    "select codigo, nombre from #clientes",
    sqlyear="+",
)

if datos:
    proceso.imprimir_diccionarios(
        datos,
        formato="xlsx",
        nombre_archivo="resultado",
    )
    print(f"Exportados {len(datos)} registros.")
else:
    print("Sin datos.")

Ejecutar

s50info run mi_script.py

Funciones disponibles

Función Descripción
proceso.query_to_dict(sql, sqlyear="+") Consulta y devuelve lista de diccionarios.
proceso.imprimir_diccionarios(datos, formato, nombre_archivo) Exporta a TXT, CSV, JSON, XML o XLSX.
proceso.samplebi(nombre) Ejecuta un dataset de Sage50BI.
proceso.samples_disponibles() Lista datasets disponibles.
proceso.seleccionar_samples() Selector interactivo de datasets.
proceso.exportar_samples(nombres) Ejecuta varios datasets.
proceso.reset_log() Vacía logs (usar solo con confirmación).

Consejos

  • Usa sqlyear="@" para procesar todos los ejercicios.
  • Guarda resultados en resultados/ para consistencia.
  • Incluye manejo de errores para entornos de producción.
  • Prueba primero con s50info sql antes de automatizar.

Siguiente paso

Vuelve a la referencia de comandos o consulta Resolver problemas.

Enviar incidencia