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(codcomun="COMU0001", codempre="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.
Metadata
Release files for pysage50e 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| pysage50e-0.1.5-cp314-cp314-win_amd64.whl | CPython 3.14 | CPython 3.14 | Windows x86-64 | Details |
| pysage50e-0.1.5-cp313-cp313-win_amd64.whl | CPython 3.13 | CPython 3.13 | Windows x86-64 | Details |
| pysage50e-0.1.5-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| pysage50e-0.1.5-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| pysage50e-0.1.5-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
Total release size: 3.0 MB
Release files / pysage50e-0.1.5-cp314-cp314-win_amd64.whl
| Download URL | pysage50e-0.1.5-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 601.2 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e73bac617bf33416102a17a44a64730beb68fa941caa3b1015438fb95b06d805
|
|
BLAKE2b-256 checksum How to use checksums |
be7dca1bd1f9a7efa64a7312b073d044019786dc7e37eaa8e4d3ae723238a1dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / pysage50e-0.1.5-cp313-cp313-win_amd64.whl
| Download URL | pysage50e-0.1.5-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 588.8 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a9732313dd52f8c4185fb4d14e2dd6acf8655ee98f70a34822638d45add44a99
|
|
BLAKE2b-256 checksum How to use checksums |
ca406100a7208f933c4915bc7727474d9f7abc99e6db619ae9527a69f5823645
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / pysage50e-0.1.5-cp312-cp312-win_amd64.whl
| Download URL | pysage50e-0.1.5-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 591.5 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9b9b02002847618e7beb11fcfd3433a67c562c5acbbc27a495cb10c5a663eb48
|
|
BLAKE2b-256 checksum How to use checksums |
8fe5c81564ecd294674a0aefd50b5eba00e5cb317299340ca8085504c63515f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / pysage50e-0.1.5-cp311-cp311-win_amd64.whl
| Download URL | pysage50e-0.1.5-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 607.4 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
989aebeec8a9ef9dbdd32d99586085631ce6d9e58d5c3c6c252845a6da3cc054
|
|
BLAKE2b-256 checksum How to use checksums |
5d890cb71699ffb72fbc7f867d46bfa058d4ef9118f5ff9f4c6f66db7ef9e132
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / pysage50e-0.1.5-cp310-cp310-win_amd64.whl
| Download URL | pysage50e-0.1.5-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 604.7 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9cf5ecca0af15b09b0ab8e4559ea69533e2a0ed8f165e482d4b834d9e0f66873
|
|
BLAKE2b-256 checksum How to use checksums |
77e7d9908568b04bc4fad2d46b0a48568b4809920fd98cb7030de5106159461d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|