|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > English > ABAP Tutorial > ABAP Workbench Tools > Enhancement > Customer Exits > Customer Exits Examples > Project ZWMWS001 > Funtions Exits > Function Group XLTO > ZXLTOF01 |
*&---------------------------------------------------------------------*
*& Form split_removal_quantity
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->T_LTAPA text
* -->I_LTAK text
* -->I_LTAP text
* -->I_MLVS text
* -->I_MGEF text
* -->I_T333 text
* -->I_T340D text
* -->I_VORGA text
* -->I_AUSML text
* -->I_AUSME text
* -->C_LGTY0 text
* -->C_LGTY1 text
* -->C_LGTY2 text
* -->C_LGTY3 text
* -->C_LGTY4 text
* -->C_LGTY5 text
* -->C_LGTY6 text
* -->C_LGTY7 text
* -->C_LGTY8 text
* -->C_LGTY9 text
* -->C_LGT10 text
* -->C_LGT11 text
* -->C_LGT12 text
* -->C_LGT13 text
* -->C_LGT14 text
* -->C_LGT15 text
* -->C_LGT16 text
* -->C_LGT17 text
* -->C_LGT18 text
* -->C_LGT19 text
* -->C_LGT20 text
* -->C_LGT21 text
* -->C_LGT22 text
* -->C_LGT23 text
* -->C_LGT24 text
* -->C_LGT25 text
* -->C_LGT26 text
* -->C_LGT27 text
* -->C_LGT28 text
* -->C_LGT29 text
* -->C_CONTI text
*----------------------------------------------------------------------*
FORM split_removal_quantity
TABLES
T_LTAPA STRUCTURE LTAPA
CHANGING
I_LTAK like LTAK
I_LTAP like LTAP
I_MLVS like MLVS
I_MGEF like MGEF
I_T333 like T333
I_T340D LIKE T340D
I_VORGA LIKE LTAP-VORGA
I_AUSML LIKE RL03T-AUSML
I_AUSME LIKE RL03T-AUSME
* CHANGING
C_LGTY0 LIKE T334T-LGTY0
C_LGTY1 LIKE RL03T-LGTY1
C_LGTY2 LIKE RL03T-LGTY2
C_LGTY3 LIKE T334T-LGTY3
C_LGTY4 LIKE T334T-LGTY4
C_LGTY5 LIKE T334T-LGTY5
C_LGTY6 LIKE T334T-LGTY6
C_LGTY7 LIKE T334T-LGTY7
C_LGTY8 LIKE T334T-LGTY8
C_LGTY9 LIKE T334T-LGTY9
C_LGT10 LIKE T334T-LGT10
C_LGT11 LIKE T334T-LGT11
C_LGT12 LIKE T334T-LGT12
C_LGT13 LIKE T334T-LGT13
C_LGT14 LIKE T334T-LGT14
C_LGT15 LIKE T334T-LGT15
C_LGT16 LIKE T334T-LGT16
C_LGT17 LIKE T334T-LGT17
C_LGT18 LIKE T334T-LGT18
C_LGT19 LIKE T334T-LGT19
C_LGT20 LIKE T334T-LGT20
C_LGT21 LIKE T334T-LGT21
C_LGT22 LIKE T334T-LGT22
C_LGT23 LIKE T334T-LGT23
C_LGT24 LIKE T334T-LGT24
C_LGT25 LIKE T334T-LGT25
C_LGT26 LIKE T334T-LGT26
C_LGT27 LIKE T334T-LGT27
C_LGT28 LIKE T334T-LGT28
C_LGT29 LIKE T334T-LGT29
C_CONTI LIKE LTAP1-KREUZ.
*---> 1. Check Storage Type Eceran.
tables: mlgt.
clear mlgt.
if C_LGTY0 = 'ZYY'.
select single * from mlgt where matnr = I_MLVS-MATNR
and lgnum = I_MLVS-LGNUM
and lgtyp = C_LGTY0.
if sy-subrc = 0.
if I_AUSML le mlgt-MAMNG.
clear: C_LGTY1, C_LGTY2, C_LGTY3, C_LGTY4, C_LGTY5,
C_LGTY6, C_LGTY7, C_LGTY8, C_LGTY9, C_LGT10,
C_LGT11, C_LGT12, C_LGT13, C_LGT14, C_LGT15,
C_LGT16, C_LGT17, C_LGT18, C_LGT19, C_LGT20,
C_LGT21, C_LGT22, C_LGT23, C_LGT24, C_LGT25,
C_LGT26, C_LGT27, C_LGT28, C_LGT29.
endif.
endif.
endif.
*---> 2. Split Quantity.
if not ( C_LGTY0 = 'ZYY' and
C_LGTY1 is initial and
C_LGTY2 is initial ) .
data: LV_NUM1 type I,
LV_NUM2 type I,
LV_NUM3 type I,
LV_LOOP type P DECIMALS 5,
LV_AUSML like RL03T-AUSML,
ch_forklift(1) type c,
ch_brgew type t312b-gwgew,
lv_brgew_max like t312b-gwgew.
refresh T_LTAPA.
clear T_LTAPA.
*---- check forklift
clear ch_forklift.
ch_forklift = 'X'.
import ch_forklift from memory id 'ZWM_ZLT0E'.
* free memory id 'ZWM_ZLT0E'.
if sy-subrc ne 0.
if i_ltap-ABLAD(4) eq 'HAND'.
clear ch_forklift.
endif.
endif.
move I_AUSML to LV_AUSML.
do 3 times.
case sy-index.
when 1.
if ch_forklift is initial. "bila pilih handpallet
clear lv_brgew_max.
select single gwgew into lv_brgew_max from t312b
where lgnum = i_LTAP-LGNUM
and PRSPL = '000001'.
if lv_brgew_max is initial or I_MLVS-brgew = 0
or I_MLVS-LHMG2 = 0.
continue.
else.
ch_brgew = I_MLVS-brgew * I_AUSML.
if ch_brgew gt lv_brgew_max.
lv_brgew_max = ch_brgew.
endif.
lv_loop = lv_brgew_max / I_MLVS-brgew. "qty per max berat.
lv_loop = lv_loop / I_MLVS-LHMG2. "qty per box
I_MLVS-LHMG1 = trunc( lv_loop ). "qty per pallet
if I_MLVS-LHMG1 < lv_loop.
I_MLVS-LHMG1 = ( I_MLVS-LHMG1 + 1 ) * I_MLVS-LHMG2.
else.
I_MLVS-LHMG1 = I_MLVS-LHMG1 * I_MLVS-LHMG2.
endif.
endif.
endif.
if i_mlvs-lhmg1 ne 0.
LV_LOOP = I_AUSML / I_MLVS-LHMG1.
LV_NUM1 = trunc( LV_LOOP ).
I_AUSML = I_AUSML - ( LV_NUM1 * I_MLVS-LHMG1 ).
else.
exit.
endif.
when 2.
if i_mlvs-lhmg2 ne 0.
LV_LOOP = I_AUSML / I_MLVS-LHMG2.
LV_NUM2 = trunc( LV_LOOP ).
I_AUSML = I_AUSML - ( LV_NUM2 * I_MLVS-LHMG2 ).
else.
exit.
endif.
when 3.
if i_mlvs-lhmg3 ne 0.
LV_LOOP = I_AUSML / I_MLVS-LHMG3.
LV_NUM3 = trunc( LV_LOOP ).
I_AUSML = I_AUSML - ( LV_NUM3 * I_MLVS-LHMG3 ).
else.
exit.
endif.
endcase.
enddo.
perform append_ltap
tables T_LTAPA
using I_LTAP I_MLVS i_ausme lv_ausml
changing lv_num1 lv_num2 lv_num3.
move LV_AUSML to I_AUSML.
endif.
*---> 3. Pass LTAK untuk digunakan pada user exit split TO.
data: ch_ltak like ltak occurs 0 with header line.
clear ch_ltak.
refresh ch_ltak.
move-corresponding i_ltak to ch_ltak.
ch_ltak-TRART = i_T333-TRART.
append ch_ltak.
export ch_ltak to memory id 'ZWM_SPLIT_TO'.
ENDFORM. " check_eceran
*&---------------------------------------------------------------------*
*& Form append_ltap
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM append_ltap
tables
T_LTAPA structure LTAPA
using
I_LTAP like LTAP
I_MLVS like MLVS
i_ausme LIKE RL03T-AUSME
lv_ausml LIKE RL03T-AUSML
changing
lv_num1 type i
lv_num2 type i
lv_num3 type i.
data: sum_ANFML like RL03T-AUSML,
sum_ANFMe like RL03T-AUSMe.
clear T_LTAPA.
do lv_num1 times.
T_LTAPA-ANFME = ( 1 * I_MLVS-LHMG1 / I_LTAP-UMREZ ).
T_LTAPA-ANFML = T_LTAPA-ANFME * I_LTAP-UMREZ.
if T_LTAPA-ANFML > 0 and T_LTAPA-ANFME > 0.
append T_LTAPA.
clear T_LTAPA.
endif.
enddo.
clear lv_num1.
* do lv_num2 times.
T_LTAPA-ANFME = ( lv_num2 * I_MLVS-LHMG2 / I_LTAP-UMREZ ).
T_LTAPA-ANFML = T_LTAPA-ANFME * I_LTAP-UMREZ.
if T_LTAPA-ANFML > 0 and T_LTAPA-ANFME > 0.
append T_LTAPA.
clear T_LTAPA.
endif.
* enddo.
clear lv_num2.
* do lv_num3 times.
T_LTAPA-ANFME = ( LV_NUM3 * I_MLVS-LHMG3 / I_LTAP-UMREZ ).
T_LTAPA-ANFML = T_LTAPA-ANFME * I_LTAP-UMREZ.
if T_LTAPA-ANFML > 0 and T_LTAPA-ANFME > 0.
append T_LTAPA.
clear T_LTAPA.
endif.
* enddo.
clear lv_num3.
clear: sum_anfme, sum_anfml.
loop at T_LTAPA.
sum_anfme = sum_anfme + T_LTAPA-ANFMe.
sum_anfml = sum_anfml + T_LTAPA-ANFML.
endloop.
T_LTAPA-ANFME = i_AUSME - sum_anfme.
T_LTAPA-ANFML = lv_AUSMl - sum_anfml.
if T_LTAPA-ANFML > 0 and T_LTAPA-ANFME > 0.
append T_LTAPA.
endif.
ENDFORM. " append_ltap