Mostrando entradas con la etiqueta Contabilidad. Mostrar todas las entradas
Mostrando entradas con la etiqueta Contabilidad. Mostrar todas las entradas

lunes, 8 de septiembre de 2025

馃М Accounting Audit in iDempiere Using SQL: Verifying Financial Integrity

 A solid accounting audit in iDempiere goes beyond standard reports—it requires strategic use of SQL to detect inconsistencies, errors, and financial risks. In this article, I’ll share key queries you can use to validate accounting entries, spot duplicates, and ensure your ERP reflects accurate financial data.

馃攳 Why Audit with SQL?

While iDempiere offers built-in accounting reports, SQL gives you:

  • Real-time validation of accounting balances

  • Detection of hidden errors not visible in the UI

  • Automation of monthly review processes

  • Preparation for external audits and compliance checks

馃 Query 1: Check for Unbalanced Accounting Entries

sql
SELECT ad_table_id, record_id,
       SUM(amtacctdr - amtacctcr) AS difference
FROM fact_acct
WHERE dateacct BETWEEN '2025-01-01' AND '2025-01-31'
GROUP BY ad_table_id, record_id
HAVING SUM(amtacctdr - amtacctcr) <> 0;

馃攷 This query identifies documents that generated unbalanced entries. You can investigate each record_id using the “Accounting Fact Details” window in iDempiere.

馃 Query 2: Detect Duplicate Entries

sql
SELECT account_id, dateacct, amtacctdr, amtacctcr, COUNT(*) AS duplicates
FROM fact_acct
GROUP BY account_id, dateacct, amtacctdr, amtacctcr
HAVING COUNT(*) > 1;

馃攷 Useful for spotting entries that were duplicated due to reprocessing errors or failed reversals.

馃 Query 3: Review Account Balances

sql
SELECT account_id, SUM(amtacctdr - amtacctcr) AS balance
FROM fact_acct
GROUP BY account_id
ORDER BY balance DESC;

馃攷 Helps you identify accounts with unexpected or negative balances, especially in liabilities or equity.

馃 Query 4: Find Entries Without Document Reference

sql
SELECT * FROM fact_acct
WHERE record_id IS NULL OR ad_table_id IS NULL;

馃攷 Flags entries that aren’t linked to any source document—often a sign of integration issues or incomplete processes.

馃洜️ Best Practices for SQL-Based Auditing

  • Run these queries at the end of each accounting period

  • Document findings and correct issues before closing

  • Integrate these checks into your app (like AIDEN) or external dashboards

  • Share results with your accounting team for cross-validation

馃搶 Real-World Example

In a recent implementation, duplicate entries were found in IR payment transactions. The root cause was a re-execution of the posting process without clearing the previous state. Query 2 helped identify the duplicates, which were manually corrected before closing the period.

馃摌 Setting Up Accounting Schemas in iDempiere for NIIF/GAAP Compliance

 Designing a robust accounting schema in iDempiere is essential for financial transparency, audit readiness, and regulatory compliance. Whether you're working under NIIF (IFRS) or GAAP, iDempiere offers flexible tools to structure your chart of accounts and reporting flows. In this guide, we’ll walk through the key steps to configure a compliant schema, with practical tips for Latin American businesses.

馃З Step 1: Define Your Accounting Schema

Navigate to: Accounting > Accounting Schema

Key fields to configure:

  • Currency: Set your functional currency (e.g., NIO or USD).

  • GAAP/NIIF Compliance: Choose the standard your company follows.

  • Costing Method: Standard, Average, FIFO, etc.

  • Auto Post: Enable automatic posting of documents.

馃挕 Tip: You can create multiple schemas if you need parallel reporting (e.g., one for local GAAP, another for IFRS).

馃搨 Step 2: Build a Structured Chart of Accounts

Go to: Accounting > Element Value

Organize your accounts by:

  • Type: Asset, Liability, Revenue, Expense, Equity

  • Hierarchy: Use parent-child relationships for grouping

  • Segmentation: Include dimensions like department, project, or region

Example for NIIF:

  • 1.1.01 – Cash and Cash Equivalents

  • 2.1.01 – Trade Payables

  • 4.1.01 – Revenue from Contracts with Customers

  • 5.1.01 – Operating Expenses

