cancel
Showing results for 
Search instead for 
Did you mean: 

Limitar el tamaño de un campo

former_member212657
Active Participant
0 Kudos

Buenos días.

Necesito limitar el tamaño de un campo nativo de SBO, la idea es digamos que el campo LictradNum(RUT) deba tener solo 10 caracteres evitar que el usuario por error ingrese 11 o 12 caracteres.

Su ayuda por favor

Gracias.

Angel Uribe

Accepted Solutions (0)

Answers (4)

Answers (4)

former_member212657
Active Participant
0 Kudos


Estimados

Gracias una vez mas por el apoyo, posteo lo pedido, además yo también he llegado a pensar que es la ubicación del query en el transaction, en otras versiones hemos trabajado con storeds que empezaban en Val.

 

marco_ramirez
Active Contributor
0 Kudos

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc [dbo].[SBO_SP_TransactionNotification]  

 

@object_type nvarchar(20),     -- SBO Object Type 

@transaction_type nchar(1),   -- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose 

@num_of_cols_in_key int, 

@list_of_key_cols_tab_del nvarchar(255),   --Nombre del campo clave a comparar 

@list_of_cols_val_tab_del nvarchar(255)  -- Valor del campo clave 

 

AS

begin 

 

-- Return values 

declare @error  int    -- Result (0 for no error) 

declare @error_message nvarchar (200)   -- Error string to be displayed 

select @error = 0 

Tu script debe ir entre estos dos que te estoy indicando.


-- Select the return values 

select @error, @error_message 

 

end

former_member212657
Active Participant
0 Kudos

Buenos dias.

lo cierto es que el script esta ubicado en donde me indicas pero no me realiza los bloqueos, agradezco el apoyo si no lo resuelvo dare por cerrado el post.

Saludos

agustin_marcoscividanes
Active Contributor
0 Kudos

Hola

el problema radica en que el campo que estás utilizando es ntext.

La solución que se me ocurre es:

- obtener el valor de ese campo en una variable nvarchar, aplicando cast o convert.

- una vez que tenemos el valor en esta variable podrás realizar las validaciones pertinentes.

Si no lo quieres utilizar así, podrías probar a utilizar en lugar de LEN la función DATALENGTH.

Un saludo.
Agustín Marcos Cividanes

former_member212657
Active Participant
0 Kudos

Buenos dias.

Solucione el problema, era solo reconocer la estructura del TN.

Me parece que Marco me indico lo correcto pero no lo entendi, el tema es que debia escribir mi consulta y al final llamar al mensaje de error

algo asi:


