Saldos iniciales en un Query

Buen dia como están, tengo una duda espero puedan ayudarme

De que forma puedo traer los saldos iniciales de un periodo especifico en SAP? estoy por ejemplo trabajando con la tabla ojdt que es donde quedan registrados todos los asientos contables, el query debe ser de una fecha inicial y final, pero para la fecha inicial debe traer el saldo de las cuentas que se esten consultando, en SAP estos asientos de saldos iniciales quedan con algun codigo especial para que puedan ser consultados?

Actualmente la unica forma que encuentro de traer el saldo inicial es traerme toda la base de datos, todos los asientos contables desde que existe la base de datos hasta la fecha inicial, esos serian mi saldo inicial.

Espero puedan ayudarme muchas gracias.

Ambiente SAP Business One 10 FP2202

Hoka @camilog

Yo probaria en la tabla jdt1 y con el campo transtype igual a ‘ -2’.

Y pon la fecha del asiento de apertura que necesites

Un saludo

1 me gusta

Buenos dias @Amarcos estoy consultando asientos con ese transtype y no me aparece ninguno.

Buenos días @camilog , si no tienes es por que no se han realizado cierre de periodos, por lo cual no vas a poder encontrar los saldos iniciales para cada periodo nuevo, en ese caso, la única opción es que en la query la separes en 2 y por un lado generes la suma desde la fecha inicial que indiques hacia atrás y agrupes por cuenta así tendrías los saldos iniciales.

1 me gusta

Hola @camilog

otra opción es restaurar la BBDD como empresa de pruebas y correr el proceso de cierre de ejercicio a la fecha que te interesa, y podrás probar la consulta anterior. Si no hay asientos con apuntes con esa característica, es que nunca se hizo este proceso.

Un saludo

Los saldos iniciales y finales se añaden al sistema al realizar el cierre contable.

Lo deja en unos diarios específicos que se identifican por el transtype… si en el query que te han proporcionado lo condicionas a que sea <=0 te deberían aparecer.

1 me gusta

Y que @camilog alguna novedad en este tema?

1 me gusta

Es mas fácil de lo que imaginas. Es mas fácil que pegarle a un bolo (borracho) dormido (así decimos en mi país). Te explico:

Voy a asumir que estas familiarizado con las tablas de SAP Business One, haz lo siguiente:

  1. Haz un UNION en las tablas OJDT y JDT1 por medio del campo TransId.
  2. En la tabla JDT1, debes hacer un sum a la resta del campo Debit - Credit, y condicionar que esa suma este en el rango de fechas menor a la fecha inicial que quieres mostrar. Ejemplo: si vas a sacar un reporte del 1 al 30 de octubre de 2025, tu fecha inicial es ‘2025-10-01’ y tu fecha final es ‘2025-10-31’, por lo tanto, tu rango a tomar en cuenta para sacar el saldo inicial sera WHERE RefDate < FechaInicial.

No se si me doy a entender, pero si tienes dudas, pregúntame.

Te dejare como ejemplo un Store Procedure que hice para armar un libro diario mayor en SAP B1 versión HANA. Si lo quieres replicar a SQL, copialo y daselo a una IA como Claude para que te lo traduzca a SQL Server.

En este reporte, estoy yendo a traer el nombre de las cuentas contables, el numero de las cuentas, detallando el saldo diario por cuenta hasta el nivel 5, y a su vez, estoy sacando el saldo inicial.

– SP libro diario mayor
CREATE PROCEDURE LIBRO_DIARIO_MAYOR (
IN FechaInicial DATE,
IN FechaFinal DATE
)
LANGUAGE SQLSCRIPT
AS
BEGIN
lt_result =
SELECT
T1.“RefDate” AS “Fecha”,
T0.“Segment_0” AS “Cuenta nivel 6”,
T0.“AcctName” AS “Nombre cuenta nv 6”,
SUM(T2.“Debit”) AS “Debito”,
SUM(T2.“Credit”) AS “Credito”,
IFNULL((SELECT SUM(N1.“Debit” - N1.“Credit”) FROM JDT1 N1 WHERE T0.“AcctCode” = N1.“Account” AND N1.“RefDate” < :FechaInicial),0) AS “Saldo Acumulado”,
LEFT(T0.“Segment_0”, 2) AS “Cuenta nivel 2”,
(SELECT TX.“AcctName” FROM OACT TX WHERE TX.“AcctCode” = LEFT(T0.“Segment_0”, 2)) AS “Nombre cuenta nv 2”,
LEFT(T0.“Segment_0”, 4) AS “Cuenta nivel 3”,
(SELECT TX.“AcctName” FROM OACT TX WHERE TX.“AcctCode” = LEFT(T0.“Segment_0”, 4)) AS “Nombre cuenta nv 3”,
LEFT(T0.“Segment_0”, 6) AS “Cuenta nivel 4”,
(SELECT TX.“AcctName” FROM OACT TX WHERE TX.“AcctCode” = LEFT(T0.“Segment_0”, 6)) AS “Nombre cuenta nv 4”,
LEFT(T0.“Segment_0”, 8) AS “Cuenta nivel 5”,
(SELECT TX.“AcctName” FROM OACT TX WHERE TX.“AcctCode” = LEFT(T0.“Segment_0”, 8)) AS “Nombre cuenta nv 5”,
UPPER((SELECT TY.“AcctName” FROM OACT TY WHERE TY.“Levels” = 1 AND LEFT(TY.“AcctCode”,1) = LEFT(T0.“Segment_0”, 1))) AS “Nombre cuenta nv 1”,
(SELECT TZ.“PrintHeadr” FROM OADM TZ) AS “NombreEmpresa”,
(SELECT TZ.“RevOffice” FROM OADM TZ) AS “NIT”,
(SELECT TZ.“TaxIdNum” FROM OADM TZ) AS “NRC”
FROM OACT T0
INNER JOIN JDT1 T2 ON T0.“AcctCode” = T2.“Account”
INNER JOIN OJDT T1 ON T2.“TransId” = T1.“TransId”
WHERE T1.“RefDate” BETWEEN :FechaInicial AND :FechaFinal
GROUP BY T1.“RefDate”, T0.“Segment_0”, T0.“AcctName”, T0.“AcctCode”
ORDER BY T0.“Segment_0”, T1.“RefDate”;
SELECT * FROM :lt_result;
END;

Esto debería solucionar tu duda.

Saludos. :victory_hand:

1 me gusta

los saldos iniciales van a un diario especial o transtype específico y se pueden diferenciar claramente. Tu aportación solo serviría si re reservase una fecha concreta para la contabilización de dichos saldos

Yo justo calculé el saldo inicial de la manera que explique, y eso usé en mi libro de diario mayor. Me cuadra al centavo con el resumen que me da el plan de cuentas.

Mi reporte en Crystal Reports

El saldo de la cuenta en el plan de cuentas

Eso no es el saldo inicial….

El saldo inicial es el que contabiliza el sistema después de hacer un cierre y apertura de ejercicio.