Estoy con una inquietud quiero limitar la cantidad de caracteres en el punto de emision en este caso en la factura de proveedores, solo se admitan 5 caracteres ni mas ni menos.
Estuve buscando informacion y la manera de hacerlo, encontre que lo hacen mediante la SQL Server → Transaction Notification.
Queria saber como usarlo ya que seria la primera vez, o que recomiendan hacer sino y como.
Hola tengo que iniciar diciéndole que mi versión de SAP es diferente a la de usted lo que limita lo que puedo recomendarle.
Si es un campo de usuario (UDF) tal vez no sea necesario usar el TN, y debería poder restringirlo desde la configuración del campo (tal vez se llame por ejemplo, U_PuntoEmision), entonces en la ventana de gestión de campos definidos por el usuario, selecciona la tabla OPCH y en la edición del campo lo limitas a 5 caracteres.
Por otro lado si es un campo de la tabla OPCH y necesita el TN, tiene que abrir su SQL e ir a la base de datos de SAP y seleccionar la opción para crear un nuevo procedimiento almacenado para colocar una sentencia similar a esta.
CREATE PROCEDURE SBO_SP_TransactionNotification
@object_type NVARCHAR(20),
@transaction_type NVARCHAR(20),
@num_of_cols_in_key INT,
@list_of_key_cols_tab_del NVARCHAR(255),
@list_of_cols_val_tab_del NVARCHAR(255)
AS
BEGIN
DECLARE @error AS INT
DECLARE @error_message AS NVARCHAR(100)
SET @error = 0
SET @error_message = N''
IF @object_type = '18' AND @transaction_type IN ('A', 'U') -- 18 es el código de las facturas de proveedores
BEGIN
DECLARE @PuntoEmision NVARCHAR(5)
SELECT @PuntoEmision = T0.U_PuntoEmision
FROM OPCH T0
WHERE T0.DocEntry = @list_of_cols_val_tab_del
IF LEN(@PuntoEmision) <> 5
BEGIN
SET @error = 1
SET @error_message = N'El Punto de Emisión debe tener exactamente 5 caracteres.'
END
END
IF @error = 1
BEGIN
SELECT @error, @error_message
END
END
Recuerde, es un ejemplo el que le estoy presentando con las limitaciones que le comente. Es probable que deba personalizar.
De acuerdo a su presentación parece que usted no tiene los privilegios que necesita para hacer este tipo de movimientos en su sistema, si me equivoco omita mi último comentario. Lo mencione porque no cualquier usuario debería o debe acceder al SQL.
Estuve revisando y este campo es nativo de SAP, por lo que no podras alterar el campo y poder manipularlo. de lo contrario estarias perdiendo garantia del sistema.
Ahora si hubiera sido un campo de Usuario como te menciona Cassales, si se podria modificar.
la unica solucion, es crear un TN, que le indique al usuario que no pueda agregar mas de 5 caracteres. Esto si es a nivel de base de datos.
Bueno, ahora que ha quedado claro que no es un UDF y sí es un campo de la OPCH puede usar de ejemplo la segunda parte de mi respuesta que le brinde, dónde viene un ejemplo de cómo hacerlo, sólo tiene que editar y usar el campo que usted está señalando.
Le puedo repetir el ejemplo pero con el campo FOLIONUM
CREATE PROCEDURE SBO_SP_TransactionNotification
@object_type NVARCHAR(20),
@transaction_type NVARCHAR(20),
@num_of_cols_in_key INT,
@list_of_key_cols_tab_del NVARCHAR(255),
@list_of_cols_val_tab_del NVARCHAR(255)
AS
BEGIN
DECLARE @error AS INT
DECLARE @error_message AS NVARCHAR(100)
SET @error = 0
SET @error_message = N''
IF @object_type = '18' AND @transaction_type IN ('A', 'U') -- 18 es el código de las facturas de proveedores
BEGIN
DECLARE @FolioNum NVARCHAR(5)
SELECT @FolioNum = T0.FolioNum
FROM OPCH T0
WHERE T0.DocEntry = @list_of_cols_val_tab_del
IF LEN(@FolioNum) <> 5
BEGIN
SET @error = 1
SET @error_message = N'El FolioNum debe tener exactamente 5 caracteres.'
END
END
IF @error = 1
BEGIN
SELECT @error, @error_message
END
END