DATA : BEGIN OF CMP_ITEM OCCURS 0,
exidv LIKE vbplk-exidv, " 包材编号
sumvemng TYPE STRING, " 数量字符串
sumvgpos type i, " 项目行编号相加汇总
flag type c, "是否合并标志位
same_exidv(4) type c,
end of cmp_item.
DATA : WA_CMP_ITEM LIKE LINE OF CMP_ITEM.
FIELD-SYMBOLS: <lfs_item1> LIKE LINE OF item,
<lfs_item2> LIKE LINE OF item,
<lfs_item3> LIKE LINE OF item,
<lfs_item_data1> LIKE LINE OF item_data,
<lfs_item_data2> LIKE LINE OF item_data.
DATA: lv_cumulative TYPE char1,
lv_tabix TYPE i,
exidv_vemng type string,
tmp_vemng type string,
tmp2_vemng type p decimals 1,
exidv_vgpos type i,
lv_index like sy-tabix,
CONCAFLAG TYPE C,
lv_line type i,
together_flag type i,
tmp_together_flag type i,
subflag type i,
loopline1 type i,
loopline2 type i,
MORE_FLAG TYPE C.
CHECK item[] IS NOT INITIAL.
SORT item BY exidv vemng .
READ TABLE item INDEX 1 ASSIGNING <lfs_item1>.
exidv_vgpos = <lfs_item1>-vgpos.
tmp2_vemng = <lfs_item1>-vemng.
exidv_vemng = tmp2_vemng.
* DESCRIBE TABLE item LINES lv_line.
LOOP AT item ASSIGNING <lfs_item2> FROM 2.
IF <lfs_item2>-exidv = <lfs_item1>-exidv. "箱号相同,进行合并
exidv_vgpos = <lfs_item2>-vgpos + exidv_vgpos.
tmp2_vemng = <lfs_item2>-vemng.
tmp_vemng = tmp2_vemng.
concatenate exidv_vemng tmp_vemng into exidv_vemng.
condense exidv_vemng no-gaps.
* if sy-tabix = lv_line.
AT LAST.
cmp_item-exidv = <lfs_item1>-exidv.
cmp_item-sumvgpos = exidv_vgpos.
cmp_item-sumvemng = exidv_vemng.
clear cmp_item-flag.
append cmp_item.
ENDAT.
else. "箱号不同,上一项附加到CMP_ITEM表中
cmp_item-exidv = <lfs_item1>-exidv.
cmp_item-sumvgpos = exidv_vgpos.
cmp_item-sumvemng = exidv_vemng.
clear cmp_item-flag.
append cmp_item.
ASSIGN <lfs_item2> TO <lfs_item1>.
exidv_vgpos = <lfs_item1>-vgpos.
tmp2_vemng = <lfs_item1>-vemng.
exidv_vemng = tmp2_vemng.
AT LAST. "最后一项附加入表
cmp_item-exidv = <lfs_item1>-exidv.
cmp_item-sumvgpos = exidv_vgpos.
cmp_item-sumvemng = exidv_vemng.
clear cmp_item-flag.
append cmp_item.
ENDAT.
endif.
endloop.
SORT CMP_ITEM BY EXIDV.
READ TABLE CMP_ITEM INDEX 1 INTO WA_CMP_ITEM.
loop at cmp_item FROM 2.
if wa_cmp_item-sumvgpos EQ cmp_item-sumvgpos "超过2个(含)箱子含有相同项次和数量,标志位置位
AND wa_cmp_item-sumvemng EQ cmp_item-sumvemng.
cmp_item-flag = 'X'.
cmp_item-same_exidv = wa_cmp_item-exidv+16(4).
lv_index = sy-tabix - 1.
modify cmp_item transporting flag same_exidv.
modify cmp_item INDEX lv_index transporting flag same_exidv.
else.
clear cmp_item-flag.
clear cmp_item-same_exidv.
wa_cmp_item = cmp_item.
continue.
endif.
endloop.
loop at item.
read table cmp_item with key exidv = item-exidv.
IF SY-SUBRC = 0.
if cmp_item-flag = 'X'.
item-flag = 'X'.
item-same_exidv = cmp_item-same_exidv.
modify item transporting flag same_exidv.
else.
clear item-flag.
clear item-same_exidv.
continue.
endif.
ENDIF.
endloop.
LOOP AT item WHERE FLAG NE 'X' . "没有连号的情况
ASSIGN ITEM TO <lfs_item1> .
APPEND INITIAL LINE TO ITEM_DATA ASSIGNING <lfs_item_data1>.
<lfs_item_data1>-caenr(4) = <lfs_item1>-exidv+16(4).
<lfs_item_data1>-caenr+5(1) = '-'.
<lfs_item_data1>-matnr = <lfs_item1>-matnr.
<lfs_item_data1>-arktx = <lfs_item1>-arktx.
<lfs_item_data1>-maktxc = <lfs_item1>-maktxc.
<lfs_item_data1>-maktxe = <lfs_item1>-maktxe.
<lfs_item_data1>-vemng = <lfs_item1>-vemng.
<lfs_item_data1>-ntgew = <lfs_item1>-ntgew.
<lfs_item_data1>-brgew = <lfs_item1>-brgew.
<lfs_item_data1>-volum = <lfs_item1>-volum.
<lfs_item_data1>-gebsq = <lfs_item1>-gebsq.
<lfs_item_data1>-vgpos = <lfs_item1>-vgpos.
<lfs_item_data1>-KDMAT = <lfs_item1>-KDMAT.
<lfs_item_data1>-PMATN = <lfs_item1>-PMATN.
<lfs_item_data1>-BSTKD_E = <lfs_item1>-BSTKD_E.
<lfs_item_data1>-bussiness_check = <lfs_item1>-bussiness_check.
<lfs_item_data1>-INS_MATNR = <lfs_item1>-INS_MATNR.
ENDLOOP.
LOOP AT ITEM WHERE FLAG = 'X'.
APPEND ITEM TO SUMITEM.
ENDLOOP.
IF SUMITEM[] IS NOT INITIAL. "SUMITEM中FLAG标志位用来判断是否已经连号
SORT SUMITEM BY EXIDV VGPOS.
loopline1 = 1.
loopline2 = 2.
LOOP AT sumitem ASSIGNING <lfs_item1> FROM loopline1.
IF <lfs_item1>-FLAG IS INITIAL. "已经连号了,无须再判断
CONTINUE.
ENDIF.
CLEAR MORE_FLAG.
loopline2 = loopline1 + 1.
LOOP AT sumitem ASSIGNING <lfs_item2> FROM loopline2.
IF <lfs_item2>-FLAG IS INITIAL.
CONTINUE.
ENDIF.
together_flag = <lfs_item2>-exidv+16(4) - <lfs_item1>-exidv+16(4).
IF together_flag > 1 .
subflag = together_flag - tmp_together_flag.
IF subflag = 1.
IF MORE_FLAG = 'X'.
CLEAR MORE_FLAG.
IF <lfs_item2>-same_exidv EQ <lfs_item1>-same_exidv
AND <lfs_item2>-vgpos EQ <lfs_item1>-vgpos
AND <lfs_item2>-vemng EQ <lfs_item1>-vemng.
<lfs_item_data1>-caenr+7(4) = <lfs_item2>-exidv+16(4).
<lfs_item_data1>-vemng = <lfs_item_data1>-vemng + <lfs_item2>-vemng.
<lfs_item_data1>-ntgew = <lfs_item_data1>-ntgew + <lfs_item2>-ntgew.
<lfs_item_data1>-brgew = <lfs_item_data1>-brgew + <lfs_item2>-brgew.
<lfs_item_data1>-volum = <lfs_item_data1>-volum + <lfs_item2>-volum.
tmp_together_flag = together_flag.
MORE_FLAG = 'X'.
CLEAR <lfs_item2>-FLAG.
CONTINUE.
ELSE.
CONTINUE.
ENDIF.
ELSE.
CONTINUE.
ENDIF.
ELSEIF subflag = 0.
CONTINUE.
ELSE.
loopline1 = loopline1 + 1.
exit.
ENDIF.
ELSEIF
together_flag = 1 AND <lfs_item2>-vgpos EQ <lfs_item1>-vgpos
AND <lfs_item2>-vemng EQ <lfs_item1>-vemng.
IF MORE_FLAG IS INITIAL. "连号多于2个标志位
APPEND INITIAL LINE TO item_data ASSIGNING <lfs_item_data1>.
<lfs_item_data1>-caenr(4) = <lfs_item1>-exidv+16(4).
<lfs_item_data1>-caenr+5(1) = '-'.
<lfs_item_data1>-matnr = <lfs_item1>-matnr.
<lfs_item_data1>-arktx = <lfs_item1>-arktx.
<lfs_item_data1>-maktxc = <lfs_item1>-maktxc.
<lfs_item_data1>-maktxe = <lfs_item1>-maktxe.
<lfs_item_data1>-vemng = <lfs_item1>-vemng.
<lfs_item_data1>-ntgew = <lfs_item1>-ntgew.
<lfs_item_data1>-brgew = <lfs_item1>-brgew.
<lfs_item_data1>-volum = <lfs_item1>-volum.
<lfs_item_data1>-gebsq = <lfs_item1>-gebsq.
<lfs_item_data1>-vgpos = <lfs_item1>-vgpos.
<lfs_item_data1>-KDMAT = <lfs_item1>-KDMAT.
<lfs_item_data1>-PMATN = <lfs_item1>-PMATN.
<lfs_item_data1>-BSTKD_E = <lfs_item1>-BSTKD_E.
<lfs_item_data1>-bussiness_check = <lfs_item1>-bussiness_check.
<lfs_item_data1>-INS_MATNR = <lfs_item1>-INS_MATNR.
CLEAR <lfs_item1>-FLAG.
ENDIF.
<lfs_item_data1>-caenr+7(4) = <lfs_item2>-exidv+16(4).
<lfs_item_data1>-vemng = <lfs_item_data1>-vemng + <lfs_item2>-vemng.
<lfs_item_data1>-ntgew = <lfs_item_data1>-ntgew + <lfs_item2>-ntgew.
<lfs_item_data1>-brgew = <lfs_item_data1>-brgew + <lfs_item2>-brgew.
<lfs_item_data1>-volum = <lfs_item_data1>-volum + <lfs_item2>-volum.
CLEAR <lfs_item2>-FLAG.
MORE_FLAG = 'X'.
tmp_together_flag = together_flag.
* loopline1 = loopline1 + 1.
* EXIT.
CONTINUE.
ELSE.
* CLEAR MORE_FLAG. "如果下一个不连的话,标志清零
CONTINUE.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
LOOP AT SUMITEM ASSIGNING <lfs_item1> WHERE FLAG = 'X'.
APPEND INITIAL LINE TO item_data ASSIGNING <lfs_item_data1>.
<lfs_item_data1>-caenr(4) = <lfs_item1>-exidv+16(4).
<lfs_item_data1>-caenr+5(1) = '-'.
<lfs_item_data1>-matnr = <lfs_item1>-matnr.
<lfs_item_data1>-arktx = <lfs_item1>-arktx.
<lfs_item_data1>-maktxc = <lfs_item1>-maktxc.
<lfs_item_data1>-maktxe = <lfs_item1>-maktxe.
<lfs_item_data1>-vemng = <lfs_item1>-vemng.
<lfs_item_data1>-ntgew = <lfs_item1>-ntgew.
<lfs_item_data1>-brgew = <lfs_item1>-brgew.
<lfs_item_data1>-volum = <lfs_item1>-volum.
<lfs_item_data1>-gebsq = <lfs_item1>-gebsq.
<lfs_item_data1>-vgpos = <lfs_item1>-vgpos.
<lfs_item_data1>-KDMAT = <lfs_item1>-KDMAT.
<lfs_item_data1>-PMATN = <lfs_item1>-PMATN.
<lfs_item_data1>-BSTKD_E = <lfs_item1>-BSTKD_E.
<lfs_item_data1>-bussiness_check = <lfs_item1>-bussiness_check.
<lfs_item_data1>-INS_MATNR = <lfs_item1>-INS_MATNR.
CLEAR <lfs_item1>-FLAG.
ENDLOOP.
SORT ITEM_DATA BY caenr+0(4).