ABAP 动态列表代码

复制代码
REPORT ztest88888.
TABLES: sscrfields, marc, mara,aufm,aufk,resb,ekpo,ekko,t161t,vbak,vbap,tlsys,kna1,zfit50,zfit51,bkpf,lfa1,but000,acdoca.
TABLES:zppt034,zppt033,zppt036.
DATA: wa_textfield TYPE smp_dyntxt.
TYPES : BEGIN OF ty_input.
          INCLUDE TYPE zppt033.
TYPES :
          zbox  TYPE char1,
          zicon TYPE  char10,
          zmsg  TYPE char200.
TYPES : END OF ty_input.

DATA:lt_alv TYPE  TABLE OF ty_input,
     ls_alv TYPE ty_input.
DATA:lt_sum TYPE  TABLE OF ty_input,
     ls_sum TYPE ty_input.

DATA:lt_alv1 TYPE  TABLE OF ty_input,
     ls_alv1 TYPE ty_input.


DATA:lt_alv_a TYPE  TABLE OF ty_input,
     ls_alv_a TYPE ty_input.

DATA:lt_alv_b TYPE  TABLE OF ty_input,
     ls_alv_b TYPE ty_input.

DATA:name  TYPE vrm_id,
     list  TYPE vrm_values,
     value LIKE LINE OF list.

FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,   "内表指针
              <dyn_wa>,                           "工作区
              <dyn_field>.                        "字段

DATA: dy_table TYPE REF TO data,  "泛型,相当于指针
      dy_line  TYPE REF TO data.   "动态内标

DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA ctumode LIKE ctu_params-dismode VALUE 'N'.  "执行模式(不显示屏幕)
DATA cupdate LIKE ctu_params-updmode VALUE 'L'.  "更新模式

DATA:lt_alv1000 TYPE  TABLE OF ty_input,
     ls_alv1000 TYPE ty_input.
FIELD-SYMBOLS:<fs> TYPE ty_input.
FIELD-SYMBOLS <fs_value> TYPE any.
DATA: it_fieldcat TYPE lvc_t_fcat,
      wa_layout   TYPE lvc_s_layo.
DATA: wa_fieldcat TYPE lvc_s_fcat.
DATA: fieldstyle TYPE lvc_s_styl.
DATA: functxt       TYPE smp_dyntxt,
      c_icon_red    TYPE icon_d VALUE '@0A@',
      c_icon_green  TYPE icon_d VALUE '@08@',
      c_icon_yellow TYPE icon_d VALUE '@09@'.


*&---------------------------------------------------------------------*
*&      定义宏
*&---------------------------------------------------------------------*
DEFINE  macro_fill_fcat.
  CLEAR wa_fieldcat.
  &1 = &1 + 1.
  wa_fieldcat-col_pos       = &1.
  wa_fieldcat-fieldname     = &2.
  wa_fieldcat-ref_table     = &3.
  wa_fieldcat-ref_field     = &4.   " 内表中数量参照字段
  wa_fieldcat-coltext       = &5.
  wa_fieldcat-edit = 'X'.
  APPEND wa_fieldcat TO it_fieldcat.
END-OF-DEFINITION.


SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.

  SELECT-OPTIONS: s_date FOR zppt036-zday NO INTERVALS NO-EXTENSION MODIF ID m1 OBLIGATORY  DEFAULT sy-datum .
  SELECT-OPTIONS: s_matnr FOR ekpo-matnr  .
*  PARAMETERS: p_zzt  LIKE zsdt017-zzt AS LISTBOX VISIBLE LENGTH 16 DEFAULT '新建' .
SELECTION-SCREEN END OF BLOCK blk1.

*INCLUDE zppg004_class.
*&---------------------------------------------------------------------*
*&      INITIALIZATION.
*&---------------------------------------------------------------------*
INITIALIZATION.

*
*  PERFORM get_date.
*&---------------------------------------------------------------------*
*&      AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  PERFORM frm_init_screen.

*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_zzt.
*  PERFORM set_s_id_listinfo.
*&---------------------------------------------------------------------*
*& 选择屏幕控制
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
**文件名的搜素帮助
*  PERFORM get_file_name.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zpgkmz-low.
*  PERFORM frm_f4_zpur.

*&---------------------------------------------------------------------*
*&      START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_auth_check.
  PERFORM frm_init_fieldcat.
  PERFORM data_get.
  PERFORM frm_init_layout.
  PERFORM frm_display_alv.
*&---------------------------------------------------------------------*
*&      END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_s_id_listinfo .
  name = 'P_ZZT'.


  value-key = '审批'.
*  value-text = '审批'.
  APPEND value TO list.

  value-key = '删除'.
*  value-text = '审批'.
  APPEND value TO list.

  value-key = '新建'.
*  value-text = '新建'.
  APPEND value TO list.

  value-key = '取消'.
*  value-text = '新建'.
  APPEND value TO list.

  value-key = '所有'.
*  value-text = '新建'.
  APPEND value TO list.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = name
      values = list.
ENDFORM.
FORM frm_init_screen .

*  LOOP AT SCREEN.
*    IF rb2 EQ 'X'.
*      IF screen-group1 EQ 'M1'.
*        screen-active = '0'.  "隐藏
*      ELSE.
*        screen-active = '1'.  "显示
*      ENDIF.
*
*    ELSEIF rb1 EQ 'X'.
*      IF screen-group1 EQ 'M2'.
*        screen-active = '0'.
*      ELSE.
*        screen-active = '1'.
*      ENDIF.
*    ENDIF.
*
*    MODIFY SCREEN.
*  ENDLOOP.

ENDFORM.                    " FRM_CHECK_SCREEN
"FRM_INIT_LAYOUT

*&--------------------------------------------------------------------*
*&      Form  frm_display_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_display_alv.
  DATA: gs_grid_settings TYPE lvc_s_glay.
*  SORT it_alv BY vbeln posnr.


  DATA ig_events TYPE slis_t_event WITH HEADER LINE.

  gs_grid_settings-edt_cll_cb = 'X'.

*  ig_events-name = 'CALLER_EXIT'.
*  ig_events-form = 'CALLER_EXIT'.
*  APPEND ig_events.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_grid_settings          = gs_grid_settings
      i_callback_user_command  = 'USER_COMMAND'
      is_layout_lvc            = wa_layout
*     is_variant               = gs_variant
      it_fieldcat_lvc          = it_fieldcat
      it_events                = ig_events[]
      i_save                   = 'A'
    TABLES
      t_outtab                 = lt_alv[]
    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_ALV_OUTPUT

*&---------------------------------------------------------------------*
*&      Form  SET_PF_STATUS
*&---------------------------------------------------------------------*
*       设置标准工具栏按钮,并添加一个打印按钮
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  DATA: rs_extab LIKE LINE OF rt_extab.
*  IF c_b  = 'X'.
*  APPEND 'ZPOST' TO rt_extab.
  APPEND 'ZADD' TO rt_extab.
*  ENDIF.


  SET PF-STATUS 'STATUS' EXCLUDING rt_extab.
ENDFORM. "SET_PF_STATUS

*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       用户指令
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                         rs_selfield TYPE slis_selfield.

  DATA:
    ls_layout TYPE lvc_s_layo,
    ls_stable TYPE lvc_s_stbl,
    lv_grid   TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lv_grid.
  CALL METHOD lv_grid->check_changed_data.

  CASE r_ucomm.
    WHEN '&IC1'.
*      READ TABLE lt_alv INTO ls_alv INDEX rs_selfield-tabindex.
*      CASE  rs_selfield-fieldname.
*        WHEN 'BELNR'.
*          SET PARAMETER ID 'BLN' FIELD ls_alv-belnr. " 财务凭证号
*          SET PARAMETER ID 'BUK' FIELD ls_alv-bukrs. " 公司代码
*          SET PARAMETER ID 'GJR' FIELD ls_alv-gjahr. " 年度
*          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*        WHEN 'ZCXPZ'.
*          SET PARAMETER ID 'BLN' FIELD ls_alv1-zcxpz. " 财务凭证号
*          SET PARAMETER ID 'BUK' FIELD ls_alv1-bukrs. " 公司代码
*          SET PARAMETER ID 'GJR' FIELD s_budat-low(4). " 年度
*          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*        WHEN 'ZPGPZCX'.
*          SET PARAMETER ID 'BLN' FIELD ls_alv1-zpgpzcx. " 财务凭证号
*          SET PARAMETER ID 'BUK' FIELD ls_alv1-bukrs. " 公司代码
*          SET PARAMETER ID 'GJR' FIELD s_budat-low(4). " 年度
*          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*        WHEN 'ZCXPZCX'.
*          SET PARAMETER ID 'BLN' FIELD ls_alv1-zcxpzcx. " 财务凭证号
*          SET PARAMETER ID 'BUK' FIELD ls_alv1-bukrs. " 公司代码
*          SET PARAMETER ID 'GJR' FIELD s_budat-low(4). " 年度
*          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*        WHEN OTHERS.
*          IF c_a  EQ 'X'.
*            PERFORM get_mx_data USING ls_alv1.
*          ENDIF.
*      ENDCASE.
    WHEN 'ZPOST'."
      PERFORM frm_save.
    WHEN 'ZADD'."
      PERFORM frm_zfs.
    WHEN OTHERS.
  ENDCASE.


  CALL METHOD lv_grid->get_frontend_layout
    IMPORTING
      es_layout = ls_layout.
*  ls_layout-cwidth_opt = 'X'.
  CALL METHOD lv_grid->set_frontend_layout
    EXPORTING
      is_layout = ls_layout.
  ls_stable-row = '1'.
  ls_stable-col = '1'.
  CALL METHOD lv_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable.
*  PERFORM frm_refresh_display.
ENDFORM. "FM_USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_download_template .

  DATA: lv_view_name   TYPE dd02v-tabname,
        lt_dba_sellist TYPE TABLE OF vimsellist.


  lv_view_name = 'ZFIT50'.

  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                       = 'S'
