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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)