cancel
Showing results for 
Search instead for 
Did you mean: 

Procedimiento Almacenado // Proyecto

Former Member
0 Kudos

Estimados.

tengo el siguiente SP, basado en otros post del foro, donde me obliga a ingresar el campo proyecto, pero no me funciona, lo he probado con otros campos por ejemplo centro de costo y anda bien, pero proyecto, no y no puedo distinguir donde esta el error.

Saludos.

Oscar V

-- VALIDACION PROYECTO EN ORDEN DE COMPRA

IF  (@object_type = 22)  and (@transaction_type = 'A' or @transaction_type = 'U')
BEGIN
 
	DECLARE @LINE as NVarchar (35)
	SET @LINE = (SELECT COUNT(T1.LineNum)
				FROM OPOR T0
				INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
				WHERE T0.DocEntry = @list_of_cols_val_tab_del)
 
	DECLARE @PROJECT as Nvarchar (50)
	SET @PROJECT = (SELECT COUNT(T1.Project) 
				FROM OPOR T0
				INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry 
				WHERE T0.DocEntry = @list_of_cols_val_tab_del)
 		
IF (@LINE != @PROJECT)
BEGIN
SET @error = 101
SET @error_message = 'Proyecto es obligatorio'

END
END

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Yo lo haría de esta forma:


IF  (@object_type = 22)  and @transaction_type in ( 'A' , 'U')
BEGIN
 
	DECLARE @Linea as int
 
	SELECT TOP 1 @Linea = T1.LineNum+1
	FROM OPOR T0
		INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry 
	WHERE T0.DocEntry = @list_of_cols_val_tab_del
		AND ISNULL(T1.Project,'')=''
 		
	IF @Linea >= 1
	BEGIN
		SET @error = 101
		SET @error_message = 'Error en Linea (' + @Linea + ') - Proyecto obligatorio'
	END
END

Former Member
0 Kudos

Gracias, por las 2 respuestas!!!... estan buenas esas SP, ya resolvi el problema, el que cree es a nivel de cabezera y los enviados es a nivel detalle.

Otra consulta, hay alguna forma de que el SP, sea solo a nivel de aviso y no obligatorio???.

dejo SP

-- VALIDACION PROYECTO EN ORDEN DE COMPRA

IF  (@object_type = 22)  and (@transaction_type = 'A' or @transaction_type = 'U')
BEGIN
 
	DECLARE @LINE as NVarchar (35)
	SET @LINE = (SELECT COUNT(T0.PROJECT)
				FROM OPOR T0
				INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
				WHERE T0.DocEntry = @list_of_cols_val_tab_del)
 
	DECLARE @PROJECT as Nvarchar (50)
	SET @PROJECT = (SELECT COUNT(T1.Project) 
				FROM OPOR T0
				INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry 
				WHERE T0.DocEntry = @list_of_cols_val_tab_del)
 		
IF (@LINE != @PROJECT)
BEGIN
SET @error = 101
SET @error_message = 'Proyecto es obligatorio'

END
END

Former Member
0 Kudos

Que bueno que te sirvio, seria bueno para ayudar al orden del foro que ahora que has calificado tambien cierres la pregunta.

Respecto si es posible hacer un mensaje opcional, no es posible, puesto que en SAP se maneja sólo el error, puesto que cuando el registro no cumple con la condición de error , aunque le pongas un mensaje personalizado a la operación correcta, siempre te mostrará la estandar.

ahora lo que muchos hacemos cuando queremos un aviso, es que metemos el documento a un ciclo de aprobación al momento de crear, con esto si no cumple la condición dada, sólo se creará una vez aprobado el documento.

Ahora estas aprobaciones sólo sirven para campos que se encuentran en la cabecera y no en el detalle, a menos que hagas otros cuantos trucos para esto.

slds.

Former Member
0 Kudos

Gracias.

Se cierra el caso.-

Oscar V-

Former Member
0 Kudos

Hola Oscar:

Estoy probando tu consulta y no me funciona como corresponde. Aunque coloque el proyecto no me deja crear el documento.

Curiosamente me lo valida para centro de beneficio y no para proyecto. Es decir , si le asigno un centro de beneficio me permite crear el documento. A que se debe esto?

Saludos,

Viviana Medina.

Former Member
0 Kudos

Viviana, te recomiendo usar una de las consultas que dio mauricio o la que di Yo.

para que pruebes si estas funcionan.

Hace rato que no hablabamos, que te encuentres bien.

Former Member
0 Kudos

Hola, Viviana acabo de probar la consulta que deje en el foro y la ejecute en una base que nunca habia ocupado y funciono sin problema, tuve que ingresar el proyecto a nivel de cabecera. (aleta de finanzas).. y luego pude continuar.

...Los otros scrip que me enviaron tambien funcionan pero la diferencia que es a nivel de linea.

Cualquier cosa me cuentas.

Saludos.

Oscar V

former_member188440
Active Contributor
0 Kudos

intenta con



IF  (@object_type = 22)  and @transaction_type in ( 'A' , 'U')
BEGIN
 
	DECLARE @cuenta as int

	SET @cuenta= (SELECT COUNT(*) 
				FROM OPOR T0
				INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry 
				WHERE len(t1.Project)<1 and T0.DocEntry = @list_of_cols_val_tab_del)
 		
IF @cuenta >=1
BEGIN
SET @error = 101
SET @error_message = 'Proyecto es obligatorio'
 
END
END