*     CORR_NUMBER                  = '          '
*     GENERATE_MAINT_TOOL_IF_MISSING       = ' '
*     SHOW_SELECTION_POPUP         = ' '
      view_name                    = lv_view_name
*     NO_WARNING_FOR_CLIENTINDEP   = ' '
*     RFC_DESTINATION_FOR_UPGRADE  = ' '
*     CLIENT_FOR_UPGRADE           = ' '
*     VARIANT_FOR_SELECTION        = ' '
*     COMPLEX_SELCONDS_USED        = ' '
*     CHECK_DDIC_MAINFLAG          = ' '
*     SUPPRESS_WA_POPUP            = ' '
    TABLES
      dba_sellist                  = lt_dba_sellist
*     EXCL_CUA_FUNCT               =
    EXCEPTIONS
      client_reference             = 1
      foreign_lock                 = 2
      invalid_action               = 3
      no_clientindependent_auth    = 4
      no_database_function         = 5
      no_editor_function           = 6
      no_show_auth                 = 7
      no_tvdir_entry               = 8
      no_upd_auth                  = 9
      only_show_allowed            = 10
      system_failure               = 11
      unknown_field_in_dba_sellist = 12
      view_not_found               = 13
      maintenance_prohibited       = 14
      OTHERS                       = 15.
  IF sy-subrc <> 0.
    " Implement suitable error handling here
  ENDIF.



ENDFORM.                    " FRM_DOWNLOAD_TEMPLATE


*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_download_template1 .

  DATA: lv_view_name   TYPE dd02v-tabname,
        lt_dba_sellist TYPE TABLE OF vimsellist.


  lv_view_name = 'ZFIT51'.

  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                       = 'S'
*     CORR_NUMBER                  = '          '
*     GENERATE_MAINT_TOOL_IF_MISSING       = ' '
*     SHOW_SELECTION_POPUP         = ' '
      view_name                    = lv_view_name
*     NO_WARNING_FOR_CLIENTINDEP   = ' '
*     RFC_DESTINATION_FOR_UPGRADE  = ' '
*     CLIENT_FOR_UPGRADE           = ' '
*     VARIANT_FOR_SELECTION        = ' '
*     COMPLEX_SELCONDS_USED        = ' '
*     CHECK_DDIC_MAINFLAG          = ' '
*     SUPPRESS_WA_POPUP            = ' '
    TABLES
      dba_sellist                  = lt_dba_sellist
*     EXCL_CUA_FUNCT               =
    EXCEPTIONS
      client_reference             = 1
      foreign_lock                 = 2
      invalid_action               = 3
      no_clientindependent_auth    = 4
      no_database_function         = 5
      no_editor_function           = 6
      no_show_auth                 = 7
      no_tvdir_entry               = 8
      no_upd_auth                  = 9
      only_show_allowed            = 10
      system_failure               = 11
      unknown_field_in_dba_sellist = 12
      view_not_found               = 13
      maintenance_prohibited       = 14
      OTHERS                       = 15.
  IF sy-subrc <> 0.
    " Implement suitable error handling here
  ENDIF.



ENDFORM.                    " FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*&      Form  FRM_REFRESH_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_refresh_display .
  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA: stbl TYPE lvc_s_stbl.  "稳定刷新
  stbl-row = 'X'." 基于行的稳定刷新
  stbl-col = 'X'." 基于列稳定刷新

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.
  CALL METHOD lr_grid->check_changed_data.

*  rs_selfield-refresh = 'X'.  "自动刷新,当使用稳定刷新后就不能使用自动刷新了
*  使用排序、过滤器等,定位在当前行、列
  CALL METHOD lr_grid->refresh_table_display
    EXPORTING
      is_stable      = stbl
      i_soft_refresh = 'X'
    EXCEPTIONS
      finished       = 1
      OTHERS         = 2.
ENDFORM.                    " FRM_REFRESH_DISPLAY



*&---------------------------------------------------------------------*
*& Form frm_auth_check
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_auth_check .



*  DATA:
*    lv_datum TYPE sy-datum,
*    ls_datum LIKE LINE OF s_monat1.
*
*  IF s_budat-low IS NOT INITIAL.
*    CLEAR s_monat.
*    s_monat-sign   = 'I'.
*    s_monat-option = 'EQ'.
*    s_monat-low    = s_budat-low+4(2).
*    APPEND s_monat TO s_monat.
*
*    CLEAR s_gjahr.
*    s_gjahr-sign   = 'I'.
*    s_gjahr-option = 'EQ'.
*    s_gjahr-low    = s_budat-low+0(4).
*    APPEND s_gjahr.
*
*  ENDIF.

*  SELECT
*  vkorg,
*  vtweg,
*  spart
**  vkbur,
**  vkgrp
*  INTO TABLE @DATA(lt_vbak) FROM vbak
*  WHERE vkorg IN @s_vkorg[]
*    AND   vtweg IN @s_vtweg[]
*    AND  spart IN   @s_spart[]
*    AND   vbeln IN @s_vbeln[]
**    AND vkbur IN   @s_vkbur[]
**    AND vkgrp IN @s_vkgrp[]
*    .
*  SORT lt_vbak .
*  DELETE ADJACENT DUPLICATES FROM lt_vbak COMPARING ALL FIELDS.
*
*  LOOP AT lt_vbak INTO DATA(ls_vbak).
*  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
*             ID 'BUKRS' FIELD s_bukrs-low.
*  IF sy-subrc NE 0.
*    MESSAGE '权限不足' TYPE 'S' DISPLAY LIKE 'E'.
*    LEAVE LIST-PROCESSING.
*  ENDIF.
*  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_name
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_file_name .
*  DATA: lt_filetable TYPE filetable,
*        lw_filetable TYPE file_table,
*        l_rc         TYPE i.
*  FREE: lt_filetable,
*        l_rc.
*  cl_gui_frontend_services=>file_open_dialog(
*    EXPORTING
*      default_extension       = cl_gui_frontend_services=>filetype_excel
*      file_filter             = cl_gui_frontend_services=>filetype_excel
*    CHANGING
*      file_table              = lt_filetable
*      rc                      = l_rc
*    EXCEPTIONS
*      file_open_dialog_failed = 1
*      cntl_error              = 2
*      error_no_gui            = 3
*      not_supported_by_gui    = 4
*      OTHERS                  = 5 ).
*  READ TABLE lt_filetable INTO lw_filetable INDEX 1.
*  IF sy-subrc EQ 0.
*    p_file = lw_filetable-filename.
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form file_data_input
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM file_data_input .


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_init_layout1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init_layout.
  CLEAR wa_layout.
  wa_layout-box_fname         = 'ZBOX'. "侧边栏
  wa_layout-zebra             = 'X'.      "斑马线
  wa_layout-cwidth_opt        = 'X'.      "自动调整宽度
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_init_fieldcat1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init_fieldcat.
  DATA: l_colpos TYPE lvc_s_fcat-col_pos VALUE 0.

  FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat.

  CLEAR it_fieldcat.

  DATA:lv_datum TYPE datum.
  DATA:lv_n TYPE char2.
  DATA:lv_field TYPE char20.

*  macro_fill_fcat:l_colpos 'ZICON' '' ''  '灯 '.
*  macro_fill_fcat:l_colpos 'ZMSG' '' ''  '消息 '.

*          matnr    TYPE  ekpo-matnr, "物料
  macro_fill_fcat:l_colpos 'MATNR' 'EKPO' 'MATNR'  '物料'.
*          maktx    TYPE makt-maktx, "物料描述
  macro_fill_fcat:l_colpos 'MAKTX' 'MAKT' 'MAKTX'  '物料描述'.

  macro_fill_fcat:l_colpos 'MEINS' 'MARA' 'MEINS'  '物料单位'.

  lv_datum = s_date-low.
  DO 90 TIMES.
    lv_n = lv_n + 1.
    lv_field = 'ZDAY' && lv_n.  CONDENSE lv_field.
    macro_fill_fcat:l_colpos lv_field 'ZPPT033' 'ZDAY1'  lv_datum.
    lv_datum = lv_datum + 1.
  ENDDO.

  LOOP AT it_fieldcat ASSIGNING <fs_fieldcat>  .
*    IF <fs_fieldcat>-fieldname NE 'KDMAT'.
*      <fs_fieldcat>-no_zero  = 'X'.
*    ENDIF.
*    IF <fs_fieldcat>-fieldname = 'ZPZDH'  OR <fs_fieldcat>-fieldname EQ 'MATNR'
*     OR <fs_fieldcat>-fieldname EQ 'VKORG'     OR <fs_fieldcat>-fieldname EQ 'AUART'   OR <fs_fieldcat>-fieldname EQ 'ZZT'
*      OR <fs_fieldcat>-fieldname EQ 'POSNR'.
**      <fs_fieldcat>-decimals_o  = '0'.
*    ELSE.
*      <fs_fieldcat>-edit = 'X'.
*    ENDIF.
    IF <fs_fieldcat>-fieldname EQ 'MATNR' OR <fs_fieldcat>-fieldname EQ 'MAKTX' OR <fs_fieldcat>-fieldname EQ 'MEINS'.
      <fs_fieldcat>-edit = ''.
    ENDIF.
*