馃М Step 3: Assign Default Accounts

Navigate to: Accounting > Accounting Schema > Default Accounts

Set up:

  • Receivables/Payables

  • Tax Accounts

  • Inventory and COGS

  • Bank and Cash Accounts

This ensures that every transaction automatically posts to the correct account.

馃搳 Step 4: Configure Accounting Dimensions

Use dimensions to enhance reporting:

  • Organization

  • Business Partner

  • Product

  • Project

  • Campaign

These allow for multi-level financial analysis and are essential for NIIF-compliant reporting.

馃攳 Step 5: Validate with Sample Transactions

Before going live:

  • Create test invoices, payments, and journal entries.

  • Review accounting facts in Accounting > Fact Details.

  • Ensure debit and credit balances match expected flows.

SQL to verify balance integrity:

sql
SELECT account_id, SUM(amtacctdr - amtacctcr) AS balance
FROM fact_acct
GROUP BY account_id
HAVING SUM(amtacctdr - amtacctcr) <> 0;

✅ Final Checklist

  • [ ] Chart of accounts structured and segmented

  • [ ] Default accounts assigned

  • [ ] Dimensions configured

  • [ ] Test transactions validated

  • [ ] Backup created before deployment

馃Ь Closing Accounting Periods in iDempiere: Common Errors and How to Fix Them

 Closing accounting periods in iDempiere is a critical step to ensure financial integrity and compliance. However, many users encounter errors that block the process or lead to inconsistencies. In this article, I’ll walk you through the most common issues and how to resolve them using practical steps and SQL queries.

馃攳 Issue 1: “Cannot close period due to unposted documents”

Cause: There are documents (invoices, payments, etc.) that haven’t been posted to accounting.

Solution:

  1. Navigate to: Accounting > Unposted Documents.

  2. Filter by the period you want to close.

  3. Review and manually post any pending documents.

Helpful SQL Query:

sql
SELECT * FROM fact_acct
WHERE dateacct BETWEEN '2025-01-01' AND '2025-01-31'
AND processed = 'N';

馃攳 Issue 2: “Period is closed but accounting entries are still being generated”

Cause: The accounting period is closed, but the document period remains open.

Solution:

  1. Go to Accounting > Periods.

  2. Make sure both the accounting period and the document period are closed.

  3. Check for any automated processes that might be generating entries outside the valid date range.

馃攳 Issue 3: “Error during closing process: ‘Cannot close due to inconsistent balances’”

Cause: Some accounting entries are unbalanced or incomplete.

Solution:

  1. Run an audit using SQL to detect discrepancies.

  2. Look for entries without counterpart accounts or with incorrect account assignments.

Correct SQL to detect unbalanced entries:

sql
SELECT ad_table_id, record_id,
       SUM(amtacctdr - amtacctcr) AS difference
FROM fact_acct
WHERE dateacct BETWEEN '2025-01-01' AND '2025-01-31'
GROUP BY ad_table_id, record_id
HAVING SUM(amtacctdr - amtacctcr) <> 0;

This query helps you identify documents that generated incorrect or incomplete accounting entries. You can then open the source document from the “Accounting Fact Details” window in iDempiere to investigate further.

馃洜️ Best Practices Before Closing a Period

  • Ensure all documents are posted.

  • Confirm both accounting and document periods are closed.

  • Run SQL audits to detect inconsistencies.

  • Always back up your database before closing.

viernes, 2 de agosto de 2013

Comisiones

Se trata de un servicio bancario por el que normalmente se cobran comisiones. Casi todas las entidades cobran un porcentaje del importe de la transferencia, pero fijan una cantidad m铆nima a cobrar.

Si usted utiliza este servicio a menudo merece la pena comparar las tarifas de varias entidades. Las transferencias realizadas a trav茅s de Internet suelen salir mucho m谩s econ贸micas, y en ciertos casos son gratuitas.

Recuerde que los costes de las transferencias son los primeros que aparecen en las Tarifas de Comisiones y Gastos que las entidades deben tener a disposici贸n del p煤blico, y que se anuncian de forma visible en los tablones de todas sus oficinas.

