Store Procedure Transaccion notification Sap Hana Plan de Cuentas

Bienvenidos a nuestro primer SP de Hana Sap el cual a continuación procederemos a revisar por partes la estructura del query este es tan sencillo como copy paste en este script no utilizamos campos de usuario como ya sabran al igual que Sap Sql b1 los campos de usuarios llevan en la base de datos llevan la (U_ ) agregados al nombre del campo por ejemplo U_NIT o U_CUI.

iniciaremos con la siguiente información Plan de cuentas este conforma la información de las cuentas contables de SAP pero los contadores quieren validar ciertas columnas las cuales a la hora de crear cuentas de nivel 1 al 5 estas no se equivoquen y después de aplicar transacciones sean irreversibles cambiar la arquitectura o el No de Cuenta ahora bien el ejemplo que les presento continuación es para validar en transaccion notification creando SP por aparte y no llenar el sp de Transaction notificacion con 10,000 lineas de código que después a la hora de dar mantenimiento o quitar o suspender alguna validación sea de manera mas sencilla.

adicional encontras validaciones para validar centros de Costos y Proyectos.

CREATE PROCEDURE "SBO_SP_TransactionNotification_DM_CATALOGO_CONTABLE" 

( 
in object_type nvarchar(20), -- SBO Object Type 
in transaction_type nchar(1),-- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose 
in num_of_cols_in_key int, 
in list_of_key_cols_tab_del nvarchar(255), 
in list_of_cols_val_tab_del nvarchar(255), 
out error integer, 
out error_message varchar(255) 
) 

LANGUAGE SQLSCRIPT 

AS 

 
CeCoD1Habilitado nvarchar(1); 
CeCoD2Habilitado nvarchar(1); 
CeCoD3Habilitado nvarchar(1); 
CeCoD4Habilitado nvarchar(1); 
CeCoD5Habilitado nvarchar(1); 
PrjHabilitado nvarchar(1); 
AcctCode nvarchar(15); 
AcctName nvarchar(100); 
FormatCode nvarchar(210); 
ActType nvarchar(1); 
CuentaActiva nvarchar(1); 
CuentaPadre nvarchar(15); 
Moneda nvarchar(3); 
Nivel integer; 
D1Obligatoria nvarchar(1); 
D2Obligatoria nvarchar(1); 
D3Obligatoria nvarchar(1); 
D4Obligatoria nvarchar(1); 
D5Obligatoria nvarchar(1); 
ProyectoObligatorio nvarchar(1); 
CCD1Descripcion nvarchar(50); 
CCD2Descripcion nvarchar(50); 
CCD3Descripcion nvarchar(50); 
CCD4Descripcion nvarchar(50); 
CCD5Descripcion nvarchar(50); 
CuentaDesactivada nvarchar(1); 

Begin 

error := 0; 
error_message := N'Ok'; 

 

--Determinar si es obligatorio las dimensiones de centro de costo y proyecto a nivel empresa 

select "DRBlock1" 

  ,"DRBlock2" 
  ,"DRBlock3" 
  ,"DRBlock4" 
  ,"DRBlock5" 
  ,"PrjBlock" 

into CeCoD1Habilitado 
    ,CeCoD2Habilitado 
    ,CeCoD3Habilitado 
    ,CeCoD4Habilitado 
    ,CeCoD5Habilitado 
    ,PrjHabilitado 

from OADM; 


select T0."AcctCode" 
      ,T0."AcctName" 
      ,T0."FormatCode" 
      ,IFNULL(T0."ActType",'N') 
      ,T0."Postable" 
      ,T0."FatherNum" 
      ,T0."ActCurr" 
      ,T0."Levels" 
      ,T0."Dim1Relvnt" 
      ,T0."Dim2Relvnt" 
      ,T0."Dim3Relvnt" 
      ,T0."Dim4Relvnt" 
      ,T0."Dim5Relvnt" 
      ,T0."PrjRelvnt" 
      ,IFNULL(T0."FrozenFor",'N') 

into AcctCode 
    ,AcctName 
    ,FormatCode 
    ,ActType 
    ,CuentaActiva 
    ,CuentaPadre 
    ,Moneda 
    ,Nivel 
    ,D1Obligatoria 
    ,D2Obligatoria 
    ,D3Obligatoria 
    ,D4Obligatoria 
    ,D5Obligatoria 
    ,ProyectoObligatorio   
    ,CuentaDesactivada     

from OACT T0 

