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.