cancel
Showing results for 
Search instead for 
Did you mean: 

Crear campo como obligatorio en la factura.

Former Member
0 Kudos

Buenos días,

Tengo el siguiente asunto, hay un campo en la factura llamado centro de beneficio, lo que está pasando es que se han creado facturas sin registrar el centro de beneficio, entonces lo que se quiere es colocar este campo como obligatorio, que si la persona intenta crear la factura sin haber registrado el centro de beneficio entonces que le arroje una alerta y no le permita crear la factura.

Saludos y gracias por su atención.

Accepted Solutions (1)

Accepted Solutions (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Miguel

Revisa este post [Centro de Beneficio y Proyecto sean campos obligatorios. |;

Cualquier duda, comentas

Saludos

Former Member
0 Kudos

Hola Floyola,

Bueno tomando parte del código del post que me pasaste.

-- VALIDACION CENTRO BENEFICIO y PROYECTO EN ORDEN DE COMPRA
 
IF  (@object_type = 22)  and (@transaction_type IN ('A','U'))
BEGIN

- CENTRO DE BENEFICIO
 
    DECLARE @CTA as NVarchar (10)
    SELECT @CTA = COUNT(T2.FormatCode)
                FROM OINV T0
                INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
                WHERE T0.DocEntry = @list_of_cols_val_tab_del
 
    DECLARE @CB as Nvarchar (10)
    SELECT @CB = COUNT(T1.OcrCode)
                FROM OINV T0
                INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
                WHERE T0.DocEntry = @list_of_cols_val_tab_del
 
    IF (@CTA != @CB)
    BEGIN
        SET @error = 102
        SET @error_message = 'MS-102 Revisar centros de Beneficio'
    END
END

Lo que hice fue modificar algo en código, ya que yo lo necesito para la tabla de factura de ventas, ademas le quite la condición de el numero de cuenta que para este caso no aplica, pero me da error al ejecutarlo, de igual manera me dan errores los del código original.

Msg 137, Level 15, State 2, Line 3
Must declare the scalar variable "@object_type".
Msg 137, Level 15, State 2, Line 12
Must declare the scalar variable "@list_of_cols_val_tab_del".
Msg 137, Level 15, State 2, Line 18
Must declare the scalar variable "@list_of_cols_val_tab_del".
Msg 137, Level 15, State 1, Line 22
Must declare the scalar variable "@error".
Msg 137, Level 15, State 1, Line 23
Must declare the scalar variable "@error_message".

Saludos

felipe_loyolarodriguez
Active Contributor
0 Kudos

Miguel

Quiza sea porque lo estas insertando en el lugar equivocado

Debes entrar al SQL Managuement Studio, Abres la base, Prodedimientos almacenados, SBO_SP Transaction notification, click derecho --> modificar y lo insertas debajo de donde dice ADD YOU CODE HERE

Former Member
0 Kudos

Ok floyola, coloque el siguiente código donde me indicas.

-- VALIDACION CENTRO BENEFICIO y PROYECTO EN ORDEN DE COMPRA
 
IF  (@object_type = 22)  and (@transaction_type IN ('A','U'))
BEGIN
 
-- CENTRO DE BENEFICIO
 
    DECLARE @CB as Nvarchar (10)
    SELECT @CB = COUNT(T1.OcrCode)
                FROM OINV T0
                INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
                WHERE T0.DocEntry = @list_of_cols_val_tab_del
 
    IF (@CB IS NULL)
    BEGIN
        SET @error = 102
        SET @error_message = 'MS-102 Revisar centros de Beneficio'
    END
END

Y se ejecuta satisfactoriamente, pero cuando pruebo en el sistema no pasa nada, que puede estar mal?.

Saludos.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Bueno, te explico. La idea es contar las lineas que no tienen Centro de beneficio, y si estas son mayores a 0, te arroje error


-- VALIDACION CENTRO BENEFICIO EN ORDEN DE COMPRA
 
IF  (@object_type = 22)  and (@transaction_type IN ('A','U'))
BEGIN
 
-- CENTRO DE BENEFICIO
 
    DECLARE @CB as INT
    SELECT @CB = COUNT(T1.OcrCode)
                FROM OINV T0
                INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
                WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T1.OcrCode IS NULL
 
    IF @CB > 0
    BEGIN
        SET @error = 102
        SET @error_message = 'MS-102 Revisar centros de Beneficio'
    END
END

Pruebalo asi, si no funciona, cambia el IS NULL T1.OcrCode = ''

Slds

Edited by: Floyola on May 4, 2011 3:34 PM

Edited by: Floyola on May 4, 2011 3:45 PM

Former Member
0 Kudos

Floyola

Ni de una forma ni otra me pasa nada con el código que me indicas.

Qué puede ser?

felipe_loyolarodriguez
Active Contributor
0 Kudos

Con ese deberia quedar, no me habia fijado que tenias mal el @object_type, 22 es para ordenes de compra


IF  (@object_type = 13)  and (@transaction_type IN ('A','U'))
BEGIN 
	
	DECLARE 
		@LineNum INT,
		@CB INT
    
	SELECT 
		@Linenum = (SELECT COUNT(T1.LineNum)
			FROM OINV T0
                	INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
                	WHERE T0.DocEntry = @list_of_cols_val_tab_del),
		@CB = (SELECT COUNT(T1.OcrCode)
                	FROM OINV T0
                	INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
                	WHERE T0.DocEntry = @list_of_cols_val_tab_del)
 
    IF @LineNum != @CB
    BEGIN
        SET @error = 102
        SET @error_message = 'MS-102 Revisar centros de Beneficio'
    END
END

Atte.

Felipe Loyola

Edited by: Floyola on May 4, 2011 4:18 PM

Former Member
0 Kudos

Disculpa Floyola me esta generando el siguiente error:

Msg 102, Level 15, State 1, Procedure SBO_SP_TransactionNotification, Line 35
Incorrect syntax near '@CB'.

Former Member
0 Kudos

Le coloque un SET y ya funciono.

IF  (@object_type = 13)  and (@transaction_type IN ('A','U'))
BEGIN 
	
	DECLARE 
		@LineNum INT,
		@CB INT
    
	SET 
		@Linenum = (SELECT COUNT(T1.LineNum)
			FROM OINV T0
                	INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
                	WHERE T0.DocEntry = @list_of_cols_val_tab_del)
                	
    SET
		
		@CB = (SELECT COUNT(T1.OcrCode)
            FROM OINV T0
                	INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
                	WHERE T0.DocEntry = @list_of_cols_val_tab_del)
 
    IF @LineNum != @CB
    BEGIN
        SET @error = 102
        SET @error_message = 'MS-102 Revisar centros de Beneficio'
    END
END

Listo mil gracias Floyola.

Answers (0)