Las comisiones deben responder a los costes de las transferencias, sin que puedan cargarse diferentes comisiones por conceptos parecidos. Por ejemplo, no cabe cobrar una comisi贸n por el abono en la cuenta y otra por notificar el abono a la persona que ha recibido la transferencia. En todo caso, al ordenar la operaci贸n el cliente debe ser informado de los costes, para que pueda aceptarlos de forma expresa.

En Espa帽a, lo habitual era que la persona que ordenaba la transferencia fuera quien pagara la comisi贸n, salvo instrucciones expresas en contra. Sin embargo, con la entrada en vigor de la nueva Ley de Servicios de Pago, los gastos ser谩n compartidos entre ordenante y beneficiario, salvo que se indique a la entidad que deben repercutirse en su totalidad a uno o a otro.

No se suelen cobrar comisiones en caso de traspasos entre cuentas del mismo titular.

Definici贸n de Transferencias Bancarias

Una transferencia bancaria es la operaci贸n por la que una persona o entidad (el ordenante) da instrucciones a su entidad bancaria para que env铆e, con cargo a una cuenta suya, una determinada cantidad de dinero a la cuenta de otra persona o empresa (el beneficiario). Dicho de otra forma, realizar una transferencia es pasar dinero de una cuenta a otra, bien de la misma entidad o bien en otra entidad.

Las transferencias que tienen lugar dentro de la misma entidad se suelen denominar traspasos.

Hay operaciones similares a las transferencias, como por ejemplo las 贸rdenes de env铆o de fondos en las que se indica que deben entregarse en efectivo al beneficiario. Tambi茅n tienen el mismo efecto los giros, en los que el ordenante lleva una cantidad en efectivo a la ventanilla de su entidad, para que sea enviada a la cuenta del beneficiario en otra entidad de cr茅dito.

Sin embargo, no es una transferencia la aceptaci贸n de ingresos en efectivo que se abonan en una cuenta de la propia entidad receptora.

Proceso de conciliaci贸n

El proceso es el siguiente: la empresa va registrando todos los movimientos en un libro auxiliar y, a su vez, el banco hace lo mismo, al mes el banco suele enviar a cada uno de sus clientes, un estado de cuenta en el que se detallan todos los asientos realizados, un estracto bancario (exporte sus estractos bancarios en e-conomic).

Conciliaci贸n bancaria en e-conomic

Ejemplo conciliaci贸n bancaria en e-conomic


A continuaci贸n, se realiza una verificaci贸n en la que se revisan y comprueban los movimientos que la empresa ha registrado con los del banco y determinan si coinciden o cu谩l es la causa de la diferencia. 


¿Y si no coinciden los datos?

El saldo final del banco casi nunca coincide con el saldo que muestran los libros contables de la empresa, debido solo al tiempo en el que se registran las partidas.
 
Por ejemplo, hay hechos econ贸micos que la empresa ya ha apuntado en sus libros contables pero que el banco a煤n no ha registrado porque lo contabiliza a final de la semana siguiente.

Definici贸n de conciliaci贸n bancaria

Es una comparaci贸n que se hace entre los apuntes contables que lleva una empresa de su cuenta corriente (o cuenta de bancos) y los ajustes que el propio banco realiza sobre la misma cuenta.
 
Es un proceso que permite comparar los valores que la empresa tiene registrados de una cuenta de ahorros o cuenta corriente, con los valores que el banco le suministra por medio del extracto bancario, que suele recibirse cada mes.

jueves, 27 de junio de 2013

Get Parent Ledger Account


/*

"1-1-1-00-0-00"
    "1-1-1-01-0-00"
        "1-1-1-01-1-00"
        "1-1-1-01-2-00"
    "1-1-1-02-0-00"
        "1-1-1-02-1-00"
            "1-1-1-02-1-01"
            "1-1-1-02-1-02"
            "1-1-1-02-1-03"

select sp_obtener_cta_padre('11102103');

select sp_obtener_cta_padre('11102100');

select sp_obtener_cta_padre('11102000');

*/

create or replace function sp_obtener_cta_padre(p_cuenta varchar)
returns varchar as $$
declare
    nivel1 integer;
    nivel2 integer;
    nivel3 integer;
    nivel4 integer;
    nivel5 integer;
    nivel6 integer;

    n1 varchar;
    n2 varchar;
    n3 varchar;
    n4 varchar;
    n5 varchar;
    n6 varchar;

    b boolean;

    resultado varchar;
