on 11-13-2013 5:22 PM
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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 = 1
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
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.
con una consulta formateada con eso controlas
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
107 | |
12 | |
11 | |
6 | |
5 | |
4 | |
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.