SELECT SINGLE vs. UP TO 1 ROWS

本文探讨了在数据库操作中使用SELECT SINGLE与SELECT UPTO1ROWS的不同之处。前者适用于通过主键读取记录,而后者则用于没有主键时查找最多一条符合条件的记录。文章还讨论了这两种查询方式的具体应用场景及性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select single is a construct designed to read database records with primary key. In the absence of the primary key, it might end up doing a sequential search,

whereas the select up to 1 rows may assume that there is no primary key supplied and will try to find most suitable index.

The best way to find out is through sql trace or runtime analysis.

Use "select up to 1 rows" only if you are sure that all the records returned will have the same value for the field(s) you are interested in. If not, you will be reading only the first record which matches the criteria, but may be the second or the third record has the value you are looking for.

The System test result showed that the variant Single * takes less time than Up to 1 rows as there is an additional level for COUNT STOP KEY for SELECT ENDSELECT UP TO 1 ROWS.

The 'SELECT SINGLE' statement selects the first row in the database that it finds that fulfils the 'WHERE' clause If this results in multiple records then only the first one will be returned and therefore may not be unique.

Mainly: to read data from

The 'SELECT .... UP TO 1 ROWS' statement is subtly different. The database selects all of the relevant records that are defined by the WHERE clause, applies any aggregate, ordering or grouping functions to them and then returns the first record of the result set.

Mainly: to check if entries exist. 

 

Conclusion:

If the fields you selected are primary key, use SELECT SINGLE. 

If the fields you selected are not primary key, use SELECT ...  UP TO 1 ROWS. 