begin
    nivel1 = cast(substring(p_cuenta, 1, 1) as integer);
    nivel2 = cast(substring(p_cuenta, 2, 1) as integer);
    nivel3 = cast(substring(p_cuenta, 3, 1) as integer);
    nivel4 = cast(substring(p_cuenta, 4, 2) as integer);
    nivel5 = cast(substring(p_cuenta, 6, 1) as integer);
    nivel6 = cast(substring(p_cuenta, 7, 2) as integer);

    b = true;

    if (nivel6 > 0 and b = true) then
        nivel6 = 0;
        b = false;
    end if;

    if (nivel5 > 0 and b = true) then
        nivel5 = 0;
        b = false;
    end if;

    if (nivel4 > 0 and b = true) then
        nivel4 = 0;
        b = false;
    end if;

    if (nivel3 > 0 and b = true) then
        nivel3 = 0;
        b = false;
    end if;

    if (nivel2 > 0 and b = true) then
        nivel2 = 0;
        b = false;
    end if;

    n1 = cast(nivel1 as varchar);
    n2 = cast(nivel2 as varchar);
    n3 = cast(nivel3 as varchar);
    n4 = cast(nivel4 as varchar);
    n5 = cast(nivel5 as varchar);
    n6 = cast(nivel6 as varchar);

    if(char_length(n4) = 1)then
        n4 = '0' || n4;
    end if;

    if(char_length(n6) = 1)then
        n6 = '0' || n6;
    end if;

    resultado = n1 || n2 || n3 || n4 || n5 || n6;

    return resultado;
end;
$$ language plpgsql;

mi茅rcoles, 26 de junio de 2013

Tipo de cuenta Memo en Adempiere

El tipo de cuenta contable "Memo" se utilizan b谩sicamente para la contabilizaci贸n de los compromisos y contabilidad de presupuesto. Estas son ignoradas en la Balanza de Comprobaci贸n.

Fuente:
http://www.linkedin.com/groups/ADempiere-uses-six-account-types-44589.S.200730720

"Dejar un comentario es una forma de agradecimiento"

viernes, 7 de junio de 2013

Cierre Contable en Adempiere Parte No. 1

Un Cierre Contable es un proceso o un comprobante de diario que consiste en movimientos de debitos o creditos que hacen cero los saldos finales de las cuentas contables del Estado de Resultado (Ingresos y Gastos). El cierre contable se puede clasificar en:

- Cierre Fiscal: cuando se abarca los per铆odos (normalmente son 12 meses o per铆odos) de un a帽o a otro. Por ejemplo: Del 01 Enero 2012 al 31 Diciembre 2013.

- Cierre Transitorio: cuando se abarca los per铆odos por semestres, trimestres, etc... Por ejemplo: Del 01 Julio 2012 al 31 Diciembre 2013.

En Adempiere, no existe un proceso o pantalla especifica para realizar el cierre contable, porque el sistema maneja por defecto una Contabilidad Perpetua, esto quiere decir que las cuentas de ingresos y gastos nunca se hacen cero y trabajan con saldos acumulados, los per铆odos contables nunca se cierran. Es por tal motivo que se ha publicado este blog, para mostrar una soluci贸n temporal y para crear un nuevo proceso de cierre contable siguiendo determinados pasos.

Una solucion temporal para hacer el efecto del cierre contable en Adempiere, es agregando un nuevo periodo contable en "Analisis de Desempe帽o > Reglas Contables > A帽o y Calendario" llamado "Cierre contable 2012-2013" donde este ocupe un d铆a del a帽o. Luego se agrega un nuevo comprobante de diario seleccionando el nuevo per铆odo de cierre y se registra todos los movimientos de las cuentas de Estado de Resultado de forma manual para hacer cero el saldo final del per铆odo anterior. Esto se hace en "Menu > Analisis de Desempe帽o > Nota de Contabilidad".

Los pasos para crear el nuevo proceso de cierre contable y que esto sea automatico en Adempiere son los siguientes:

