cancel
Showing results for 
Search instead for 
Did you mean: 

Manejo de Presupuestos

Former Member
0 Kudos

Estimados, al configurar el SAP Bo 9.0, el presupuesto me permite marcar desde una Solicitud de compra, pedido, entrada de mercancía y Finanzas.

1 .-  Deseo saber como hacer para que desde el ingreso de una solicitud de compra, este documento se detenga cuando se sobrepase el presupuesto

2.- como asignarles las cuentas contables a estos documentos (Solicitud de compra, pedido, entrada de mercancía)

3.- se ha de programar estos controles o el sistema estándar te da las herramientas para utilizarlo directamente.

He encontrado vídeos y documentación pero el control solo lo muestran digitado el Voucher y yo deseo hacer el moldeamiento con los documentos propios de SAP

atte.

Fernando Levano

Accepted Solutions (1)

Accepted Solutions (1)

armandomuozsule
Active Participant
0 Kudos

Buena tarde Fernando,Tus ordenes de compra tendrán un preliminar  porque estarán bajo un modelo de autorización o serán ordenes de compra directas?, lo que tu deseas realizar lo puedes hacer perfectamente con un Transaction, cualquier ayuda estoy para ayudarte.

Saludos

Former Member
0 Kudos

Muchas gracias por tu pronta respuesta Armando,

mis solicitudes de compras y las ordenes de compra pasan por flujo de autorizaciones

podrias indicarme como seria el Transaction para controlar estos documentos?

armandomuozsule
Active Participant
0 Kudos

Te adjunto el transaction que necesitas para preliminares que son 112 e interactua con los objtype 22 que son las ordenes de compra, ademas con las cuentas contables , este transaction revisa linea por linea , además los departamentos a los cuales se les asigno el presupuesto, espero que te sirva.

DECLARE @FechaPRESUPUESTO AS DATETIME

DECLARE @LineaOC VARCHAR(10)

DECLARE @CuentaOC VARCHAR(50)

IF @transaction_type in('A','U') AND @object_type = '112'  

BEGIN

SET @FechaPRESUPUESTO = (SELECT DocDate FROM ODRF WHERE DocEntry = @list_of_cols_val_tab_del AND ObjType = '22')

--SI NO INGRESAN LA CUENTA DE MAYOR EN LAS LINEAS-------------------------------------------------------

IF EXISTS(

  SELECT

  *

  FROM ODRF T0

  INNER JOIN DRF1 T1 ON T1.DocEntry = T0.DocEntry

  WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T0.ObjType = '22' AND T0.DocType = 'S' AND T1.AcctCode IS NULL

)

BEGIN

  SET @LineaOC = (

  SELECT

  TOP 1 LineNum + 1

  FROM ODRF T0

  INNER JOIN DRF1 T1 ON T1.DocEntry = T0.DocEntry

  WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T0.ObjType = '22' AND T0.DocType = 'S' AND T1.AcctCode IS NULL

  )

  SET @error = 22

  SET @error_message = 'La Linea ' +  ISNULL(@LineaOC,'') + ' no tiene Cuenta de Mayor Asignada'

END

-------------------------------------------------------------------------------------------------------

--SI NO EXISTE PRESUPUESTO EN LA CUENTA Y DEPARTAMENTO INGRESADO

IF EXISTS(

  SELECT * FROM(

  SELECT

  T0.DocEntry,

  T1.LineNum

  FROM ODRF T0

  INNER JOIN DRF1 T1 ON T1.DocEntry = T0.DocEntry

  INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode AND T2.Budget = 'Y' AND T2.GroupMask IN  ('5','6','7','8')

  WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T0.ObjType = '22' AND T0.DocType = 'S'

  )A

  LEFT JOIN(

  SELECT

  T0.DocEntry,

  T1.LineNum,

  T2.AbsId

  FROM ODRF T0

  INNER JOIN DRF1 T1 ON T1.DocEntry = T0.DocEntry

  INNER JOIN OACT T3 ON T3.AcctCode = T1.AcctCode AND T3.Budget = 'Y' AND T3.GroupMask IN  ('5','6','7','8')

  INNER JOIN(

  SELECT

  T0.AbsId,

  T0.OcrCode,

  T1.AcctCode

  FROM OBGS T0

  INNER JOIN OBGT T1 ON T0.AbsId = T1.Instance

  WHERE YEAR(T0.FinancYear) = YEAR(@FechaPRESUPUESTO)

  ) T2 ON T2.OcrCode = T1.OcrCode AND T2.AcctCode = T1.AcctCode

  WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T0.ObjType = '22' AND T0.DocType = 'S'

  )B ON A.LineNum = B.LineNum

  WHERE B.DocEntry IS NULL

)