*    IF <fs_fieldcat>-fieldname EQ 'WRBTR' OR <fs_fieldcat>-fieldname EQ 'DMBTR'    OR <fs_fieldcat>-fieldname EQ 'ZWRBTR'
*    OR  <fs_fieldcat>-fieldname EQ 'ZDMBTR' OR <fs_fieldcat>-fieldname EQ 'ZSWRBTR'  OR <fs_fieldcat>-fieldname EQ 'ZSDMBTR'
*    OR <fs_fieldcat>-fieldname EQ 'HSL'   .
*
*      <fs_fieldcat>-edit_mask = '==Z001'.
*      <fs_fieldcat>-qfieldname = 'WAERS'.
*
*    ENDIF.

  ENDLOOP.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = it_fieldcat
    IMPORTING
      ep_table        = dy_table.
  "在使用 Field Symbol 和 Type Ref To 前必须初始化,不然会发生 RUNTIME ERROR。
  ASSIGN dy_table->* TO <dyn_table>."如果第一步定义时没有指定类型或者结构,那么 Type Ref To 必须 ASSIGN 到另外一个 Field Symbol 里间接使用。
  CREATE DATA dy_line LIKE LINE OF  <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.


ENDFORM.


*&---------------------------------------------------------------------*
*& Form FRM_F4_ZPUR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_f4_zpur .

*  SELECT aufnr FROM aufk INTO   TABLE @DATA(lt_zdeli) .
  SELECT DISTINCT zpgkmz, zpgkmz_txt FROM zfit50  INTO   TABLE @DATA(lt_zdeli) .


*将取到的值通过函数显示在搜索帮助显示框中
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     DDIC_STRUCTURE  = ' '
      retfield        = 'ZPGKMZ'            "这个参数为帮助表中返回到选择屏幕的字段的参数
*     PVALKEY         = ' '
      dynpprog        = sy-repid           "当前程序,不写会有问题
      dynpnr          = sy-dynnr           "当前屏幕,不写会有问题
      dynprofield     = 'S_ZPGKMZ-LOW'       "选择屏幕上需要加F4帮助的字段
*     STEPL           = 0
*     WINDOW_TITLE    =
*     VALUE           = ' '
      value_org       = 'S'                "默认为C但是此处不用S不行
*     MULTIPLE_CHOICE = ' '
*     DISPLAY         = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM   = ' '
*     CALLBACK_METHOD =
*     MARK_TAB        =
*  IMPORTING
*     USER_RESET      =
    TABLES
      value_tab       = lt_zdeli           "F4帮助值的表
*     FIELD_TAB       =
*     RETURN_TAB      =
*     DYNPFLD_MAPPING =
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
*Implement suitable error handling here
  ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*& Form frm_f05_l
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LS_ALV1
*&---------------------------------------------------------------------*
FORM frm_f05_l  CHANGING ls_alv1 TYPE ty_input.
  "BDC消息解析
*  DATA lt_return TYPE TABLE OF bapiret2.
*  DATA:lv_bktxt   TYPE bkpf-bktxt.
*  DATA:lv_dmbtr TYPE  bkpf-bktxt.
*  DATA  lv_zzassacc05 TYPE  kna1-kunnr.
*  IF ls_alv1-kunnr IS NOT INITIAL.
*    lv_zzassacc05 = ls_alv1-kunnr.
*  ENDIF.
*  IF ls_alv1-lifnr IS NOT INITIAL.
*    lv_zzassacc05 = ls_alv1-lifnr.
*  ENDIF.
*
*  CLEAR:lv_dmbtr, lv_bktxt.
*  lv_bktxt =    sy-datum+0(6) && '外币评估'."抬头文本
*  lv_dmbtr = abs( ls_alv1-zcyje ).  CONDENSE lv_dmbtr NO-GAPS.
*
*  CLEAR:bdcdata[],messtab[],lt_return[].
*
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0100'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWKO'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM bdc_field       USING 'BKPF-BLDAT'
*                                s_budat-low.
*  PERFORM bdc_field       USING 'BKPF-BLART'
*                                'M6'.
*  PERFORM bdc_field       USING 'BKPF-BUKRS'
*                                ls_alv1-bukrs.
*  PERFORM bdc_field       USING 'BKPF-BUDAT'
*                                s_budat-low.
*  PERFORM bdc_field       USING 'BKPF-MONAT'
*                                s_budat-low+4(2).
*  PERFORM bdc_field       USING 'BKPF-WAERS'
*                                ls_alv1-waers.
*  PERFORM bdc_field       USING 'BKPF-BKTXT'
*                            lv_bktxt.
*  PERFORM bdc_field       USING 'FS006-DOCID'
*                                '*'.
*  PERFORM bdc_field       USING 'RF05A-NEWBS'
*                                '40'.
*  PERFORM bdc_field       USING 'RF05A-NEWKO'
*                                ls_alv1-zthkm.
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWKO'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM bdc_field       USING 'BSEG-DMBTR'
*                                lv_dmbtr.
**  PERFORM bdc_field       USING 'BSEG-VALUT'
**                                record-valut_011.
*  PERFORM bdc_field       USING 'RF05A-NEWBS'
*                                '50'.
*  PERFORM bdc_field       USING 'RF05A-NEWKO'
*                                ls_alv1-zhdsykm.
**  PERFORM bdc_field       USING 'DKACB-FMORE'
**                                record-fmore_014.
*  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=ENTE'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'COBL-ZZASSACC05'.
*  PERFORM bdc_field       USING 'COBL-ZZASSACC05'
*                                lv_zzassacc05.
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWBS'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=BU'.
*  PERFORM bdc_field       USING 'BSEG-DMBTR'
*                                  lv_dmbtr.
**  PERFORM bdc_field       USING 'BSEG-VALUT'
**                                record-valut_017.
**  PERFORM bdc_field       USING 'RF05A-NEWBS'
**                                record-newbs_018.
**  PERFORM bdc_field       USING 'DKACB-FMORE'
**                                record-fmore_019.
*  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=ENTE'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'COBL-ZZASSACC05'.
*  PERFORM bdc_field       USING 'COBL-ZZASSACC05'
*                                lv_zzassacc05.
*  "调用FB01事务码
*  CALL TRANSACTION 'F-05' USING bdcdata
*                          MODE  ctumode
*                          UPDATE  cupdate
*                          MESSAGES INTO messtab   .
*
*  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
*    TABLES
*      imt_bdcmsgcoll = messtab
*      ext_return     = lt_return.
*  "消息类型: S 成功 E 错误 W 警告 I 信息 A 中断
*  LOOP AT lt_return INTO DATA(ls_return)
*       WHERE type = 'E'
*         OR  type = 'A'.
*    ls_alv1-zmsg  = ls_alv1-zmsg && ls_return-message.
*    EXIT.
*  ENDLOOP.
*  IF sy-subrc  = 0.
**    MESSAGE '凭证创建失败' TYPE 'S'.
*    ls_alv1-zicon  = c_icon_red.
*  ELSE.
*    READ TABLE lt_return  ASSIGNING FIELD-SYMBOL(<lfc_return>) WITH  KEY type = 'S'.
*    ls_alv1-zpgpz  = <lfc_return>-message_v1.
*    ls_alv1-zicon  = c_icon_green.
*    ls_alv1-zmsg  = ls_alv1-zmsg && <lfc_return>-message.
*  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_f05_cyl
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LS_ALV1
*&---------------------------------------------------------------------*
FORM frm_f05_cyl  CHANGING ls_alv1 TYPE ty_input.
*  "BDC消息解析
*  DATA date TYPE sy-datum.
*  DATA lt_return TYPE TABLE OF bapiret2.
*  DATA:lv_bktxt   TYPE bkpf-bktxt.
*  DATA:lv_dmbtr TYPE  bkpf-bktxt.
*  DATA  lv_zzassacc05 TYPE  kna1-kunnr.
*  IF ls_alv1-kunnr IS NOT INITIAL.
*    lv_zzassacc05 = ls_alv1-kunnr.
*  ENDIF.
*  IF ls_alv1-lifnr IS NOT INITIAL.
*    lv_zzassacc05 = ls_alv1-lifnr.
*  ENDIF.
*
*
*  CLEAR:lv_dmbtr, lv_bktxt.
*
*  CALL FUNCTION 'MONTH_PLUS_DETERMINE'
*    EXPORTING
*      months  = 1             "未来1月"
*      olddate = s_budat-low    "输入日期"
*    IMPORTING
*      newdate = date.         "20140501"
*
*  lv_bktxt =    s_budat-low+0(6) && '外币评估冲销'."抬头文本
*  lv_dmbtr = abs( ls_alv1-zcyje ).  CONDENSE lv_dmbtr NO-GAPS.
*
*
*  CLEAR:bdcdata[],messtab[],lt_return[].
*
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0100'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWKO'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM bdc_field       USING 'BKPF-BLDAT'
*                                date.
*  PERFORM bdc_field       USING 'BKPF-BLART'
*                                'M6'.
*  PERFORM bdc_field       USING 'BKPF-BUKRS'
*                                ls_alv1-bukrs.
*  PERFORM bdc_field       USING 'BKPF-BUDAT'
*                                date.
*  PERFORM bdc_field       USING 'BKPF-MONAT'
*                                date+4(2).
*  PERFORM bdc_field       USING 'BKPF-WAERS'
*                                ls_alv1-waers.
*  PERFORM bdc_field       USING 'BKPF-BKTXT'
*                              lv_bktxt.
*
*  PERFORM bdc_field       USING 'FS006-DOCID'
*                                '*'.
*  PERFORM bdc_field       USING 'RF05A-NEWBS'
*                                '40'.
*  PERFORM bdc_field       USING 'RF05A-NEWKO'
*                                ls_alv1-zthkm.
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWKO'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM bdc_field       USING 'BSEG-DMBTR'
*                                lv_dmbtr.
**  PERFORM bdc_field       USING 'BSEG-VALUT'
**                                record-valut_011.
*  PERFORM bdc_field       USING 'RF05A-NEWBS'
*                                '50'.
*  PERFORM bdc_field       USING 'RF05A-NEWKO'
*                                ls_alv1-zhdsykm.
**  PERFORM bdc_field       USING 'DKACB-FMORE'
**                                record-fmore_014.
*  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=ENTE'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'COBL-ZZASSACC05'.
*  PERFORM bdc_field       USING 'COBL-ZZASSACC05'
*                                lv_zzassacc05.
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWBS'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=BU'.
*  PERFORM bdc_field       USING 'BSEG-DMBTR'
*                                  lv_dmbtr.
**  PERFORM bdc_field       USING 'BSEG-VALUT'
**                                record-valut_017.
**  PERFORM bdc_field       USING 'RF05A-NEWBS'
**                                record-newbs_018.
**  PERFORM bdc_field       USING 'DKACB-FMORE'
**                                record-fmore_019.
*  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=ENTE'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'COBL-ZZASSACC05'.
*  PERFORM bdc_field       USING 'COBL-ZZASSACC05'
*                                lv_zzassacc05.
*  "调用FB01事务码
*  CALL TRANSACTION 'F-05' USING bdcdata
*                          MODE  ctumode
*                          UPDATE  cupdate
*                          MESSAGES INTO messtab   .
*
*  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
*    TABLES
*      imt_bdcmsgcoll = messtab
*      ext_return     = lt_return.
*  "消息类型: S 成功 E 错误 W 警告 I 信息 A 中断
*  LOOP AT lt_return INTO DATA(ls_return)
*       WHERE type = 'E'
*         OR  type = 'A'.
*    ls_alv1-zmsg  = ls_alv1-zmsg && ls_return-message.
*    EXIT.
*  ENDLOOP.
*  IF sy-subrc  = 0.
**    MESSAGE '凭证创建失败' TYPE 'S'.
*    ls_alv1-zicon  = c_icon_red.
*  ELSE.
*    READ TABLE lt_return  ASSIGNING FIELD-SYMBOL(<lfc_return>)  WITH  KEY type = 'S'.
*    ls_alv1-zcxpz = <lfc_return>-message_v1.
*    ls_alv1-zicon  = c_icon_green.
*    ls_alv1-zmsg  = ls_alv1-zmsg && <lfc_return>-message.
*  ENDIF.  "BDC消息解析