1) Crear una nueva pantalla "Cierre contable", un maestro detalle, similar a la pantalla "Nota de Contabilidad", con el objetivo de separar los movimientos de los per铆odos con el cierre de los mismos y evitar el problema de solapamiento de fechas.

2) Crear una nueva clase Java dentro del paquete org.compiere.process, el cual consistira en crear automaticamente los registros del cierre contable, que son los movimientos de las cuentas de Estado de Resultado para hacer cero los Ingresos y los Gastos, y posteriormente el siguiente per铆odo inicie con nuevos saldos para los Ingresos o Ventas y los Gastos.

3) Dise帽ar e implementar los reportes financieros (Balanza de comprobaci贸n, Estado de Resultado y Balance General) incluyendo el proceso del cierre contable.

Veremos el primer paso del nuevo proceso de Cierre Contable...

1) Abrimos el PgAdmin, y ejecutamos el siguiente script SQL:

-- Tablas para el cierre contable

-- drop table nic_cierre_contable;

create table nic_cierre_contable
(
    nic_cierre_contable_id numeric(10,0) primary key not null,
    ad_client_id numeric(10,0) not null,
    ad_org_id numeric(10,0) not null,
    isactive char not null,
    created date not null,
    createdby numeric(10,0) not null,
    updated date not null,
    updatedby numeric(10,0) not null,
    num_documento varchar not null,
    descripcion varchar,
    tipo_cierre char not null, -- F = Fiscal, T = Transitorio
    fecha_inicial date not null,
    fecha_final date not null,
    fecha_contable date not null,
    total_debito numeric(10,2),
    total_credito numeric(10,2),
    observacion varchar
);

-- drop table nic_detalle_cierre;

create table nic_detalle_cierre
(
    nic_detalle_cierre_id numeric(10,0) primary key not null,
    ad_client_id numeric(10,0) not null,
    ad_org_id numeric(10,0) not null,
    isactive char not null,
    created date not null,
    createdby numeric(10,0) not null,
    updated date not null,
    updatedby numeric(10,0) not null,
    nic_cierre_contable_id numeric(10,0) not null,
    descripcion varchar,
    account_id numeric(10,0) not null,
    debito numeric(10,2),
    credito numeric(10,2),
    observacion varchar/*,
    constraint fk_cierre_contable foreign key(nic_cierre_contable_id)
    references nic_cierre_contable(nic_cierre_contable_id)
    on delete no action
    on update no action
    deferrable initially immediate*/
);

create or replace function sp_sumar_cierre()
returns trigger as $$
begin

    update nic_cierre_contable set
        total_debito =
        (select sum(dc.debito) from nic_detalle_cierre dc
        where dc.nic_cierre_contable_id = NEW.nic_cierre_contable_id),
       total_credito =
        (select sum(dc.credito) from nic_detalle_cierre dc
        where dc.nic_cierre_contable_id = NEW.nic_cierre_contable_id)
    where nic_cierre_contable_id = NEW.nic_cierre_contable_id;

    return NEW;

end;
$$ language plpgsql;

create trigger sumar_cierre after insert or update on nic_detalle_cierre
for each row execute procedure sp_sumar_cierre();


Continuar >>

"Dejar un comentario es una forma de agradecimiento"

viernes, 27 de abril de 2012

Tipos de cuenta contable en Adempiere


Cuenta contable Adempiere Naturaleza
ActivoAD茅bito
PasivoLCr茅dito
CapitalOCr茅dito
IngresosRCr茅dito
GastosED茅bito
MemoMNatural

jueves, 12 de abril de 2012

Retenciones en las cuentas por pagar

En este post aprenderemos a aplicar las retenciones en las cuentas por pagar, para este ejemplo comenzaremos desde una requisici贸n hasta la elaboraci贸n de un cheque.

Antes de empezar, debemos de tener correctamente la configuraci贸n de los tipos de retenciones que aplicaremos en las cuentas por pagar.

1.- Ir a la pantalla de requisici贸n




2.- Registrar una nueva requisici贸n que contenga el producto con retenci贸n




3.- Creamos la orden de compra desde la requisici贸n registrada




4.- Entramos a la pantalla de orden de compra




5.- Buscamos y completamos la orden de compra generada




6.- Ir a la pantalla de recepci贸n y crear un nuevo registro




