Está en la página 1de 9

SAP Business One

Documentacin SBO TIPS

Proporcionado por Lazcano Rivera.


DOCUMENTACIN SBO TIPS

Procedimiento de Aprobacin para Filas en


Documentos de Marketing

Caso:
Se requiere definir un procedimiento para aprobar descuentos mayores otorgados a un artculo
de una orden de venta (OV) de acuerdo al descuento que le corresponde a su grupo de artculo
definido en las Listas de Precios Especiales (Inventory, Price List, Special Prices, Define Discount
Groups)

Solucin:
La solucin pasa por detectar con algn mecanismo la diferencia entre el descuento definido para
el grupo de artculos y el descuento que otorga el vendedor al preparar la OV, luego emplear este
mecanismo de deteccin del descuento mayor para cada tem de la OV para disparar un
procedimiento de aprobacin mediante un Consulta (query) de Usuario.

Primera parte: Evaluar la validez del descuento por cada lnea de la OV

1. Definir dos campos definidos por el usuario para los documentos de Marketing. Un campo
definido a nivel de Cabecera (Title) y otro a nivel de detalle (Row):
Marketing Documents > Title >
DsctItmT Dsct. x tem Alphanumeric (10)
Marketing Documents > Row >
DsctItmR Dsct. x tem Alphanumeric (10)

NOTAS:

1. En el campo definido por el usuario para validar el descuento a nivel de tem


(DsctItmR) se indicar un valor VALIDO o INVALIDO para indicar el estado
del descuento otorgado por el vendedor.
2. La validez del documento se har verificando la validez del descuento otorgado a las
lneas de tem (valor de DsctItmR), bastar que el descuento para una sola lnea de
tem sea INVALIDO para que el validacin de descuento por tem a nivel de
cabecera del documento (DsctItmT) sea INVALIDO tambin.

3. Debido a que no se pueden referenciar desde la cabecera, a travs de una consulta,


los datos del detalle de un documento en SBO mientras estos datos no existan
fsicamente en la BD, y como el procedimiento de aprobacin debe dispararse antes
de que el documento sea guardado, entonces, se requiere almacenar los datos del
detalle en una tabla auxiliar para poder evaluar las lneas de tem a travs de una
consulta de usuario.

2. Crear estructura de datos auxiliar para almacenar los datos de la OV que necesitan ser
evaluados, en este caso solo los datos para el detalle del documento.

BD auxiliar:

-- Creacin de BD auxiliar o temporal


IF EXISTS (SELECT *
FROM master..sysdatabases
WHERE name = 'SBOTemp')
DROP DATABASE SBOTemp
GO

CREATE DATABASE SBOTemp


GO

Tabla auxiliar:

-- Creacin de Tabla temporal para las lneas de Sales Order


USE SBOTemp
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name = 'SBO_RDR1_TMP' AND type = 'U')
DROP TABLE SBO_RDR1_TMP
GO
CREATE TABLE SBO_RDR1_TMP (
DocNum Integer, -- Nmero de Documento
DocDate DateTime, -- Fecha del documento
RowNum SmallInt, -- Nmero de lnea
ItemCode Varchar(20), -- Cdigo de artculo
Result Varchar(10) ) -- Resultado de validacin
GO

3. Para evaluar la validez del descuento por cada lnea de tem y para almacenar esos datos en
la tabla auxiliar se crear un store procedure en la BD de SBO con el siguiente cdigo:

-- Para Validar el descuento x Lnea de Sales Order


USE <SBO database>
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name = 'SP_SBO_VAL_DISCOUNT_SO_ITEM' AND type = 'P')
DROP PROCEDURE SP_SBO_VAL_DISCOUNT_SO_ITEM
GO
-- Store Procedure para validar el descuento por item de la Orden
CREATE PROCEDURE SP_SBO_VAL_DISCOUNT_SO_ITEM
@CardCode Varchar(20), -- $[$4.0.0] BP Code
@DocNum Integer , -- $[$8.0.0] Document Number
@DocDate DateTime , -- $[$10.0.0] Posting Date
@RowNum SmallInt , -- $[$38.0.0] Row Number (order detail)
@ItemCode Varchar(20), -- $[$38.1.0] Item Code (order detail)
@ItemDsct Decimal(9,6) -- $[$38.15.0] % Discount (order detail)
AS
SET NOCOUNT ON
DECLARE @ItmGrpDsct Decimal(9,6) -- % Item Group Discount
DECLARE @Result Varchar(10) -- Valid o Invalid result
SET @Result = ' '
-- Verificacin de parmetros
IF @CardCode != '' AND @ItemCode != ''
BEGIN
-- Query for Item Group Discount
SELECT
@ItmGrpDsct = OSPG.Discount
FROM
OSPG
,OITM
WHERE
OSPG.ObjKey = OITM.ItmsGrpCod
AND OSPG.ObjType = 52 -- Code for Item Groups
AND OSPG.CardCode = @CardCode
AND OITM.ItemCode = @ItemCode
-- Evaluation for Result
IF @ItemDsct > @ItmGrpDsct
SET @Result = 'INVALIDO'
ELSE
SET @Result = 'VALIDO'
-- Tabla temporal
---- Verifica si existe el dato en tabla temporal,
---- si existe lo actualiza, sino lo inserta
IF EXISTS( SELECT 'X'
FROM SBOTemp.dbo.SBO_RDR1_TMP
WHERE DocNum = @DocNum
AND RowNum = @RowNum )
BEGIN
-- Actualiza el registro existente
UPDATE SBOTemp.dbo.SBO_RDR1_TMP SET
ItemCode = @ItemCode,
Result = @Result
WHERE DocNum = @DocNum
AND RowNum = @RowNum
END
ELSE
BEGIN
-- Inserta un nuevo registro en la tabla temporal
INSERT INTO SBOTemp.dbo.SBO_RDR1_TMP VALUES (
@DocNum,
@DocDate,
@RowNum,
@ItemCode,
@Result )
END
---- Elimina los registros que no son de la fecha DocDate
DELETE FROM SBOTemp.dbo.SBO_RDR1_TMP
WHERE DocDate < @DocDate
OR RowNum = 0
END
-- Show Result
--------------
SELECT @Result
GO

