Ayuda SAP

Query para generar el balance de comprobación

Buenas amigos

Estoy contruyendo un query para tener un balance de comprobación (trial balance) y despues pasarlo a crystal report, tengo que presentarla a la auditoria externa un balance de comprobación que tenga las siguientes columnas:
Numero de cuenta contable
Nombre de la cuenta contable
Saldo Inicial de la cuenta al inciar el año
Débitos del año
Créditos del año
Saldo final de la cuenta al finalizar el año

Para lo cual construí este query, lo copie al query manager de SAP B1, y me da el siguiente error

1). [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Must specify table to select from.

2). [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Statement ‘Acuerdo global’ (OOAT) (s) could not be prepared.

A continuación el query,

declare @dbeger datetime

set @dbeger = ‘[%0]’

declare @dender datetime

set @dender = ‘[%1]’

declare @dbegbs datetime

set @dbegbs = (’[%0]’ - 1)

declare @dendbs datetime

set @dendbs = ‘[%1]’

SELECT
T0.AcctCode AS “Cuenta”,
T0.acctName AS “Nombre”,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode and A.RefDate <= @dbegbs ) AS “Saldo Inicial”,
( SELECT ISNULL(SUM(B.Debit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender ) AS “Débito”,
( SELECT ISNULL(SUM(B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender ) AS “Crédito”,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode and A.RefDate <= @dendbs ) AS “Saldo Final”
FROM OACT T0
WHERE T0.Postable = ‘Y’ AND T0.GroupMask IN (1,2,3)

UNION ALL

SELECT
T0.AcctCode AS “Cuenta”,
T0.acctName AS “Nombre”,
‘0’ AS “Saldo Inicial”,
( SELECT ISNULL(SUM(B.Debit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS “Débito”,
( SELECT ISNULL(SUM(B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHEREB.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS “Crédito”,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS “Saldo_Final”
FROM OACT T0
WHERE T0.Postable = ‘Y’ AND T0.GroupMask IN (4,5,6,7,8,9,10)
ORDER BY T0.AcctCode

Agradecería si me alguno me puede indicar que estoy haciendo mal.

Saludos

El problema viene en las variables que declaras al inicio… además de algún espacio en el código…
Así funciona sin problema, solo tienes que revisar las variables de fechas que estableces al principio.
Recuerda formatear el texto del tema, para que se sepa que es un código de SQL.

declare @dbeger datetime
set @dbeger = '20210101'
declare @dender datetime
set @dender = '20211231'
declare @dbegbs datetime
set @dbegbs = ('20210101')
declare @dendbs datetime
set @dendbs = '20211231'

SELECT
T0.AcctCode AS Cuenta,
T0.acctName AS Nombre,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode and A.RefDate <= @dbegbs ) AS Inicial,
( SELECT ISNULL(SUM(B.Debit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender ) AS Debito,
( SELECT ISNULL(SUM(B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender ) AS Credito,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode and A.RefDate <= @dendbs ) AS Final
FROM OACT T0
WHERE T0.Postable = 'Y' AND T0.GroupMask IN (1,2,3)

UNION ALL

SELECT
T0.AcctCode AS Cuenta,
T0.acctName AS Nombre,
'0' AS Inicial,
( SELECT ISNULL(SUM(B.Debit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS Debito,
( SELECT ISNULL(SUM(B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS Credito,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS Final
FROM OACT T0
WHERE T0.Postable = 'Y' AND T0.GroupMask IN (4,5,6,7,8,9,10)
ORDER BY T0.AcctCode
1 me gusta

Hola muy buenos días @meqs

Muchas gracias por tu ayuda.

Tengo la siguiente situación ocupo que el valor de las fechas que toman las variables sea digitado por el usuario, para que pueda escoger para que periodo quiere generar del reporte, por lo que veo ahí tengo el gran problema, te explico el uso que se le dara al query.

El query una vez que funcione dentro de SAP BO, tengo que pasarlo a un informe de crystal report, darle formato y subier a SAP para que este disponible para los compañeros de contabilidad y auditoria.

Me puedes ayudar con la parte de que al correr el query le solicite al usuario los datos.

Te agradezco mucho tu ayuda brinda hasta aqui.

Saludos

Hola buen dia @betojavicr y @meqs

Actualmente yo estoy en ese requerimiento y funciono esa query conmigo pero tengo una duda si quiero que lo sume a las cuentas padres en este caso de mi ejemplo o como las tengo configuradas quisiera que supe la cuenta Caja que es mi cuenta padre la sumatoria de las 5 cuentas que tengo ahi mismo caso con las demas, por ejemplo inversion que me haga la sumatoria de la cuenta que tengo registrada

anexo imagen quiero que me supe esa parte por cuenta que lo compone.

saludos

@betojavicr en cuanto tenga un hueco te reviso esas fechas.
Son siempre referidas a un periodo anual?
por lo que veo quieres especificar 4 fechas…¿?

Para poder hacer eso @wlberth90 tienes que hacer un crystal y tienes que hacer agrupación por los niveles del plan de cuentas o fathertype.

Recuerda adaptar el query a tus requerimientos y si posteas algo de código vaya especificado como tal.

Cuando lo tengas finalizado comparte la solución para el futuro.

/* SELECT  RefDate FROM OJDT AS  */ 
declare @dbeger datetime
set @dbeger = /* AS.RefDate */  '[%0]'
declare @dender datetime
set @dender = /* AS.RefDate */  '[%1]'
declare @dbegbs datetime
set @dbegbs = /* AS.RefDate */  '[%2]'
declare @dendbs datetime
set @dendbs = /* AS.RefDate */  '[%3]'

SELECT
T0.AcctCode AS Cuenta,
T0.acctName AS Nombre,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode and A.RefDate <= @dbegbs ) AS Inicial,
( SELECT ISNULL(SUM(B.Debit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender ) AS Debito,
( SELECT ISNULL(SUM(B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender ) AS Credito,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode and A.RefDate <= @dendbs ) AS Final
FROM OACT T0
WHERE T0.Postable = 'Y' AND T0.GroupMask IN (1,2,3)

UNION ALL

SELECT
T0.AcctCode AS Cuenta,
T0.acctName AS Nombre,
'0' AS Inicial,
( SELECT ISNULL(SUM(B.Debit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS Debito,
( SELECT ISNULL(SUM(B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS Credito,
( SELECT ISNULL(SUM(B.Debit - B.Credit),0) FROM OJDT A INNER JOIN JDT1 B ON A.TransId = B.TransId WHERE B.Account = T0.AcctCode AND A.RefDate >= @dbeger AND A.RefDate <= @dender AND A.TransType <> -3 ) AS Final
FROM OACT T0
WHERE T0.Postable = 'Y' AND T0.GroupMask IN (4,5,6,7,8,9,10)
ORDER BY T0.AcctCode