7.- El almac茅n recibe el producto a partir de la orden de compra




8.- Ir a la pantalla “Facturas y CxP (Proveedor)”




9.- Crear una nueva factura a partir del recibo registrado en el paso anterior




10.- Antes de completar la factura, clic en la pesta帽a “Retenci贸n” y seleccionamos el porcentaje a deducir del monto total de la factura




11.- Observamos que en el campo “Cantidad retenci贸n” se muestra el monto de la retenci贸n, procedemos a completar la factura y el sistema autom谩ticamente realizar谩 los c谩lculos






12.- Contabilizamos la factura para ver el asiento contable




13.- Para efectuar el pago al proveedor entramos a la pantalla “Pagos/Recaudos”




14.- Creamos un nuevo cheque a partir de la factura registrada en el paso 9






15.- En la pesta帽a “Retenci贸n” podemos observar  que el monto retenido tambi茅n se migr贸 de la factura registrada






16.- Revisamos si el monto a pagar es el correcto, finalmente completamos y contabilizamos para ver el asiento contable






Para mayor informaci贸n, puedes escribir a:
ingenierojosefrancisco@gmail.com






Configuraci贸n de las retenciones en Adempiere

1.- Definir los tipos de retenciones que se aplican en las facturas ubicado en Men煤 > Localizaci贸n Colombiana > Tipo Retenci贸n.



2.- Seleccionamos “Retenci贸n en la Fuente CxP”



3.- Clic en la pesta帽a “Configuraci贸n Regla Retenci贸n” y nos aseguramos que tenga la siguiente configuraci贸n.


4.-  Clic en la pesta帽a “C谩lculo Retenci贸n” y definimos todos los porcentajes para cada retenci贸n correspondiente.


5.- Clic en la pesta帽a “Regla Retenci贸n” para definir las retenciones y asignar los correspondientes porcentajes.



6.- Ir a la pantalla de productos y seleccionamos el producto sobre el cual se aplicar谩 la retenci贸n.



7.- Aseguramos que tenga definida la categor铆a del impuesto y retenci贸n.


8.- Para el caso de un servicio, ir a la pantalla de "Cargo"


9.- Registrar un nuevo cargo contable y asignar la categor铆a de retenci贸n, as铆 como se muestra en la imagen.


La configuraci贸n est谩 lista para aplicar las retenciones en las facturas de las cuentas por pagar. Puedes ver los pasos para aplicar las retenciones en el siguiente enlace:

Nota: "El enlace estar谩 disponible muy pronto, posiblemente ma帽ana si Dios as铆 lo permite"

Para mayor informaci贸n, puedes escribir a:
ingenierojosefrancisco@gmail.com


lunes, 26 de marzo de 2012

Cuentas contables del adempiere en orden


CREATE OR REPLACE VIEW vw_cuentas_catalogo_ctamayor AS
 SELECT cel.c_elementvalue_id, cel.value, cel.name, cel.description, cel.isactive, cel.accounttype, fn_usr_getnivelcuenta(cel.c_elementvalue_id, ce.ad_tree_id) AS nivelcuenta, atn.parent_id, atn.seqno, fn_usr_getparentid_upto(cel.c_elementvalue_id, 1::numeric) AS ctamayor_id, cel.accountsign AS nat
   FROM c_elementvalue cel
   JOIN c_element ce ON cel.c_element_id = ce.c_element_id
   JOIN ad_treenode atn ON atn.ad_tree_id = ce.ad_tree_id AND atn.node_id = cel.c_elementvalue_id
  WHERE cel.ad_client_id = 1000000::numeric AND cel.c_currency_id = 209::numeric AND cel.isactive = 'Y'::bpchar
  ORDER BY cel.value, cel.name, atn.parent_id, atn.seqno;


