cancel
Showing results for 
Search instead for 
Did you mean: 

Actualización de UDF

Former Member
0 Kudos

Hola a todos,

Hemos creado un UDF en los documentos de marketing de tipo título, que será usado en la creación de facturas de clientes y notas de crédito de clientes, el cual posee dos valores fijos de entrada. Dicho campo debe tener una de estas opciones escogida al momento de la creación del documento.

Mi pregunta es: ¿Hay alguna manera que en la actualización del documento este campo de usuario no sea modificable por ningún usuario?, de manera que si el UDF tiene la primera opción, no cambien a la segunda, o viceversa.

Gracias de antemano,

Saludos

Accepted Solutions (1)

Accepted Solutions (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola

Por medio de un TN lo puedes hacer


IF @object_type = '13' AND @transaction_type = 'U'
BEGIN
 
DECLARE 
	@UDF_HIST Varchar(20),
	@UDF_ACT Varchar(20)
		
SELECT
	@UDF_HIST = (SELECT T0.U_campo_usuario 
			FROM ADOC T0 
			WHERE T0.ObjType = @object_type AND T0.DocEntry = @list_of_cols_val_tab_del AND 
			T0.LogInstanc = (SELECT TOP 1 Y.LogInstanc
						FROM ADOC Y 
						WHERE Y.DocEntry = @list_of_cols_val_tab_del AND Y.ObjType = @object_type
						ORDER BY Y.LogInstanc DESC)),
										
	@UDF_ACT = (SELECT T0.U_campo_usuario FROM OINV T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del)
	
	
	IF @UDF_ACT != @UDF_HIST
	BEGIN
		SELECT @error = -1000,@error_message = 'No puede modificar el campo X'
	END
END

Coloca tu campo de usuario en el TN donde dice U_campo_usuario

Luego modifica el Object Type y la tabla OINV por la del siguiente documento, que seria 14 para NC y tabla ORIN

Slds

Edited by: Floyola on Jun 14, 2011 3:15 PM

Former Member
0 Kudos

Hola,

Monté el TN, pero no me funciona, sustitui el valor de mi campo de usuario donde se debía, y nada. Gracias por la ayuda que me puedas brindar al respecto.

Saludos Cordiales

felipe_loyolarodriguez
Active Contributor
0 Kudos

mmmm, que tal asi


IF @object_type = '13' AND @transaction_type = 'U'
BEGIN
 
DECLARE 
	@UDF_HIST Varchar(20),
	@UDF_ACT Varchar(20)
		

SET @UDF_HIST = (SELECT T0.U_campo_usuario 
			FROM ADOC T0 
			WHERE T0.ObjType = @object_type AND T0.DocEntry = @list_of_cols_val_tab_del AND 
			T0.LogInstanc = (SELECT TOP 1 Y.LogInstanc
						FROM ADOC Y 
						WHERE Y.DocEntry = @list_of_cols_val_tab_del AND Y.ObjType = @object_type
						ORDER BY Y.LogInstanc DESC)),
										
SET @UDF_ACT = (SELECT T0.U_campo_usuario FROM OINV T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del)
	
	
	IF @UDF_ACT != @UDF_HIST
	BEGIN
		SELECT @error = -1000,@error_message = 'No puede modificar el campo X'
	END
END

Atte.

former_member188440
Active Contributor
0 Kudos

Intenta colocando el codigo asi, pues el ultimo loginstance aun no se ha creado, entonces al poner MAX -1 traemos el penultimo que YA existe en la ADOC





IF @object_type = '13' AND @transaction_type = 'U'
BEGIN
 
DECLARE 
	@UDF_HIST Varchar(20),
	@UDF_ACT Varchar(20)
		
 
SET @UDF_HIST = (SELECT T0.U_campo_usuario 
			FROM ADOC T0 
			WHERE T0.ObjType = @object_type AND T0.DocEntry = @list_of_cols_val_tab_del AND 
			T0.LogInstanc IN  (SELECT max(Y.LogInstanc) -1
						FROM ADOC Y 
						WHERE Y.DocEntry = @list_of_cols_val_tab_del AND Y.ObjType = @object_type
						ORDER BY Y.LogInstanc DESC)),
										
SET @UDF_ACT = (SELECT T0.U_campo_usuario FROM OINV T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del)
	
	
	IF @UDF_ACT != @UDF_HIST
	BEGIN
		SELECT @error = -1000,@error_message = 'No puede modificar el campo X'
	END
END

felipe_loyolarodriguez
Active Contributor
0 Kudos

Mauricio,

Creo que si colocas el -1, te arrojara error cuando selecciones 1 documento que tiene solo 1 intancia, como puede ser un documento nuevo recien creado.

Me parece extraño que no funcione, porque acabo de probarla con otro campo y si me funciono...

Edited by: Floyola on Jun 14, 2011 5:58 PM

Hay una coma de mas


IF @object_type = '13' AND @transaction_type = 'U'
BEGIN
 
DECLARE 
	@UDF_HIST Varchar(20),
	@UDF_ACT Varchar(20)
		
 
SET @UDF_HIST = (SELECT T0.U_campo_usuario 
			FROM ADOC T0 
			WHERE T0.ObjType = @object_type AND T0.DocEntry = @list_of_cols_val_tab_del AND 
			T0.LogInstanc = (SELECT TOP 1 Y.LogInstanc
						FROM ADOC Y 
						WHERE Y.DocEntry = @list_of_cols_val_tab_del AND Y.ObjType = @object_type
						ORDER BY Y.LogInstanc DESC))
										
SET @UDF_ACT = (SELECT T0.U_campo_usuario FROM OINV T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del)
	
	
	IF @UDF_ACT != @UDF_HIST
	BEGIN
		SELECT @error = -1000,@error_message = 'No puede modificar el campo X'
	END
END

Edited by: Floyola on Jun 14, 2011 6:00 PM

former_member188440
Active Contributor
0 Kudos

si es un documento nuevo, hasta ese momento tomara 1 instancia, pero en el momento que quieras actualizar, lo que esta cachando el transaction seria la 2a instancia entonces al poner el MAX (loginstanc-1) te tomara la 1a que fue la que se creo

Asi como en esta

[]

Former Member
0 Kudos

Hola Floyola,

Al quitarle la coma de mas, el TN me funcionó.

Muchisimas gracias por la ayuda prestada.

Saludos Cordiales

former_member188440
Active Contributor
0 Kudos

mairaem

Me resulta extraño que funcione el codigo sin poner el MAX(loginstanc-1)




SET @UDF_HIST = (SELECT T0.U_HOSPITAL
			FROM ADOC T0 
			WHERE T0.ObjType = @object_type AND T0.DocEntry = @list_of_cols_val_tab_del AND 
			T0.LogInstanc = (SELECT MAX(Y.LogInstanc-1)
						FROM ADOC Y 
						WHERE Y.DocEntry = @list_of_cols_val_tab_del AND Y.ObjType = @object_type))

Como quedo tu codigo finalmente??

Answers (0)