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

Uploaded CPython 3.14Windows x86-64

pysage50e-0.1.3-cp313-cp313-win_amd64.whl (582.6 kB view details)

Uploaded CPython 3.13Windows x86-64

pysage50e-0.1.3-cp312-cp312-win_amd64.whl (585.4 kB view details)

Uploaded CPython 3.12Windows x86-64

pysage50e-0.1.3-cp311-cp311-win_amd64.whl (597.7 kB view details)

Uploaded CPython 3.11Windows x86-64

pysage50e-0.1.3-cp310-cp310-win_amd64.whl (596.2 kB view details)

Uploaded CPython 3.10Windows x86-64

File details

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

File metadata

  • Download URL: pysage50e-0.1.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 594.7 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.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 32a6b385727e57150932f230e0eaa8bb8e4034a8eaddef14a6eacdb707c18ebd
MD5 090e353329574fd5be3dcc96a8abf869
BLAKE2b-256 fce8bc2a1dc2e7453b3d902402b3661b47abc6559a9d06dd4011e1acf76ec2a6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pysage50e-0.1.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 582.6 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.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 dd057786d6744770d230c85323f7d2ff4c1afa6e698861f80b1e2f2657b03b73
MD5 c40f590a6cc8eb5eff4729035a726f64
BLAKE2b-256 5f9291041694122d46317f3f74e31248d53174f245dfcecc655507d5fca88889

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pysage50e-0.1.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 585.4 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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 25d786a1e6965731e93dada90c15f686c5bfd15873572ecd7c61993730f97d84
MD5 06bfb2fabf60de74d30e4b04f098ca8e
BLAKE2b-256 4f0de5b4982945e8cba54a984006c0d5a7c07293cde01aec87199a520560014b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pysage50e-0.1.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 597.7 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.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fb0e0e2aa40c888b523d1266613c47da27227e3a24c452f5d7de7bd1f811cc68
MD5 5c750d33f0607e786e191256a0efc73e
BLAKE2b-256 f6c636df0316f426cbe05ff25db2b4576aabef1f146f54d85ad563a466d624ff

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pysage50e-0.1.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 596.2 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.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b0a1a3120dad06f6352e2ed62bce2ff22da4774d1abc6147783fd55097f84f92
MD5 37b43d5272fb84562295d219a235aa08
BLAKE2b-256 9ef479beee5439fa0fd696c50130e02c0a8b4bf2a32d48df8e02562f6e06a4da

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