ENDFORM.

FORM bdc_dynpro  USING  program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0234   text
*      -->P_0235   text
*----------------------------------------------------------------------*
FORM bdc_field  USING   fnam  fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ZFIT52
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_ALV1
*&---------------------------------------------------------------------*
FORM frm_zfit52  USING    ls_alv1 TYPE ty_input..
  DATA:ls_zfit52 TYPE zfit52,
       lt_zfit52 TYPE TABLE OF zfit52.

  CLEAR ls_zfit52.
  MOVE-CORRESPONDING ls_alv1 TO ls_zfit52.
  MODIFY zfit52 FROM ls_zfit52.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_date .
*  IF s_budat-low IS INITIAL .
*    DATA:lv_date TYPE sy-datum.
*
*    CALL FUNCTION 'MONTH_PLUS_DETERMINE'
*      EXPORTING
*        months  = '-1'
*        olddate = sy-datum
*      IMPORTING
*        newdate = lv_date.
*
*    CLEAR s_budat.
*    s_budat-sign   = 'I'.
*    s_budat-option = 'EQ'.
*    CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
*      EXPORTING
*        i_date = lv_date
*      IMPORTING
*        e_date = s_budat-low.
*    APPEND s_budat.
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form data_get
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM data_get .
  FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat.
  DATA:lv_zday TYPE char8.
  SELECT
    a~matnr,
    b~maktx,
    a~meins
    FROM mara AS a
    LEFT JOIN makt AS b ON a~matnr = b~matnr AND b~spras EQ 1
    WHERE  a~matnr IN  @s_matnr
    INTO CORRESPONDING FIELDS OF TABLE @lt_alv1 .

  SELECT * INTO TABLE @DATA(lt_zppt036) FROM zppt036   WHERE zday >= @s_date-low AND matnr in @s_matnr.

  LOOP AT lt_alv1 INTO ls_alv.

    "给固定列赋值
    ASSIGN COMPONENT 'MATNR' OF STRUCTURE <dyn_wa> TO <dyn_field>.
    IF <dyn_field> IS ASSIGNED.
      <dyn_field> = ls_alv-matnr.
      UNASSIGN <dyn_field>.
    ENDIF.

    ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <dyn_wa> TO <dyn_field>.
    IF <dyn_field> IS ASSIGNED.
      <dyn_field> = ls_alv-maktx.
      UNASSIGN <dyn_field>.
    ENDIF.

    ASSIGN COMPONENT 'MEINS' OF STRUCTURE <dyn_wa> TO <dyn_field>.
    IF <dyn_field> IS ASSIGNED.
      <dyn_field> = ls_alv-meins.
      UNASSIGN <dyn_field>.
    ENDIF.

    LOOP AT lt_zppt036 INTO DATA(ls_zppt036) WHERE matnr EQ ls_alv-matnr.

      READ TABLE it_fieldcat ASSIGNING  <fs_fieldcat> WITH  KEY coltext = ls_zppt036-zday.
      IF sy-subrc = 0.
        "给动态内表当中对应字段名赋值
        ASSIGN COMPONENT <fs_fieldcat>-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.
        IF <dyn_field> IS ASSIGNED.
          <dyn_field> = ls_zppt036-menge.
          UNASSIGN <dyn_field>.
        ENDIF.
      ENDIF.

      CLEAR ls_zppt036.
    ENDLOOP.
    "最后填充数据
    APPEND <dyn_wa> TO <dyn_table>.
    CLEAR:ls_alv,<dyn_wa>.
  ENDLOOP.

  MOVE-CORRESPONDING <dyn_table> TO lt_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_zfs
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_zfs .


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_save
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_save .

  DATA:lt_zppt036 TYPE  TABLE  OF zppt036,
       ls_zppt036 TYPE zppt036.
  DATA:lv_datum TYPE datum.
  DATA:lv_n TYPE char2.
  DATA:lv_field TYPE char20.
  FIELD-SYMBOLS <fs_value> TYPE any.
  LOOP AT lt_alv INTO ls_alv.

    lv_datum = s_date-low.
    DO 90 TIMES.
      CLEAR ls_zppt036.
      ls_zppt036-matnr = ls_alv-matnr.
      ls_zppt036-zday = lv_datum.
      ls_zppt036-maktx = ls_alv-maktx.
      ls_zppt036-meins = ls_alv-meins.
      lv_n = lv_n + 1.
      lv_field = 'ls_alv-zday' && lv_n.  CONDENSE lv_field.
      ASSIGN (lv_field) TO <fs_value>.
      ls_zppt036-menge = <fs_value>.
      lv_datum = lv_datum + 1.
      APPEND ls_zppt036 TO lt_zppt036.
    ENDDO.

    CLEAR :ls_alv,lv_n,lv_field.
  ENDLOOP.

  IF lt_zppt036[] IS NOT INITIAL.
    MODIFY zppt036 FROM TABLE lt_zppt036[].
    COMMIT WORK AND WAIT.
  ENDIF.
ENDFORM.
复制代码
复制代码
*&---------------------------------------------------------------------*
*& Report  ZPPG005
*&---------------------------------------------------------------------*
*& Program Name                    ZPPG005
*& Program Description            : 材料供需平衡表
*& Company                        :  SAP
*& Applicant                      :张瑶
*& Application Date               :2023.05.15
*& Development
*& ABAPER                        :张瑶
*& Finish Date                  :2023.05.15
*&---------------------------------------------------------------------*
*& ZPPG004
*&---------------------------------------------------------------------*
*& Change Record:
*& Date         Developer           ReqNo       Descriptions
*& ==========  ==================  ==========  ========================*
*& 2023.05.15          ZPPG005
*&---------------------------------------------------------------------*
REPORT ztest88888.
TABLES: sscrfields, marc, mara,aufm,aufk,resb,ekpo,ekko,t161t,vbak,vbap,tlsys,kna1,zfit50,zfit51,bkpf,lfa1,but000,acdoca.
TABLES:zppt034,zppt033,zppt036.
DATA: wa_textfield TYPE smp_dyntxt.
TYPES : BEGIN OF ty_input.
          INCLUDE TYPE zppt033.
TYPES :
          zzd   TYPE  char50,
          webaz TYPE marc-webaz,
          zday  TYPE zppt036-zday,
          menge TYPE zppt036-menge,
          zbox  TYPE char1,
          zicon TYPE  char10,
          zmsg  TYPE char200.
TYPES : END OF ty_input.

DATA:lt_alv TYPE  TABLE OF ty_input,
     ls_alv TYPE ty_input.
DATA:lt_sum TYPE  TABLE OF ty_input,
     ls_sum TYPE ty_input.

DATA:lt_alv1 TYPE  TABLE OF ty_input,
     ls_alv1 TYPE ty_input.


DATA:lt_alv_a TYPE  TABLE OF ty_input,
     ls_alv_a TYPE ty_input.

DATA:lt_alv_b TYPE  TABLE OF ty_input,
     ls_alv_b TYPE ty_input.

DATA:name  TYPE vrm_id,
     list  TYPE vrm_values,
     value LIKE LINE OF list.



DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA ctumode LIKE ctu_params-dismode VALUE 'N'.  "执行模式(不显示屏幕)
DATA cupdate LIKE ctu_params-updmode VALUE 'L'.  "更新模式

DATA:lt_alv1000 TYPE  TABLE OF ty_input,
     ls_alv1000 TYPE ty_input.
FIELD-SYMBOLS:<fs> TYPE ty_input.
FIELD-SYMBOLS <fs_value> TYPE any.
DATA: it_fieldcat TYPE lvc_t_fcat,
      wa_layout   TYPE lvc_s_layo.
DATA: wa_fieldcat TYPE lvc_s_fcat.
DATA: fieldstyle TYPE lvc_s_styl.
DATA: functxt       TYPE smp_dyntxt,
      c_icon_red    TYPE icon_d VALUE '@0A@',
      c_icon_green  TYPE icon_d VALUE '@08@',
      c_icon_yellow TYPE icon_d VALUE '@09@'.


