print2
loop at gt_out into gs_out where sel = c_x. "当选中时 (gt_out 代表所有取数)"
move-corresponding gs_out to ls_out
append ls_out to lt_out.
append ls_out to lt_out1.
clear ls_out.
endloop.
sort lt_out by aufnr. "以订单号整理lt_out"
delete lt_out where matk12 <> '101'. "删除lt_out中产品物料组<> 101的"
* 上述代码将所有选中的数据放进 gs_out 中,再放入 ls_out 中
* 然后再往 lt_out 和 lt_out1 中加数据
data:lv_name type rs38l_fnam.
call function 'SSF_OPEN'
if sy-subrc <> 0 .
endif.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'ZMM_SF_0007E'
importing
fm_name = lv_name.
* 此处两个function 用来运行 smartforms的打印记录功能,SSF_OPEN 表示打印过程的开始
* SSF_FUNCTION_MODULE_NAME 代表smartforms的记录功能,用于获取打印中的各种基本参数
data(lt_sort) = lt_out.
sort lt_sort by cmaktx aufnr.
delete adjacet duplicates from lt_sort comparing aufnr.
sort lt_out by aufnr xkdauf xkdpos matnr.
*目的是将打印顺序按照产品描述,组件明细顺序按照物料原来的逻辑
*定义 (lt_sort) 等于 lt_out
*按照产品描述cmaktx和订单编号aufnr 对lt_sort的数据进行排序
*删除lt_sort中订单编号aufnr相邻且相近的记录
*将lt_out 按照 订单编号和组件明细进行排序
loop at lt_sort into data(ls_sort).
* 循环排序并去重后的lt_sort 进入 ls_sort
* loop at lt_out into ls_out where aufnr = ls_sort-aufnr.
* 循环lt_out(即主数据中sel被勾选的项) 中 订单编号等于 去重后订单编号的订单记录 目的是筛选出选中的订单编号
"领料单号
lv_zydat = sy-datum+2(6).
call function 'ZMM_FM_GET_ZLLDH'
exporting
i_zydat = lv_zydat
importing
e_zlldh = ls_header-zlldh.
*上述代码为获取领料单号, 领料单号zlldh来自日期 zydat经过一定的处理。
move-corresponding ls_out to gs_item.
lv_zxh = lv_zxh + 1.
gs_item-zxh = lv_zxh.
append gs_item to gt_item.
clear gs_item.
*将ls_out 也就将选中的订单编号,整条记录放进工作区 gs_item中
* 然后将流水号加1 ,并赋值给 gs_item 的流水号
* 将工作区gs_item中的本条记录放进gt_item
move-corresponding ls_out to ls_ztmm_005.
ls_ztmm_005-zlldh = lv_zlldh.
ls_ztmm_005-zxh = lv_zxh.
ls_ztmm_005-prdat = sy-datum.
ls_ztmm_005-prunm = sy-uname.
ls_ztmm_005-prunt = sy-uzeit.
ls_ztmm_005-pflag = 'X'.
if rb_scll is not initial.
ls_ztmm_005-zllty = '01'.
elseif rb_jhwl is not initial.
ls_ztmm_005-zllty = '02'.
endif.
append ls_ztmm_005 to lt_ztmm_005.
clear:gs_item,ls_ztmm_005.
*上述代码用于保存表 ZTMM_005的数据
先将 ls_out 中的本条数据全部移进ls_ztmm_005
然后再将 lv_zlldh 和流水号 赋值给 ls_ztmm_005的领料单号和流水号
将 ls_ztmm_005加入到 lt_ztmm005中
clear ls_ztmm_010.
select single *
from ztmm_010
into corresponding fields of ls_ztmm_010
where aufnr = gs_out-aufnr
and cmatnr = gs_out-cmatnr
and matnr = gs_out-matnr
and xkdauf = gs_out-xkdauf
and xkdpos = gs_out-xkdpos.
*选取ls_ztmm_010中的数据
*查询一条ztmm_010中的数据 要求 订单号等于sel选中的数据的订单号
clear lv_ren.
call function 'FDM_CUST_USER_NAME_READ_SINGLE'
exporting
i_user_id = sy-uname
importing
e_fullname = lv_ren.
* 此 bapi用来获取中文用户名
ls_ztmm_010-aufnr = gs_out-aufnr.
ls_ztmm_010-cmatnr = gs_out-cmatnr.
ls_ztmm_010-matnr = gs_out-matnr.
ls_ztmm_010-xkdauf = gs_out-xkdauf.
ls_ztmm_010-xkdpos = gs_out-xkdpos.
ls_ztmm_010-prdat = sy-datum.
ls_ztmm_010-prunm = lv_ren.
ls_ztmm_010-prunt = sy-uzeit.
ls_ztmm_010-ztime = ls_ztmm_010-ztime + 1.
append ls_ztmm_010 to lt_ztmm_010.
clear:ls_ztmm_010.
*打印信息记录表 ls_ztmm_010的订单编号,物料描述,打印时间,打印人,打印次数 等于 勾选的记录
print1
append lines of lt_outc to lt_out.
sort lt_out by zaufnr ascending aufnr.
delete adjacent duplicates from lt_out comparing zaufnr
clear: ls_out.
clear: lt_ztmm_005.
* 将lt_outc 中的内容赋值给 lt_out
* 将 lt_out 中的内容按 zaufnr 进行排序
* 删除相邻记录中zaufnr 相同的记录
loop at lt_out into ls_out.
* 循环lt_out
call function 'ZMM_FM_GET_ZLLDH'
exporting
i_zydat = lv_zydat
importing
e_zlldh = lv_zlldh.
* 并赋值领料单号
loop at gt_out into gs_out where sel = c_x and zaufnr = ls_out-zaufnr.
moce-corresponding gs_out to gs_item.
lv_zxh = lv_zxh + 1.
gs_item-zxh = lv_zxh.
clear gs_item.
move-corresponding gs_out to ls_ztmm_005.
ls_ztmm_005-zlldh = lv_zlldh.
ls_ztmm_005-zxh = lv_zxh.
ls_ztmm_005-prdat = sy-datum.
ls_ztmm_005-prunm = sy-uname.
ls_ztmm_005-prunt = sy-uzeit.
ls_ztmm_005-pflag = 'X'.
if rb_scll is not initial.
ls_ztmm_005-zllty = '01'.
elseif rb_jhwl is not initial.
ls_ztmm_005-zllty = '02'.
endif.
append ls_ztmm_005 to lt_ztmm_005.
clear:gs_item,ls_ztmm_005.
*循环gt_out 中 sel被选中的订单
*将 这些订单移到 gs_item 和 ls_ztmm_005 中,并且流水号+1 后将流水号,领料单号,打印人等,赋值给gs_item和 ls_ztmm_005
*-----------------打印信息录入--------------------------------*
clear ls_ztmm_010.
select single *
from ztmm_010
into corresponding fields of ls_ztmm_010
where aufnr = gs_out-aufnr
and cmatnr = gs_out-cmatnr
and matnr = gs_out-matnr
and xkdauf = gs_out-xkdauf
and xkdpos = gs_out-xkdpos.
ls_ztmm_010-aufnr = gs_out-aufnr.
ls_ztmm_010-cmatnr = gs_out-cmatnr.
ls_ztmm_010-matnr = gs_out-matnr.
ls_ztmm_010-xkdauf = gs_out-xkdauf.
ls_ztmm_010-xkdpos = gs_out-xkdpos.
ls_ztmm_010-prdat = sy-datum.
ls_ztmm_010-prunm = lv_ren.
ls_ztmm_010-prunt = sy-uzeit.
ls_ztmm_010-ztime = ls_ztmm_010-ztime + 1.
append ls_ztmm_010 to lt_ztmm_010.
clear:ls_ztmm_010.
endloop.
*从ztmm_010 打印信息记录表中中获取一条数据 并赋值进 ls_ztmm_010中 要求, 订单号,物料描述等均一致
*然后将这条信息的数值改变为 gs_out 的信息,并赋值给 lt_ztmm_010
if lt_ztmm_010 is not initial.
modify ztmm_010 from table lt_ztmm_010.
* 如果 lt_ztmm_010 不空,即 要修改的 打印信息记录 不为空, 则用 lt_ztmm_010修改 ztmm_010表
if sy-subrc = 0.
commit work and wait.
clear gs_out.
loop at gt_out into gs_out where aufnr = ls_out-aufnr
and cmatnr = ls_out-cmatnr
and matnr = ls_out-matnr
and xkdauf = ls_out-xkdauf
and xkdpos = ls_out-xkdpos.
gs_out-prdat = ls_ztmm_010-prdat.
gs_out-prunm = ls_ztmm_010-prunm.
gs_out-prunt = ls_ztmm_010-prunt.
gs_out-ztime = ls_ztmm_010-ztime.
modify gt_out from gs_out transporting prdat
prunm
prunt
ztime.
endloop.
else.
rollback work.
endif.
endif.
*如果lt_ztmm_005不为空(即有要修改的流水号),则改变 ztmm_005
if lt_ztmm_005 is not initial.
modify ztmm_005 from table lt_ztmm_005.
if sy-subrc = 0.
commit work and wait.