on 06-14-2011 8:00 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
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
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
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??
User | Count |
---|---|
85 | |
7 | |
6 | |
4 | |
3 | |
3 | |
3 | |
3 | |
3 | |
2 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.