BEGIN

  SET @LineaOC = (

  SELECT

  TOP 1 A.LineNum

  FROM(

  SELECT

  T0.DocEntry,

  T1.LineNum

  FROM ODRF T0

  INNER JOIN DRF1 T1 ON T1.DocEntry = T0.DocEntry

  INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode AND T2.Budget = 'Y' AND T2.GroupMask IN  ('5','6','7','8')

  WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T0.ObjType = '22' AND T0.DocType = 'S'

  )A

  LEFT JOIN(

  SELECT

  T0.DocEntry,

  T1.LineNum,

  T2.AbsId

  FROM ODRF T0

  INNER JOIN DRF1 T1 ON T1.DocEntry = T0.DocEntry

  INNER JOIN OACT T3 ON T3.AcctCode = T1.AcctCode AND T3.Budget = 'Y' AND T3.GroupMask IN  ('5','6','7','8')

  INNER JOIN(

  SELECT

  T0.AbsId,

  T0.OcrCode,

  T1.AcctCode

  FROM OBGS T0

  INNER JOIN OBGT T1 ON T0.AbsId = T1.Instance

  WHERE YEAR(T0.FinancYear) = YEAR(@FechaPRESUPUESTO)

  ) T2 ON T2.OcrCode = T1.OcrCode AND T2.AcctCode = T1.AcctCode

  WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T0.ObjType = '22' AND T0.DocType = 'S'

  )B ON A.LineNum = B.LineNum

  WHERE B.DocEntry IS NULL

  )

  SET @error = 22

  SET @error_message = 'No se ha creado presupuesto para la Cuenta de Mayor y Departamento de la Linea ' +  ISNULL(@LineaOC,'')

END

--------------------------------------------------------------------------------------------------------

IF EXISTS(

  SELECT

  *

  FROM(

  SELECT

  T1.AcctCode,

  T1.OcrCode,

  SUM(T1.LineTotal) Total

  FROM ODRF T0

  INNER JOIN DRF1 T1 ON T1.DocEntry = T0.DocEntry

  WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T0.ObjType = '22' AND T0.DocType = 'S'

  GROUP BY

  T1.AcctCode,

  T1.OcrCode

  )A

  INNER JOIN (

  SELECT

  T0.AbsId,

  T0.OcrCode,

  T1.AcctCode,

  T2.DebLTotal

  FROM OBGS T0

  INNER JOIN OBGT T1 ON T1.Instance = T0.AbsId

  INNER JOIN BGT1 T2 ON T2.BudgId = T1.AbsId AND T2.Line_ID = (MONTH(@FechaPRESUPUESTO)-1)

  WHERE YEAR(T0.FinancYear) = YEAR(@FechaPRESUPUESTO)

  )B ON B.AcctCode = A.AcctCode AND B.OcrCode = A.OcrCode

  INNER JOIN(

  SELECT

  Account,

  ProfitCode,

  SUM(Debit-Credit) Used

  FROM JDT1 T0

  WHERE (YEAR(T0.RefDate) = YEAR(@FechaPRESUPUESTO)) AND (MONTH(T0.RefDate) = MONTH(@FechaPRESUPUESTO))

  GROUP BY

  Account,

  ProfitCode

  )C ON C.Account = A.AcctCode AND C.ProfitCode = A.OcrCode

  WHERE (A.Total + ISNULL(C.Used,'0')) > B.DebLTotal

)

BEGIN

  SET @CuentaOC = (

  SELECT

  TOP 1 CAST(D.AcctName AS VARCHAR(20)) + ' - ' + CAST(A.OcrCode AS VARCHAR(10))

  FROM(

  SELECT

  T1.AcctCode,

  T1.OcrCode,

  SUM(T1.LineTotal) Total

  FROM ODRF T0

  INNER JOIN DRF1 T1 ON T1.DocEntry = T0.DocEntry

  WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T0.ObjType = '22' AND T0.DocType = 'S'

  GROUP BY

  T1.AcctCode,

  T1.OcrCode

  )A

  INNER JOIN (

  SELECT

  T0.AbsId,

  T0.OcrCode,

  T1.AcctCode,

  T2.DebLTotal

  FROM OBGS T0

  INNER JOIN OBGT T1 ON T1.Instance = T0.AbsId

  INNER JOIN BGT1 T2 ON T2.BudgId = T1.AbsId AND T2.Line_ID = (MONTH(@FechaPRESUPUESTO)-1)

  WHERE YEAR(T0.FinancYear) = YEAR(@FechaPRESUPUESTO)

  )B ON B.AcctCode = A.AcctCode AND B.OcrCode = A.OcrCode

  INNER JOIN(

  SELECT

  Account,

  ProfitCode,

  SUM(Debit-Credit) Used

  FROM JDT1 T0

  WHERE (YEAR(T0.RefDate) = YEAR(@FechaPRESUPUESTO)) AND (MONTH(T0.RefDate) = MONTH(@FechaPRESUPUESTO))

  GROUP BY

  Account,

  ProfitCode

  )C ON C.Account = A.AcctCode AND C.ProfitCode = A.OcrCode

  INNER JOIN OACT D ON D.AcctCode = A.AcctCode

  WHERE (A.Total + ISNULL(C.Used,'0')) > B.DebLTotal

  )

  SET @error = 22

  SET @error_message = 'La Cuenta ' + ISNULL(@CuentaOC,'') + ', excede el presupuesto establecido'

  END

END

Answers (0)