*&---------------------------------------------------------------------*
*&      定义宏
*&---------------------------------------------------------------------*
DEFINE  macro_fill_fcat.
  CLEAR wa_fieldcat.
  &1 = &1 + 1.
  wa_fieldcat-col_pos       = &1.
  wa_fieldcat-fieldname     = &2.
  wa_fieldcat-ref_table     = &3.
  wa_fieldcat-ref_field     = &4.   " 内表中数量参照字段
  wa_fieldcat-coltext       = &5.
  APPEND wa_fieldcat TO it_fieldcat.
END-OF-DEFINITION.


SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.

  SELECT-OPTIONS: s_date FOR zppt036-zday NO INTERVALS NO-EXTENSION MODIF ID m1 OBLIGATORY  DEFAULT sy-datum .
  SELECT-OPTIONS: s_werks FOR ekpo-werks  NO INTERVALS NO-EXTENSION MODIF ID m1 OBLIGATORY  DEFAULT '1000'.
  SELECT-OPTIONS: s_mtart FOR mara-mtart.
  SELECT-OPTIONS: s_matnr FOR mara-matnr.
  SELECT-OPTIONS: s_dispo FOR marc-dispo.


*  PARAMETERS: p_zzt  LIKE zsdt017-zzt AS LISTBOX VISIBLE LENGTH 16 DEFAULT '新建' .
SELECTION-SCREEN END OF BLOCK blk1.

*INCLUDE zppg004_class.
*&---------------------------------------------------------------------*
*&      INITIALIZATION.
*&---------------------------------------------------------------------*
INITIALIZATION.

*
*  PERFORM get_date.
*&---------------------------------------------------------------------*
*&      AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  PERFORM frm_init_screen.

*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_zzt.
*  PERFORM set_s_id_listinfo.
*&---------------------------------------------------------------------*
*& 选择屏幕控制
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
**文件名的搜素帮助
*  PERFORM get_file_name.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zpgkmz-low.
*  PERFORM frm_f4_zpur.

*&---------------------------------------------------------------------*
*&      START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_auth_check.
  PERFORM data_get.
  PERFORM frm_init_layout.
  PERFORM frm_init_fieldcat.
  PERFORM frm_display_alv.
*&---------------------------------------------------------------------*
*&      END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_s_id_listinfo .
  name = 'P_ZZT'.


  value-key = '审批'.
*  value-text = '审批'.
  APPEND value TO list.

  value-key = '删除'.
*  value-text = '审批'.
  APPEND value TO list.

  value-key = '新建'.
*  value-text = '新建'.
  APPEND value TO list.

  value-key = '取消'.
*  value-text = '新建'.
  APPEND value TO list.

  value-key = '所有'.
*  value-text = '新建'.
  APPEND value TO list.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = name
      values = list.
ENDFORM.
FORM frm_init_screen .

*  LOOP AT SCREEN.
*    IF rb2 EQ 'X'.
*      IF screen-group1 EQ 'M1'.
*        screen-active = '0'.  "隐藏
*      ELSE.
*        screen-active = '1'.  "显示
*      ENDIF.
*
*    ELSEIF rb1 EQ 'X'.
*      IF screen-group1 EQ 'M2'.
*        screen-active = '0'.
*      ELSE.
*        screen-active = '1'.
*      ENDIF.
*    ENDIF.
*
*    MODIFY SCREEN.
*  ENDLOOP.

ENDFORM.                    " FRM_CHECK_SCREEN
"FRM_INIT_LAYOUT

*&--------------------------------------------------------------------*
*&      Form  frm_display_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_display_alv.
  DATA: gs_grid_settings TYPE lvc_s_glay.
*  SORT it_alv BY vbeln posnr.


  DATA ig_events TYPE slis_t_event WITH HEADER LINE.

  gs_grid_settings-edt_cll_cb = 'X'.

*  ig_events-name = 'CALLER_EXIT'.
*  ig_events-form = 'CALLER_EXIT'.
*  APPEND ig_events.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_grid_settings          = gs_grid_settings
      i_callback_user_command  = 'USER_COMMAND'
      is_layout_lvc            = wa_layout
*     is_variant               = gs_variant
      it_fieldcat_lvc          = it_fieldcat
      it_events                = ig_events[]
      i_save                   = 'A'
    TABLES
      t_outtab                 = lt_alv[]
    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_ALV_OUTPUT

*&---------------------------------------------------------------------*
*&      Form  SET_PF_STATUS
*&---------------------------------------------------------------------*
*       设置标准工具栏按钮,并添加一个打印按钮
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  DATA: rs_extab LIKE LINE OF rt_extab.
*  IF c_b  = 'X'.
  APPEND 'ZPOST' TO rt_extab.
  APPEND 'ZADD' TO rt_extab.
*  ENDIF.


  SET PF-STATUS 'STATUS' EXCLUDING rt_extab.
ENDFORM. "SET_PF_STATUS

*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       用户指令
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                         rs_selfield TYPE slis_selfield.

  DATA:
    ls_layout TYPE lvc_s_layo,
    ls_stable TYPE lvc_s_stbl,
    lv_grid   TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lv_grid.
  CALL METHOD lv_grid->check_changed_data.

  CASE r_ucomm.
    WHEN '&IC1'.
*      READ TABLE lt_alv INTO ls_alv INDEX rs_selfield-tabindex.
*      CASE  rs_selfield-fieldname.
*        WHEN 'BELNR'.
*          SET PARAMETER ID 'BLN' FIELD ls_alv-belnr. " 财务凭证号
*          SET PARAMETER ID 'BUK' FIELD ls_alv-bukrs. " 公司代码
*          SET PARAMETER ID 'GJR' FIELD ls_alv-gjahr. " 年度
*          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*        WHEN 'ZCXPZ'.
*          SET PARAMETER ID 'BLN' FIELD ls_alv1-zcxpz. " 财务凭证号
*          SET PARAMETER ID 'BUK' FIELD ls_alv1-bukrs. " 公司代码
*          SET PARAMETER ID 'GJR' FIELD s_budat-low(4). " 年度
*          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*        WHEN 'ZPGPZCX'.
*          SET PARAMETER ID 'BLN' FIELD ls_alv1-zpgpzcx. " 财务凭证号
*          SET PARAMETER ID 'BUK' FIELD ls_alv1-bukrs. " 公司代码
*          SET PARAMETER ID 'GJR' FIELD s_budat-low(4). " 年度
*          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*        WHEN 'ZCXPZCX'.
*          SET PARAMETER ID 'BLN' FIELD ls_alv1-zcxpzcx. " 财务凭证号
*          SET PARAMETER ID 'BUK' FIELD ls_alv1-bukrs. " 公司代码
*          SET PARAMETER ID 'GJR' FIELD s_budat-low(4). " 年度
*          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
*        WHEN OTHERS.
*          IF c_a  EQ 'X'.
*            PERFORM get_mx_data USING ls_alv1.
*          ENDIF.
*      ENDCASE.
    WHEN 'ZPOST'."
      PERFORM frm_save.
    WHEN 'ZADD'."
      PERFORM frm_zfs.
    WHEN OTHERS.
  ENDCASE.


  CALL METHOD lv_grid->get_frontend_layout
    IMPORTING
      es_layout = ls_layout.
*  ls_layout-cwidth_opt = 'X'.
  CALL METHOD lv_grid->set_frontend_layout
    EXPORTING
      is_layout = ls_layout.
  ls_stable-row = '1'.
  ls_stable-col = '1'.
  CALL METHOD lv_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable.
*  PERFORM frm_refresh_display.
ENDFORM. "FM_USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_download_template .

  DATA: lv_view_name   TYPE dd02v-tabname,
        lt_dba_sellist TYPE TABLE OF vimsellist.


  lv_view_name = 'ZFIT50'.

  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                       = 'S'
*     CORR_NUMBER                  = '          '
*     GENERATE_MAINT_TOOL_IF_MISSING       = ' '
*     SHOW_SELECTION_POPUP         = ' '
      view_name                    = lv_view_name
*     NO_WARNING_FOR_CLIENTINDEP   = ' '
*     RFC_DESTINATION_FOR_UPGRADE  = ' '
*     CLIENT_FOR_UPGRADE           = ' '
*     VARIANT_FOR_SELECTION        = ' '
*     COMPLEX_SELCONDS_USED        = ' '
*     CHECK_DDIC_MAINFLAG          = ' '
*     SUPPRESS_WA_POPUP            = ' '
    TABLES
      dba_sellist                  = lt_dba_sellist
*     EXCL_CUA_FUNCT               =
    EXCEPTIONS
      client_reference             = 1
      foreign_lock                 = 2
      invalid_action               = 3
      no_clientindependent_auth    = 4
      no_database_function         = 5
      no_editor_function           = 6
      no_show_auth                 = 7
      no_tvdir_entry               = 8
      no_upd_auth                  = 9
      only_show_allowed            = 10
      system_failure               = 11
      unknown_field_in_dba_sellist = 12
      view_not_found               = 13
      maintenance_prohibited       = 14
      OTHERS                       = 15.
  IF sy-subrc <> 0.
    " Implement suitable error handling here
  ENDIF.



ENDFORM.                    " FRM_DOWNLOAD_TEMPLATE


*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_download_template1 .

  DATA: lv_view_name   TYPE dd02v-tabname,
        lt_dba_sellist TYPE TABLE OF vimsellist.


  lv_view_name = 'ZFIT51'.

  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                       = 'S'
*     CORR_NUMBER                  = '          '
*     GENERATE_MAINT_TOOL_IF_MISSING       = ' '
*     SHOW_SELECTION_POPUP         = ' '
      view_name                    = lv_view_name
