Problemas al usar Transaction Notification

Buen día expertos, tengo una duda, quisiera que pudieran ayudarme a resolverla, cuando creo campos definidos por el usuario a nivel cabecera, e intento usar el SP para hacerlo obligatorio (cabe destacar que este campo cuando se hizo no lo pusieron obligatorio y ahorita tiene muchos datos como para borrarlo y crearlo de nuevo) siempre me salen errores sin sentido, en el ultimo problema me sale, Conversion failed when converting the nvarchar value "codigo del articulo" to data type int , si el campo lo tengo en nvarchar.

Pero este problema solo me da en los campos de usuario a nivel cabecera, los a nivel linea salen bien. anexo el código para que lo prueben y me digan sus resultados. quizá lo estoy haciendo mal y no me doy cuenta.

IF @object_type = '4' AND @transaction_type IN ('A')
IF ((SELECT COUNT(*) FROM OITM WHERE DocEntry = @list_of_cols_val_tab_del) !=
      (SELECT COUNT (*) FROM OITM WHERE DocEntry = @list_of_cols_val_tab_del AND  U_Claveunidad = ''))
	BEGIN
		SET @error = 1
		SET @error_message = 'Tienes que llenar el campo "CLAVE UNIDAD"'
END

Agradezco cualquier aclaración o comentarios. que tengan buen día.

1 me gusta

Hola @Enrique1 Si lo que necesitas es que sea un campo obligatorio creo que sería mas sencillo de esta manera:

declare @claveUnidad nvarchar(max) 

if @object_type = '4' and @transaction_type in ('A','U') -- indicas si el articulo será creado o actualizado
     select @claveUnidad = U_Claveunidad 
	   from OITM
	   where itemCode = @list_of_cols_val_tab_del  
     if @claveUnidad is null -- compara que el campo sea nulo, de ser así se mostrará el mensaje de error
	begin
		Set @error = 1
		Set @error_message = 'Tienes que llenar el campo "CLAVE UNIDAD"'
end
3 Me gusta

@pcarrasco muchas gracias, si me sirvió, como estoy envuelto en otras cosas no me puse a meditar que en datos de la cabecera cambiaría un poco, y poder hacerlo de forma adecuada. muchas gracias, que tengas un buen día.

1 me gusta

Hola,
Lo que no comprendo es porque no haces que sea obligatorio desde la pantalla de gestion de UDFs…
Si el problema es que ya tienes datos y no quieres perderlos haz lo siguiente:

  1. Crea un udf llamalo por ejemplo temporal…
  2. Por sql has update tabla set u_temporal=tu campo
  3. Elimina tu campo
  4. Crea de muevo tu campo y ponlo como obligatorio
  5. Update tabla set tucampo=u_temporal
  6. Elimina el campo temporal

Y listos!!
Espero te sirva de ayuda y de reflexion de como temer un modelo de datos mejor estructurado y que refleje mas fielmente lo que necesitas

@AlexMoran, yo no hice el campo que ocupaba hacer obligatorio, el que lo hizo se fue hace tiempo y ahora pedían cambiar eso, yo trato de estructurar todo y ver como evitar hacer este tipo de cosas, pero gracias por la idea amigo, como estamos escasos de personal en sistemas tenemos que llevar muchas cosas solo dos personas, pero esta bien, tratare de evitar eso.

Como lo dije con anterioridad gracias por la idea, me gusta recibir este tipo de ayuda :smile_cat:, que tengas un buen día.

Hola @AlexMoran una de las reglas de SAP es no hacer update a la base de datos, para ello de brinda herramientas como SDK, DI API, DTW, al hacer un update corres el riesgo de perder la integridad de la base de datos, con ella la garantía de SAP.

Saludos.

1 me gusta

Cierto pcarrasco… pero es un upsate muy controlado y puntual que realmente no va a afectar a la integridad de la bbdd

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.