cancel
Showing results for 
Search instead for 
Did you mean: 

busqueda formeteada traslada de almacen de orden fabricacion

Former Member
0 Kudos

buenos dias

alguien podria ayudarme tengo una busqueda formeteada que se trae la lista de materiales

de una orden de fabricacion, pero tengo un incoveniente que no se como solucionarlo

cuando en una lista de de materiales existe la misma materia prima con diferente valores

la busqueda formeteada se trae los datos de la orden de fabricacion pero los

articulos que ser repite se los trae con la misma cantidad, no el valor que tiene

realmente la orden de fabricacion, aquie esta como la tengo

SELECT T1.[ItemCode],T0.[DocNum],t2.[Dfltwh]

FROM

OWOR T0 

INNER JOIN WOR1 T1 ON T0.DocEntry = T1.DocEntry

inner join oitm t2 on t1.ItemCode = t2.ItemCode

WHERE

T0.[Status]='R'

and T0.[DocNum]=$[OWTR.U_orden]

and t2.InvntItem = 'Y'

and T1.itemcode not like 'F%'

and isnull((select sum(T3.Quantity)

                from WTR1 T3 INNER JOIN OWTR T4 ON T3.DocEntry=T4.DOCENTRY

                WHERE  t3.itemcode=t1.itemcode and T4.U_orden=$[OWTR.U_orden]

                group by t3.ItemCode,t4.U_orden),0)

    <T1.PlannedQty

ejemplo

   producto1             cantidad

    xy-001                      100 gms

    xy-001                      100 gms ( cuando en el segunto item la cantidad es difente)

agradecere mucho su ayuda.

gracias

Accepted Solutions (1)