*     NO_WARNING_FOR_CLIENTINDEP   = ' '
*     RFC_DESTINATION_FOR_UPGRADE  = ' '
*     CLIENT_FOR_UPGRADE           = ' '
*     VARIANT_FOR_SELECTION        = ' '
*     COMPLEX_SELCONDS_USED        = ' '
*     CHECK_DDIC_MAINFLAG          = ' '
*     SUPPRESS_WA_POPUP            = ' '
    TABLES
      dba_sellist                  = lt_dba_sellist
*     EXCL_CUA_FUNCT               =
    EXCEPTIONS
      client_reference             = 1
      foreign_lock                 = 2
      invalid_action               = 3
      no_clientindependent_auth    = 4
      no_database_function         = 5
      no_editor_function           = 6
      no_show_auth                 = 7
      no_tvdir_entry               = 8
      no_upd_auth                  = 9
      only_show_allowed            = 10
      system_failure               = 11
      unknown_field_in_dba_sellist = 12
      view_not_found               = 13
      maintenance_prohibited       = 14
      OTHERS                       = 15.
  IF sy-subrc <> 0.
    " Implement suitable error handling here
  ENDIF.



ENDFORM.                    " FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*&      Form  FRM_REFRESH_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_refresh_display .
  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA: stbl TYPE lvc_s_stbl.  "稳定刷新
  stbl-row = 'X'." 基于行的稳定刷新
  stbl-col = 'X'." 基于列稳定刷新

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.
  CALL METHOD lr_grid->check_changed_data.

*  rs_selfield-refresh = 'X'.  "自动刷新,当使用稳定刷新后就不能使用自动刷新了
*  使用排序、过滤器等,定位在当前行、列
  CALL METHOD lr_grid->refresh_table_display
    EXPORTING
      is_stable      = stbl
      i_soft_refresh = 'X'
    EXCEPTIONS
      finished       = 1
      OTHERS         = 2.
ENDFORM.                    " FRM_REFRESH_DISPLAY



*&---------------------------------------------------------------------*
*& Form frm_auth_check
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_auth_check .



*  DATA:
*    lv_datum TYPE sy-datum,
*    ls_datum LIKE LINE OF s_monat1.
*
*  IF s_budat-low IS NOT INITIAL.
*    CLEAR s_monat.
*    s_monat-sign   = 'I'.
*    s_monat-option = 'EQ'.
*    s_monat-low    = s_budat-low+4(2).
*    APPEND s_monat TO s_monat.
*
*    CLEAR s_gjahr.
*    s_gjahr-sign   = 'I'.
*    s_gjahr-option = 'EQ'.
*    s_gjahr-low    = s_budat-low+0(4).
*    APPEND s_gjahr.
*
*  ENDIF.

*  SELECT
*  vkorg,
*  vtweg,
*  spart
**  vkbur,
**  vkgrp
*  INTO TABLE @DATA(lt_vbak) FROM vbak
*  WHERE vkorg IN @s_vkorg[]
*    AND   vtweg IN @s_vtweg[]
*    AND  spart IN   @s_spart[]
*    AND   vbeln IN @s_vbeln[]
**    AND vkbur IN   @s_vkbur[]
**    AND vkgrp IN @s_vkgrp[]
*    .
*  SORT lt_vbak .
*  DELETE ADJACENT DUPLICATES FROM lt_vbak COMPARING ALL FIELDS.
*
*  LOOP AT lt_vbak INTO DATA(ls_vbak).
*  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
*             ID 'BUKRS' FIELD s_bukrs-low.
*  IF sy-subrc NE 0.
*    MESSAGE '权限不足' TYPE 'S' DISPLAY LIKE 'E'.
*    LEAVE LIST-PROCESSING.
*  ENDIF.
*  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_name
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_file_name .
*  DATA: lt_filetable TYPE filetable,
*        lw_filetable TYPE file_table,
*        l_rc         TYPE i.
*  FREE: lt_filetable,
*        l_rc.
*  cl_gui_frontend_services=>file_open_dialog(
*    EXPORTING
*      default_extension       = cl_gui_frontend_services=>filetype_excel
*      file_filter             = cl_gui_frontend_services=>filetype_excel
*    CHANGING
*      file_table              = lt_filetable
*      rc                      = l_rc
*    EXCEPTIONS
*      file_open_dialog_failed = 1
*      cntl_error              = 2
*      error_no_gui            = 3
*      not_supported_by_gui    = 4
*      OTHERS                  = 5 ).
*  READ TABLE lt_filetable INTO lw_filetable INDEX 1.
*  IF sy-subrc EQ 0.
*    p_file = lw_filetable-filename.
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form file_data_input
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM file_data_input .


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_init_layout1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init_layout.
  CLEAR wa_layout.
  wa_layout-box_fname         = 'ZBOX'. "侧边栏
  wa_layout-zebra             = 'X'.      "斑马线
  wa_layout-cwidth_opt        = 'X'.      "自动调整宽度
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_init_fieldcat1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init_fieldcat.
  DATA: l_colpos TYPE lvc_s_fcat-col_pos VALUE 0.

  FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat.

  CLEAR it_fieldcat.

  DATA:lv_datum TYPE datum.
  DATA:lv_n TYPE char2.
  DATA:lv_field TYPE char20.

*  macro_fill_fcat:l_colpos 'ZICON' '' ''  '灯 '.
*  macro_fill_fcat:l_colpos 'ZMSG' '' ''  '消息 '.

*          matnr    TYPE  ekpo-matnr, "物料
  macro_fill_fcat:l_colpos 'MATNR' 'EKPO' 'MATNR'  '物料'.
*          maktx    TYPE makt-maktx, "物料描述
  macro_fill_fcat:l_colpos 'MAKTX' 'MAKT' 'MAKTX'  '物料描述'.

  macro_fill_fcat:l_colpos 'ZZD' '' ''  '字段(按物料号)'.


  lv_datum = s_date-low.
  DO 90 TIMES.
    lv_n = lv_n + 1.
    lv_field = 'ZDAY' && lv_n.  CONDENSE lv_field.
    macro_fill_fcat:l_colpos lv_field 'ZPPT033' 'ZDAY1'  lv_datum.
    lv_datum = lv_datum + 1.
  ENDDO.

  LOOP AT it_fieldcat ASSIGNING <fs_fieldcat>  .
*    IF <fs_fieldcat>-fieldname NE 'KDMAT'.
*      <fs_fieldcat>-no_zero  = 'X'.
*    ENDIF.
*    IF <fs_fieldcat>-fieldname = 'ZPZDH'  OR <fs_fieldcat>-fieldname EQ 'MATNR'
*     OR <fs_fieldcat>-fieldname EQ 'VKORG'     OR <fs_fieldcat>-fieldname EQ 'AUART'   OR <fs_fieldcat>-fieldname EQ 'ZZT'
*      OR <fs_fieldcat>-fieldname EQ 'POSNR'.
**      <fs_fieldcat>-decimals_o  = '0'.
*    ELSE.
*      <fs_fieldcat>-edit = 'X'.
*    ENDIF.
*    IF <fs_fieldcat>-fieldname EQ 'ZJHSL' OR <fs_fieldcat>-fieldname EQ 'ZJHRQ'.
*      <fs_fieldcat>-edit = 'X'.
*    ENDIF.
*

*    IF <fs_fieldcat>-fieldname EQ 'WRBTR' OR <fs_fieldcat>-fieldname EQ 'DMBTR'    OR <fs_fieldcat>-fieldname EQ 'ZWRBTR'
*    OR  <fs_fieldcat>-fieldname EQ 'ZDMBTR' OR <fs_fieldcat>-fieldname EQ 'ZSWRBTR'  OR <fs_fieldcat>-fieldname EQ 'ZSDMBTR'
*    OR <fs_fieldcat>-fieldname EQ 'HSL'   .
*
*      <fs_fieldcat>-edit_mask = '==Z001'.
*      <fs_fieldcat>-qfieldname = 'WAERS'.
*
*    ENDIF.

  ENDLOOP.


ENDFORM.


*&---------------------------------------------------------------------*
*& Form FRM_F4_ZPUR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_f4_zpur .

*  SELECT aufnr FROM aufk INTO   TABLE @DATA(lt_zdeli) .
  SELECT DISTINCT zpgkmz, zpgkmz_txt FROM zfit50  INTO   TABLE @DATA(lt_zdeli) .


*将取到的值通过函数显示在搜索帮助显示框中
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     DDIC_STRUCTURE  = ' '
      retfield        = 'ZPGKMZ'            "这个参数为帮助表中返回到选择屏幕的字段的参数
*     PVALKEY         = ' '
      dynpprog        = sy-repid           "当前程序,不写会有问题
      dynpnr          = sy-dynnr           "当前屏幕,不写会有问题
      dynprofield     = 'S_ZPGKMZ-LOW'       "选择屏幕上需要加F4帮助的字段
*     STEPL           = 0
*     WINDOW_TITLE    =
*     VALUE           = ' '
      value_org       = 'S'                "默认为C但是此处不用S不行
*     MULTIPLE_CHOICE = ' '
*     DISPLAY         = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM   = ' '
*     CALLBACK_METHOD =
*     MARK_TAB        =
*  IMPORTING
*     USER_RESET      =
    TABLES
      value_tab       = lt_zdeli           "F4帮助值的表
*     FIELD_TAB       =
*     RETURN_TAB      =
*     DYNPFLD_MAPPING =
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
*Implement suitable error handling here
  ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*& Form frm_f05_l
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LS_ALV1
*&---------------------------------------------------------------------*
FORM frm_f05_l  CHANGING ls_alv1 TYPE ty_input.
  "BDC消息解析