CREATE OR REPLACE VIEW vw_cuentas_contables AS
 SELECT cel.c_elementvalue_id, cel.value, cel.name, cel.description, cel.isactive, cel.accounttype, cel.nivelcuenta, cel.parent_id, cel.seqno, cel.ctamayor_id, COALESCE(( SELECT aux.description
           FROM c_elementvalue aux
          WHERE aux.c_elementvalue_id = cel.ctamayor_id), ''::character varying) AS ctmayor_name, COALESCE(( SELECT aux.value
           FROM c_elementvalue aux
          WHERE aux.c_elementvalue_id = cel.ctamayor_id), '0'::character varying)::numeric AS ctmayor_value, COALESCE(( SELECT aux.value
           FROM c_elementvalue aux
          WHERE aux.c_elementvalue_id = cel.parent_id), '0'::character varying)::numeric AS parent_value, COALESCE(( SELECT aux.description
           FROM c_elementvalue aux
          WHERE aux.c_elementvalue_id = cel.parent_id), ''::character varying) AS parent_name, cel.nat
   FROM vw_cuentas_catalogo_ctamayor cel;

SELECT * FROM vw_cuentas_contables vc;




mi茅rcoles, 21 de marzo de 2012

Nota de contabilidad desbalanceada en Adempiere

En el registro de los comprobantes de diario (ubicado en men煤 > an谩lisis del desempe帽o > nota de contabilidad) muchas veces ocurre que al querer completar el lote contable manda un mensaje de error "Nota de contabilidad desbalanceada y balanceo suspendido no activado", se debe a que el sistema no permite guardar el lote contable si los d茅bitos y cr茅ditos no cuadran o son iguales. Sin embargo, a veces ocurre que en pantalla vemos los d茅bitos y cr茅ditos balanceados sin embargo el sistema no nos permite completar porque manda de nuevo este mismo mensaje de error:


SOLUCI脫N: Esto se debe a que dentro de las l铆neas contables existen d茅bitos o cr茅ditos con m谩s decimales, es decir, hay diferencias de decimales entre las l铆neas contables.

lunes, 12 de marzo de 2012

Inventario Inicial Contabilizado


-- VISTA QUE CONTIENE LA CONSULTA DEL REPORTE

-- select ic.* from vw_inventario_contabilizado ic;

-- drop view vw_inventario_contabilizado;

create view vw_inventario_contabilizado as
(
    select
    i.m_inventory_id cod_inventario,
    i.documentno no_inventario,
        i.description descripcion,
        cast('C$' as character varying) moneda,
        o.ad_org_id cod_organizacion,
        o.name organizacion,
        ev.value cod_cuenta,
        evt.name cuenta_contable,
        f.amtacctdr debito,
        f.amtacctcr credito,
        coalesce(p.m_product_id, 0) id_producto,
        coalesce(p.value, '') cod_producto,
        coalesce(pt.name, '') producto,
        f.dateacct fecha_contable,
        pp.c_period_id cod_periodo,
        pp.name periodo,
        cast('Actual' as character varying) tipo_aplicacion -- ad_ref_list
    from fact_acct f
        join ad_org o
        on f.ad_org_id = o.ad_org_id
        join c_elementvalue ev
        on f.account_id = ev.c_elementvalue_id
        join c_elementvalue_trl evt
        on (ev.c_elementvalue_id = evt.c_elementvalue_id
        and evt.ad_language = 'es_CO')
        left outer join m_product p
        on f.m_product_id = p.m_product_id
        left outer join m_product_trl pt
        on (p.m_product_id = pt.m_product_id
        and pt.ad_language = 'es_CO')
        join c_period pp
        on f.c_period_id = pp.c_period_id
        join m_inventory i
        on f.record_id = i.m_inventory_id
    where f.ad_client_id = 1000000
        and f.postingtype = 'A'
        and f.c_acctschema_id = 1000000
        and f.ad_table_id = 321 -- Physical Inventory
        --and f.record_id = 1000061
        and f.fact_acct_id not in
        (select
            pa.record_id
        from ad_private_access pa
        where pa.ad_table_id = 270 -- GLJournal
            and pa.ad_user_id <> 0
            and pa.isactive = 'Y')
        and exists
        (
        select 1 from rv_transaction t
            where t.m_inventory_id = i.m_inventory_id
            and t.movementtype = 'I+'
        )
        and i.docstatus = 'CO'
        and i.isactive = 'Y'
        order by
            f.fact_acct_id desc
);

-- FUNCION QUE CONTIENE LA VISTA DEL REPORTE