if(@object_type = '2') and @transaction_type in ('A','U'

begin 

declare @arti char (14) 

set @arti = (select len(cast(T0.AliasName AS nvarchar(MAX))) from OCRD T0 where T0.CardCode = @list_of_cols_val_tab_del)   

if (@arti > '14')  

begin  

set @error = 122 

Set @error_message = 'El campo Numero Fiscal no debe exceder de 14 caracteres'  

end 

end 


select @error, @error_messag

end


Saludos y gracias

former_member212657
Active Participant
0 Kudos

Buenos días.

Marco y Alessandro les agradezco el apoyo y me disculpo por la demora.

He probado con la solucion que cada uno me da y revisado varias veces el query pero no consigo que bloquee el tamaño del campo, alguna otra sugerencia?

Saludos.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Estimado Angel.

Prueba lo siguiente

if @object_type='2' and @transaction_type in ('A','U')

begin

   

    if exists(select 'A' from OCRD T0 where T0.CardCode=@list_of_cols_val_tab_del and len(cast(T0.AliasName as nvarchar(120)))>10)

    begin

        set @error=10000

        set @error_message='SP_TN: Prueba error largo campo'

    end

end

SAP 900 PL 07 HF 01

Que versión de SAP utilizas?

Siempre es importante especificar la versión de SAP con la que estás probando, pues tu problema quizas pueda radicar en alguna nota o PL superior.

Saludos

FLR

felipe_loyolarodriguez
Active Contributor
0 Kudos

Otra observacion.

En tu post inicial dices bloquear el campo "LicTradNum" pero en los TN dice "AliasName", no te habrás equivocado de campo?

Saludos

FLR

former_member212657
Active Participant
0 Kudos

Estimado Felipe,

en el primer post ponía el campo LicTradNum como ejemplo solamente, el campo que quiero bloquear es 'AliasName', estamos usando SAP B1 9.0 PL05.

Saludos

felipe_loyolarodriguez
Active Contributor
0 Kudos

Estimado

Probó el script que le dejé?

Atte.

former_member212657
Active Participant
0 Kudos

Estimado Felipe.

He probado el script que me enviaste, incluso lo combine con las soluciones de los demás compañeros pero cuando hago las pruebas me permite grabar los cambios sin marcarme el error.

Cuando ejecuto el query en SQL al parecer funciona pero cuando lo ejecuto en el sistema poniéndole al SN una cantidad de caracteres mayor a la debida no marca el error.

Usamos SBO 9.0 PL05

Saludos

marco_ramirez
Active Contributor
0 Kudos

Estarás poniendo el Script en el lugar correcto dentro del TN?

former_member203638
Active Contributor
0 Kudos

Haber, Angel, para descartar lo que dicen los compañeros, mandanos dos capturas de pantalla.

1 donde este el TN en el sql y otra donde muestres en un circulo en rojo el campo que no esta bloqueando.

Saludos.

Alessandro.

marco_ramirez
Active Contributor
0 Kudos

Hola

Si es por TN puedes adaptar este código

-Inicia Limita cantidad de caracteres en descripción de artículo

if (@object_type = '4')and (@transaction_type = 'A' or @transaction_type= 'U')

Begin

declare @arti char (75)

set @arti = (select  len(T0.ItemName) from OITM T0 where T0.Itemcode = @list_of_cols_val_tab_del)

          if (@arti >'75')

          begin

                    set @error = 1

                    Set @error_message = 'La descripción del artículo excede de 75 caracteres'

          end

end

-- Termina Limita cantidad de caracteres en descripción de artículo

Nos comentas como te va

former_member212657
Active Participant
0 Kudos

Marco.

Modifique el query enviado y me queda asi:

if(@object_type = '2') and (@transaction_type ='A'or @transaction_type = 'U')


begin


declare @arti char (14)


set @arti = (select len(T0.AliasName) from OCRD T0 where T0.CardCode = @list_of_cols_val_tab_del)  


if (@arti > '14') 


begin 


set @error =

Set @error_message = 'El campo Numero Fiscal no debe exceder de 14 caracteres' 


end

end

end

y al ejecutar me da el mensaje:

'Argument data type ntext is invalid for argument 1 of len function.'

No se que pasa.

Estoy utilizando el campo AliasName que tiene formato LongText para poner allí los RUC que son de 14 caracteres

Ayudame  por favor.

Gracias

former_member203638
Active Contributor
0 Kudos

Hola Angel, es por el tipo de campo. Intenta así:

if(@object_type = '2') and @transaction_type in ('A','U')

begin

declare @arti char (14)

set @arti = (select len(cast(T0.AliasName AS nvarchar(MAX))) from OCRD T0 where T0.CardCode = @list_of_cols_val_tab_del) 

if (@arti > '14')

begin

set @error = 122

Set @error_message = 'El campo Numero Fiscal no debe exceder de 14 caracteres'

end

end

Saludos.

Alessandro.

former_member212657
Active Participant
0 Kudos

Hola Alessandro.

Ya había probado esta solución y en el Transaction funciona pero cuando creo un nuevo SN en B1 y le pongo cualquier cantidad de caracteres al campo 'Numero Fiscal' me permite grabar sin que aparezca el mensaje de error, alguna idea de porque ocurre?

Gracias por los aportes.

former_member203638
Active Contributor
0 Kudos

Estoy dando de alta un nuevo socio y no se reproduce lo que comentas, bloquea sin problemas. La declaracion de @arti esta correcta?

En ves de len() intenta con DATALENGTH()

Nos comentas.

marco_ramirez
Active Contributor
0 Kudos

Prueba declarando la variable @arti como nvarchar y nos comentas

Former Member
0 Kudos

con una consulta formateada con eso controlas

former_member212657
Active Participant
0 Kudos

Hola Antonio.

justamente mi consulta hiba por ese lado, sabras como hacer esa búsqueda o será mejor hacerlo por transaction?

Saludos