on 01-24-2011 3:12 PM
Estimados:
Necesito que al momento de crear la Orden de Compra, las cuales son todas autorizadas, me exija colocar el centro de beneficio y el codigo de proyecto. Por lo que tengo entendido esto se puede realizar con Transaction Notification. Nunca he utilizado esta "herramienta", por lo tanto alguien me puede ayudar y orientar como debería hacerlo y como e utiliza?
Gracias.
Saludos.
VMC.
Viviana
Buenas tardes, te enviare por correo informacion sobre el SP_Transaction Notification.
Dentro del foto hay informacion abundante y muy buena sobre lo que es y como aplicarlo, solo escribe Transaction Notification en la opcion buscar y listo, hay variados ejemplos de la forma en la que se puede usar esta herramienta.
Adicionalmente prueba con este SP
-- VALIDACION CENTRO BENEFICIO y PROYECTO EN ORDEN DE COMPRA
IF (@object_type = 22) and (@transaction_type = 'A' or @transaction_type = 'U') -- objtype orden de compra
BEGIN
DECLARE @PROYECT as Nvarchar (50)
SET @PROYECT = (SELECT COUNT(T1.Project)
FROM OPCH T0
INNER JOIN PCH1 T1 ON T1.DocEntry = T0.DocEntry
WHERE T0.DocEntry = @list_of_cols_val_tab_del)
DECLARE @CB as NVarchar (35)
SET @CB = (SELECT COUNT(T1.OcrCode)
FROM OPCH T0
INNER JOIN PCH1 T1 ON T1.DocEntry = T0.DocEntry
WHERE T0.DocEntry = @list_of_cols_val_tab_del)
IF (@PROYECT < '0') AND (@CB < '0')
BEGIN
SET @error = 101
SET @error_message = 'Proyecto y centro de beneficio son obligatorios, imposible continuar'
END
END
OBS: DICE IF (@PROYECT < '0')
Saludos
FLR
Edited by: Floyola on Jan 24, 2011 12:29 PM
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Listo, enviado
Me quedo una duda en el SP anterior, revisa este de todas maneras
-- VALIDACION CENTRO BENEFICIO y 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 OPCH T0
INNER JOIN PCH1 T1 ON T1.DocEntry = T0.DocEntry
WHERE T0.DocEntry = @list_of_cols_val_tab_del)
DECLARE @PROYECT as Nvarchar (50)
SET @PROYECT = (SELECT COUNT(T1.Project)
FROM OPCH T0
INNER JOIN PCH1 T1 ON T1.DocEntry = T0.DocEntry
WHERE T0.DocEntry = @list_of_cols_val_tab_del)
DECLARE @CB as NVarchar (35)
SET @CB = (SELECT COUNT(T1.OcrCode)
FROM OPCH T0
INNER JOIN PCH1 T1 ON T1.DocEntry = T0.DocEntry
WHERE T0.DocEntry = @list_of_cols_val_tab_del)
IF (@LINE != @PROYECT) OR (@LINE != @CB)
BEGIN
SET @error = 101
SET @error_message = 'Proyecto y centro de beneficio son obligatorios'
END
END
Atte.
FLR
Bueno, hay que corregir el SP entonces ¬¬
Tambien me habia equivocado en las tablas, eran OPOR y POR1 en vez de OPCH y PCH1
El proyecto es para 2 cuentas contables especificas, es decir Formatcode. verdad?
y el centro de beneficio es para 2 grupos de cuentas a nivel 4, es decir
-1000 Activo
--1100 Activo circulante
---1110 Efectivo y equivalente
-
-
1111 Caja a este nivel de cuenta? son muchas como para seleccionarlas 1 a 1? usas segmentos de cuentas? tienen alguno en comun?
Saludos
FLR
Edited by: Floyola on Jan 24, 2011 4:04 PM
Edited by: Floyola on Jan 24, 2011 4:10 PM
Hola,
Ya, prueba esta validacion y me cuentas como te va
-- VALIDACION CENTRO BENEFICIO y PROYECTO EN ORDEN DE COMPRA
IF (@object_type = 22) and (@transaction_type = 'A' or @transaction_type = 'U')
BEGIN
-- PROYECTO
DECLARE @LINE as NVarchar (35)
SET @LINE = (SELECT CASE COUNT(T1.LineNum)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INENR JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode IN (41010201,41010210))
DECLARE @PROYECT as Nvarchar (50)
SET @PROYECT = (SELECT CASE COUNT(T1.Project)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INENR JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode IN (41010201,41010210))
IF (@LINE != @PROYECT)
BEGIN
SET @error = 101
SET @error_message = 'Proyecto y centro de beneficio son obligatorios'
END
END
IF (@object_type = 22) and (@transaction_type = 'A' or @transaction_type = 'U')
BEGIN
-- CENTRO DE BENEFICIO
DECLARE @GRUPCTA as NVarchar (25)
SET @GRUPCTA = '420102'
DECLARE @LINE2 as NVarchar (35)
SET @LINE2 = (SELECT CASE COUNT(T1.LineNum)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INENR JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND (CAST(T2.FormatCode as NVarchar(6))) = @GRUPCTA)
DECLARE @CB as Nvarchar (50)
SET @PROYECT = (SELECT COUNT(T1.OcrCode)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INENR JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND (CAST(T2.FormatCode as NVarchar(6))) = @GRUPCTA)
IF (@LINE2 != @CB)
BEGIN
SET @error = 101
SET @error_message = 'Proyecto y centro de beneficio son obligatorios'
END
END
Saludos
FLR
Edited by: Floyola on Jan 24, 2011 7:07 PM
Edited by: Floyola on Jan 25, 2011 11:36 AM
Viviana,
Tienes razon, de hecho corregi la instruccion CASE en el txt que tenia hecho, pero no la corregi en el post. mis disculpas si te cause algunos problemas.
Me gustaria que primero probaras con la validacion del proyecto, primero prueba esta SP y me cuentas que tal
-- VALIDACION CENTRO BENEFICIO y PROYECTO EN ORDEN DE COMPRA
IF (@object_type = 22) and (@transaction_type = 'A' or @transaction_type = 'U')
BEGIN
-- PROYECTO
DECLARE @CUENTA as NVarchar (10)
SELECT @CUENTA = (SELECT COUNT(T2.FormatCode)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode IN (41010201,41010210))
DECLARE @PROYECT as Nvarchar (50)
SELECT @PROYECT = (SELECT COUNT(T1.Project)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode IN (41010201,41010210))
IF (@CUENTA != @PROYECT)
BEGIN
SET @error = 101
SET @error_message = 'Proyecto es obligatorio en cuentas 41010201 y 210'
END
END
Saludos
FLR
que bueno ^^
ahora, inserta y prueba este para el centro de beneficio
IF (@object_type = 22) and (@transaction_type = 'A' or @transaction_type = 'U')
BEGIN
-- CENTRO DE BENEFICIO
DECLARE @CTA as NVarchar (10)
SET @CTA = (SELECT COUNT(T2.FormatCode)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode Like '420102_%%')
DECLARE @CB as Nvarchar (10)
SET @PROYECT = (SELECT COUNT(T1.OcrCode)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode Like '420102_%%')
IF (@CTA != @CB)
BEGIN
SET @error = 102
SET @error_message = 'centro de beneficio es obligatorio en grupo de cuentas 420102'
END
END
Saludos
FLR
Hola Viviana
Despues de varias pruebas, logre bloquear ambos campos para que fueran obligatorios segun las cuentas que especificaste
Con este SP, me funciono en ambos campos
-- VALIDACION CENTRO BENEFICIO y PROYECTO EN ORDEN DE COMPRA
IF (@object_type = 22) and (@transaction_type IN ('A','U'))
BEGIN
-- PROYECTO
DECLARE @CUENTA as INT
SELECT @CUENTA = COUNT(T2.FormatCode)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode IN ('41010201','41010210')
DECLARE @PROYECT as INT
SELECT @PROYECT = COUNT(T1.Project)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode IN ('41010201','41010210') AND T1.Project != ''
IF (@CUENTA != @PROYECT)
BEGIN
SET @error = 101
SET @error_message = 'MS-101 Revisar Proyectos'
END
ELSE
-- CENTRO DE BENEFICIO
DECLARE @CTA as NVarchar (10)
SELECT @CTA = COUNT(T2.FormatCode)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode Like '%[(410201)(420102)]%'
DECLARE @CB as Nvarchar (10)
SELECT @CB = COUNT(T1.OcrCode)
FROM OPOR T0
INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OACT T2 ON T2.AcctCode = T1.AcctCode
WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T2.FormatCode Like '%[(410201)(420102)]%'
IF (@CTA != @CB)
BEGIN
SET @error = 102
SET @error_message = 'MS-102 Revisar centros de Beneficio'
END
END
Bueno con ese SP estariamos
Saludos
Edited by: Floyola on Feb 23, 2011 11:04 AM
Edited by: Floyola on Feb 23, 2011 11:07 AM
User | Count |
---|---|
99 | |
9 | |
8 | |
5 | |
4 | |
3 | |
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.