lunes, 20 de marzo de 2017

CANTIDAD BASE 20.03.2017

Según tu excel hay materiales (componentes) padre que tienen una cantidad base la cuál se hereda a los materiales (componentes) hijos, bueno si es solo eso y entendí bien pese a que pudiste explicar mejor ...
te dejo la siguiente lógica...


En tu tabla interna STB tienes los siguientes campos:
XMENGE -  Cantidad base lista de materiales (siguiente nivel)
OJTXP - Texto breve del objeto (posición), descripción del componente desagregado
OJTXB - Texto breve del objeto (conjunto), descripción del componente padre



Si tedas cuenta hay una relación OJTXB y OJTXP a eso sumale que tiene un campo STUFE (nivel) o MATNR (producto final) que tu le asignas para armar tu reporte, por ejemplo... 


Entonces lo que recomiendo es que hagas un READ TABLE a la STB que traes de la función y que le asignes el campo XMENG del componente padre siempre y cuando su campo XMENG este vacío, esto nos dejara a componentes de el nivel más bajo (desagregado) pero no solo es hacer un READ TABLE también deberas validar que pertenece al mismo material final (producto terminado), osea la idea sería la siguiente ...

tienes tu GT_REPORTE donde tienes el MATNR (producto final) y de la STB habrás jalado también los campos STUFE (nivel), OJTXB (componente padre) y OJTXP (componente hijo), mira la imagen...
así que harás un LOOP a tu GT_REPORTE y para cada que encuentres un XMENG vacío hacer un READ TABLE a la GT_READ TABLE (si, sobre la misma tabla, recomiendo field symbol) WITH KEY matnr = producto final de esa misma linea, mejor te escribo algo de codigo simple ... ojo es un borrador, te estoy dando una idea ya que no se bien como lo has programado pero espero te ayude...

para esto tu gt_reporte imagino estará ordenado y esto lo harías antes del final o donde gustes la cosa que lo que hará es asignar la cantidad base a aquellos que no tienen tomandolos del componente padre...


LOOP AT GT_REPORTE ASSIGNIG <ST_REPORTE>

IF <ST_REPORTE>-XMENG IS INITIAL.
LV_STUFE = <ST_REPORTE>-STUFE - 1.
READ TABLE GT_REPORTE ASSIGNING <FS_REPORTE_AUX> WITH KEY matnr = <ST_REPORTE>-MATNR
stufe = LV_STUFE
ojtxp = <ST_REPORTE>-OJTXB.

IF sy-subrc EQ 0.
<FS_REPORTE>-XMENG = <FS_REPORTE_AUX>-XMENG.
ENDIF.
ENDIF.

Explicación:


Si observas nuevamente y bien esta imagen te darás cuenta que el nivel padre STUFE es uno menos que el nivel hijo, por eso al read le envio un STUFE - 1. Ahora, igualo el OJTXP al OJTXB de la linea que no tiene XMENG ya que estoy leeyendo una posición hija por tanto el OJTXB (componente padre) estara en mi GT_REPORTE como OJTXP con un XMENG con valor. Es decir según la imagen... cuando lea las lineas 2, 3 y 4 sombreadas tienen un componente padre (OJTXB) igual al OJTXP de la linea 1, y su nivel es el mismo pero restado en 1. a eso sumale el MATNR producto final que debes tener en tu GT_REPORTE como ya explique...


Esta logica la puedes agregar al momento de armar tu reporte o luego cuando este todo armado, sería pruebes... te estuve llamando pero esta apagado otra vez... bueno, si puedes comentas para ver como te va...
tu puedes



No hay comentarios.:

Publicar un comentario