ZXLTOF01

<< 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