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(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.

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.5-cp314-cp314-win_amd64.whl (601.2 kB view details)

Uploaded CPython 3.14Windows x86-64

pysage50e-0.1.5-cp313-cp313-win_amd64.whl (588.8 kB view details)

Uploaded CPython 3.13Windows x86-64

pysage50e-0.1.5-cp312-cp312-win_amd64.whl (591.5 kB view details)

Uploaded CPython 3.12Windows x86-64

pysage50e-0.1.5-cp311-cp311-win_amd64.whl (607.4 kB view details)

Uploaded CPython 3.11Windows x86-64

pysage50e-0.1.5-cp310-cp310-win_amd64.whl (604.7 kB view details)

Uploaded CPython 3.10Windows x86-64

File details

Details for the file pysage50e-0.1.5-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pysage50e-0.1.5-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 601.2 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.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e73bac617bf33416102a17a44a64730beb68fa941caa3b1015438fb95b06d805
MD5 408a9e0408a221cf1b1ffaf89e665c72
BLAKE2b-256 be7dca1bd1f9a7efa64a7312b073d044019786dc7e37eaa8e4d3ae723238a1dd

See more details on using hashes here.

File details

Details for the file pysage50e-0.1.5-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pysage50e-0.1.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 588.8 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.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a9732313dd52f8c4185fb4d14e2dd6acf8655ee98f70a34822638d45add44a99
MD5 ec107c4e75f2861531f5375d00a46378
BLAKE2b-256 ca406100a7208f933c4915bc7727474d9f7abc99e6db619ae9527a69f5823645

See more details on using hashes here.

File details

Details for the file pysage50e-0.1.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pysage50e-0.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 591.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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9b9b02002847618e7beb11fcfd3433a67c562c5acbbc27a495cb10c5a663eb48
MD5 049ccdaf775b214be322f55fa3822e06
BLAKE2b-256 8fe5c81564ecd294674a0aefd50b5eba00e5cb317299340ca8085504c63515f7

See more details on using hashes here.

File details

Details for the file pysage50e-0.1.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pysage50e-0.1.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 607.4 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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 989aebeec8a9ef9dbdd32d99586085631ce6d9e58d5c3c6c252845a6da3cc054
MD5 362b94408ea390a9b7eb377a6b4fe2a6
BLAKE2b-256 5d890cb71699ffb72fbc7f867d46bfa058d4ef9118f5ff9f4c6f66db7ef9e132

See more details on using hashes here.

File details

Details for the file pysage50e-0.1.5-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pysage50e-0.1.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 604.7 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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9cf5ecca0af15b09b0ab8e4559ea69533e2a0ed8f165e482d4b834d9e0f66873
MD5 c34fb16290e5296bd73804f2c6e6aeda
BLAKE2b-256 77e7d9908568b04bc4fad2d46b0a48568b4809920fd98cb7030de5106159461d

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