Skip to main content

Descripción General

El proceso Auxiliar Contable (Estado de Cuenta) (AccountingLedger) compila los movimientos contables detallados y calcula progresivamente el saldo acumulado (débitos, créditos y saldo en marcha) de una o varias cuentas contables dentro de un rango de fechas. La información consolidada se inserta en la tabla temporal T_ReportStatementCDS para facilitar su impresión y análisis.

Cálculo Eficiente de Saldos Progresivos: A diferencia de las consultas tradicionales de bases de datos, este proceso aprovecha las funciones analíticas de ventana SQL y el uso de una tabla temporal segmentada por instancia de proceso (AD_PInstance_ID) para generar estados de cuenta complejos a gran velocidad.

Flujo de Ejecución Técnico

El proceso ejecuta las siguientes etapas durante su ejecución en el servidor de aplicaciones:

  1. Inicialización de Rango de Fechas: Si el usuario define fechas específicas en el parámetro DateAcct, se utilizan dichos valores. Si no especifica fechas pero proporciona un C_Period_ID, extrae las fechas de inicio y fin de dicho período. Como último recurso, calcula los rangos basados en el mes calendario actual.
  2. Generación de Líneas de Detalle (LevelNo = 1):
    • Consulta la vista contable diaria cds_rv_fact_acct_day aplicando los filtros de cuenta, organización, terceros, proyectos, actividades y dimensiones del usuario.
    • Calcula el balance acumulado de las transacciones usando la función analítica SQL: SUM(AmtAcctDr - AmtAcctCr) OVER (PARTITION BY e.Value ORDER BY e.Value, a.DateAcct, e.Description ASC ROWS UNBOUNDED PRECEDING).
    • Inserta los resultados con LevelNo = 1 en la tabla temporal.
  3. Cálculo del Saldo Inicial (LevelNo = 0):
    • Suma los movimientos acumulados anteriores a la fecha de inicio del reporte.
    • Control Contable de Cuentas de Resultados: Si la cuenta procesada no es de Balance (sino una cuenta de gastos o ingresos), el proceso restringe la consulta del saldo inicial limitándola a la fecha de inicio del año fiscal en curso (obtenida mediante MPeriod.getFirstInYear). Esto evita la acumulación indebida de saldos históricos cerrados en ejercicios anteriores.
    • Inserta la línea de saldo consolidado inicial con la descripción fija 'SALDO INICIAL' y LevelNo = 0.
  4. Actualización Masiva del Balance Acumulado: Ejecuta un comando SQL de tipo UPDATE que recalcula y encadena el saldo acumulado real progresivo sumando el saldo inicial (LevelNo = 0) con el histórico detallado de transacciones (LevelNo = 1) ordenadas por fecha contable y descripción.

Estructura de la Tabla Temporal T_ReportStatementCDS

La tabla intermedia t_reportstatementcds consolida los registros antes de que iDempiere invoque al motor de renderizado del reporte. Los campos clave de esta tabla son:

  • AD_PInstance_ID: Código numérico único asignado a la instancia del proceso ejecutado, permitiendo aislar las consultas concurrentes entre usuarios.
  • LevelNo: Indica la jerarquía de la línea (0 = Saldo Inicial; 1 = Detalle Transaccional).
  • DateAcct: Fecha del movimiento contable.
  • Name / Description: Nombre descriptivo o detalle de la transacción contable.
  • AmtAcctDr / AmtAcctCr: Montos contables de débito y crédito.
  • Balance: Saldo progresivo consolidado calculado a la fecha.
  • Account_ID / Account_Name: Identificadores de la cuenta contable conteniendo la línea.
  • c_bpartner_id: Socio de negocio de la transacción (tercero relacionado).

Nota de Rendimiento: La tabla temporal utiliza índices en su estructura de base de datos para los campos AD_PInstance_ID, Account_ID y DateAcct para garantizar velocidad óptima en grandes volúmenes de transacciones contables diarias.