on 07-11-2014 5:36 PM
Buena tarde Expertos de la comunidad , estoy trabajando con este transaction que me detecta los productos que no tienen existencia, y asi no dejar crear la orden de fabricacion , este codigo bloquea si alguno de los articulos no hay disponibilidad,"hasta alli todo bien", el problema que tengo es el siguiente.
Ejemplo: creacion de 50 pares de zapatos
codigo Articulo cantidad requerida cantidad Disponible 102 suelas ( oitw.onhand-oitw.iscommited)
101066 Suelas 100
haciendo mis pruebas incremento el numero de pares de zapatos que quiero y pongo '60' logicamente me va a marcar que no tengo disponible para esta cantidad, luego pongo 49 pares logicamente me tendria que dejar pasar porque si tengo disponible en mis almacenes, esta es mi interrogante que tengo mal en el Query para que no me funcione, lo raro de todo esto es que si me deja pasar si solo me gasto el 60 % exactamente del material, es decir si pongo la cantidad de pares donde se consumen 62 suelas si me funciona este transaction. Agradeceria si alguien me pudiera brindar su mano a resolver este caso.
saludos cordiales
Declare @Num int
IF @object_type in ('202') and @transaction_type in ('A')
begin
SET @Num=(select Top 1 COUNT(c.ItemCode)
from OITW a
inner join OITM b on a.ItemCode=b.ItemCode
inner join WOR1 c on a.ItemCode=c.ItemCode
left join OWOR d on c.DocEntry=d.DocEntry
left join ITT1 e on c.ItemCode=e.Code
where d.DocNum =@list_of_cols_val_tab_del
and c.ItemCode not IN('GIF','MO')and
c.ItemCode like '1%'
group by b.ItemCode,b.ItemName,c.PlannedQty,c.ItemCode
having ((Sum(a.OnHand)-SUM(a.IsCommited)) <=(c.PlannedQty))
)
--Parte 2
declare @ItemWor1 varchar(100)
SET @ItemWOR1 =(SELECT CONVERT(VARCHAR(100), c.ItemCode) + ', '
from OITW a
inner join OITM b on a.ItemCode=b.ItemCode
inner join WOR1 c on a.ItemCode=c.ItemCode
left join OWOR d on c.DocEntry=d.DocEntry
left join ITT1 e on c.ItemCode=e.Code --Poner en Revision
where d.DocNum =@list_of_cols_val_tab_del
and c.ItemCode not IN('GIF','MO')and
c.ItemCode like '1%'
group by b.ItemCode,b.ItemName,c.PlannedQty,c.ItemCode
having ((Sum(a.OnHand)-SUM(a.IsCommited)) <=(c.PlannedQty))
ORDER BY 1 FOR XML PATH(''))
IF (@Num>0 or @Num='' )
BEGIN
SELECT @error = 101
SELECT @error_message = N'Existen componentes en Status de no Disponibles: ' + @ItemWOR1
end
end
Hola
Creo que el problema radica en que SBO considera dentro del comprometido las cantidades solicitadas de cada componente en la orden de producción que estás procesando.
Te dejo una consulta modificada:
IF @object_type in ('202') and @transaction_type in ('A')
begin
DECLARE cr_oitm CURSOR FOR
select T1.itemcode, SUM(T0.OnHand) as Stock, SUM(T0.iscommited) as Comprometido, MAX(t1.PlannedQty) as Planificada FROM OITW T0 inner join WOR1 T1 on T0.ItemCode = T1.ItemCode where T1.DocEntry = @list_of_cols_val_tab_del group by T1.ItemCode OPEN cr_oitm FETCH NEXT FROM cr_oitm into @itemcode, @stock, @comprometido, @planificada
WHILE @@FETCH_STATUS = 0
BEGIN
if (@stock - @comprometido + @planificada < @planificada)
begin
if @error_message = 'Ok'
set @error_message = 'Artículos que no tienen stock '
set @error_message = @error_message + @itemcode + '-' + CAST(@stock as CHAR(3)) + ' ' + CAST(@comprometido as CHAR(3)) + ' ' + CAST(@planificada as CHAR(3))
set @num = 100
end
FETCH NEXT FROM cr_oitm into @itemcode, @stock, @comprometido, @planificada
END
CLOSE cr_oitm
DEALLOCATE cr_oitm end
Modifica las condiciones para seleccionar tus artículos y finalizar la consulta.
Un saludo
Agustín Marcos Cividanes
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
91 | |
8 | |
7 | |
4 | |
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.