Accepted Solutions (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Prueba la Busqueda así

DECLARE

          @LineNum          INT

 

DECLARE

          @ItemCode          NVARCHAR(20),

          @DocNum                    INT,

          @DfltWH                    NVARCHAR(8)

 

DECLARE C CURSOR FOR

          SELECT T1.LineNum

          FROM WOR1 T1

          INNER JOIN OWTR T0 ON T0.DocEntry=T1.DocEntry

          WHERE T0.DocNum=$[OWTR.U_orden]

 

          OPEN C

                    FETCH NEXT FROM C

                    INTO @LineNum

 

                    WHILE @@fetch_status = 0

                    BEGIN

                              SELECT

                                        @ItemCode=A.ItemCode,

                                        @DocNum=B.DocNum,

                                        @DfltWH=C.DfltWH

 

                              FROM WOR1 A

                              INNER JOIN OWOR B ON B.DocEntry=A.DocEntry

                              INNER JOIN OITM C ON C.ItemCode=A.ItemCode

                              WHERE B.DocNum=$[OWTR.U_orden] AND A.LineNum=@LineNum AND C.InvntItem='Y' AND A.ItemCode NOT LIKE 'F_%%' AND

                              ISNULL((SELECT SUM(Y.Quantity) FROM WTR1 Y INNER JOIN OWTR X ON X.DocEntry=Y.DocEntry WHERE Y.ItemCode=A.ItemCode AND X.DocNum=B.DocNum GROUP BY Y.Quantity, X.DocNum),0)<A.PlannedQty

 

                              IF @LineNum IS NOT NULL

                              BEGIN

                                        SELECT @ItemCode,@DocNum,@DfltWH

                              END

 

                              FETCH NEXT FROM C

                              INTO @LineNum

                    END

          CLOSE C

DEALLOCATE C

Saludos

Former Member
0 Kudos

hola felipe, gracias por contestar rapido, pero

no me funciono la busqueda, no se trae nada cuando la ejecuto

la transferencia de la orden de fabricacion no se trae ningun articulo

gracia de antemano por tu ayuda.

Former Member
0 Kudos

aqui muestro

felipe_loyolarodriguez
Active Contributor
0 Kudos

Cambia la linea

Donde dice

  1.                               IF @LineNum IS NOT NULL 
  2.                               BEGIN 
  3.                                         SELECT @ItemCode,@DocNum,@DfltWH 
  4.                               END 

Coloca solo SELECT @ItemCode

Lo que pasa es que coloque tu misma query en el cursor y traía 3 campos

Saludos

Former Member
0 Kudos

hola felipe

aun cambiandole solo esa linea , sigue sin darme nada, que estare

haciendo mal.

disculpa tanta molestias.

agradecere mucho tu ayuda.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Los articulos van en el mismo orden que en la OF?

Former Member
0 Kudos

disculpa no habia podido ver el foro tenia problemas con mi usuario

si van el mismo orden

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola

Pruebalo así, agregale los demas filtros al WHERE pero me funcionó así.

SELECT A.ItemCode

FROM

(SELECT CAST(ROW_NUMBER() OVER (ORDER BY T0.ItemCode) AS INT) AS Linea, T0.ItemCode, T1.DocNum, T2.Dfltwh

FROM WOR1 T0

INNER JOIN OWOR T1 ON T0.DocEntry=T1.DocEntry

INNER JOIN OITM T2 ON T2.ItemCode=T0.ItemCode

WHERE T1.DocNum=$[OWTR.U_orden] AND T2.InvNtItem='Y') AS A

WHERE A.Linea=CAST($[$23.0.0] AS INT)

Atte.

Felipe

Former Member
0 Kudos

gracias por contestar

fijate que la acabo de probar lo unico que  paso esto:

tenia que darle click linea por linea para que me trajiera los items,

y segundo los articulos que son los mismo me trae siempre el mismo valor

ejemplo

producto1           cantidad

yy-005                    25 grams

xy-001                 100 grams

xy-001                  100 grams (cuando en la orden de fabricacion era otra cantidad)

y la busqueda sera la misma cantidad

gracias por tu ayuda

Former Member
0 Kudos

disculpa felipe pero aun tengo problemas mira las cantidad son los mismos articulos, no me habia

dado cuenta, pero les quita el cero antes, pero tengo que ir linea por linea dando click

felipe_loyolarodriguez
Active Contributor
0 Kudos

Sandra, debes colocar una BF en el item y otra en la cantidad

Esta es para el articulo

SELECT A.ItemCode

FROM

(SELECT CAST(ROW_NUMBER() OVER (ORDER BY T0.LineNum) AS INT) AS Linea, T0.ItemCode, T1.DocNum, T2.Dfltwh

FROM WOR1 T0

INNER JOIN OWOR T1 ON T0.DocEntry=T1.DocEntry

INNER JOIN OITM T2 ON T2.ItemCode=T0.ItemCode

WHERE T1.DocNum=$[OWTR.U_orden] AND T2.InvNtItem='Y') AS A

WHERE A.Linea=CAST($[$23.0.0] AS INT)

Esta es para la cantidad

SELECT CAST(A.PlannedQty AS NUMERIC(19,6))

FROM  

(SELECT CAST(ROW_NUMBER() OVER (ORDER BY T0.LineNum) AS INT) AS Linea, T0.ItemCode, T1.DocNum, T2.Dfltwh, T0.PlannedQty

FROM WOR1 T0 

INNER JOIN OWOR T1 ON T0.DocEntry=T1.DocEntry 

INNER JOIN OITM T2 ON T2.ItemCode=T0.ItemCode 

WHERE T1.DocNum=$[OWTR.U_orden]  AND T2.InvNtItem='Y') AS A 

WHERE A.Linea=CAST($[$23.0.0] AS INT)

A la BF de la cantidad le das actualización automática cuando salgas de la columna modificada del articulo y la opción "visualizar valores definidos por el usuario"

Saludos

Former Member
0 Kudos

Gracias felipe por costestar una ultima ayuda no se si se pueda

en este momento tengo ir dando click por cada articulo, podria hacerse que pueda

yo seleccionar la lista de una vez !!!!!!!!!!! no se si se pueda en este momento lo hace

asi doy un click por cada linea, y me da bien la cantidad

Answers (2)

Answers (2)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Quita la referencia de la linea en el query de los items, así traerá todos los items de la OF como una lista desplegable. Luego selecciónalos todos con el shift+clic izquierdo y se insertaran todos. La cantidad se actualizara automáticamente.

Saludos

Former Member
0 Kudos

hola felipe, agradezco mucho tu ayuda

pero cual linea es la que tengo que eliminar !!!!!!!!

felipe_loyolarodriguez
Active Contributor
0 Kudos

La ULTIMA linea de la query de la BF de Item

WHERE A.Linea=CAST($[$23.0.0] AS INT

Esa, borrala, pero solo de la query de items, la de la cantidad dejala tal cual, recuerda que tiene que tener marcada la casilla actualizar automatico.

Saludos

Former Member
0 Kudos

HOLA FELIPE

GRACIAS SI ME FUNCIONA PERFECTAMENTE,

SOLO TENGO UNA OBSERVACION , FIJATE QUE ME ESTA PERMITIENDO

TRASLADAS VARIAS VECES ESTA MISMA ORDEN DE FABRICACION, SOLO

TIENE QUE PERMITIRME UNA VEZ ESTE TODA LA MATERIA PRIMA TRASLADA

ME PODRIAS AYUDAR

felipe_loyolarodriguez
Active Contributor
0 Kudos

Eso ya debes validarlo con un transaction que bloquee la creación de la transferencia si la suma de las transferencias con el mismo numero de OF es igual al de la OF, así no dejara crearla.

Atte.

Former Member
0 Kudos

GRACIAS FELIPE

FUE DE GRAN AYUDA LA CONSULTA, QUEDO PERFECTA

Former Member
0 Kudos

hola felipe

fijete que este es transaction, pero algunas veces me deja psar el traslado, si me

salgo y vuelvo a entrar al formulario me deja psar. otra vez la misma orden,

tambien si quiero trasladar la orden por partes ejemplos 2 articulos y despues 1

me vuelve ha mostrar la consulta los items que ya he transladado

si me pudieras ayudar te lo agradeceria

--- TRANSFERENCIA A BODEGA DE PRODUCCION

IF ( @object_type = '67' AND @transaction_type IN ('A','U') )

       

BEGIN

     SELECT @cantidadtr= t0.Quantity, @ItemCode = t0.ItemCode,

       @orden = t1.U_Orden,@NLinea=T0.[VisOrder], @cantidadorden = SUM(t3.PlannedQty)

      

       from wtr1 t0

     inner join owtr t1 on t0.DocEntry = t1.DocEntry 

     INNER JOIN OWOR T2 ON T1.U_orden  = T2.DocNum

    INNER JOIN WOR1 T3 ON T2.DocEntry = T3.DocEntry

    INNER JOIN  OITM T4 ON T0.ItemCode = T4.ItemCode

    

       where t0.DocEntry = @list_of_cols_val_tab_del and

             t0.ItemCode = t3.ItemCode

     AND

             T4.U_Categoria <> '21'

     AND    YEAR(T2.PostDate)=YEAR(GETDATE())

             GROUP BY T3.ItemCode, t0.Quantity,t0.ItemCode,t1.U_Orden,T0.[VisOrder]

select  @cantidadacum =SUM(t10.Quantity)

FROM WTR1 T10

  INNER JOIN OWTR T11 ON T10.DocEntry = T11.DocEntry

  INNER JOIN OWOR T12 ON T11.U_orden  = T12.DocNum

  INNER JOIN WOR1 T13 ON T12.DocEntry = T13.DocEntry

   WHERE  T10.ItemCode = T13.ItemCode and

     t10.ItemCode = @ItemCode and

     T11.U_orden=@orden and

     T10.[VisOrder]=@NLinea

     GROUP BY T10.ItemCode,   T11.U_orden , T10.[VisOrder]  

   ---**         

if @cantidadacum    > @cantidadorden

  

  

   begin

   set @error = 6

   set @error_message = 'OPR - CANTIDAD SOBREPASA LA CANTIDAD PLANIFICADA DE ORDEN  - 6' + ' CODIGO:  '+@ItemCode

       

     End

         end

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenas

Prueba este TN

IF @object_type=67 AND @transaction_type IN ('A','U')

BEGIN

          DECLARE

                    @ItemCode NVARCHAR(20)

          SET @ItemCode = (          SELECT TOP 1 T1.ItemCode

                                                            FROM OWTR T0

                                                            INNER JOIN WTR1 T1 ON T1.DocEntry=T0.DocEntry

                                                            WHERE T0.DocEntry=@list_of_cols_val_tab_del AND

                                                            (T1.Quantity+ISNULL((SELECT SUM(Y.Quantity) FROM OWTR X INNER JOIN WTR1 Y ON Y.DocEntry=X.DocEntry WHERE Y.ItemCode=T1.ItemCode AND X.DocEntry<>@list_of_cols_val_tab_del AND X.U_Orden=T0.U_Orden),0))>(SELECT A.PlannedQty FROM OWOR B INNER JOIN WOR1 A ON A.DocEntry=B.DocEntry WHERE A.ItemCode=T1.ItemCode AND B.DocNum=T0.U_Orden)

                                                  )

          IF @ItemCode IS NOT NULL

          BEGIN

                    SELECT @error=666, @error_message='Cantidad sobrepasa la cantidad planificada en orden para el articulo ' + @ItemCode

          END           

END

Saludos

Message was edited by: Felipe Loyola Rodriguez

Former Member
0 Kudos

gracias felipe

me da este error cuando quiero trasladar un items que me quedo de la orden de fabricacion, por

que hay casos que se traslada por partes.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Ya replique el error y es porque ese ítem esta 2 veces en la OF. Con las demás funciona bien.

Por ahora no se me ocurre nada para ese caso, es difícil hacer referencia a 2 valores iguales dentro de un subquery porque no se puede seleccionar más de 1 registro.

Former Member
0 Kudos

gracias felipe

te he molestado bastante, pero otra cosa,

en la consulta que me enviaste de traerse los items, como puedo

hacer para que si un items ya se traslado que ya no me lo muestre la consulta

esta es la consulta que me enviaste, para la lista de items

SELECT A.ItemCode

    FROM  

    (SELECT CAST(ROW_NUMBER() OVER (ORDER BY T0.LineNum) AS INT) AS Linea, T0.ItemCode, T1.DocNum, T2.Dfltwh 

    FROM WOR1 T0 

    INNER JOIN OWOR T1 ON T0.DocEntry=T1.DocEntry 

    INNER JOIN OITM T2 ON T2.ItemCode=T0.ItemCode 

    WHERE  T1.[Status]='R'  AND

  T0.itemcode not like 'F%' AND

T1.DocNum=$[OWTR.U_orden] AND T2.InvNtItem='Y') AS A

felipe_loyolarodriguez
Active Contributor
0 Kudos

Si pruebas un cursor que recorra las lineas de la WOR1.

Former Member
0 Kudos

disculta tanta molestia, pero me podrias ayudar, no se como

se hace los cursores en sql,

gracias por tu ayuda.