/*

drop type inventario_contabilizado;

create type inventario_contabilizado as
(
cod_inventario numeric(10,0),
no_inventario character varying,
    descripcion character varying,
    moneda character varying,
cod_organizacion numeric(10,0),
organizacion character varying(60),
cod_cuenta character varying(40),
cuenta_contable character varying(60),
debito numeric,
credito numeric,
id_producto numeric,
cod_producto character varying,
producto character varying,
fecha_contable timestamp without time zone,
cod_periodo numeric(10,0),
periodo character varying(60),
tipo_aplicacion character varying
);

*/

-- drop function rep_inventario_contabilizado(finicial date, ffinal date, num_inventario character varying)

-- select * from rep_inventario_contabilizado(0, 0);

-- select * from rep_inventario_contabilizado('2011-11-01', '2011-12-30', '4968');

create or replace function rep_inventario_contabilizado(finicial date, ffinal date, num_inventario character varying)
returns setof inventario_contabilizado as $$
declare
resultado inventario_contabilizado%rowtype;
begin

    drop table if exists tmp_inventario_contabilizado;
 
    create table tmp_inventario_contabilizado as
    select
    ic.*
    from vw_inventario_contabilizado ic
    where ic.fecha_contable between finicial and ffinal
    and ic.no_inventario = case when num_inventario = '0' then ic.no_inventario else num_inventario end;
 
for resultado in execute
    'select
    t.*
    from tmp_inventario_contabilizado t;'
    loop
    return next resultado;
    end loop;
end;
$$ language plpgsql;

-- VISTA QUE SE UTILIZA EN EL TERCER PARAMETRO DEL REPORTE

-- drop view param_num_inventario;

create view param_num_inventario as
(
    select distinct
        i.documentno codigo,
        i.description nombre,
        i.ad_client_id,
        i.ad_org_id,
        i.created,
        i.createdby,
        i.updated,
        i.updatedby,
        i.isactive
    from m_inventory i
        join m_inventoryline il
        on i.m_inventory_id = il.m_inventory_id
    where i.ad_client_id = 1000000
    and il.inventorytype = 'D'
        and exists
        (
        select 1 from rv_transaction t
            where t.m_inventory_id = i.m_inventory_id
            and t.movementtype = 'I+'
        )
);



viernes, 2 de marzo de 2012

Facturas contabilizadas del proveedor


-- select fc.* from vw_facturas_contabilizadas fc;

-- drop view vw_facturas_contabilizadas;

create view vw_facturas_contabilizadas as
(
    select
    f.record_id,
        o.ad_org_id cod_organizacion,
        o.name organizacion,
        ev.value cod_cuenta,
        evt.name cuenta_contable,
        f.amtacctdr debito,
        f.amtacctcr credito,
        coalesce(p.m_product_id, 0) id_producto,
        coalesce(p.value, '') cod_producto,
        coalesce(pt.name, '') producto,
        bp.c_bpartner_id cod_tercero,
        bp.name tercero,
        f.dateacct fecha_contable,
        pp.c_period_id cod_periodo,
        pp.name periodo,
        cast('Actual' as character varying) tipo_aplicacion, -- ad_ref_list
        f.record_id cod_factura
    from fact_acct f
        join ad_org o
        on f.ad_org_id = o.ad_org_id
        join c_elementvalue ev
        on f.account_id = ev.c_elementvalue_id
        join c_elementvalue_trl evt
        on (ev.c_elementvalue_id = evt.c_elementvalue_id
        and evt.ad_language = 'es_CO')
        left outer join m_product p
        on f.m_product_id = p.m_product_id
        left outer join m_product_trl pt
        on (p.m_product_id = pt.m_product_id
        and pt.ad_language = 'es_CO')
        join c_bpartner bp
        on f.c_bpartner_id = bp.c_bpartner_id
        join c_period pp
        on f.c_period_id = pp.c_period_id
    where f.ad_client_id = 1000000
        and f.postingtype = 'A'
        and f.c_acctschema_id = 1000000
        and f.ad_table_id = 318 -- AP Invoice
        and f.fact_acct_id not in
        (select
            pa.record_id
        from ad_private_access pa
        where pa.ad_table_id = 270 -- GLJournal
            and pa.ad_user_id <> 0
            and pa.isactive = 'Y')
        order by
            f.fact_acct_id
);