on 05-03-2013 11:42 AM
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
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)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
96 | |
10 | |
9 | |
6 | |
3 | |
3 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.