Estoy tratando de realizar una validacion en SAP B1 HANA, para impedir de que se genere una factura sin un pedido previo ya cree el SP y aun asi me sigue dejando hacer la factura, por favor si alguien puede darme una mano con estoy plis.
El codigo que tengo implementado es este:
ALTER PROCEDURE "SP_MisValidaciones"
(
object_type nvarchar(30), -- SBO Object Type
transaction_type nchar(1), -- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose
num_of_cols_in_key int,
list_of_key_cols_tab_del nvarchar(255),
list_of_cols_val_tab_del nvarchar(255),
OUT error int,
OUT error_message nvarchar(200)
)
LANGUAGE SQLSCRIPT
AS
BEGIN
DECLARE validacionDoc INT;
IF (:error = 0) and (:object_type = '13') and (:transaction_type = 'A')
THEN
SELECT T1."BaseType" INTO validacionDoc
FROM OINV T0 INNER JOIN INV1 T1 ON T0."DocEntry" = T1."DocEntry" WHERE
T0."DocEntry" = :list_of_cols_val_tab_del AND T0."CANCELED" = 'N';
IF(:validacionDoc <> 17)
THEN BEGIN
error := 99999;
error_message := 'No puede facturar sin haber un pedido previo';
return;
END;
END IF;
END IF;
END;
Hola @xMythCraftx, si añades lo siguiente al código y lo intentas.
O revisa en el IF de la evaluación de la variable de retorno del Query, porque al parecer estas evaluando como si fuera un número y es posible que venga vacía, intenta evaluar tambien con :variable = ‘’ o con :variable IS NULL
If @object_type = '13' AND @transaction_type IN ('A','U')
Begin
If Exists(Select ItemCode From INV1 T0 Where T0.BaseEntry Is Null And T0.DocEntry = @list_of_cols_val_tab_del)
Begin
Set @error = '1003'
Set @error_message = 'La Factura no puede ser creada sin un pedido'
End
End
Hola @xMythCraftx debes tener en cuenta el campo BaseEntry y/o BaseType a nievel de detalle. Aca un ejemplo de un SP para validar que las facturas de reserva por compras tengan vinculado una Orden de compra.
----------------------------------------------------------------------------------
/*
* En las Facturas de Reserva por compra
* Validar que tenga relacionada una orden de compra.
*
*
-- ***********************************************
-- * @autor: Diego Achury *
-- * @versión: 1.0 *
-- * @fecha: 2019-01-21 *
-- ***********************************************
*/
IF :object_type = '18' AND (:transaction_type='A') THEN
select
ifnull(count(*),0) into valida
from "SBO_COLOMBIA".PCH1 T0
left join "SBO_COLOMBIA".OPCH T1 on T0."DocEntry" = T1."DocEntry"
where T0."DocEntry" = :list_of_cols_val_tab_del
and T0."BaseType" <> 22
and T1."CANCELED" = 'N'
and T1."DocType" = 'I';
IF :valida > 0 then
error := 18;
error_message := 'SP_3* La Factura de reserva debe tener Doc base Orden de Compra';
END IF;
END IF;
----------------------------------------------------------------------------------