API Python para interactuar con bases de datos Sage50 de forma sencilla y eficiente
Project description
pysage50e
Libreria Python para conectar con bases de datos de Sage 50 (SQL Server), construir consultas por ejercicio y transformar resultados de forma sencilla.
Esta version expone como API principal la clase apiSAGE50.
Que hace el codigo
- Carga y mantiene configuracion de conexion en
config.ini. - Lee datos del entorno Sage50 (terminal,
cfgclisrv.xml, comunes, empresa, ejercicios). - Conecta a SQL Server con autenticacion SQL o Windows (con fallback).
- Genera consultas multi-ejercicio con placeholders de Sage (
#,COMUNES!, etc.). - Ejecuta SQL y devuelve resultados en varios formatos:
- diccionario indexado (
sql_to_dict) - lista (
sql_to_list) - objeto tipo namespace (
sql_to_namespace)
- diccionario indexado (
- Incluye logging y excepciones especificas de dominio (
Sage50Error,Sage50ConnectionError, etc.). - Incluye UI con
PySimpleGUIpara asistentes de configuracion cuando faltan datos.
Instalacion
Con pip:
pip install pysage50e
Con uv:
uv pip install pysage50e
Requisitos
- Windows
- Python 3.10 a 3.14
- Instalacion de Sage50 operativa
- SQL Server accesible desde el equipo
- Driver ODBC configurado por Sage (
cfgclisrv.xml)
Dependencias runtime del paquete:
pyodbc>=5.0.0sqlparse>=0.4.0pysimplegui-4-foss>=4.60.4
Nota de distribucion binaria:
- Este paquete se distribuye en wheels binarios (
.pyd) por version de Python. - Para cubrir 3.10, 3.11, 3.12, 3.13 y 3.14 hay que generar/publicar un wheel por cada version.
Uso rapido
from pysage50e import apiSAGE50
api = apiSAGE50()
if not api.lconecto:
print(f"Error de conexion: {api.lasterror}")
else:
print(f"Comunes: {api.comunes}")
print(f"Empresa: {api.NomEmpresa}")
print(f"Ejercicio actual: {api.tbyear[-1]}")
Consultas SQL
1) Consulta simple con build_query
from pysage50e import apiSAGE50
api = apiSAGE50()
sql = api.build_query("SELECT TOP 10 CODIGO, NOMBRE FROM #articulo")
datos = api.sql_to_list(sql)
print(datos)
2) Resultado como diccionario indexado
sql = api.build_query("SELECT CODIGO, NOMBRE FROM #cliente")
clientes = api.sql_to_dict(sql, key_field="CODIGO")
print(clientes.get("00001"))
3) Resultado como objeto (namespace)
sql = api.build_query("SELECT TOP 1 CODIGO, NOMBRE FROM #cliente")
cli = api.sql_to_namespace(sql)
print(cli.CODIGO, cli.NOMBRE)
Especificación de ejercicios (years)
El query builder soporta selección por ejercicios con SAGE50year:
"*"o"@": Todos los ejercicios disponibles"+": Último ejercicio"+2023": Ejercicios desde 2023 en adelante"-": Primer ejercicio"-2022": Ejercicios hasta 2022[2021, 2022, 2023]: Lista explícita de Python (int, str o mixto)"2024"o2024: Ejercicio único (funciona con string o entero)
⚠️ Nota sobre años de cierre: Los ejercicios de cierre (identificados con
XQ, ej:2026XQ) se filtran automáticamente. Esto evita errores al consultar tablas vacías o inexistentes. Si necesitas acceder a un año de cierre específico, usa la sintaxis de lista:[2026, 2025].
Ejemplos de uso
# Todos los ejercicios
aprocesar = api.SAGE50year("*")
# Resultado: ['2020EJ', '2021EJ', '2022EJ', '2023EJ', '2024EJ']
# Último ejercicio
aprocesar = api.SAGE50year("+")
# Resultado: '2024EJ'
# Desde 2023 en adelante
aprocesar = api.SAGE50year("+2023")
# Resultado: ['2023EJ', '2024EJ']
# Primer ejercicio
aprocesar = api.SAGE50year("-")
# Resultado: '2020EJ'
# Hasta 2022
aprocesar = api.SAGE50year("-2022")
# Resultado: ['2020EJ', '2021EJ', '2022EJ']
# Lista explícita (int, str o mixto)
aprocesar = api.SAGE50year([2021, "2022", 2023])
# Resultado: ['2021EJ', '2022EJ', '2023EJ']
# Ejercicio único (string o int)
aprocesar = api.SAGE50year("2024")
# Resultado: '2024EJ'
aprocesar = api.SAGE50year(2024)
# Resultado: '2024EJ'
# Uso en query
sql = api.build_query("SELECT * FROM #facturas", aprocesar)
rows = api.sql_to_list(sql)
Recargar comunes/empresa
Puedes recargar el contexto activo:
api.recargar(comunes="COMU0001", empresa="01")
Logging y errores
El paquete exporta utilidades de logging y excepciones:
from pysage50e import (
log_info,
log_warning,
Sage50Error,
Sage50ConnectionError,
)
try:
api = apiSAGE50()
except Sage50ConnectionError as e:
log_warning(str(e), context="conexion")
except Sage50Error as e:
log_warning(str(e), context="general")
Configuracion
La libreria usa config.ini para persistir configuracion local.
Si faltan datos (terminal, servidor, autenticacion), puede abrir asistentes GUI para completarlos.
API publica principal
apiSAGE50
Soporte
- Email:
pysage50e@pablomalo.es
Licencia
Ver archivo LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pysage50e-0.1.4-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: pysage50e-0.1.4-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 604.8 kB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6a2d1eb3de07cb2543d45da038b2fae745386280d54319a27c21be36aa5d72e
|
|
| MD5 |
942127a4ecc4d285cfa3cdd785585b31
|
|
| BLAKE2b-256 |
3fda7d08725c1f547390e9932333c06a5bfb3dc6f79a5c244f16f9f06d9537ec
|
File details
Details for the file pysage50e-0.1.4-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: pysage50e-0.1.4-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 592.5 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58021f8ae472195522ab5fb7247593d9cfb9630306c1b34c9cb41c91ac88a5eb
|
|
| MD5 |
432c88b4fc2cfbe07f8389819e355e54
|
|
| BLAKE2b-256 |
454c7614e95bb0ca4ab05b1a3ea3fc0bd4167051fe4e4c17a89b8fe3cfcb9363
|
File details
Details for the file pysage50e-0.1.4-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: pysage50e-0.1.4-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 595.5 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6abe3ff8568baa43509d4bf10e6fa7da993042574ab33fcfcee6830b387a9c71
|
|
| MD5 |
67f657d608cd7208ac8abb7558f4053c
|
|
| BLAKE2b-256 |
fad85d527c020ae79f359d2cc679b68c0f2a27d2d72fce566c40204e5e336629
|
File details
Details for the file pysage50e-0.1.4-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: pysage50e-0.1.4-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 609.6 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff9029acfa5fca4642e8c3947c6cfecc4fabe8d3594a16b2a650094efe16ac2d
|
|
| MD5 |
866c8934e8be8e3c7ee461f9ce449e89
|
|
| BLAKE2b-256 |
26334004b68acdac1ca6a6a257b371e92ba5782ce7f896703c43c946476135b0
|
File details
Details for the file pysage50e-0.1.4-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: pysage50e-0.1.4-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 607.9 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df8d0881a9178e1ed108ad47b76671be7699f48a7576046afb516894f7ce18c1
|
|
| MD5 |
17bf8f873fe058cfb284d103142013d4
|
|
| BLAKE2b-256 |
40efb0e585bc645a1d0f573ee6d8955a0d8e0e7a413f8962fa40d2b1dbe1aebe
|