*  DATA lt_return TYPE TABLE OF bapiret2.
*  DATA:lv_bktxt   TYPE bkpf-bktxt.
*  DATA:lv_dmbtr TYPE  bkpf-bktxt.
*  DATA  lv_zzassacc05 TYPE  kna1-kunnr.
*  IF ls_alv1-kunnr IS NOT INITIAL.
*    lv_zzassacc05 = ls_alv1-kunnr.
*  ENDIF.
*  IF ls_alv1-lifnr IS NOT INITIAL.
*    lv_zzassacc05 = ls_alv1-lifnr.
*  ENDIF.
*
*  CLEAR:lv_dmbtr, lv_bktxt.
*  lv_bktxt =    sy-datum+0(6) && '外币评估'."抬头文本
*  lv_dmbtr = abs( ls_alv1-zcyje ).  CONDENSE lv_dmbtr NO-GAPS.
*
*  CLEAR:bdcdata[],messtab[],lt_return[].
*
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0100'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWKO'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM bdc_field       USING 'BKPF-BLDAT'
*                                s_budat-low.
*  PERFORM bdc_field       USING 'BKPF-BLART'
*                                'M6'.
*  PERFORM bdc_field       USING 'BKPF-BUKRS'
*                                ls_alv1-bukrs.
*  PERFORM bdc_field       USING 'BKPF-BUDAT'
*                                s_budat-low.
*  PERFORM bdc_field       USING 'BKPF-MONAT'
*                                s_budat-low+4(2).
*  PERFORM bdc_field       USING 'BKPF-WAERS'
*                                ls_alv1-waers.
*  PERFORM bdc_field       USING 'BKPF-BKTXT'
*                            lv_bktxt.
*  PERFORM bdc_field       USING 'FS006-DOCID'
*                                '*'.
*  PERFORM bdc_field       USING 'RF05A-NEWBS'
*                                '40'.
*  PERFORM bdc_field       USING 'RF05A-NEWKO'
*                                ls_alv1-zthkm.
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWKO'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM bdc_field       USING 'BSEG-DMBTR'
*                                lv_dmbtr.
**  PERFORM bdc_field       USING 'BSEG-VALUT'
**                                record-valut_011.
*  PERFORM bdc_field       USING 'RF05A-NEWBS'
*                                '50'.
*  PERFORM bdc_field       USING 'RF05A-NEWKO'
*                                ls_alv1-zhdsykm.
**  PERFORM bdc_field       USING 'DKACB-FMORE'
**                                record-fmore_014.
*  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=ENTE'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'COBL-ZZASSACC05'.
*  PERFORM bdc_field       USING 'COBL-ZZASSACC05'
*                                lv_zzassacc05.
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWBS'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=BU'.
*  PERFORM bdc_field       USING 'BSEG-DMBTR'
*                                  lv_dmbtr.
**  PERFORM bdc_field       USING 'BSEG-VALUT'
**                                record-valut_017.
**  PERFORM bdc_field       USING 'RF05A-NEWBS'
**                                record-newbs_018.
**  PERFORM bdc_field       USING 'DKACB-FMORE'
**                                record-fmore_019.
*  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=ENTE'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'COBL-ZZASSACC05'.
*  PERFORM bdc_field       USING 'COBL-ZZASSACC05'
*                                lv_zzassacc05.
*  "调用FB01事务码
*  CALL TRANSACTION 'F-05' USING bdcdata
*                          MODE  ctumode
*                          UPDATE  cupdate
*                          MESSAGES INTO messtab   .
*
*  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
*    TABLES
*      imt_bdcmsgcoll = messtab
*      ext_return     = lt_return.
*  "消息类型: S 成功 E 错误 W 警告 I 信息 A 中断
*  LOOP AT lt_return INTO DATA(ls_return)
*       WHERE type = 'E'
*         OR  type = 'A'.
*    ls_alv1-zmsg  = ls_alv1-zmsg && ls_return-message.
*    EXIT.
*  ENDLOOP.
*  IF sy-subrc  = 0.
**    MESSAGE '凭证创建失败' TYPE 'S'.
*    ls_alv1-zicon  = c_icon_red.
*  ELSE.
*    READ TABLE lt_return  ASSIGNING FIELD-SYMBOL(<lfc_return>) WITH  KEY type = 'S'.
*    ls_alv1-zpgpz  = <lfc_return>-message_v1.
*    ls_alv1-zicon  = c_icon_green.
*    ls_alv1-zmsg  = ls_alv1-zmsg && <lfc_return>-message.
*  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_f05_cyl
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LS_ALV1
*&---------------------------------------------------------------------*
FORM frm_f05_cyl  CHANGING ls_alv1 TYPE ty_input.
*  "BDC消息解析
*  DATA date TYPE sy-datum.
*  DATA lt_return TYPE TABLE OF bapiret2.
*  DATA:lv_bktxt   TYPE bkpf-bktxt.
*  DATA:lv_dmbtr TYPE  bkpf-bktxt.
*  DATA  lv_zzassacc05 TYPE  kna1-kunnr.
*  IF ls_alv1-kunnr IS NOT INITIAL.
*    lv_zzassacc05 = ls_alv1-kunnr.
*  ENDIF.
*  IF ls_alv1-lifnr IS NOT INITIAL.
*    lv_zzassacc05 = ls_alv1-lifnr.
*  ENDIF.
*
*
*  CLEAR:lv_dmbtr, lv_bktxt.
*
*  CALL FUNCTION 'MONTH_PLUS_DETERMINE'
*    EXPORTING
*      months  = 1             "未来1月"
*      olddate = s_budat-low    "输入日期"
*    IMPORTING
*      newdate = date.         "20140501"
*
*  lv_bktxt =    s_budat-low+0(6) && '外币评估冲销'."抬头文本
*  lv_dmbtr = abs( ls_alv1-zcyje ).  CONDENSE lv_dmbtr NO-GAPS.
*
*
*  CLEAR:bdcdata[],messtab[],lt_return[].
*
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0100'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWKO'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM bdc_field       USING 'BKPF-BLDAT'
*                                date.
*  PERFORM bdc_field       USING 'BKPF-BLART'
*                                'M6'.
*  PERFORM bdc_field       USING 'BKPF-BUKRS'
*                                ls_alv1-bukrs.
*  PERFORM bdc_field       USING 'BKPF-BUDAT'
*                                date.
*  PERFORM bdc_field       USING 'BKPF-MONAT'
*                                date+4(2).
*  PERFORM bdc_field       USING 'BKPF-WAERS'
*                                ls_alv1-waers.
*  PERFORM bdc_field       USING 'BKPF-BKTXT'
*                              lv_bktxt.
*
*  PERFORM bdc_field       USING 'FS006-DOCID'
*                                '*'.
*  PERFORM bdc_field       USING 'RF05A-NEWBS'
*                                '40'.
*  PERFORM bdc_field       USING 'RF05A-NEWKO'
*                                ls_alv1-zthkm.
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWKO'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM bdc_field       USING 'BSEG-DMBTR'
*                                lv_dmbtr.
**  PERFORM bdc_field       USING 'BSEG-VALUT'
**                                record-valut_011.
*  PERFORM bdc_field       USING 'RF05A-NEWBS'
*                                '50'.
*  PERFORM bdc_field       USING 'RF05A-NEWKO'
*                                ls_alv1-zhdsykm.
**  PERFORM bdc_field       USING 'DKACB-FMORE'
**                                record-fmore_014.
*  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=ENTE'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'COBL-ZZASSACC05'.
*  PERFORM bdc_field       USING 'COBL-ZZASSACC05'
*                                lv_zzassacc05.
*  PERFORM bdc_dynpro      USING 'SAPMF05A' '0300'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'RF05A-NEWBS'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=BU'.
*  PERFORM bdc_field       USING 'BSEG-DMBTR'
*                                  lv_dmbtr.
**  PERFORM bdc_field       USING 'BSEG-VALUT'
**                                record-valut_017.
**  PERFORM bdc_field       USING 'RF05A-NEWBS'
**                                record-newbs_018.
**  PERFORM bdc_field       USING 'DKACB-FMORE'
**                                record-fmore_019.
*  PERFORM bdc_dynpro      USING 'SAPLKACB' '0002'.
*  PERFORM bdc_field       USING 'BDC_OKCODE'
*                                '=ENTE'.
*  PERFORM bdc_field       USING 'BDC_CURSOR'
*                                'COBL-ZZASSACC05'.
*  PERFORM bdc_field       USING 'COBL-ZZASSACC05'
*                                lv_zzassacc05.
*  "调用FB01事务码
*  CALL TRANSACTION 'F-05' USING bdcdata
*                          MODE  ctumode
*                          UPDATE  cupdate
*                          MESSAGES INTO messtab   .
*
*  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
*    TABLES
*      imt_bdcmsgcoll = messtab
*      ext_return     = lt_return.
*  "消息类型: S 成功 E 错误 W 警告 I 信息 A 中断
*  LOOP AT lt_return INTO DATA(ls_return)
*       WHERE type = 'E'
*         OR  type = 'A'.
*    ls_alv1-zmsg  = ls_alv1-zmsg && ls_return-message.
*    EXIT.
*  ENDLOOP.
*  IF sy-subrc  = 0.
**    MESSAGE '凭证创建失败' TYPE 'S'.
*    ls_alv1-zicon  = c_icon_red.
*  ELSE.
*    READ TABLE lt_return  ASSIGNING FIELD-SYMBOL(<lfc_return>)  WITH  KEY type = 'S'.
*    ls_alv1-zcxpz = <lfc_return>-message_v1.
*    ls_alv1-zicon  = c_icon_green.
*    ls_alv1-zmsg  = ls_alv1-zmsg && <lfc_return>-message.
*  ENDIF.  "BDC消息解析

ENDFORM.

FORM bdc_dynpro  USING  program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0234   text
*      -->P_0235   text
*----------------------------------------------------------------------*
FORM bdc_field  USING   fnam  fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ZFIT52
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_ALV1
*&---------------------------------------------------------------------*
FORM frm_zfit52  USING    ls_alv1 TYPE ty_input..
  DATA:ls_zfit52 TYPE zfit52,
       lt_zfit52 TYPE TABLE OF zfit52.

  CLEAR ls_zfit52.
  MOVE-CORRESPONDING ls_alv1 TO ls_zfit52.
  MODIFY zfit52 FROM ls_zfit52.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_date .
