SGCG

…esto no es un subtítulo…

Ir a: contenido categorías calendario archivo suscripción

Volver arriba

Ejemplos de uso de los bindings de Python de Gnucash (2): movimiento masivo de asientos

2026-07-30

He aprendido a hacer cuatro cosas con los bindings de Python del programa de contabilidad Gnucash. Una cosa que puede hacerse es mover masivamente el debe o el haber de muchos asientos de una cuenta a otra, que es algo que puede ser útil si queremos enmendar alguna decisión desafortunada a la hora de hacer anotaciones en nuestra contabilidad doméstica. He aquí unas instrucciones válidas para Gnucash 5 y Python 3 y un programa de ejemplo.

Trabajando con Gnucash 5 en Python 3

Lo que necesitamos para trabajar con un libro de cuentas está en el módulo gnucash. Podemos importarlo así:

import gnucash

Lo primero que hay que hacer es abrir una sesión. Digamos que tenemos un libro de cuentas, contabilidad.gnucash; podemos abrirlo así:

session = gnucash.Session("contabilidad.gnucash") book = session.book root = book.get_root_account()

Así hemos abierto una sesión (session), accedido al libro de cuentas (book) y a la cuenta raíz (root). La sesión puede abrirse así, lo que nos obligará a guardar nuestros cambios (session.save()) y cerrarla (session.end()); de forma alternativa, podemos abrirla como un context manager.

Lo siguiente que hay que hacer es acceder a las cuenta que queremos tocar. Si, por ejemplo, estas cuenta son Gastos (la original) y Gastos.Comida (donde queremos mover los asientos), las seleccionamos así:

source_account = root.lookup_by_full_name("Gastos") target_account = root.lookup_by_full_name("Gastos.Comida")

Ahora podemos acceder a la cuenta original (source_account) y listar todos los desgloses o splits que le tocan con account.GetSplitList(). A partir de estos desgloses, podemos acceder a los asientos o transacciones que afectan a la cuenta y moverlos a otra cuenta diferente. Por ejemplo, si queremos mover todos asientos Pan de la cuenta Gastos a la cuenta Gastos.Comida, podemos hacer los siguiente:

for split in source_account.GetSplitList(): transaction = split.GetParent() if transaction.GetDescription() == "Pan": split.SetAccount( transaction.SetDescription("Pan")

Finalmente, guardamos y cerramos la sesión:

session.save() session.end()

Programa de ejemplo

He recogido lo expuesto arriba en un pequeño programa: batch_move_transactions.py

El programa puede usarse directamente como una herramienta de línea de órdenes normal (que muestra la ayuda con la opción --help) o como una función que puede llamarse desde código de Python. Es un poquito más complicado que lo descrito arriba, ya que usa expresiones regulares para elegir los asientos que mover.


Categorías: Informática

Permalink: https://sgcg.es/articulos/2026/07/30/ejemplos-de-uso-de-los-bindings-de-python-de-gnucash-2-movimiento-masivo-de-asientos/