on 05-04-2010 11:53 PM
Estimados todos:
De que manera puedo evitar que se creen ordenes de venta cuando el Stock = Comprometido esto para evitar que Disponible sea un número negativo?
Gracias por su ayuda
Saludos
Marco
Hola,
Lo que yo haria es pasarlo por flujo de aprobación. asi el documento de venta no se crearia, sino que quedaria en borrador hasta que este sea aprobado.
tienes que pensar que las empresas lo que buscan es vender y SB1 hace que esto sea posible, por tanto no comprueba el stock disponible, sino el stock real.
Para el procedimiento de aprobación, debes generar una consulta que verifique la condición respecto del disponible.
slds.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Gracias Rulius
he creado esta consulta en el TN pero me genera el error 512 (Mensaje 131-183)
es seguro que tengo algo mal, sin embargo, no se que es, puede alguie apoyarme con esto? gracias a todos
IF (@object_type = '17') and (@transaction_type='A' or @transaction_type='U')
begin
declare @codeart as nvarchar (20)
declare @Existe as nvarchar (3)
declare @compromete nvarchar (3)
set @codeart = (select T0.ItemCode from OITM T0 where T0.ItemCode = @list_of_cols_val_tab_del)
set @Existe = (select T0.OnHand from OITM T0)
set @compromete = (Select T0.IsCommited from OITM T0)
IF
@Existe = @compromete
begin
SET @error = 1
SET @error_message = 'El comprometido supera las existencias'
end
end
Hola.
Intenta agregando la misma clausula Where que está en el SET @CODEART a los otros dos Set. para devolver sólo el dato de un registro. Así como lo tiene traería todos los registros de OITM para intentar almacenarlos en una variable que sólo puede almacenar el dato de un sólo registro.
set @codeart = (select T0.ItemCode from OITM T0 where T0.ItemCode = @list_of_cols_val_tab_del)
set @Existe = (select T0.OnHand from OITM T0 where T0.ItemCode = @list_of_cols_val_tab_del)
set @compromete = (Select T0.IsCommited from OITM T0 where T0.ItemCode = @list_of_cols_val_tab_del)
Nos cuenta cómo le va.
Saludos.
Hola.
Intentar ajustando la comparación que tiene (entre el stock actual contra lo comprometido: OnHand = IsCommited), tomando la cantidad que está en el documento. De esta manera se suma a lo comprometido la cantidad que figura en la orden de venta, si la suma de las dos cantidades supera el stock actual, dispararía la alarma.
Esto es, mientras no se haya creado/actualizado el documento tampoco se habrá actualizado la cantidad comprometida de los artículos.
Por otra parte las variables OnHand e IsCommited ¿no deberían ser numéricas y no caracter?.
Nos cuenta cómo le va.
Saludos.
Gracias Hector
De hecho la comparación que tu me dices de la cantidad que tiene el documento no es la que le asigno con los set @Existe y Set @compromete?
Esta es la última consulta que he probado pero no valida nada. que estárè haciendo mal?
IF (@object_type = '17') and (@transaction_type='A' or @transaction_type='U')
begin
declare @codeart as nvarchar (20)
declare @Existe as int
declare @compromete int
set @codeart = (select T0.ItemCode from OITM T0 where T0.ItemCode = @list_of_cols_val_tab_del)
set @Existe = (select T0.OnHand from OITM T0 where T0.OnHand = @list_of_cols_val_tab_del)
set @compromete = (Select T0.IsCommited from OITM T0 where T0.IsCommited = @list_of_cols_val_tab_del)
IF
@Existe = @compromete
begin
SET @error = 1
SET @error_message = 'El comprometido supera las existencias'
end
end
Hola.
Intenta con este código:
IF (@object_type = '17') and (@transaction_type='A' or @transaction_type='U')
begin
declare @codeart as nvarchar (20)
declare @Existe as int
declare @compromete int
set @codeart = (select T0.ItemCode from OITM T0 where T0.ItemCode = @list_of_cols_val_tab_del)
set @Existe = (select T0.OnHand from OITM T0 where T0.OnHand = @list_of_cols_val_tab_del)
set @compromete = (Select T0.IsCommited from OITM T0 where T0.IsCommited = @list_of_cols_val_tab_del)
IF @Existe < @compromete
begin
SET @error = 1
SET @error_message = 'El comprometido supera las existencias'
end
end
Si además se desea tener en cuenta la cantidad en el documento, se debe sumar esa cantidad a lo comprmetido.
Saludos.
Gracias Hector
He intentado con todas las posibles combinaciones entre @Existe y @Compromete (= < >...) pero no ha sido posible que valide.
Ahora bien, la cantidad del documento no la quiero tomar en cuenta o sumar a este proceso ya que si la existencia y comprometido son iguales al momento de crear el documento debería activarse la validación.
De momento sigo haciendo pruebas pero si resolverlo.
Saludos
Hola.
Intenta algo diferente:
IF (@transaction_type IN (N'A',N'U') AND (@object_type = N'17'))
BEGIN
IF EXISTS (
SELECT T1.ItemCode, T2.OnHand, T2.IsCommited
FROM RDR1 T1
INNER JOIN ORDR T0 ON T0.DocEntry = T1.DocEntry
INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode
WHERE T0.docentry = @list_of_cols_val_tab_del
AND T2.OnHand < T2.IsCommited
)
BEGIN
SELECT @error = 1, @error_message = 'La cantidad comprometida supera las existencias'
END
END
(Faltaba un paréntesis, pero ya lo agregue en este código, jeje). He probado el código y funciona OK.
Tengo una inquietud: cuando los usuarios colocan en la Orden de Venta una cantidad superior al stock actual, ¿no aparece un mensaje de advertencia de esto?.
Nos cuenta cómo le va.
Saludos.
Edited by: Hector Daniel Hernandez on May 10, 2010 11:56 AM
Nada Hector
hice algunas modificaciones al código y sigue igual, sin validad
IF (@transaction_type IN ('A','U') AND @object_type = '17')
BEGIN
IF EXISTS (
SELECT T1.ItemCode, T2.OnHand, T2.IsCommited
FROM RDR1 T1
INNER JOIN ORDR T0 ON T0.DocEntry = T1.DocEntry
INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode
WHERE T0.docentry = @list_of_cols_val_tab_del
AND T2.OnHand = T2.IsCommited
)
BEGIN
SELECT @error = 1, @error_message = 'La cantidad comprometida supera las existencias'
END
END
Hola.
Hice cambios a mi última respuesta que no viste. Probé el código y funciona OK en el TransactionNotification.
Copia y pega todo el código de mi última respuesta tal como está. Debe funcionar.
Este código se activará después que aparezca el aviso de confirmación al colocarse una cantidad superior al stock actual, si se intenta crear la Orden de Venta aparecerá el mensaje de error.
Saludos.
Hector
Lo del parentesis lo note y lo he agregado, sin embargo, la OV sigue sin ningún problema es decir pasa sin validar
Tengo el siguiente escenario, para ampliar algo más
del código XXX-YYY tengo en Stock = 2 Comprometido = 2 Disponible = 0
Hice una orden de venta por la cantidad de 1 y me aparece el aviso que no hay disponibles y que se está pidiendo 1 unidad.
(es el formulario que preguntas si sale, con lo que respondo a tu duda)
Le doy clic en crear y se crea sin problemas quedandome entonces los siguientes datos
código XXX-YYY tengo en Stock = 2 Comprometido = 3 Disponible = -1
hice un documento por 5 unidades y tambien se grabo sin validar, en este caso
código XXX-YYY tengo en Stock = 2 Comprometido = 7 Disponible = -5
Copie y pegue tal cual el código y nada
Hola.
Quisiera colocar las siguientes recomendaciones:
1. Asegúrate que estás colocando el código en el objeto "SBO_SP_TransactionNotification". debajo del la última línea de código de otra validación que pueda haber en el transaction, y arriba de la parte final del transaction donde está lo siguiente:
-- Select the return values
select @error, @error_message
end
Mira el siguiente ejemplo: .
2. La comparación en tu caso sería Onhand <= isCommited para que no deje crear la OV si la cantidad comprometida es igual o si supera al stock actual.
3. Cerrar todas las ventanas de Orden de Venta y abrir una nueva OV para probar la validación.
Asegúate de lo anteror para que funcione bien la validación.
Nos cuenta cóm le va.
Saludos.
Hector
Gracias por tu ayuda y paciencia, has sido de gran ayuda
el tema de las últimas líneas
-- Select the return values
select @error, @error_message
end
era el error que no me permitia que funcionara la validación, por causas extrañas encontre estas líneas perdidas entre otro código, al ponerlas al final del TN ha funcionado perfectamente.
De nuevo gracias
User | Count |
---|---|
108 | |
12 | |
11 | |
6 | |
5 | |
4 | |
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.