*  IF s_budat-low IS INITIAL .
*    DATA:lv_date TYPE sy-datum.
*
*    CALL FUNCTION 'MONTH_PLUS_DETERMINE'
*      EXPORTING
*        months  = '-1'
*        olddate = sy-datum
*      IMPORTING
*        newdate = lv_date.
*
*    CLEAR s_budat.
*    s_budat-sign   = 'I'.
*    s_budat-option = 'EQ'.
*    CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
*      EXPORTING
*        i_date = lv_date
*      IMPORTING
*        e_date = s_budat-low.
*    APPEND s_budat.
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form data_get
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM data_get .
  DATA:lv_day TYPE datum.
  DATA:lv_count TYPE int4.
  DATA:lv_n TYPE char2.
  DATA:lv_field TYPE char20.
  DATA:lv_menge TYPE zppt033-zday1.
  DATA:lv_field_a TYPE char20.
  DATA:lv_field_b TYPE char20.
  FIELD-SYMBOLS <fs_value> TYPE any.
  FIELD-SYMBOLS <fs_value_a> TYPE any.
  FIELD-SYMBOLS <fs_value_b> TYPE any.
*
  DATA:lv_num TYPE  int4.
  SELECT
a~matnr,
a~zday,
a~menge,
a~maktx,
a~meins,
 b~webaz
  FROM  zppt036 AS a
   INNER  JOIN marc AS b ON a~matnr = b~matnr AND b~werks EQ @s_werks-low
  INNER JOIN mara AS c ON a~matnr = c~matnr
  WHERE  c~matnr in @s_matnr and c~mtart in @s_mtart AND b~dispo in @s_dispo
   INTO   TABLE @DATA(lt_zppt036).

  SELECT DISTINCT
    a~matnr,
    a~maktx,
    a~webaz
   FROM @lt_zppt036 AS a
   INTO CORRESPONDING FIELDS OF TABLE @lt_alv1.

*ZJHRQ ZJHSL
  WITH +data AS ( SELECT DISTINCT matnr  FROM  @lt_alv1 AS zdat )
SELECT
   a~matnr,
   b~zjhrq,
   SUM( b~zjhsl ) AS zjhsl
   FROM +data AS a
   INNER JOIN zppt034 AS b ON a~matnr = b~matnr
   GROUP BY a~matnr,b~zjhrq
   INTO TABLE @DATA(lt_zppt034)  .


  LOOP AT lt_alv1 INTO ls_alv1.


    DO 6 TIMES.
      lv_day = s_date-low.
      lv_num = lv_num + 1.
      CASE lv_num.
        WHEN 1."物料每日需求
          CLEAR ls_alv.
          MOVE-CORRESPONDING ls_alv1 TO ls_alv.
          DO 90  TIMES.
            lv_n = lv_n + 1.
            lv_field = 'ls_alv-zday' && lv_n.  CONDENSE lv_field.
            ASSIGN (lv_field) TO <fs_value>.

            READ TABLE lt_zppt036 INTO DATA(ls_zppt036) WITH  KEY matnr = ls_alv-matnr  zday = lv_day.
            IF sy-subrc EQ 0.
              <fs_value> =  ls_zppt036-menge.
            ENDIF.
            lv_day = lv_day + 1.
            UNASSIGN <fs_value>.

          ENDDO.
          ls_alv-zzd = '物料每日需求'.
          APPEND ls_alv TO lt_alv.
        WHEN 2."库存
          CLEAR ls_alv.
          ls_alv-matnr = ls_alv1-matnr.
          ls_alv-maktx = ls_alv1-maktx.
          ls_alv-zzd = '库存'.

          lv_n = lv_n + 1.
          lv_field = 'ls_alv-zday' && lv_n.  CONDENSE lv_field.
          ASSIGN (lv_field) TO <fs_value>.
          <fs_value> = 1000.
          UNASSIGN <fs_value>.
*          ENDDO.
          APPEND ls_alv TO lt_alv.
        WHEN 3."计划到货数量
          CLEAR ls_alv.
          ls_alv-matnr = ls_alv1-matnr.
          ls_alv-maktx = ls_alv1-maktx.
          ls_alv-zzd = '计划到货数量'.
          DO  90  TIMES.
            lv_n = lv_n + 1.
            lv_field = 'ls_alv-zday' && lv_n.  CONDENSE lv_field.
            ASSIGN (lv_field) TO <fs_value>.
            READ TABLE lt_zppt034 INTO DATA(ls_zppt034) WITH  KEY matnr = ls_alv-matnr  zjhrq = lv_day.
            IF sy-subrc EQ 0.
              <fs_value> =  ls_zppt034-zjhsl.
            ENDIF.
            lv_day = lv_day + 1.
            UNASSIGN <fs_value>.
          ENDDO.
          APPEND ls_alv TO lt_alv.
        WHEN 4."预计入库到非限制数量
          CLEAR ls_alv.
          ls_alv-matnr = ls_alv1-matnr.
          ls_alv-maktx = ls_alv1-maktx.
          ls_alv-zzd = '预计入库到非限制数量'.
          lv_n = ls_alv1-webaz.
          DO  90  TIMES.
            lv_n = lv_n + 1 .
            lv_field = 'ls_alv-zday' && lv_n.  CONDENSE lv_field.
            ASSIGN (lv_field) TO <fs_value>.

            READ TABLE lt_zppt034 INTO ls_zppt034 WITH  KEY matnr = ls_alv-matnr  zjhrq = lv_day.
            IF sy-subrc EQ 0.
              <fs_value> =  ls_zppt034-zjhsl.
            ENDIF.
            lv_day = lv_day + 1.
            UNASSIGN <fs_value>.
          ENDDO.
          APPEND ls_alv TO lt_alv.
        WHEN 5."库存结余
          CLEAR ls_alv.
          ls_alv-matnr = ls_alv1-matnr.
          ls_alv-maktx = ls_alv1-maktx.
          ls_alv-zzd = '库存结余'.
          DO  90  TIMES.
            lv_n = lv_n + 1 .
            lv_field = 'ls_alv-zday' && lv_n.  CONDENSE lv_field.
            ASSIGN (lv_field) TO <fs_value>.
            IF lv_n EQ '1'.
              READ TABLE lt_alv ASSIGNING FIELD-SYMBOL(<fm1>) WITH  KEY  matnr =   ls_alv-matnr zzd = '库存'.
              READ TABLE lt_alv ASSIGNING FIELD-SYMBOL(<fm2>) WITH  KEY  matnr =   ls_alv-matnr zzd = '预计入库到非限制数量'.
              READ TABLE lt_alv ASSIGNING FIELD-SYMBOL(<fm3>) WITH  KEY  matnr =   ls_alv-matnr zzd = '物料每日需求'.
              <fs_value> = <fm1>-zday1 +  <fm2>-zday1 - <fm3>-zday1.
              lv_menge = <fs_value>.
              UNASSIGN:<fm1>,<fm2>,<fm3>.
            ELSE.
              READ TABLE lt_alv INTO ls_alv_a WITH  KEY  matnr =   ls_alv-matnr zzd = '预计入库到非限制数量'.
              READ TABLE lt_alv INTO ls_alv_b WITH  KEY  matnr =   ls_alv-matnr zzd = '物料每日需求'.
              lv_field_a = 'ls_alv_a-zday' && lv_n.  CONDENSE lv_field_a.
              lv_field_b = 'ls_alv_b-zday' && lv_n.  CONDENSE lv_field_b.
              ASSIGN (lv_field_a) TO <fs_value_a>.
              ASSIGN (lv_field_b) TO <fs_value_b>.
              <fs_value> = lv_menge +  <fs_value_a> - <fs_value_b>.
              lv_menge = <fs_value>.
              CLEAR:ls_alv_a,ls_alv_b.
              UNASSIGN:<fs_value_a>,<fs_value_b>.
            ENDIF.
            lv_day = lv_day + 1.
            UNASSIGN <fs_value>.
          ENDDO.
          APPEND ls_alv TO lt_alv.
        WHEN 6."可用天数
          CLEAR ls_alv.
          ls_alv-matnr = ls_alv1-matnr.
          ls_alv-maktx = ls_alv1-maktx.
          ls_alv-zzd = '可用天数'.
          DO  90  TIMES.
            lv_n = lv_n + 1 .
            lv_field = 'ls_alv-zday' && lv_n.  CONDENSE lv_field.
            ASSIGN (lv_field) TO <fs_value>.

            READ TABLE lt_alv INTO ls_alv_a WITH  KEY  matnr =   ls_alv-matnr zzd = '库存结余'.
            READ TABLE lt_alv INTO ls_alv_b WITH  KEY  matnr =   ls_alv-matnr zzd = '物料每日需求'.
            lv_field_a = 'ls_alv_a-zday' && lv_n.  CONDENSE lv_field_a.
            lv_field_b = 'ls_alv_b-zday' && lv_n.  CONDENSE lv_field_b.
            ASSIGN (lv_field_a) TO <fs_value_a>.
            ASSIGN (lv_field_b) TO <fs_value_b>.
            IF <fs_value_b> NE 0.
              <fs_value> = <fs_value_a> / <fs_value_b>.
            ENDIF.
            CLEAR:ls_alv_a,ls_alv_b.
            UNASSIGN:<fs_value_a>,<fs_value_b>.

            lv_day = lv_day + 1.
            UNASSIGN <fs_value>.
          ENDDO.
          APPEND ls_alv TO lt_alv.
      ENDCASE.

      CLEAR:lv_menge, lv_n.
    ENDDO.

    CLEAR:lv_num,lv_n.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_zfs
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_zfs .


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_save
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_save .


ENDFORM.
复制代码

 

posted @   ABAP-武汉  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示