cancel
Showing results for 
Search instead for 
Did you mean: 

Transaction notification, validación imputaciones

javier_facessantos
Contributor
0 Kudos

Hola a todos

Estoy intentando definir una consulta en el transaction notification que detecte cuando se esté intentando añadir una entrada de mercancías que tenga definido un proyecto distinto al de su pedido de referencia eimpida añadir el documento mostrando un mensaje de error. Esto es lo que llevo hasta el momento:

IF  @object_type = '20' AND (@transaction_type = N'A' OR @transaction_type = N'U')

BEGIN

                    IF(( SELECT COUNT(1) from [PDN1] T0 INNER JOIN [OPDN] T1 ON T0.[DocEntry] = T1.[DocEntry] LEFT JOIN POR1 T2 ON T2.[DocEntry] = T0.[BaseEntry] AND T2.[BaseType] = '20' AND T2.[LineNum] = T0.[BaseLine] LEFT JOIN OPOR T3 ON T2.[Docentry] = T3.[DocEntry] WHERE T0.[DocEntry] = @list_of_cols_val_tab_del AND (T0.[Project] <> T2.[Project]))!=0)

 

                    BEGIN

 

                                        SELECT @error = 1

                                        SELECT @error_message = 'Mensaje sistema!: No se puede indicar un proyecto distinto al del pedido de referencia'

                    END

END

Tal y como está no tiene ningún efecto, pues sigue permitiendo indicar un proyecto distinto al del pedido. Intuyo que el problema debe estar aquí:

(T0.[Project] <> T2.[Project]))!=0)

Pues no estoy nada seguro de si esta parte de la sentencia es correcta. Probé a cambiarle el !=0 por !=1 y creía que había dado con la tecla, pues al volver a probar el sistema me impedió añadir y me mostró el error, pero entonces probé a indicarle el mismo proyecto que en el pedido y también me impide añadirlo. Con lo indicando !=1 salta la validación siempre.

Un saludo

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Tienes un problema en la query. Prueba el if de la siguiente manera y me comentas:

IF(( SELECT COUNT(1)


from [PDN1] T0 INNER JOIN [OPDN] T1 ON T0.[DocEntry] = T1.[DocEntry]


LEFT JOIN POR1 T2 ON T2.[baseentry] = T0.[docentry]


AND T2.[BaseType] = '22' AND T2.[baseline] = T0.[linenum]


LEFT JOIN OPOR T3 ON T2.[Docentry] = T3.[DocEntry]


WHERE T0.[DocEntry] = @list_of_cols_val_tab_del AND (T0.[Project] <> T2.[Project]))!=0)

javier_facessantos
Contributor
0 Kudos

Hola Fernando

En primer lugar muchas gracias por la ayuda. A la query creo que le debe faltar algo, puesto que no salta el mensaje de error cuando indicamos un proyecto diferente al del pedido.

Un saludo

Answers (1)

Answers (1)

javier_facessantos
Contributor
0 Kudos

Hola a todos

Desde el foro de SAP Business One en el SCN en inglés me han indicado una query que frunciona exactamente como quiero por un lado y por otro me han propuesto un Workaround que no precisa de Transaction Notification y con el que consigo exactamente lo mismo.

La consulta que funciona sería la siguiente:

IF  @object_type = '20' AND @transaction_type IN(N'A',N'U')

BEGIN

            IF Exists(( SELECT T1.Docentry from [PDN1] T0 INNER JOIN [OPDN] T1 ON T0.[DocEntry] = T1.[DocEntry] LEFT JOIN POR1 T2 ON T2.[DocEntry] = T0.[BaseEntry] AND T0.[BaseType] = '22' AND T2.[LineNum] = T0.[BaseLine]  WHERE (T1.[DocEntry] = @list_of_cols_val_tab_del) AND (T0.[Project]! = T2.[Project])))

           

            BEGIN

           

                        SELECT @error = 1

                        SELECT @error_message = 'Mensaje sistema!: No se puede indicar un proyecto distinto al del pedido de referencia'

            END

END              

Y el workaround alternativo consiste en cambiar las parametrizaciones del formulario de entradas de mercancías, dejando el campo "Proyecto" como inactivo pero visible. De esta manera la entrada de mercancías tomará las misma imputación que tuviera el pedido de referencia, no permitirá modificarlo, pero el usuario podrá ver a que proyecto está imputado el documento en cuestión. Casi siempre las mejores soluciones son las mas sencillas.

Pego el link del post por si a alguien le interesa:

http://scn.sap.com/thread/3353215

Un saludo