领料单打印功能记录

64 篇文章 1 订阅

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.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值