zoukankan      html  css  js  c++  java
  • ABAPSAP的SCreen录入的简单模板

    1、主程序单元

    ************************************************************************
    * Copyright 2003                                         *
    * All Rights Reserved                                                  *
    *----------------------------------------------------------------------*
    * Program Name : ZFIE0005                                              *
    * TYPE         : REPORT                                                *
    * Project      :SAP Implementation Project                     *
    * Program Title: 管理部门年度预算考核额调整
    * Created by   : DEV01                                                 *
    * Created on   :
    * Version      : 1.0                                                   *
    * Function Description:                                                *
    * 管理部门年度预算考核额调整
    *----------------------------------------------------------------------*
    *操作数据表
    *ZFI017
    *----------------------------------------------------------------------*
    *引用数据表
    *
    *----------------------------------------------------------------------*
    * Modification Log:                                                    *
    * Date        Programmer     Correction Number      DesingDoc Number   *
    ************************************************************************
    include zfie0032top."全局变量说明但愿
    include zfie0032o01."输出Module说明单元
    include zfie0032i01."输入Module说明单元
    include zfie0032f01."共用函数说明单元
    include zfie0032fi1."输入函数说明单元
    include zfie0032fi2."输入函数说明单元
    include zfie0032h01."输入帮助说明单元 

    2、 zfie0032top单元
    ************************************************************************
    * Copyright 2003                                       *
    * All Rights Reserved                                                  *
    *----------------------------------------------------------------------*
    * Program Name : ZFIE0005                                              *
    * TYPE         : REPORT                                                *
    * Project      :SAP Implementation Project                     *
    * Program Title: 管理部门年度预算考核额调整
    * Created by   : DEV01                                                 *
    * Created on   :
    * Version      : 1.0                                                   *
    * Function Description:                                                *
    * 管理部门年度预算考核额调整
    *----------------------------------------------------------------------*
    *操作数据表
    *ZFI017
    *----------------------------------------------------------------------*
    *引用数据表
    *
    *----------------------------------------------------------------------*
    * Modification Log:                                                    *
    * Date        Programmer     Correction Number      DesingDoc Number   *
    ************************************************************************
    report zfie0030 message-id zdev.
    constants: con_show(6)   value 'SHOW',
               con_change(6) value 'CHANGE'.
    class cl_gui_cfw definition load.
    tables: zfi017v,*zfi017v,bseg,setheadert,zfi010,zfi017,csku,cskt. "
    *公司,年份,次数的新旧值
    data: v_bukrs like zfi017-bukrs,
          v_gjahr like zfi017-gjahr,
          v_zmon  like zfi017-zmon,
          v_oldbukrs like zfi017-bukrs,
          v_oldgjahr like zfi017-gjahr,
          v_oldzmon  like zfi017-zmon.
    *grid的控件
    controls: tctrl_order  type tableview using screen '0100'.
    data: col type cxtab_column.
    * Table for all entries loaded from database
    data:   begin of order_extract occurs 0100.
            include structure zfi017v.
            include structure vimflagtab.
    data: end of order_extract.
    * Table for entries selected to show on screen
    data: begin of order_total occurs 10.
            include structure zfi017v.
            include structure vimflagtab.
    data: end of order_total.
    *记录数据的状态信息的变量定义
    data: begin of status_order. "state vector
            include structure vimstatus.
    data: end of status_order.
    data:  grid_item   type i.
    data: answer(1)   type c,
          actionmode(6),
          datastate(1),
          mark_total   type i,
          init(1),
          first_flag(1).
    data: wa_zfi017v type zfi017v.
    data: ok_code like sy-ucomm,
          save_ok like sy-ucomm.           "OK-Code
    data  g_return_code type i.
    data: vim_marked(1) type c.                "mark-checkbox field
    *存储屏幕选择的字段名
    data  indexfldname(30).
    data: gt_fieldcatalog  type lvc_t_fcat,
          text(70).
    **********************************************************
    *用于帮助的变量说明
    *屏幕字段的帮助函数使用的变量
    *用于成本要素组的属于帮助
    data: begin of i_zfi010 occurs 0,
          name like zfi010-name,
    end of i_zfi010.
    *用于成本中心的输入帮助
    data: begin of i_setheadert occurs 0,
            ktext like cskt-ktext,
          end of i_setheadert.
    data: butxt like t001-bukrs.
    data: ktext like cskt-kostl.
    data: name like zfi010-name.
    *用于输入帮助,存储帮助函数的通讯内表
    data:    begin of fldtab occurs 2.
            include structure help_value.
    data:    end of fldtab.
    data:    f4dyn          like sy-dynnr.
    data:    begin of f4hlp occurs 1.
            include structure dynpread.
    data:    end of f4hlp.

    3、ZFIE0032O01单元
    ************************************************************************
    * Copyright 2003 C-Bons Wuhan                                          *
    * All Rights Reserved                                                  *
    *----------------------------------------------------------------------*
    * Program Name : ZFIE0005                                              *
    * TYPE         : REPORT                                                *
    * Project      :  SAP Implementation Project                     *
    * Program Title: 管理部门年度预算考核额调整
    * Created by   : DEV01                                                 *
    * Created on   :
    * Version      : 1.0                                                   *
    * Function Description:                                                *
    * 管理部门年度预算考核额调整
    *----------------------------------------------------------------------*
    *操作数据表
    *ZFI017
    *----------------------------------------------------------------------*
    *引用数据表
    *
    *----------------------------------------------------------------------*
    * Modification Log:                                                    *
    * Date        Programmer     Correction Number      DesingDoc Number   *

    ************************************************************************
    ************************************************************************
    *&Form Name    : init_data
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *根据用户输入条件的变化,进行数据读取
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *

    ************************************************************************
    module init_data output.
      if first_flag eq space.
        first_flag = 'X'.
        v_gjahr = sy-datum+0(4).
        bseg-pswsl = 2.
      endif.
      if ( v_oldgjahr ne v_gjahr or v_oldbukrs ne v_bukrs and
        v_oldzmon ne v_zmon ) and
        v_gjahr ne space and  v_bukrs ne space and v_zmon ne space.
        perform fill_data.
      else.
    *    SET CURSOR FIELD f LINE lin OFFSET o.
      endif.
    endmodule.                 " init_data  OUTPUT
    ************************************************************************
    *&Form Name    : init_pbo
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *设置标题栏和工具条按钮
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *

    ************************************************************************
    module init_pbo output.
      set pf-status 'MAIN100'.
      set titlebar 'MAINTITLE'.
    endmodule.                             " PBO  OUTPUT
    ************************************************************************
    *&Form Name    :liste_show_liste
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *将显示数据写到显示字段中,并设置主键字段是否可输入
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *

    ************************************************************************
    module liste_show_liste output.
      if tctrl_order-current_line gt tctrl_order-lines.
        exit from step-loop.
      endif.
      grid_item = sy-loopc.
      zfi017v-kostl = order_extract-kostl.
      zfi017v-ktext = order_extract-ktext.
      zfi017v-kstar = order_extract-kstar.
      zfi017v-descript = order_extract-descript.
      zfi017v-adamt = order_extract-adamt.
      zfi017v-reasn = order_extract-reasn.
      zfi017v-zyearmonth = order_extract-zyearmonth.
      vim_marked = order_extract-mark.
      loop at screen.
        if ( order_extract-action = 'L'
         and screen-name = 'VIM_MARKED' ).
          screen-input = 0.
          modify screen.
        endif.
        if ( zfi017v-kostl ne space
         and screen-name = 'ZFI017V-KOSTL' ) or
         ( zfi017v-kstar ne space
         and screen-name = 'ZFI017V-KSTAR' ) .
          screen-input = 0.
          modify screen.
        endif.
      endloop.
      if vim_marked = 'M'.
        vim_marked = 'X'.
      endif.
    endmodule.                 " LISTE_SHOW_LISTE  OUTPUT
    ************************************************************************
    *&Form Name    : fill_data
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *根据用户输入读取数据并初试化状态变量
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *

    ************************************************************************
    form fill_data .
      select *
        into corresponding fields of order_extract
      from zfi017
      where zfi017~bukrs = v_bukrs
        and zfi017~gjahr = v_gjahr
        and zfi017~zmon = v_zmon.
        select single cskt~ktext as descript
          into (order_extract-descript)
          from cskt
          where spras = '1'
            and kokrs = '1000'
            and kostl = order_extract-kostl.
        select single ktext
        into (order_extract-ktext)
        from csku
        where spras = '1' and ktopl ='CB00'
              and kstar = order_extract-kstar.
        append order_extract.
      endselect.
      sort order_extract by bukrs gjahr kostl kstar.
    *  order_extract[] = order_total[].
      if actionmode = con_change.
        perform insert_newworkarea using grid_item.
      endif.
      describe table order_extract lines tctrl_order-lines.
      tctrl_order-top_line = 1.
      clear ok_code.
      mark_total = 1.
      clear:datastate,status_order.
      v_oldgjahr = v_gjahr.
      v_oldbukrs = v_bukrs.
    endform.                    " fill_data
    ************************************************************************
    *&Form Name    : init_ctrl
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *根据数据状态,设置屏幕字段是否可以输入
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *

    ************************************************************************
    module init_ctrl output.
      if actionmode eq space.
        actionmode = con_show.
      endif.
      if con_show eq actionmode.
        loop at screen.
          case screen-name.
            when  'V_BUKRS'.
              screen-input = 1.
              modify screen.
            when  'V_GJAHR'.
              screen-input = 1.
              modify screen.
            when  'V_ZMON'.
              screen-input = 1.
              modify screen.
          endcase.
        endloop.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-KOSTL'.
        if sy-subrc = 0.
          col-screen-input = '0'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-KSTAR'.
        if sy-subrc = 0.
          col-screen-input = '0'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-ADAMT'.
        if sy-subrc = 0.
          col-screen-input = '0'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-REASN'.
        if sy-subrc = 0.
          col-screen-input = '0'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-ZYEARMONTH'.
        if sy-subrc = 0.
          col-screen-input = '0'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
      else.
        loop at screen.
          case screen-name.
            when  'V_BUKRS'.
              screen-input = 0.
              modify screen.
            when  'V_GJAHR'.
              screen-input = 0.
              modify screen.
            when  'V_ZMON'.
              screen-input = 0.
              modify screen.
          endcase.
        endloop.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-KOSTL'.
        if sy-subrc = 0.
          col-screen-input = '1'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-KSTAR'.
        if sy-subrc = 0.
          col-screen-input = '1'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-ADAMT'.
        if sy-subrc = 0.
          col-screen-input = '1'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-REASN'.
        if sy-subrc = 0.
          col-screen-input = '1'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
        read table tctrl_order-cols into col
          with key screen-name = 'ZFI017V-ZYEARMONTH'.
        if sy-subrc = 0.
          col-screen-input = '1'.
          modify tctrl_order-cols index  sy-tabix from col.
        endif.
      endif.
    endmodule.                 " init_ctrl  OUTPUT

    4、ZFIE0032I01单元
    ************************************************************************
    * Copyright 2003                                          *
    * All Rights Reserved                                                  *
    *----------------------------------------------------------------------*
    * Program Name : ZFIE0005                                              *
    * TYPE         : REPORT                                                *
    * Project      : SAP Implementation Project                     *
    * Program Title: 管理部门年度预算考核额调整
    * Created by   : DEV01                                                 *
    * Created on   :  *
    * Version      : 1.0                                                   *
    * Function Description:                                                *
    * 管理部门年度预算考核额调整
    *----------------------------------------------------------------------*
    *操作数据表
    *ZFI017
    *----------------------------------------------------------------------*
    *引用数据表
    *
    *----------------------------------------------------------------------*
    * Modification Log:                                                    *
    * Date        Programmer     Correction Number      DesingDoc Number   *
    ************************************************************************
    ************************************************************************
    *&Form Name    : LISTE_EXIT_COMMAND
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *处理系统退出命令,提示用户是否保存数据
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module liste_exit_command input.
      data:  savestate  type i .
      case ok_code.
        when  'CANC'.
          set screen 0.
          leave screen.
        when 'BACK'.
          if datastate = 'X'.
            call function 'POPUP_TO_CONFIRM_STEP'
              exporting
                titel     = '退出维护'
                textline1 = '数据被修改。'
                textline2 = '是否先保存所做更改?'
              importing
                answer    = answer.
            case answer.
              when 'J'.
                perform save_data changing savestate.
                sy-subrc = savestate.
              when 'n'.
                sy-subrc = 1.
              when 'A'.
                sy-subrc = 0.
            endcase.
          endif.
          if sy-subrc = 0.
            set screen 0.
            leave screen.
          endif.
        when 'EXIT'.
          if datastate = 'X'.
            call function 'POPUP_TO_CONFIRM_STEP'
              exporting
                titel     = '退出维护'
                textline1 = '数据被修改。'
                textline2 = '是否先保存所做更改?'
              importing
                answer    = answer.
            case answer.
              when 'J'.
                perform save_data changing savestate.
                sy-subrc = savestate.
              when 'n'.
                sy-subrc = 1.
              when 'A'.
                sy-subrc = 0.
            endcase.
          endif.
          if sy-subrc = 0.
            set screen 0.
            leave screen.
            perform exit_program.
          endif.
      endcase.
    endmodule.                 " LISTE_EXIT_COMMAND  INPUT
    **&---------------------------------------------------------------------
    *
    **&      Module  LISTE_BEFORE_LOOP  INPUT
    **&---------------------------------------------------------------------
    *
    **       text
    **----------------------------------------------------------------------
    *
    *MODULE liste_before_loop INPUT.
    *
    *ENDMODULE.                 " LISTE_BEFORE_LOOP  INPUT
    ************************************************************************
    *&Form Name    : do_mark_checkbox
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *处理记录选中标记字段
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module liste_mark_checkbox input.
      if  status_order-upd_flag eq space.  "only mouse mark
        perform update_entry using space 0 tctrl_order-top_line.
      endif.
    endmodule.                 " LISTE_MARK_CHECKBOX  INPUT
    ************************************************************************
    *&Form Name    : set_update_orderkey_flag
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *标记数据被修改,标记关键有新值需要检查
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module set_update_orderkey_flag input.
      status_order-upd_flag = 'X'.
      status_order-auth_check = 'X'.
      status_order-st_data = 'X'.
      datastate = 'X'.
    endmodule.                 " set_update_orderkey_flag  INPUT
    ************************************************************************
    *&Form Name    : set_update_orderkey_group
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *标记数据被修改,标记关键有新值需要检查
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module set_update_orderkey_group input.
      status_order-upd_flag = 'X'.
      status_order-auth_check = 'X'.
      status_order-st_mode = 'X'.
      datastate = 'X'.
    endmodule.                 " set_update_orderkey_flag  INPUT
    ************************************************************************
    *&Form Name    : set_update_order_flag
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *标记数据被修改
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module set_update_order_flag input.
      status_order-upd_flag = 'X'.
      datastate = 'X'.
    endmodule.                 " SET_UPDATE_FLAG  INPUT
    ************************************************************************
    *&Form Name    : liste_update_order
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *将工作区数据更新到显示和缓冲内表中
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module liste_update_order input.
      if status_order-upd_flag = 'X'.
        perform check_key_order.
        perform update_tab_order using sy-subrc sy-tabix.
        clear status_order.
      endif.
    endmodule.                 " LISTE_UPDATE_LISTE  INPUT
    ************************************************************************
    *&Form Name    : check_key_order
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *关键字检查,判断是否重复
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    form check_key_order .
    *  CLEAR order_total.
    *  READ TABLE order_total WITH KEY
    *    kostl = zfi017v-kostl
    *    KSTAR = zfi017v-KSTAR BINARY SEARCH.
    *  CHECK sy-subrc EQ 0.
    *  IF status_order-auth_check = 'X'.
    *    IF order_total-action EQ 'D'
    *    OR order_total-action  EQ 'X'
    *    OR order_total-action  EQ 'Y'.
    *      MESSAGE ID 'SV' TYPE 'E' NUMBER '010'.
    *    ELSE.
    *      MESSAGE ID 'SV' TYPE 'E' NUMBER '009'.
    *    ENDIF.
    *  ENDIF.
    endform.                    "check_key_order
    ************************************************************************
    *&Form Name    : liste_after_loop
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *处理用户操作
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module liste_after_loop input.
    *  DATA: savestate TYPE i.
      save_ok = ok_code.
      clear ok_code.
      case save_ok.
        when 'EXIT' or 'BACK' or 'CANC'.
          if datastate = 'C'.
            call function 'POPUP_TO_CONFIRM_STEP'
              exporting
                titel     = '退出维护'
                textline1 = '数据被修改。'
                textline2 = '是否先保存所做更改?'
              importing
                answer    = answer.
            case answer.
              when 'J'.
                perform save_data changing savestate.
                sy-subrc = savestate.
              when 'n'.
                sy-subrc = 1.
              when 'A'.
                sy-subrc = 0.
            endcase.
          endif.
          if sy-subrc = 0.
            set screen 0.
            leave screen.
            perform exit_program.
          endif.
        when 'EDIT'.
          if datastate eq space.
            if con_show eq actionmode.
              call function 'ENQUEUE_EZFIE017'
                exporting
                  bukrs          = v_bukrs
                  gjahr          = v_gjahr
                  zmon           = v_zmon
                exceptions
                  foreign_lock   = 2
                  system_failure = 3.
              if sy-subrc ne 0.
                message i622 with v_bukrs v_gjahr sy-msgv1.
              else.
                actionmode = con_change.
                if  ( v_oldgjahr = v_gjahr and v_oldbukrs = v_bukrs
                  and v_gjahr ne space and v_bukrs ne space ).
                  perform insert_newworkarea using grid_item.
                endif.
              endif.
            endif.
          endif.
        when 'DELE'.
          if con_show ne actionmode.
            perform delete_order.
          endif.
        when 'SAVE' or 'SAVV'.
          if datastate ne space.
            perform save_data changing savestate.
            if savestate eq 0.
              call function 'DEQUEUE_EZFIE017'
                exporting
                  bukrs = v_bukrs
                  gjahr = v_gjahr
                  zmon  = v_zmon.
              clear datastate.
            endif.
          else.
            call function 'DEQUEUE_EZFIE017'
              exporting
                bukrs = v_bukrs
                gjahr = v_gjahr
                zmon  = v_zmon.
            perform clear_action.
          endif.
        when 'SOUP'.
    * search for selected columns.
          loop at tctrl_order-cols into col.
            if col-selected = 'X'.
              indexfldname = col-screen-name+11.
              sort order_total by (indexfldname).
              exit.
            endif.
          endloop.
        when 'SODO'.
          loop at tctrl_order-cols into col.
            if col-selected = 'X'.
              indexfldname = col-screen-name+11.
              sort order_total by (indexfldname) descending.
              exit.
            endif.
          endloop.
        when others.
          call method cl_gui_cfw=>dispatch.
      endcase.
      call method cl_gui_cfw=>flush.
    endmodule.                 " LISTE_AFTER_LOOP  INPUT
    ************************************************************************
    *&Form Name    : insert_newworkarea
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *为编辑数据添加临时空记录
    *----------------------------------------------------------------------*
    *参数说明 
    *-->p_entries:插入新空白记录数
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    form insert_newworkarea  using    p_entries.
      if p_entries eq 0.
        p_entries = 20.
      endif.
      clear order_extract.
      move 'L' to order_extract-action.
      do p_entries times.
        append order_extract.
      enddo.
      move tctrl_order-lines to tctrl_order-top_line.
      describe table order_extract lines tctrl_order-lines.
    endform.                    " insert_newworkarea
    ************************************************************************
    *&Form Name    : delete_order
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *删除的数据,在缓冲数据中设立删除标志(只能删除新建且未保存的定价)
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    *                                                                      *
    ************************************************************************
    *----------------------------------------------------------------------*
    form delete_order .

      loop at order_extract.
        if order_extract-mark = 'M' and
          order_extract-action ne 'L'.
          delete order_extract.
        endif.
      endloop.
      describe table order_extract lines tctrl_order-lines.
    endform.                    " delete_order

    5、ZFIE0032F01单元
    ************************************************************************
    * Copyright 2003 Wuhan                                          *
    * All Rights Reserved                                                  *
    *----------------------------------------------------------------------*
    * Program Name : ZFIE0005                                              *
    * TYPE         : REPORT                                                *
    * Project      : SAP Implementation Project                     *
    * Program Title: 管理部门年度预算考核额调整
    * Created by   : DEV01                                                 *
    * Created on   :  *
    * Version      : 1.0                                                   *
    * Function Description:                                                *
    * 管理部门年度预算考核额调整
    *----------------------------------------------------------------------*
    *操作数据表
    *ZFI017
    *----------------------------------------------------------------------*
    *引用数据表
    *
    *----------------------------------------------------------------------*
    * Modification Log:                                                    *
    * Date        Programmer     Correction Number      DesingDoc Number   *
    ************************************************************************
    ************************************************************************
    *&Form Name    : exit_program
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *退出程序时, 解除锁
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    form exit_program.
      call function 'DEQUEUE_EZFIE017'
        exporting
          bukrs = v_bukrs
          gjahr = v_gjahr
          znum = v_zmon.
      leave program.
    endform.                               " exit_program

    6、ZFIE0032FI1单元
    ************************************************************************
    * Copyright 2003 *
    * All Rights Reserved                                                  *
    *----------------------------------------------------------------------*
    * Program Name : ZFIE0005                                              *
    * TYPE         : REPORT                                                *
    * Project      : SAP Implementation Project                     *
    * Program Title: 管理部门年度预算考核额调整
    * Created by   : DEV01                                                 *
    * Created on   : *
    * Version      : 1.0                                                   *
    * Function Description:                                                *
    * 管理部门年度预算考核额调整
    *----------------------------------------------------------------------*
    *操作数据表
    *ZFI017
    *----------------------------------------------------------------------*
    *引用数据表
    *
    *----------------------------------------------------------------------*
    * Modification Log:                                                    *
    * Date        Programmer     Correction Number      DesingDoc Number   *
    ************************************************************************
    ************************************************************************
    *&Form Name    : clear_action
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *清除数据操作状态,恢复到初试显示状态
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    form clear_action.
    *  order_extract[] = order_total[].
      actionmode = con_show.
      describe table order_extract lines tctrl_order-lines.
      tctrl_order-top_line = 1.
      clear ok_code.
      mark_total = 1.
      clear:datastate,status_order.
      clear status_order.
    endform.                    " clear_action
    ************************************************************************
    *&Form Name    : clear_mark
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *清除记录选中标记
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    form clear_mark .
      loop at order_total.
        order_total-mark = space.
        modify order_total index sy-tabix.
      endloop.
    endform.                    " clear_mark
    ************************************************************************
    *&Form Name    : save_data
    * Created by   : DEV01                                                 *
    * Created on   :
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *保存数据
    *----------------------------------------------------------------------*
    *参数说明 
    *<--savestate:返回保存是否成功,成功为0值
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    form save_data changing savestate type i.
      data i_znum type i.
      savestate = -1.
      delete from zfi017
        where bukrs = v_bukrs and
              gjahr = v_gjahr and
              zmon = v_zmon.
      i_znum = 1.
      loop at order_extract.
        if order_extract-action eq space.
          zfi017-bukrs = order_extract-bukrs.
          zfi017-gjahr = order_extract-gjahr.
          zfi017-zmon = order_extract-zmon.
          zfi017-znum = i_znum.
          zfi017-kostl = order_extract-kostl.
          zfi017-kstar = order_extract-kstar.
          zfi017-adamt = order_extract-adamt.
          zfi017-reasn = order_extract-reasn.
          zfi017-zyearmonth = order_extract-zyearmonth.
          insert zfi017.
          if sy-subrc ne 0.
            rollback work.
            exit.
          endif.
          i_znum = i_znum + 1.
        elseif order_extract-action = 'U'.
          zfi017-bukrs = order_extract-bukrs.
          zfi017-gjahr = order_extract-gjahr.
          zfi017-zmon = order_extract-zmon.
          zfi017-znum = i_znum.
          zfi017-kostl = order_extract-kostl.
          zfi017-kstar = order_extract-kstar.
          zfi017-adamt = order_extract-adamt.
          zfi017-reasn = order_extract-reasn.
          zfi017-zyearmonth = order_extract-zyearmonth.
          insert zfi017.
          if sy-subrc ne 0.
            rollback work.
            exit.
          endif.
          i_znum = i_znum + 1.
          order_total-action = space.
          modify order_extract.
        elseif order_extract-action = 'X'.
          delete order_total.
        elseif ( ( order_extract-action = 'D' ) or
          ( order_extract-action = 'Y' ) ).
          delete order_extract.
        elseif order_extract-action = 'N'.
          zfi017-bukrs = order_extract-bukrs.
          zfi017-gjahr = order_extract-gjahr.
          zfi017-zmon = order_extract-zmon.
          zfi017-znum = i_znum.
          zfi017-kostl = order_extract-kostl.
          zfi017-kstar = order_extract-kstar.
          zfi017-adamt = order_extract-adamt.
          zfi017-reasn = order_extract-reasn.
          zfi017-zyearmonth = order_extract-zyearmonth.
          insert zfi017.
          if sy-subrc ne 0.
            rollback work.
            exit.
          endif.
          i_znum = i_znum + 1.
          order_total-action = space.
          modify order_extract.
        endif.

    7、ZFIE0032FI2单元
    ************************************************************************
    * Copyright 2003 *
    * All Rights Reserved                                                  *
    *----------------------------------------------------------------------*
    * Program Name : ZFIE0005                                              *
    * TYPE         : REPORT                                                *
    * Project      : SAP Implementation Project                     *
    * Program Title: 管理部门年度预算考核额调整
    * Created by   : DEV01                                                 *
    * Created on   : *
    * Version      : 1.0                                                   *
    * Function Description:                                                *
    * 管理部门年度预算考核额调整
    *----------------------------------------------------------------------*
    *操作数据表
    *ZFI017
    *----------------------------------------------------------------------*
    *引用数据表
    *
    *----------------------------------------------------------------------*
    * Modification Log:                                                    *
    * Date        Programmer     Correction Number      DesingDoc Number   *
    ************************************************************************
    ************************************************************************
    *&Form Name    : update_tab_order
    * Created by   : DEV01                                                 *
    * Created on   :  *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *将显示缓冲work area的数据更新到内表
    *----------------------------------------------------------------------*
    *参数说明               *
    *  -->  p_rc    :记录定位操作返回的sy-subrc的值
    *  -->  p_index :记录的索引位置
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    form update_tab_order using value(p_rc)
                             value(p_index).
       perform update_entry using 'X'  p_rc p_index.
    endform.                    " update_tab
    ************************************************************************
    *&Form Name    : update_tab_order
    * Created by   : DEV01                                                 *
    * Created on   :*
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *将显示缓冲work area的数据更新到内表
    *----------------------------------------------------------------------*
    *参数说明 
    *  -->  p_workarea : ‘X' 更新显示和缓冲双份内表数据
    *                      space 只更新显示内表数据
    *  -->  p_rc    :记录定位操作返回的sy-subrc的值
    *  -->  p_index :记录的索引位置
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    form update_entry using value(p_workarea)
                               value(p_rc)
                               value(p_index).
        read table order_extract index tctrl_order-top_line.
        if order_extract-action = 'L'.
          move-corresponding zfi017v to order_extract.
          order_extract-bukrs = v_bukrs.
          order_extract-gjahr = v_gjahr.
          order_extract-zmon = v_zmon.
          order_extract-action  = 'N'.
          if vim_marked ne space.
            order_extract-mark  = 'M'.
          endif.
          modify order_extract index tctrl_order-top_line.
          clear order_extract.
          order_extract-action  = 'L'.
          append order_extract.
        else.
          move-corresponding zfi017v to order_extract.
          order_extract-bukrs = v_bukrs.
          order_extract-gjahr = v_gjahr.
          order_extract-zmon = v_zmon.
          order_extract-action  = 'U'.
          if vim_marked ne space.
            order_extract-mark  = 'M'.
          endif.
          modify order_extract index tctrl_order-top_line.
        endif.
        describe table order_extract lines tctrl_order-lines.
    endform.                    "update_tab_order
      endloop.
      commit work.
      savestate = 0.
      perform clear_action.
      message s024.
    endform.                    " save_data

    8、ZFIE0032H01单元
    ************************************************************************
    * Copyright 2003 Wuhan                                          *
    * All Rights Reserved                                                  *
    *----------------------------------------------------------------------*
    * Program Name : ZFIE0005                                              *
    * TYPE         : REPORT                                                *
    * Project      : SAP Implementation Project                     *
    * Program Title: 管理部门年度预算考核额调整
    * Created by   : DEV01                                                 *
    * Created on   :  *
    * Version      : 1.0                                                   *
    * Function Description:                                                *
    * 管理部门年度预算考核额调整
    *----------------------------------------------------------------------*
    *操作数据表
    *ZFI017
    *----------------------------------------------------------------------*
    *引用数据表
    *
    *----------------------------------------------------------------------*
    * Modification Log:                                                    *
    * Date        Programmer     Correction Number      DesingDoc Number   *
    ************************************************************************
    ************************************************************************
    *&Form Name    : v_bukrs_check
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *公司代码字段输入检查:不能为空且代码不能不存在
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module v_bukrs_check input.
      tables: t001.
      if v_bukrs = space.
        message e023 with '公司代码'.
      endif.
      select single * from t001 where bukrs = v_bukrs.
      if sy-subrc ne 0.
        message e014 with v_bukrs.
      endif.
    endmodule.                 " v_bukrs_check  INPUT
    ************************************************************************
    *&Form Name    : v_gjahr_check
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *年份代码字段输入检查:不能为空且年份不能小于1990
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module v_gjahr_check input.
      if v_gjahr = space.
        message e023 with '年份'.
      endif.
      if v_gjahr gt 9999 or v_gjahr lt 1000.
        message e046.
      endif.
    endmodule.                 " v_gjahr_check  INPUT
    ************************************************************************
    *&Form Name    : v_zmon_check
    * Created by   : DEV01                                                 *
    * Created on   :  *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *月份字段输入检查
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module v_zmon_check input.
      if v_zmon = space.
        message e023 with '月份'.
      endif.
      if v_zmon gt 12 or v_zmon lt 1.
        message e047.
      endif.
    endmodule.                 " v_gjahr_check  INPUT
    ************************************************************************
    *&Form Name    : select_kostl
    * Created by   : DEV01                                                 *
    * Created on   :   *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *获取成本中心组(帮助输入)
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module select_kostl input.
      data:
           dynpro_values type table of dynpread,
           field_value like line of dynpro_values,
           l_year like bkpf-gjahr,
           g_kh(10).
      data: begin of i_tree occurs 0,
          setname like setnode-setname,
        end of i_tree.
      data: i_subtree like i_tree occurs 0 with header line,
        i_temptree like i_tree occurs 0 with header line.
      data l_count type i .
      ranges: s_setname for setnode-setname.
      ranges: s_kostl for cskt-kostl.

      refresh dynpro_values.
      field_value-fieldname = 'V_GJAHR'.
      append field_value to dynpro_values.

      call function 'DYNP_VALUES_READ'
        exporting
          dyname             = sy-repid
          dynumb             = sy-dynnr
          translate_to_upper = 'X'
        tables
          dynpfields         = dynpro_values.

      read table dynpro_values index 1 into field_value.
      l_year = field_value-fieldvalue(4).

      refresh i_setheadert.
      s_setname-option = 'EQ'.
      s_setname-sign = 'I'.
      l_count = 1.
      refresh i_temptree.
      refresh i_subtree.
    *特殊处理,2005年预算用2006的机构
      if l_year < 2006.
        l_year = 2006.
      endif.
      concatenate 'KH' l_year into g_kh.
      while l_count > 0.
        select setnode~subsetname as setname
          into (setheadert-setname)
          from setnode
            where setnode~setclass = '0101'
               and setnode~subclass = '1000'
               and setnode~subsetcls = '0101'
               and setnode~subsetscls = '1000'
               and setnode~setname = g_kh.
          move setheadert-setname to s_setname-low.
          append s_setname.
          i_temptree-setname = setheadert-setname.
          append i_temptree.
        endselect.
        append lines of i_temptree to i_subtree.
        describe table i_subtree lines l_count.
        if l_count ne 0.
          read table i_subtree index 1.
          g_kh = i_subtree-setname.
          delete i_subtree index 1.
        endif.
        refresh i_temptree.
        clear i_temptree.
      endwhile.

      select valsign as sign   valoption as option
        valfrom as low   valto   as high
        into table s_kostl
      from setleaf
      where setclass = '0101'
        and subclass = '1000'  and setname in s_setname.

      refresh i_setheadert.
      select single  bukrs  from t001  into butxt
      where bukrs = v_bukrs.
      if sy-subrc <> 0.
        message id 'ZDEV' type 'S' number '049'.
        exit.
      endif.
      select cskt~kostl cskt~ktext
        into (cskt-kostl,cskt-ktext)
      from cskt
       where spras = '1'
        and kokrs = '1000'
        and kostl in s_kostl.
        move cskt-kostl to i_setheadert-ktext.
        append i_setheadert.
        move cskt-ktext to i_setheadert-ktext.
        append i_setheadert.
      endselect.
      refresh fldtab.
      clear fldtab.
      fldtab-tabname    = 'CSKT'.
      fldtab-fieldname  = 'KOSTL'.
      fldtab-selectflag = 'X'.
      append fldtab.
      clear fldtab.
      fldtab-tabname    = 'CSKT'.
      fldtab-fieldname  = 'KTEXT'.
      append fldtab.
      call function 'HELP_VALUES_GET_WITH_TABLE'
        exporting
          display      = space
          fieldname    = 'KOSTL'
          tabname      = 'ZFI017V'
        importing
          select_value = ktext
        tables
          fields       = fldtab
          valuetab     = i_setheadert.
      if not ktext is initial.
        zfi017v-kostl = ktext.
      endif.
    endmodule.                 " select_kostl  INPUT

    ************************************************************************
    *&Form Name    : select_zgroup
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *获取某个年度成本要素组(帮助输入)
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module select_zgroup input.
      refresh i_zfi010.
    *********XIONGHM***************
      select kstar ktext
        into (csku-kstar,csku-ktext)
          from csku
          where spras = '1' and ktopl ='CB00'.
        i_zfi010-name = csku-kstar.
        append i_zfi010.
        i_zfi010-name = csku-ktext.
        append i_zfi010.
      endselect.

      refresh fldtab.
      clear fldtab.
      fldtab-tabname    = 'ZFI017V'.
      fldtab-fieldname  = 'KSTAR'.
      fldtab-selectflag = 'X'.
      append fldtab.
      clear fldtab.
      fldtab-tabname    = 'ZFI017V'.
      fldtab-fieldname  = 'KTEXT'.
      append fldtab.
      call function 'HELP_VALUES_GET_WITH_TABLE'
        exporting
          display      = space
          fieldname    = 'KSTAR'
          tabname      = 'ZFI017V'
        importing
          select_value = name
        tables
          fields       = fldtab
          valuetab     = i_zfi010.
      if not name is initial.
        zfi017v-kstar = name.
      endif.
    endmodule.                 " select_prodh  INPUT
    ************************************************************************
    *&Form Name    : v_check_kostl
    * Created by   : DEV01                                                 *
    * Created on   : *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *检查成本输入中心是否存在
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module v_check_kostl input.
      if zfi017v-kostl eq space.
        message e621 with zfi017v-kostl.
      endif.
      if  status_order-st_data ne space.
        select single ktext as descript
          into zfi017v-descript
        from cskt
         where spras = '1'
          and kokrs = '1000'
          and kostl = zfi017v-kostl.
        if sy-subrc ne 0.
          message e620 with zfi017v-kostl.
        endif.
      endif.
    endmodule.                 " v_check_kostl  INPUT
    ************************************************************************
    *&Form Name    : v_check_zgroup
    * Created by   : DEV01                                                 *
    * Created on   :   *
    *----------------------------------------------------------------------*
    * Function Description:                                                *
    *检查输入成本要素组是否存在
    *----------------------------------------------------------------------*
    *参数说明 
    *
    *----------------------------------------------------------------------*
    * Date        Programmer   Description          *
    ************************************************************************
    module v_check_zgroup input.
      if zfi017v-kstar eq space.
        message e621 with zfi017v-kstar.
      endif.
      if status_order-st_mode ne space.
        select single ktext
        into (zfi017v-ktext)
        from csku
        where spras = '1' and ktopl ='CB00'
              and kstar = zfi017v-kstar.
        if sy-subrc ne 0.
          message e621 with zfi017v-kstar.
        endif.
      endif.
    endmodule.                 " v_check_zgroup  INPUT

    9、屏幕PBO和PAI
    *BEFORE OUTPUT
    process before output.
      module init_pbo.
      module init_data.
      module init_ctrl.
      loop at order_extract with control tctrl_order
        cursor tctrl_order-top_line.

        module liste_show_liste.
      endloop.

    *After input
    process after input.
      module liste_exit_command at exit-command.
      field v_bukrs module v_bukrs_check on request.
      field v_gjahr module v_gjahr_check on request.
      field v_zmon module v_zmon_check on request.
      module liste_before_loop.
      loop at order_extract.
        field zfi017v-kostl
          module set_update_orderkey_flag on request.
        field zfi017v-kstar
          module set_update_orderkey_group on request.
        chain.
          field zfi017v-adamt.
          field zfi017v-reasn.
          field zfi017v-zyearmonth.
          module set_update_order_flag on chain-request.
        endchain.
        field vim_marked module liste_mark_checkbox.
    **检查
        field zfi017v-kostl module v_check_kostl.
        field zfi017v-kstar module v_check_zgroup.
    * save current data to order_total
        chain.
          field zfi017v-kostl.
          field zfi017v-kstar.
          field zfi017v-adamt.
          field zfi017v-reasn.
          field zfi017v-zyearmonth.
          module liste_update_order.
        endchain.
      endloop.
    *deal with function Code
      module liste_after_loop.

    process on value-request.
      field zfi017v-kostl module select_kostl.
      field zfi017v-kstar module select_zgroup.

  • 相关阅读:
    Mybatis的缓存
    Mybatis使用assocation和Collection实现延迟加载
    Mybatis:一对多的查询
    Mysql:事务
    Mysql:多表查询
    Mysql:数据库的设计
    Mysql:约束
    MYSQL:DQL-查询表中的记录
    panic: cannot create context from nil parent
    $request input 获取参数null
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157527.html
Copyright © 2011-2022 走看看