Professional Documents
Culture Documents
Control Devolución Orden CS
Control Devolución Orden CS
DATA: zmatnr TYPE matnr,
zemng TYPE enmng,
t_zemng TYPE enmng,
zemng_dev TYPE enmng,
t_zemng_dev TYPE enmng,
t_zemng_dev_t TYPE enmng.
DATA: w_resb TYPE resb,
w_resb_dev TYPE resb.
*Control de componentes que nunca salieron
IF is_component-bwart = '262' .
*Control devolución si existe repuesto
SELECT SINGLE matnr INTO zmatnr FROM resb WHERE rsnum = is_header-
rsnum AND
matnr = is_component
-matnr .
IF sy-subrc NE 0 .
MESSAGE: 'No se puede devolver material que nunca salió ' TYPE 'I'
.
RAISE no_changes_allowed .
ENDIF.
*Control devolución cantidad de repuestos con lo que se ingresa
SELECT * FROM resb INTO w_resb WHERE matnr = is_component-matnr AND
bwart = '261' AND
rsnum = is_header-rsnum AND
xloek <> 'X' AND
kzear = 'X' .
IF sy-subrc EQ 0 .
MOVE w_resb-enmng TO zemng.
ADD zemng TO t_zemng.
ENDIF.
ENDSELECT.
SELECT * FROM resb INTO w_resb_dev WHERE matnr = is_component-matnr
AND
bwart = '262' AND
rsnum = is_header-rsnum AND
xloek <> 'X' AND
kzear = 'X' .
IF sy-subrc EQ 0 .
MOVE w_resb_dev-enmng TO zemng_dev.
ADD zemng_dev TO t_zemng_dev.
ENDIF.
ENDSELECT.
t_zemng_dev_t = is_component-bdmng + t_zemng_dev.
IF t_zemng_dev_t > t_zemng .
MESSAGE: 'No se puede devolver más cantidad que la que se sacó ' T
YPE 'I' .
RAISE no_changes_allowed .
ENDIF.
ENDIF.
*Control de salida y devolución en orden de servicio
DATA: BEGIN OF iresbd OCCURS 0.
INCLUDE STRUCTURE resbd.
DATA: END OF iresbd.
DATA: wa_iresbd LIKE LINE OF iresbd.
DATA: w_resb LIKE LINE OF iresbd,
zemng TYPE enmng,
t_zemng TYPE enmng,
lv_dif TYPE bdmng.
DATA: BEGIN OF tbd OCCURS 0,
matnr TYPE matnr,
bdmng TYPE bdmng,
END OF tbd.
DATA: BEGIN OF tmem OCCURS 0,
matnr TYPE matnr,
bdmng TYPE bdmng,
END OF tmem.
CALL FUNCTION 'PM_ORDER_DATA_READ'
EXPORTING
order_number = caufvd_imp-aufnr
* CALL_FROM_NOTIF =
* IMPORTING
* WCAUFVD =
* WILOA =
* WRIWO1 =
TABLES
* IAFFHD =
* IAFVGD =
iresbd = iresbd.
break fsimovic.
"Recorremos registros ya existentes en BD.
LOOP AT iresbd INTO wa_iresbd WHERE kzear = 'X'.
IF wa_iresbd-bwart = '262' .
wa_iresbd-bdmng = wa_iresbd-bdmng * -1.
ENDIF.
tbd-matnr = wa_iresbd-matnr.
tbd-bdmng = wa_iresbd-bdmng.
COLLECT tbd.
ENDLOOP.
"Recorremos registros en memoria.
LOOP AT iresbd INTO wa_iresbd WHERE kzear IS INITIAL.
IF wa_iresbd-bwart = '262' .
wa_iresbd-bdmng = wa_iresbd-bdmng * -1.
ENDIF.
tmem-matnr = wa_iresbd-matnr.
tmem-bdmng = wa_iresbd-bdmng.
COLLECT tmem.
ENDLOOP.
LOOP AT iresbd INTO wa_iresbd.
CLEAR tbd.
READ TABLE tbd WITH KEY matnr = wa_iresbd-matnr.
CLEAR tmem.
READ TABLE tmem WITH KEY matnr = wa_iresbd-matnr.
lv_dif = tbd-bdmng + tmem-bdmng.
IF lv_dif < 0 .
MESSAGE: 'No se puede devolver más cantidad que la que se sacó '
TYPE 'E'.
EXIT.
ENDIF.
ENDLOOP.