Hola amigos, tengo un dilema que no he sido capas de solucionar, el cual es necesito un modelo de autorizacion que se active cuando el Codigo del Articulo tenga ‘ML%‘ que la bodega o Almacen sea 201 y que el campo Código de unidad de medida (UomCode) sea ‘Unidad‘, ya probe varias formas pero si se activa el modelo para todas las facturas no valida que tengas esa condiciones sino que siempre entra a validacion, agradeceria su ayuda con este tema les dejo por aca como estructure el script para que se active:
DECLARE @respuesta VARCHAR(5),
@itemcode nvarchar(25),
@whscode int,
@UomCode nvarchar(15)
SET @respuesta = 'FALSE'
SET @itemcode = $[$38.1.0]
SET @whscode = $[$38.24.0]
SET @UomCode = $[$38.1470002145.11]
IF @itemcode like 'ML%' or @whscode = '201' or @Uomcode = 'Unidad'
Begin
SET @respuesta = 'TRUE'
End
Select @respuesta
Agradeceria me indicaron en donde esta mi error o si hay una forma mas facil de realizalo agradezco el apoyo.
Me parece que si declara @whscode como INT la variable intentará guardar números enteros y luego lo comparará contra un STRING ‘201’, el 201 entre comillas. Porque podría tener almacenes que pueden llamarse “A1”, “01-B”, etc. Al declarar su variable como INT, si SAP intenta pasarle un código que contenga una letra podría fallar con un error de conversión.
Una posible idea sería declarar las variables de códigos (artículos, almacenes, socios de negocio) como NVARCHAR.
Si va con respecto a las facturas tal vez en lugar de declarar variables de formulario que podrían hacer cosas raras, por qué no hace una consulta sobre las tablas PCH1 vinculadas al objeto que se está creando o actualizando, usando a lo mejor WHERE EXISTS
Una idea:
SELECT 'TRUE'
WHERE EXISTS (
SELECT 1
FROM PCH1 T1
WHERE T1."DocEntry" = $[OPCH.DocEntry] -- al documento actual
AND T1."ItemCode" LIKE 'ML%'
AND T1."WhsCode" = '201'
AND T1."UomCode" = 'Unidad'
)
OR EXISTS (
-- si el documento es nuevo y aún no tiene DocEntry
SELECT 1
FROM DRF1 T1
WHERE T1."DocEntry" = $[ODRF.DocEntry]
AND T1."ItemCode" LIKE 'ML%'
AND T1."WhsCode" = '201'
AND T1."UomCode" = 'Unidad'
)
Si adapta la idea, es posible que el modelo de autorización se active si al menos una línea de la factura cumple con todos tus criterios. No dependerá de si el usuario hizo clic en la fila o no; ya que revisará el documento antes de crearlo y se ahorra la declaración de variables y el manejo de IDs de campos.