修改工单BDC版本

BAPI没有一步到位的,直接用BDC

 

DEMO

loop at gt_alv1 where sel = 'X'.

    if gt_alv1-app_date is not initial.

      gt_alv1-rtype = 'S'.

      gt_alv1-rtmsg = '无需重复审批'.

      modify gt_alv1.

      continue.

    endif.

 

*    perform frm_pro_head_change using gt_alv1-aufnr gt_alv1-gamng_new gt_alv1-xianb changing gt_alv1-rtype gt_alv1-rtmsg.

*    perform frm_pro_item_change.

 

    perform frm_req_get using gt_alv1-reqnm.

*输入订单屏幕

    perform frm_bdc_dynnr using 'SAPLCOKO1' '0110'.

    perform frm_bdc_field using 'CAUFVD-AUFNR' gt_alv1-aufnr.

    perform frm_bdc_field using 'R62CLORD-FLG_OVIEW' 'X'.

    perform frm_bdc_field using 'BDC_OKCODE' '=KPU2'.  "组件

 

    lt_alv2[] = gt_alv2[].

    sort lt_alv2 by ewahr descending. "先改使用概率最高的,不然会报错

    loop at lt_alv2 .

      if lt_alv2-new_flag = 'X'. "新增

*组件屏幕

        perform frm_bdc_dynnr using 'SAPLCOMK' '0120'.

        perform frm_bdc_field using 'BDC_CURSOR' 'RESBD-MATNR(01)'.  "定位第一行

        perform frm_bdc_field using 'BDC_OKCODE' '=KEIN'.  "差入行

*组件屏幕

        perform frm_bdc_dynnr using 'SAPLCOMK' '0120'.

        perform frm_bdc_field using 'RESBD-POSNR(01)' lt_alv2-posnr_pro.  "项目

        perform frm_bdc_field using 'RESBD-MATNR(01)' lt_alv2-matnr_new.  "物料

        perform frm_bdc_field using 'RESBD-MENGE(01)' lt_alv2-bdmng_new.  "数量

        perform frm_bdc_field using 'RESBD-VORNR(01)' '0010'.  "工序

        perform frm_bdc_field using 'RESBD-POSTP(01)' 'L'.  "项目类别

        perform frm_bdc_field using 'BDC_OKCODE' '/00'.  "回车(会带出工厂)

*组件明细

        perform frm_bdc_dynnr using 'SAPLCOMD' '0110'.

        perform frm_bdc_field using 'BDC_OKCODE' '=BACK'.  "返回

      else.. "删除和修改都要进来定位

*组件屏幕

        perform frm_bdc_dynnr using 'SAPLCOMK' '0120'.

        perform frm_bdc_field using 'BDC_OKCODE' '=P--'.  "第一页

 

*组件屏幕

        perform frm_bdc_dynnr using 'SAPLCOMK' '0120'.

        perform frm_bdc_field using 'BDC_OKCODE' '=AUFS'.  "定位

 

*定位屏幕

        perform frm_bdc_dynnr using 'SAPLCO05' '0110'.

        perform frm_bdc_field using 'RCOSU-POSNR' lt_alv2-posnr_pro.

        perform frm_bdc_field using 'RCOSU-MATNR' lt_alv2-matnr.

        perform frm_bdc_field using 'RCOSU-BDMNG' lt_alv2-bdmng.

        perform frm_bdc_field using 'BDC_OKCODE' '=MORE'.  "确认

        if lt_alv2-del = 'X'. "删除

*组件屏幕

          perform frm_bdc_dynnr using 'SAPLCOMK' '0120'.

          perform frm_bdc_field using 'RC27X-FLG_SEL(01)' 'X'.  "第一行

          perform frm_bdc_field using 'BDC_OKCODE' '=DEL'.  "删除

        else. "修改

*组件屏幕

          perform frm_bdc_dynnr using 'SAPLCOMK' '0120'.

          perform frm_bdc_field using 'BDC_CURSOR' 'RESBD-POSNR(01)'.  "第一行

          perform frm_bdc_field using 'BDC_OKCODE' '=PICK'.  "项目明细(双击)

 

*组件明细

          perform frm_bdc_dynnr using 'SAPLCOMD' '0110'.

          if lt_alv2-alpgr is initial.

            if lt_alv2-matnr_new is not initial .

              perform frm_bdc_field using 'RESBD-MATNR' lt_alv2-matnr_new.  "物料

            endif.

            if lt_alv2-bdmng_new is not initial.

              perform frm_bdc_field using 'RESBD-MENGE' lt_alv2-bdmng_new.  "需求数量

            endif.

          else.

            if lt_alv2-nomng_new is not initial.

              perform frm_bdc_field using 'RESBD-NOMNG' lt_alv2-nomng_new.  "原始数量

            endif.

            if lt_alv2-ewahr_new is not initial.

              perform frm_bdc_field using 'RESBD-EWAHR' lt_alv2-ewahr_new.  "使用率

            endif.

          endif.

          perform frm_bdc_field using 'BDC_OKCODE' '=BACK'.  "返回

        endif.

      endif.

    endloop.

 

*组件明细

    perform frm_bdc_dynnr using 'SAPLCOMK' '0120'.

    perform frm_bdc_field using 'BDC_OKCODE' '=KOZE'.  "抬头

 

*总览屏幕

    perform frm_bdc_dynnr using 'SAPLCOKO1' '0115'.

    if gt_alv1-gamng_new is not initial.

      perform frm_bdc_field using 'CAUFVD-GAMNG' gt_alv1-gamng_new. "数量(总数量需要最后改,否则组件按数量匹配就匹配不到了)

    endif.

    perform frm_bdc_field using 'BDC_OKCODE' '=+COI'.  "客户屏幕

 

*客户屏幕

    perform frm_bdc_dynnr using 'SAPLCOKO1' '0115'.

    if gt_alv1-xianb_new is not initial.

      perform frm_bdc_field using 'Z_COCI_AUFK-ZZLINE' gt_alv1-xianb_new. "线别

    endif.

    perform frm_bdc_field using 'BDC_OKCODE' '=BU'.  "保存

 

    perform frm_bdc_call using 'CO02' changing gt_alv1-rtype gt_alv1-rtmsg.

    if gt_alv1-rtype = 'S'.

      gt_alv1-app_date = sy-datum.

      gt_alv1-app_name = sy-uname.

    endif.

    modify gt_alv1.

 

    update ztpp0023a set app_date = gt_alv1-app_date app_name = gt_alv1-app_name

    where reqnm = gt_alv1-reqnm.

    update ztpp0023b set app_date = gt_alv1-app_date app_name = gt_alv1-app_name

    where reqnm = gt_alv1-reqnm.

  endloop.

 

猜你喜欢

转载自blog.csdn.net/cylcylcylcylwo/article/details/113929323
BDC