where T0."AcctCode" = :list_of_cols_val_tab_del; 

 
--Obtener Descripcion Dimensiones de Centro de Costo 
Select T0."DimDesc" into CCD1Descripcion From ODIM T0 Where T0."DimCode"=1; 
Select T0."DimDesc" into CCD2Descripcion From ODIM T0 Where T0."DimCode"=2; 
Select T0."DimDesc" into CCD3Descripcion From ODIM T0 Where T0."DimCode"=3; 
Select T0."DimDesc" into CCD4Descripcion From ODIM T0 Where T0."DimCode"=4; 
Select T0."DimDesc" into CCD5Descripcion From ODIM T0 Where T0."DimCode"=5; 

 
--/************************************/ 

--/*** RESTRICCIONES Y VALIDACIONES ***/ 

--/************************************/ 


If :Nivel=2 and LENGTH(:AcctCode)<>2 
Then 
error := 01001; 
error_message := 'El codigo de las cuentas de nivel 2 debe ser de 2 digitos.'; 
End if; 

 
If :Nivel=3 and LENGTH(:AcctCode)<>3 
   and :error=0 
Then 
error := 01002; 
error_message := 'El codigo de las cuentas de nivel 3 debe ser de 3 digitos.'; 
End if; 

 
If :Nivel=4 and LENGTH(:AcctCode)<>5 
   and :error=0 
Then 
error := 01003; 
error_message := 'El codigo de las cuentas de nivel 4 debe ser de 5 digitos.'; 
End if; 


If :Nivel=5 and LENGTH(:AcctCode)<>8 
   and :error=0 
Then 
error := 01004; 
error_message := 'El codigo de las cuentas de nivel 5 debe ser de 8 digitos.'; 
End if; 

 
If :Nivel<5 and :CuentaActiva='Y' 
   and :error=0 
Then 
error := 01001; 
error_message := 'Solo las cuentas de nivel 5 pueden ser cuentas activas.'; 
End if; 


If :Nivel=5 
And (LEFT(:FormatCode,1) = '4' or LEFT(:FormatCode,1) = '5' or LEFT(:FormatCode,1) = '6' or LEFT(:FormatCode,1) = '7' or LEFT(:FormatCode,1) = '8') 
    And :ActType = 'N' 
    And :CuentaDesactivada='N' 
    And :error=0 
Then 
error := 01002; 
error_message := 'Las cuentas de resultado deben ser de ingresos o egresos. Ubicación -> Clase de Cuenta.'; 
Endif; 


--/*** Para Validar Proyectos y Centros de Costos ***/ 

If :CeCoD1Habilitado = 'B' 
  and IFNULL(:D1Obligatoria,'N') = 'N' 
  and :ActType <> 'N' 
  and :CuentaDesactivada='N'   
  and :error=0   
then 
error := 01003; 
error_message := 'El Centro de Costo Dimension 01 [' || IFNULL(:CCD1Descripcion,'') || '] Debe ser Obligatorio.'; 
End if; 

 
If :CeCoD2Habilitado = 'B' 
  and IFNULL(:D2Obligatoria,'N') = 'N' 
  and :ActType <> 'N' 
      and :CuentaDesactivada='N' 
  and :error=0     
then 
error := 01004; 
error_message := 'El Centro de Costo Dimension 02 [' || IFNULL(:CCD2Descripcion,'') || '] Debe ser Obligatorio.'; 
End if; 



If :CeCoD3Habilitado = 'B' 
  and IFNULL(:D3Obligatoria,'N') = 'N' 
  and :ActType <> 'N' 
      and :CuentaDesactivada='N'    
  and :error=0     
then 
error := 01005; 
error_message := 'El Centro de Costo Dimension 03 [' || IFNULL(:CCD3Descripcion,'') || '] Debe ser Obligatorio.'; 
End if; 

 

If :CeCoD4Habilitado = 'B' 
  and IFNULL(:D4Obligatoria,'N') = 'N' 
  and :ActType <> 'N' 
      and :CuentaDesactivada='N'     
  and :error=0     
then 
error := 01006; 
error_message := 'El Centro de Costo Dimension 04 [' || IFNULL(:CCD4Descripcion,'') || '] Debe ser Obligatorio.'; 

End if; 



If :CeCoD5Habilitado = 'B' 
  and IFNULL(:D5Obligatoria,'N') = 'N' 
  and :ActType <> 'N' 
      and :CuentaDesactivada='N'     
  and :error=0     
then 
error := 01007; 
error_message := 'El Centro de Costo Dimension 05 [' || IFNULL(:CCD5Descripcion,'') || '] Debe ser Obligatorio.'; 
End if; 

 

if :PrjHabilitado = 'B'  
and :ProyectoObligatorio='N' 
    and :ActType <> 'N' 
      and :CuentaDesactivada='N'   
    and :error=0    
then 
error := 01009; 
error_message := 'El Proyecto Debe ser Obligatorio.'; 
End if; 



end; 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *