on 03-31-2015 10:54 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
User | Count |
---|---|
108 | |
12 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.