以下代码哪里定义了查询功能: *&---------------------------------------------------------------------* *& REPORT ZPM_YZ_BPBJLONG3 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT zmal. TABLES:zqm_wlz_yz,makt,mara,zmal,zpm_cs_mal_st. DATA ok_code TYPE sy-ucomm . DATA save_ok TYPE sy-ucomm . CLASS lcl_application DEFINITION DEFERRED . DATA custom_container TYPE REF TO cl_gui_custom_container . DATA gcontainer TYPE REF TO cl_gui_custom_container . DATA tree_control TYPE REF TO cl_gui_simple_tree . DATA grid TYPE REF TO cl_gui_alv_grid . DATA gs_layout TYPE lvc_s_layo. DATA gt_fieldcat TYPE STANDARD TABLE OF lvc_s_fcat . DATA gw_fieldcat LIKE LINE OF gt_fieldcat . DATA node_table LIKE TABLE OF mtreesnode . DATA node1 TYPE mtreesnode . DATA: BEGIN OF st_vbak OCCURS 0, matkl LIKE zqm_wlz_yz-matkl, num1 LIKE zqm_wlz_yz-num1, num2 LIKE zqm_wlz_yz-num2, num3 LIKE zqm_wlz_yz-num3, num(1) , END OF st_vbak. DATA: n1 LIKE zqm_wlz_yz-num1, n2 LIKE zqm_wlz_yz-num2, n3 LIKE zqm_wlz_yz-num3. DATA:t_vbak LIKE st_vbak OCCURS 0 WITH HEADER LINE. DATA:w_vbak LIKE t_vbak OCCURS 0 WITH HEADER LINE. DATA g_application TYPE REF TO lcl_application . **************************************************************************************** *ALV用到的类库 TYPE-POOLS:slis. DATA: wa_alv_filed TYPE slis_fieldcat_alv, "列描述 wa_alv_filedcat TYPE slis_t_fieldcat_alv. "列描述内表,列清单 DATA: BEGIN OF mdezx OCCURS 0. INCLUDE STRUCTURE mdez. DATA: END OF mdezx. DATA: BEGIN OF mdpsx OCCURS 0. INCLUDE STRUCTURE mdps. DATA: END OF mdpsx. DATA: BEGIN OF mdsux OCCURS 0. INCLUDE STRUCTURE mdsu. DATA: END OF mdsux. DATA: BEGIN OF i_zqm OCCURS 0. INCLUDE STRUCTURE zqm_wlz_yz. DATA: END OF i_zqm. DATA:BEGIN OF itabb OCCURS 0, edmxcdm(30) TYPE c, edmxcsm(20) TYPE c, ztext(30) TYPE c, box TYPE char01, END OF itabb. * DATA: BEGIN OF t_zmal OCCURS 0, matnr LIKE mard-matnr, "物料号 tlines LIKE zmal-tlines, "物料描述 mtart LIKE mara-mtart, "物料类型 matkl LIKE mara-matkl, lgort LIKE mard-lgort, " 库存地点 bismt LIKE mara-bismt, "库格 meins LIKE mara-meins, "单位 eisbe LIKE marc-eisbe, "安全库存 labst LIKE mard-labst, "非限制库存 open_po LIKE mdez-mng01, "在途库存 bstmi LIKE marc-bstmi, "最小采购量 bstfe LIKE marc-bstfe, "固定采购量 bdmng LIKE resb-bdmng, labst1 LIKE mard-labst, werks LIKE mard-werks, END OF t_zmal. DATA:BEGIN OF z_mal OCCURS 0, matnr LIKE zpm_yz_mal_st-matnr, lgort LIKE zpm_yz_mal_st-lgort, werks LIKE zpm_yz_mal_st-werks, bismt LIKE zpm_yz_mal_st-bismt, END OF z_mal. DATA:t_zmal1 LIKE t_zmal OCCURS 0 WITH HEADER LINE. DATA t_vbap LIKE STANDARD TABLE OF t_zmal. DATA: v_vbap LIKE LINE OF t_vbap. DATA: zmatnr TYPE zpm_yz_mal-matnr, ztlines TYPE zpm_yz_mal-tlines, zkw TYPE mard-lgort, zkg TYPE zpm_yz_mal_st-bismt. DATA: ztlines1 TYPE zmal-tlines. DATA: ztlines2 TYPE zmal-tlines. DATA: ztlines3 TYPE zmal-tlines. DATA: zkg1 LIKE zpm_yz_mal_st-bismt. DATA: zkg2 LIKE zpm_yz_mal_st-bismt. DATA: zkg3 LIKE zpm_yz_mal_st-bismt. DATA:i1(1),i2(1),i3(1). DATA:fxk01(1). *----------------------------------------------------------------------* * CLASS LCL_APPLICATION DEFINITION *----------------------------------------------------------------------* **----------------------------------------------------------------------* CLASS lcl_application DEFINITION . PUBLIC SECTION . METHODS handle_selection_changed FOR EVENT selection_changed OF cl_gui_simple_tree IMPORTING node_key . ENDCLASS . "LCL_APPLICATION DEFINITION *----------------------------------------------------------------------* * CLASS LCL_APPLICATION IMPLEMENTATION *------------------------------------------ *----------------------------* * *----------------------------------------------------------------------* CLASS lcl_application IMPLEMENTATION . METHOD handle_selection_changed . READ TABLE node_table WITH KEY node_key = node_key INTO node1 . PERFORM get_data_grid USING node_key node1-relatkey node1-n_image. CALL METHOD grid->refresh_table_display. ENDMETHOD . "HANDLE_SELECTION_CHANGED ENDCLASS . "LCL_APPLICATION IMPLEMENTATION * SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-001 . * PARAMETERS P_VKORG TYPE TVKOT-VKORG OBLIGATORY DEFAULT '2030'. * PARAMETERS P_VTWEG TYPE TVTWT-VTWEG OBLIGATORY DEFAULT '11'. * SELECTION-SCREEN END OF BLOCK A . START-OF-SELECTION . PERFORM get_data . CREATE OBJECT g_application. CALL SCREEN 0100 . *----------------------------------------------------------------------* * MODULE STATUS_0100 OUTPUT *----------------------------------------------------------------------* * *------------ *----------------------------------------------------------* MODULE status_0100 OUTPUT . SET PF-STATUS '0100'. IF tree_control IS INITIAL. PERFORM create_tree . ENDIF. ENDMODULE . "STATUS_0100 OUTPUT *----------------------------------------------------------------------* * MODULE USER_COMMAND_0100 INPUT *----------------------------------------------------------------------* * *----------------------------------------------------------------------* MODULE user_command_0100 INPUT . save_ok = ok_code . CLEAR ok_code . CASE save_ok. WHEN 'BACK'. SET SCREEN 0. * CLEAR ITABB. * FREE ITABB. WHEN 'EXIT'. LEAVE PROGRAM. WHEN OTHERS. ENDCASE. ENDMODULE . "USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------**& FORM *CREATE_TREE *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM create_tree . DATA events TYPE cntl_simple_events . DATA event1 TYPE cntl_simple_event . DATA num(1). DATA num1 LIKE zqm_wlz_yz-num1 . DATA num2 LIKE zqm_wlz_yz-num2 . DATA num3 LIKE zqm_wlz_yz-num3 . DATA matkl LIKE zqm_wlz_yz-matkl . DATA l_txt LIKE zqm_wlz_yz-txt1. DATA l_txt1 LIKE zqm_wlz_yz-txt1. DATA l_txt2 LIKE zqm_wlz_yz-txt2 . DATA l_txt3 LIKE zqm_wlz_yz-txt3 . DATA str1(255) . CREATE OBJECT custom_container EXPORTING container_name = 'TREE'. CREATE OBJECT tree_control EXPORTING parent = custom_container node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single. CREATE OBJECT gcontainer EXPORTING container_name = 'GCONTAINER'. CREATE OBJECT grid EXPORTING i_parent = gcontainer. PERFORM frm_write_data. gs_layout-grid_title = '物料显示' . * GS_LAYOUT-CWIDTH_OPT = 'X' . gs_layout-zebra = 'X' . * CONCATENATE P_VKORG P_VTWEG INTO NODE1-NODE_KEY . * NODE1-RELATKEY = P_VKORG . PERFORM get_data_grid USING node1-node_key node1-relatkey node1-n_image . * CALL METHOD grid->set_table_for_first_display EXPORTING is_layout = gs_layout CHANGING it_fieldcatalog = gt_fieldcat it_outtab = t_vbap. LOOP AT t_vbak INTO w_vbak. CLEAR l_txt . CLEAR l_txt1 . CLEAR l_txt2 . CLEAR l_txt3 . l_txt = '物料分类'. *-----ECCUpgradeS4--------AB_ZACK--------20221028--------START * SELECT SINGLE * txt1 * INTO l_txt1 * FROM zqm_wlz_yz * WHERE num1 = w_vbak-num1 . * * SELECT SINGLE * txt2 * INTO l_txt2 * FROM zqm_wlz_yz * WHERE num1 = w_vbak-num1 AND num2 = w_vbak-num2. * SELECT SINGLE * txt3 * INTO l_txt3 * FROM zqm_wlz_yz * WHERE num1 = w_vbak-num1 AND num2 = w_vbak-num2 AND num3 = w_vbak-num3. SELECT txt1 INTO l_txt1 FROM zqm_wlz_yz UP TO 1 ROWS WHERE num1 = w_vbak-num1 ORDER BY PRIMARY KEY.ENDSELECT. SELECT txt2 INTO l_txt2 FROM zqm_wlz_yz UP TO 1 ROWS WHERE num1 = w_vbak-num1 AND num2 = w_vbak-num2 ORDER BY PRIMARY KEY. ENDSELECT. SELECT txt3 INTO l_txt3 FROM zqm_wlz_yz UP TO 1 ROWS WHERE num1 = w_vbak-num1 AND num2 = w_vbak-num2 AND num3 = w_vbak-num3 ORDER BY PRIMARY KEY. ENDSELECT. *-----ECCUpgradeS4--------ABA_ZACK--------20221028--------END "在创建根节点的同时需要创建下级以及次级子节点 IF num NE w_vbak-num . CLEAR node1 . node1-node_key = w_vbak-num . "FIRST LAYER CLEAR node1-relatkey . CLEAR node1-relatship . "SET THE ICON AS FOLDER node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . "CLEAR THE ICON OF THE NODE CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. * NODE1-TEXT = L_TXT1 . node1-text = l_txt . APPEND node1 TO node_table . ************************************************************** CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 INTO node1-node_key . node1-relatkey = w_vbak-num . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num1 l_txt1 INTO node1-text . APPEND node1 TO node_table . ************************************************************************** CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO node1-node_key . CONCATENATE w_vbak-num w_vbak-num1 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num2 l_txt2 INTO node1-text . APPEND node1 TO node_table . ************************************************************************ CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 w_vbak-num3 INTO node1-node_key. CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . node1-n_image = '@5B@' . node1-exp_image = '@5B@' . node1-expander = 'X'. * NODE1-TEXT = W_VBAK-NUM3 . CONCATENATE w_vbak-num3 l_txt3 INTO node1-text . APPEND node1 TO node_table . ENDIF. "在创建次级节点的同时需要创建其字节点 IF ( num = w_vbak-num ) AND ( num1 <> w_vbak-num1 ). CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 INTO node1-node_key . node1-relatkey = w_vbak-num . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num1 l_txt1 INTO node1-text . APPEND node1 TO node_table . ************************************************************************** CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO node1-node_key . CONCATENATE w_vbak-num w_vbak-num1 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num2 l_txt2 INTO node1-text . APPEND node1 TO node_table . ************************************************************************ CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 w_vbak-num3 INTO node1-node_key. CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . node1-n_image = '@5B@' . node1-exp_image = '@5B@' . node1-expander = 'X'. * NODE1-TEXT = W_VBAK-NUM3 . CONCATENATE w_vbak-num3 l_txt3 INTO node1-text . APPEND node1 TO node_table . ENDIF. "在创建次级节点的同时需要创建其字节点 IF ( num = w_vbak-num ) AND ( num1 = w_vbak-num1 ) AND num2 <> w_vbak-num2. CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO node1-node_key . CONCATENATE w_vbak-num w_vbak-num1 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num2 l_txt2 INTO node1-text . APPEND node1 TO node_table . ************************************************************************ CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 w_vbak-num3 INTO node1-node_key. CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . node1-n_image = '@5B@' . node1-exp_image = '@5B@' . node1-expander = 'X'. * NODE1-TEXT = W_VBAK-NUM3 . CONCATENATE w_vbak-num3 l_txt3 INTO node1-text . APPEND node1 TO node_table . ENDIF. IF ( num = w_vbak-num ) AND ( num1 = w_vbak-num1 ) AND num2 = w_vbak-num2 AND num3 <> w_vbak-num3. CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 w_vbak-num3 INTO node1-node_key. CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . node1-n_image = '@5B@' . node1-exp_image = '@5B@' . node1-expander = 'X'. * NODE1-TEXT = W_VBAK-NUM3 . CONCATENATE w_vbak-num3 l_txt3 INTO node1-text . APPEND node1 TO node_table . ENDIF. num = w_vbak-num. num1 = w_vbak-num1 . num2 = w_vbak-num2 . num3 = w_vbak-num3 . matkl = w_vbak-matkl . ENDLOOP. CALL METHOD tree_control->add_nodes EXPORTING table_structure_name = 'MTREESNODE' node_table = node_table EXCEPTIONS error_in_node_table = 1 failed = 2 dp_error = 3 table_structure_name_not_found = 4 OTHERS = 5. * EVENT1-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK . * EVENT1-APPL_EVENT = 'X' . * APPEND EVENT1 TO EVENTS . event1-eventid = 21 . event1-appl_event = 'X' . APPEND event1 TO events . CALL METHOD tree_control->set_registered_events EXPORTING events = events EXCEPTIONS cntl_error = 1 cntl_system_error = 2 illegal_event_combination = 3 OTHERS = 4. SET HANDLER g_application->handle_selection_changed FOR tree_control . ENDFORM. " CREATE_TREE *316 *&---------------------------------------------------------------------* *317 *& FORM GET_DATA *318 *&---------------------------------------------------------------------* *319 * TEXT *320 *----------------------------------------------------------------------* *321 * --> P1 TEXT *322 * <-- P2 TEXT *323 *----------------------------------------------------------------------* FORM get_data . SELECT matkl num1 num2 num3 INTO TABLE t_vbak FROM zqm_wlz_yz . IF sy-subrc = 0. LOOP AT t_vbak. t_vbak-num = '1'. MODIFY t_vbak. ENDLOOP. ENDIF. SORT t_vbak BY num matkl . ENDFORM. " GET_DATA *336 *&---------------------------------------------------------------------* *337 *& FORM GET_DATA_GRID *338 *&---------------------------------------------------------------------* *339 * TEXT *340 *----------------------------------------------------------------------* *341 * -->P_NODEKEY TEXT *342 *----------------------------------------------------------------------* FORM get_data_grid USING p_nodekey p_relatkey p_image. DATA: n1 LIKE zqm_wlz_yz-num1, n2 LIKE zqm_wlz_yz-num2, n3 LIKE zqm_wlz_yz-num3. DATA: l_len1 TYPE i. DATA: l_len2 TYPE i. DATA: l_len3 TYPE i. DATA: l_len11 TYPE i. DATA: l_len22 TYPE i. DATA:l1 LIKE node1-relatkey. DATA:l2 LIKE node1-node_key. DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE. CLEAR:zkg1,zkg2,zkg3,ztlines1,ztlines2,ztlines3. CLEAR: dynpfields, dynpfields[]. dynpfields-fieldname = 'ZKW'. "填入需要读值的字段名 APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'ZKW'. zkw = dynpfields-fieldvalue. "备注 ENDIF. CLEAR: dynpfields, dynpfields[]. dynpfields-fieldname = 'ZTLINES'. "填入需要读值的字段名 APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'ZTLINES'. ztlines = dynpfields-fieldvalue. "备注 ENDIF. IF p_nodekey = '1' AND p_relatkey = ''. p_nodekey = ''. IF zmatnr <> ''. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' "AND MARA~MTART = 'ERSA' "and ( mard~lgort = 'WL01' or mard~lgort = 'MT01') AND mara~matkl <> '' AND mard~matnr = zmatnr. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' * AND MARA~MATKL <> '' AND MARA~MATNR = ZMATNR. ELSE. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) AND mara~matkl <> ''. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. " SELECT MARA~MATNR " MARA~MTART " MARA~BISMT " MARA~MEINS " INTO CORRESPONDING FIELDS OF TABLE T_ZMAL " FROM MARC " INNER JOIN MARA ON MARA~MATNR = MARC~MATNR " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL " WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' " AND MARA~MATKL <> '' . ENDIF. ELSEIF p_relatkey <> ''. l_len11 = strlen( p_relatkey ) . l_len11 = l_len11 - 1. IF l_len11 <= 0. l1 = ''. ELSE. l1 = p_relatkey+1(l_len11). ENDIF. p_relatkey = l1. l_len22 = strlen( p_nodekey ). l_len22 = l_len22 - 1. IF l_len22 <= 0. l2 = ''. ELSE. l2 = p_nodekey+1(l_len22). ENDIF. p_nodekey = l2. ENDIF. IF p_nodekey = '' AND p_relatkey = '' AND p_image = ''. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '' * AND MARA~MATKL <> ''. ELSEIF p_relatkey IS INITIAL AND p_nodekey <> ''. IF zmatnr <> ''. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) " AND ZQM_WLZ_YZ~NUM1 = P_NODEKEY AND mara~matkl <> '' AND mard~matnr = zmatnr. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl num1 = p_nodekey. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' * AND MARA~MATNR = ZMATNR * AND ZQM_WLZ_YZ~NUM1 = P_NODEKEY * AND MARA~MATKL <> ''. ELSE. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) " AND ZQM_WLZ_YZ~NUM1 = P_NODEKEY AND mara~matkl <> '' . LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl num1 = p_nodekey. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * ZQM_WLZ_YZ~NUM1 = P_NODEKEY * AND MARA~MATKL <> ''. ENDIF. ELSE. IF p_image IS INITIAL. l_len1 = strlen( p_nodekey ). l_len2 = strlen( p_relatkey ). l_len3 = l_len1 - l_len2. n1 = p_nodekey+l_len2(l_len3). IF zmatnr <> ''. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) " AND ZQM_WLZ_YZ~NUM1 = P_RELATKEY " AND ZQM_WLZ_YZ~NUM2 = N1 AND mara~matkl <> '' AND mard~matnr = zmatnr. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl num1 = p_relatkey num2 = n1. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * MARA~MATNR = ZMATNR AND * ZQM_WLZ_YZ~NUM1 = P_RELATKEY * AND ZQM_WLZ_YZ~NUM2 = N1 * AND MARA~MATKL <> ''. ELSE. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) * AND ZQM_WLZ_YZ~NUM1 = P_RELATKEY * AND ZQM_WLZ_YZ~NUM2 = N1 AND mara~matkl <> ''. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl num1 = p_relatkey num2 = n1. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * ZQM_WLZ_YZ~NUM1 = P_RELATKEY * AND ZQM_WLZ_YZ~NUM2 = N1 * AND MARA~MATKL <> ''. ENDIF. ELSE. IF zmatnr <> ''. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) " AND ZQM_WLZ_YZ~MATKL = P_NODEKEY AND mara~matkl <> '' AND mard~matnr = zmatnr. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl . IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. IF t_zmal-matkl <> p_nodekey. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * MARA~MATNR = ZMATNR AND * ZQM_WLZ_YZ~MATKL = P_NODEKEY * AND MARA~MATKL <> ''. ELSE. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01') " AND ZQM_WLZ_YZ~MATKL = P_NODEKEY AND mara~matkl <> '' . LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. IF t_zmal-matkl <> p_nodekey. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * ZQM_WLZ_YZ~MATKL = P_NODEKEY * AND MARA~MATKL <> ''. ENDIF. ENDIF. ENDIF. IF zkw <> ''. LOOP AT t_zmal. IF t_zmal-lgort <> zkw. DELETE t_zmal. ENDIF. ENDLOOP. ENDIF. *LOOP AT T_ZMAL. * *SELECT MATNR * LGORT * WERKS * BISMT * INTO CORRESPONDING FIELDS OF TABLE Z_MAL * FROM ZPM_YZ_MAL_ST * WHERE WERKS = '1010' AND MATNR = T_ZMAL-MATNR AND LGORT = T_ZMAL-LGORT. * IF SY-SUBRC = 0. * LOOP AT Z_MAL . * IF T_ZMAL-BISMT = '' . * CONCATENATE '/' Z_MAL-BISMT INTO T_ZMAL-BISMT. * ELSE. * CONCATENATE T_ZMAL-BISMT '/' Z_MAL-BISMT INTO T_ZMAL-BISMT. * ENDIF. * * ENDLOOP. * MODIFY T_ZMAL. * ENDIF. * *ENDLOOP. IF zkg <> ''. LOOP AT t_zmal. SEARCH t_zmal-bismt FOR zkg. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. ENDIF. * IF SY-SUBRC <> 0. * MESSAGE '此物料组没有对应的物料!' TYPE 'E'. * EXIT. * ENDIF. IF ztlines <> ''. SPLIT ztlines AT '*' INTO ztlines1 ztlines2 ztlines3. ENDIF. LOOP AT t_zmal. SELECT SINGLE tlines INTO t_zmal-tlines FROM zmal WHERE matnr = t_zmal-matnr. * AND TLINES IN S_TLINES. * SELECT SINGLE EISBE BSTMI BSTFE * INTO (T_ZMAL-EISBE,T_ZMAL-BSTMI,T_ZMAL-BSTFE) * FROM MARC * WHERE MATNR = T_ZMAL-MATNR * AND WERKS = '7010'. * * SELECT SINGLE LABST * INTO T_ZMAL-LABST * FROM MARD * WHERE MATNR = T_ZMAL-MATNR * AND WERKS = '7010' * AND ( LGORT = 'WL61' OR LGORT = 'MT61' OR LGORT = 'EL61' OR LGORT ='WL65' OR LGORT = 'WL66'). MODIFY t_zmal. ENDLOOP. i1 = 0.i2 = 0.i3 = 0. IF ztlines <> ''. LOOP AT t_zmal. IF ztlines1 <> ''. SEARCH t_zmal-tlines FOR ztlines1. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDIF. IF ztlines2 <> ''. SEARCH t_zmal-tlines FOR ztlines2. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDIF. IF ztlines3 <> ''. SEARCH t_zmal-tlines FOR ztlines3. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDIF. ENDLOOP. ENDIF. CLEAR t_zmal1.REFRESH t_zmal1. *LOOP AT T_ZMAL. *SELECT MATNR BISMT *INTO CORRESPONDING FIELDS OF TABLE Z_MAL *FROM ZPM_YZ_MAL *WHERE MATNR = T_ZMAL-MATNR. *IF SY-SUBRC = 0. *LOOP AT Z_MAL. *MOVE T_ZMAL TO T_ZMAL1. *T_ZMAL1-BISMT = Z_MAL-BISMT. *APPEND T_ZMAL1. *ENDLOOP. *ELSE. *MOVE T_ZMAL TO T_ZMAL1. *APPEND T_ZMAL1. *ENDIF. *ENDLOOP. *CLEAR T_ZMAL.REFRESH T_ZMAL. *LOOP AT T_ZMAL1. *MOVE T_ZMAL1 TO T_ZMAL. *APPEND T_ZMAL. *ENDLOOP. * *IF ZKG <> ''. *SPLIT ZKW AT '*' INTO ZKG1 ZKG2 ZKG3. *ENDIF. *LOOP AT T_ZMAL. *IF ZKW1 <> ''. *SEARCH T_ZMAL-BISMT FOR ZKW1. * IF SY-SUBRC <> 0. * DELETE T_ZMAL. *ENDLOOP.* ENDIF. *ENDIF. *IF ZKW2 <> ''. *SEARCH T_ZMAL-BISMT FOR ZKW2. * IF SY-SUBRC <> 0. * DELETE T_ZMAL. * ENDIF. *ENDIF. *IF ZKW3 <> ''. *SEARCH T_ZMAL-BISMT FOR ZKW3. * IF SY-SUBRC <> 0. * DELETE T_ZMAL. * ENDIF. *ENDIF. LOOP AT t_zmal . * PERFORM GET_MD04_DATA USING T_ZMAL-MATNR T_ZMAL-WERKS. * MOVE-CORRESPONDING ITAB0 TO I_OUT. * LOOP AT MDEZX WHERE PLAAB = '02'. * EXCESS = EXCESS + MDEZX-MNG01. "可用库存 * IF MDEZX-DELB0 = 'STOCK' OR MDEZX-DELKZ = 'QM'. * STOCK = STOCK + MDEZX-MNG01. "STOCK * ENDIF. * IF MDEZX-PLUMI = '-'. "DEMAND * TOTAL_DEMAND = TOTAL_DEMAND + MDEZX-MNG01 * -1. * ELSE. * IF MDEZX-DELKZ = 'LA' "SHIPPING NOTIFICATION * OR MDEZX-DELKZ = 'LE' "NORMAL PO * OR MDEZX-DELKZ = 'BE'. "SA SCHEDULE LINE * OPEN_PO = OPEN_PO + MDEZX-MNG01. "OPEN PO * ENDIF. * ENDIF * PERFORM GET_MD04_DATA USING T_ZMAL-MATNR '7010'. * DATA:OPEN_PO LIKE MDEZ-MNG01. * LOOP AT MDEZX WHERE PLAAB = '02'. * IF MDEZX-DELKZ = 'BA' "NORMAL PO * OR MDEZX-DELKZ = 'BE'. "SA SCHEDULE LINE * OPEN_PO = OPEN_PO + MDEZX-MNG01. "OPEN PO * ENDIF. * ENDLOOP. * MOVE: OPEN_PO TO T_ZMAL-OPEN_PO . * CLEAR: OPEN_PO. SELECT SINGLE labst INTO t_zmal-open_po FROM mard WHERE matnr = t_zmal-matnr AND lgort = t_zmal-bismt AND werks = t_zmal-werks. MODIFY t_zmal. ENDLOOP. DATA:zbismt LIKE zpm_cs_mal_st-bismt. LOOP AT t_zmal . CLEAR:zbismt. *-----ECCUpgradeS4--------AB_ZACK--------20221028--------START * SELECT SINGLE bismt INTO zbismt FROM zpm_cs_mal_st WHERE matnr = t_zmal-matnr . SELECT bismt INTO zbismt FROM zpm_cs_mal_st UP TO 1 ROWS WHERE matnr = t_zmal-matnr ORDER BY PRIMARY KEY.ENDSELECT. *-----ECCUpgradeS4--------ABA_ZACK--------20221028--------END IF sy-subrc = 0 . t_zmal-bismt = zbismt. MODIFY t_zmal. ENDIF. ENDLOOP. PERFORM wlc_labst."2020.6.18 可用库存修改(去除预留) PERFORM wlc_eisbe."2021.3.25 安全库存筛选 REFRESH t_vbap. LOOP AT t_zmal . APPEND t_zmal TO t_vbap. ENDLOOP. * PERFORM FRM_WRITE_DATA. ENDFORM. " GET_DATA_GRID FORM frm_write_data. CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'MATNR' . gw_fieldcat-scrtext_l = '物料号' . gw_fieldcat-outputlen = 18. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'MEINS' . gw_fieldcat-scrtext_l = '单位' . gw_fieldcat-outputlen = 4. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'TLINES' . gw_fieldcat-scrtext_l = '字段长文本' . gw_fieldcat-outputlen = 50. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'LGORT' . gw_fieldcat-scrtext_l = '库位' . gw_fieldcat-outputlen = 5. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'BISMT' . gw_fieldcat-scrtext_l = '库格' . gw_fieldcat-outputlen = 10. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'MTART' . gw_fieldcat-scrtext_l = '物料类型' . gw_fieldcat-outputlen = 8. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'LABST' . gw_fieldcat-scrtext_l = '库存余量' . gw_fieldcat-outputlen = 8. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'BDMNG' . gw_fieldcat-scrtext_l = '预留数量' . gw_fieldcat-outputlen = 8. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'LABST1' . gw_fieldcat-scrtext_l = '实际可用库存' . gw_fieldcat-outputlen = 10. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'EISBE' . gw_fieldcat-scrtext_l = '安全库存' . gw_fieldcat-outputlen = 8. APPEND gw_fieldcat TO gt_fieldcat . * CLEAR GW_FIELDCAT . * GW_FIELDCAT-FIELDNAME = 'OPEN_PO' . * GW_FIELDCAT-SCRTEXT_L = '在途库存' . * GW_FIELDCAT-OUTPUTLEN = 8. * APPEND GW_FIELDCAT TO GT_FIELDCAT . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'BSTMI' . gw_fieldcat-scrtext_l = '最小采购量' . gw_fieldcat-outputlen = 10. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'BSTFE' . gw_fieldcat-scrtext_l = '固定采购量' . gw_fieldcat-outputlen = 10. APPEND gw_fieldcat TO gt_fieldcat . * **定义列信息 *WA_ALV_FILED-COL_POS = 10. *WA_ALV_FILED-FIELDNAME = 'BSTFE'. " 对应的内表中的字段名称 *WA_ALV_FILED-SELTEXT_M = '固定采购量'. "ALV中显示的标题 *WA_ALV_FILED-OUTPUTLEN = 10. " 列的显示宽度,可以不设置 *APPEND WA_ALV_FILED TO WA_ALV_FILEDCAT. *CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' * EXPORTING * IT_FIELDCAT = WA_ALV_FILEDCAT * TABLES * T_OUTTAB = T_ZMAL. ENDFORM. FORM get_md04_data USING p_matnr p_werks. CLEAR: mdpsx,mdezx,mdsux. CLEAR: mdpsx[],mdezx[],mdsux[]. CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API' EXPORTING matnr = p_matnr werks = p_werks TABLES mdpsx = mdpsx mdezx = mdezx mdsux = mdsux EXCEPTIONS material_plant_not_found = 1 plant_not_found = 2. ENDFORM. " GET_MD04_DATA *&---------------------------------------------------------------------* *& MODULE ZMATNR INPUT *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* MODULE zmatnr INPUT. DATA: BEGIN OF i_mara OCCURS 0, *-----ECCUpgradeS4--------AB_ZACK--------20221027--------START * matnr type char22, matnr TYPE matnr, *-----ECCUpgradeS4--------AB_ZACK--------20221027--------END END OF i_mara. SELECT mara~matnr INTO CORRESPONDING FIELDS OF TABLE i_mara FROM marc INNER JOIN mara ON mara~matnr = marc~matnr WHERE marc~werks = '7010'. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'MATNR' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'ZMATNR' value_org = 'S' TABLES value_tab = i_mara EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. ENDMODULE. " ZMATNR INPUT MODULE zkw INPUT. DATA: BEGIN OF i_zkw OCCURS 0, zkw TYPE char6, lgobe TYPE char16, END OF i_zkw. CLEAR i_zkw.REFRESH i_zkw. i_zkw-zkw = 'WL61'. APPEND i_zkw. i_zkw-zkw = 'MT61'. APPEND i_zkw. i_zkw-zkw = 'EL61'. APPEND i_zkw. i_zkw-zkw = 'WL65'. APPEND i_zkw. i_zkw-zkw = 'WL66'. APPEND i_zkw. LOOP AT i_zkw. SELECT SINGLE lgobe INTO i_zkw-lgobe FROM t001l WHERE werks = '7010' AND lgort = i_zkw-zkw. MODIFY i_zkw. ENDLOOP. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'ZKW' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'ZKW' value_org = 'S' TABLES value_tab = i_zkw EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. ENDMODULE. " ZMATNR INPUT MODULE zkg INPUT. DATA: BEGIN OF i_zkg OCCURS 0, bismt TYPE char50, END OF i_zkg. DATA:zkw1(6). DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE. CLEAR: dynpfields, dynpfields[],zkw1.CLEAR i_zkg.REFRESH i_zkg. dynpfields-fieldname = 'ZKW'. "填入需要读值的字段名 APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'ZKW'. zkw1 = dynpfields-fieldvalue. "备注 ENDIF. IF zkw1 <> ''. SELECT bismt INTO CORRESPONDING FIELDS OF TABLE i_zkg FROM zpm_yz_mal_st WHERE werks = '7010' AND lgort = zkw1. ELSE. SELECT bismt INTO CORRESPONDING FIELDS OF TABLE i_zkg FROM zpm_yz_mal_st WHERE werks = '7010'. ENDIF. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'BISMT' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'ZKG' value_org = 'S' TABLES value_tab = i_zkg EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. ENDMODULE. " ZMATNR INPUT *&---------------------------------------------------------------------* *& Form WLC_LABST *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM wlc_labst . DATA:bdmng LIKE resb-bdmng, enmng LIKE resb-enmng. DATA:shkzg LIKE resb-shkzg. LOOP AT t_zmal. SELECT bdmng enmng shkzg INTO ( bdmng,enmng,shkzg ) FROM resb WHERE xloek = '' AND kzear = '' AND matnr = t_zmal-matnr AND werks = t_zmal-werks AND lgort = t_zmal-lgort. IF shkzg = 'H'. t_zmal-bdmng = t_zmal-bdmng + bdmng - enmng. ELSE. t_zmal-bdmng = t_zmal-bdmng - bdmng + enmng. ENDIF. CLEAR:bdmng,enmng,shkzg. ENDSELECT. t_zmal-labst1 = t_zmal-labst - t_zmal-bdmng. MODIFY t_zmal. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form WLC_EISBE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM wlc_eisbe . IF fxk01 <> ''. LOOP AT t_zmal. IF t_zmal-labst1 >= t_zmal-eisbe. DELETE t_zmal. ENDIF. ENDLOOP. ENDIF. ENDFORM.
最新发布
08-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值