Skip to main content

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)
  • Incluye logging y excepciones especificas de dominio (Sage50Error, Sage50ConnectionError, etc.).
  • Incluye UI con PySimpleGUI para 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.0
  • sqlparse>=0.4.0
  • pysimplegui-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" o 2024: 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pysage50e-0.1.4-cp314-cp314-win_amd64.whl (604.8 kB view details)

Uploaded CPython 3.14Windows x86-64

pysage50e-0.1.4-cp313-cp313-win_amd64.whl (592.5 kB view details)

Uploaded CPython 3.13Windows x86-64

pysage50e-0.1.4-cp312-cp312-win_amd64.whl (595.5 kB view details)

Uploaded CPython 3.12Windows x86-64

pysage50e-0.1.4-cp311-cp311-win_amd64.whl (609.6 kB view details)

Uploaded CPython 3.11Windows x86-64

pysage50e-0.1.4-cp310-cp310-win_amd64.whl (607.9 kB view details)

Uploaded CPython 3.10Windows x86-64

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

Hashes for pysage50e-0.1.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e6a2d1eb3de07cb2543d45da038b2fae745386280d54319a27c21be36aa5d72e
MD5 942127a4ecc4d285cfa3cdd785585b31
BLAKE2b-256 3fda7d08725c1f547390e9932333c06a5bfb3dc6f79a5c244f16f9f06d9537ec

See more details on using hashes here.

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

Hashes for pysage50e-0.1.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 58021f8ae472195522ab5fb7247593d9cfb9630306c1b34c9cb41c91ac88a5eb
MD5 432c88b4fc2cfbe07f8389819e355e54
BLAKE2b-256 454c7614e95bb0ca4ab05b1a3ea3fc0bd4167051fe4e4c17a89b8fe3cfcb9363

See more details on using hashes here.

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

Hashes for pysage50e-0.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6abe3ff8568baa43509d4bf10e6fa7da993042574ab33fcfcee6830b387a9c71
MD5 67f657d608cd7208ac8abb7558f4053c
BLAKE2b-256 fad85d527c020ae79f359d2cc679b68c0f2a27d2d72fce566c40204e5e336629

See more details on using hashes here.

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

Hashes for pysage50e-0.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ff9029acfa5fca4642e8c3947c6cfecc4fabe8d3594a16b2a650094efe16ac2d
MD5 866c8934e8be8e3c7ee461f9ce449e89
BLAKE2b-256 26334004b68acdac1ca6a6a257b371e92ba5782ce7f896703c43c946476135b0

See more details on using hashes here.

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

Hashes for pysage50e-0.1.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 df8d0881a9178e1ed108ad47b76671be7699f48a7576046afb516894f7ce18c1
MD5 17bf8f873fe058cfb284d103142013d4
BLAKE2b-256 40efb0e585bc645a1d0f573ee6d8955a0d8e0e7a413f8962fa40d2b1dbe1aebe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page