可编辑ALV代码(例子)

  FORM frm_output .
*ALV输出
  g_repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_pf_status_set = 'SET_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      i_callback_program       = g_repid
      is_layout                = gs_layout
      it_fieldcat              = gt_fieldcat[]
      i_save                   = 'A'
      is_variant               = v_stru_disvar
      it_events                = git_events[]
      it_sort                  = it_sort[]
      is_print                 = gs_print
    TABLES
      t_outtab                 = it_tab
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " FRM_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  set_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM frm_user_command USING l_ucomm TYPE sy-ucomm
                            liw_selfield TYPE slis_selfield.
  DATA: l_tabix LIKE sy-tabix,
       p_tabix LIKE sy-tabix,
       w_tab1 LIKE LINE OF it_tab,
       l_vbeln LIKE lips-vbeln,
       l_msgv1 LIKE bdcmsgcoll-msgv1.
  CASE l_ucomm.
    WHEN 'TAKE'.
      PERFORM frm_get_alv_data.
      LOOP AT  it_tab INTO  w_tab WHERE flag = 'X'.
        l_tabix = sy-tabix.
        IF w_tab-fkdat = ''.
          CONCATENATE '交货单' w_tab-vbeln '创建发票不成功,因为未填写出具发票日期' INTO
w_tab-msgv1.
          w_tab-flag = ''.
          MODIFY it_tab FROM w_tab INDEX l_tabix.
          CLEAR: w_tab.
          CALL METHOD ref_grid->refresh_table_display. "刷新ALV报表
          CONTINUE.
        ENDIF.

        IF ( w_tab-wbsta = 'C' AND ( w_tab-fksta = 'A' OR w_tab-fksta =
 'B' ) ) OR w_tab-faksk <> space.

          READ TABLE it_vbeln INTO w_vbeln WITH KEY vbeln = w_tab-vbeln.
          IF sy-subrc = 0.
            CONCATENATE '交货单' w_tab-vbeln '已创建发票' INTO w_tab-msgv1.
            w_tab-flag = ''.
            MODIFY it_tab FROM w_tab INDEX l_tabix.
            CLEAR: w_tab,
                   w_vbeln.
            CALL METHOD ref_grid->refresh_table_display. "刷新ALV报表
            CONTINUE.
          ENDIF.
          REFRESH bdcdata.
          PERFORM frm_bdc_dynpro USING 'SAPMV60A' '0102'.
          PERFORM frm_bdc_field  USING 'BDC_OKCODE'  '/00'.
          PERFORM frm_bdc_field  USING 'RV60A-FKDAT' sy-datum.
          PERFORM frm_bdc_field  USING 'KOMFK-VBELN(01)' w_tab-vbeln.
          PERFORM frm_bdc_dynpro USING 'SAPMV60A' '0104'.
          PERFORM frm_bdc_field  USING 'BDC_OKCODE'  '=SICH'.
          CALL TRANSACTION 'VF01' USING   bdcdata MODE 'E'
                 UPDATE  'S'  MESSAGES INTO messtab.
          w_vbeln-vbeln = w_tab-vbeln.
          APPEND w_vbeln TO it_vbeln.
          READ TABLE messtab WITH KEY msgtyp = 'S'.
          IF sy-subrc = 0.
            CONCATENATE '发票凭证' messtab-msgv1 messtab-msgv2 '创建成功' INTO
            l_msgv1.
          ENDIF.
          CLEAR: messtab[],
                 w_vbeln.
        ELSE.
          CONCATENATE '交货单' w_tab-vbeln '不能创建发票' INTO l_msgv1.
        ENDIF.
        l_vbeln = w_tab-vbeln.
        LOOP AT it_tab INTO w_tab WHERE vbeln = w_tab-vbeln.
          p_tabix = sy-tabix.

          READ TABLE it_tab INTO w_tab1 WITH KEY vbeln = w_tab-vbeln.
          w_tab1-flag = ''.
          w_tab1-msgv1 = l_msgv1.
          MODIFY it_tab FROM w_tab1 INDEX p_tabix.
          CLEAR w_tab1.
        ENDLOOP.
        CLEAR: w_tab.
      ENDLOOP.
      CALL METHOD ref_grid->refresh_table_display.
*    PERFORM frm_process_message.
  ENDCASE.
ENDFORM.                    "frm_user_command
  *&---------------------------------------------------------------------*
*&      Form  set_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
  FORM set_status USING rt_extab TYPE slis_t_extab..
  SET PF-STATUS '1100'.
ENDFORM.                    "set_status
*&---------------------------------------------------------------------*
*&      Form  frm_get_alv_data
*&---------------------------------------------------------------------*
*       使用方法:放在
*----------------------------------------------------------------------*
FORM frm_get_alv_data.
  "声明一个ALV实例
  " 取得当前的ALV传给声明的实例,其目的就是取当ALV的对象。
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = ref_grid.
* 从ALV实例出来的数据更新ALV对应的内表
  CALL METHOD ref_grid->check_changed_data.

ENDFORM.                    "frm_get_alv_data

posted @ 2009-07-21 11:12  sono  阅读(920)  评论(1编辑  收藏  举报