4. Crear, va el Query Manager, la siguiente consulta:

Donde:
$[$4.0.0] BP Code de la OV
$[$8.0.0] Nmero de documento
$[$10.0.0] Fecha de documento
$[$38.1.0] Item Code en el detalle de la OV
$[$38.15.0] % de descuento otorgado al Item en la OV

Para el ejemplo grabar como: Val. Dscto. Sales Order Item.

5. En la OV, definir un formatted search a la columna definida por el usuario para el detalle
(DsctItmR) que haga la bsqueda por la consulta grabada en el paso anterior, como se
muestra en la imagen siguiente:
NOTAS:

1. A pesar de que el formatted search es sobre un campo del detalle, la condicin de


Auto Refresh se hace sobre un campo de la cabecera (Document Total), esto se
debe a la caracterstica de las dos opciones de Auto Refresh:
When Field Changes: ocurre cuando algn campo de la cabecera cambia,
independientemente de si el campo tiene el foco o no.
When Exiting Altered Column: ocurre cuando se sale de un campo del detalle cuyo valor
ha cambiado, es decir el campo sobre el que hace la condicin de Auto Refresh debe
haber tenido el foco y haber cambiado su valor original.

2. Para la solucin planteada la primera opcin del Auto Refresh era la funcionaba
mejor, ya que, para efectos de que se ejecutara la consulta que alimenta el campo
con VALIDO o INVALIDO se requera que sta funcionara cada vez que se
entraba una lnea nueva al documento, y por lo tanto cambiaba el valor del campo
Document Total, lo mismo pasaba cuando se alteraba el precio o la cantidad del
tem.

3. Con opcin When Exiting Altered Column exista el inconveniente de que la


consulta solo se ejecutaba cuando el precio del tem cambiaba, por lo tanto el campo
definido por el usuario no mostraba el valor VALIDO, excepto en la primera lnea
del documento.

6. Crear un conjunto de datos de prueba.


En: Inventory, Price List, Special Prices, Define Discount Groups, definir para un
cliente cualquiera un descuento de un porcentaje de, digamos, 30%, para un grupo
de items.
Ubicar en el Maestro de Items un artculo que pertenezca al grupo al que se otorg el
descuento especial.
En la OV habilitar solo la visualizacin de los siguientes campos: Pre-Discount
Price, y Discount %. Esto solo para efectos de ver como va cambiando el % de
descuento cuando se cambia el precio unitario de item.

7. Crear una OV para el cliente al que se le creo una lista de precios especial en el paso
anterior. En el detalle indicar el cdigo de tem seleccionado tambin en el paso anterior,
el sistema calcula automticamente el precio de acuerdo a la lista precios especial, la
columna definida por el usuario (DsctItmR), debe aparecer con el valor VALIDO, si se
disminuye el precios sugerido por el sistema el valor de esa columna cambia a
INVALIDO

Segunda parte: Disparar el procedimiento de aprobacin para el documento

8. Crear, va el Query Manager, la siguiente consulta:


Donde:
$[$8.0.0] Nmero de documento

Para el ejemplo grabar como Val. Dscto. Sales Order.


Esta consulta se hace sobre la tabla auxiliar creada en el paso 2 y es alimentada por el store
procedure creado en el paso 3.

9. Definir un formatted search en el campo definido por el usuario para la cabecera


(DsctItmT) que haga la bsqueda por la consulta grabada en el paso anterior, como se
muestra en la imagen siguiente:

10. Probar ahora con los mismos datos de los pasos 6 y 7, habilitar los campos definidos por el
usuario para la cabecera del documento.
Se deben configurar los campos definidos por el usuario para ser de solo lectura y no permitir su
manipulacin por parte del usuario que ingresa la OV, si se considera necesario se podran ocultar
estos campos para ese usuario y estar solo disponibles para el aprobador del documento.

11. Ahora definir una consulta sobre el campo definido por el usuario para usarla como
condicin de aprobacin:

Para el ejemplo grabar como Aprobar Descuento Invalido.

12. Crear el procedimiento de aprobacin y asignar como condicin de aprobacin la consulta


creada en el paso anterior.
Probar el procedimiento de aprobacin.

SBO_TIPS_Approval Procedure en 9 de 9
Filas.doc

También podría gustarte