Limitar cantidad de caracteres en punto de emision

Buen dia, espero que se encuentren bien.

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.

Aguardo respuesta,
gracias por su tiempo,
saludos Natalie.

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.
image

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.

Saludos cordiales.

1 me gusta

Estuve buscando, y no encontre, quizas estoy buscando en un lugar equivocado.

Adjunto captura de donde busque:

Esto es lo que necesito modificar:

image

Que me recomendas que haga? Se puede crear en campos definidos ‘FolioNum’ y des ahi limitarlo?

Buena tarde India2743,

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.

Esta es la estructura del campo de la tabla OPCH.

Saludos.

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

Haga una prueba y comparta sus alcances.

Saludos cordiales.

2 Me gusta