MM41/MM42/MM43零售物料主数据BAPI创建示例(WRF_MATERIAL_MAINTAINDATA_RT)
生活随笔
收集整理的這篇文章主要介紹了
MM41/MM42/MM43零售物料主数据BAPI创建示例(WRF_MATERIAL_MAINTAINDATA_RT)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 前言
- ZALSM_EXCEL_TO_INTERNAL_TABLE 函數實現方法參考文章:讀取EXCEL數據到SAP函數重新封裝為ZALSM_EXCEL_TO_INTERNAL_TABLE(解決單元格至多上傳50字符 單次至多上傳9999行 只能讀取單個SHEET)
- 相對于 BAPI_MATERIAL_MAINTAINDATA_RT WRF_MATERIAL_MAINTAINDATA_RT 可以實現更多的物料主數據的導入
- 供應商層級的GTIN(條碼導入)
- 門店數據的列表執行清單(Execute Listing)
- 采購信息記錄PIR的導入(包括貨源清單)
- 供應商層級的GTIN(條碼導入)
- BOM組件信息等等
2. 實現
-
導入模板
- 基本數據
- 附加數據
-
代碼
TYPE-POOLS: truxs. TABLES: ztmm_sfzs,sscrfields. *----------------------------------------------------------------------* * CLASS lcl_events DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_events DEFINITION.PUBLIC SECTION.METHODS: on_user_command "定義設置SALV on_user_command屬性的方法FOR EVENT added_function OF cl_salv_events_tableIMPORTING e_salv_function.METHODS:on_double_click FOR EVENT double_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. "lcl_events DEFINITION*----------------------------------------------------------------------* * CLASS lcl_events IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_events IMPLEMENTATION.METHOD on_user_command.PERFORM frm_on_user_command USING e_salv_function.ENDMETHOD. "on_user_commandMETHOD on_double_click.PERFORM frm_double_click USING row column.ENDMETHOD. "on_user_command ENDCLASS. "lcl_events IMPLEMENTATION*----------------------------------------------------------------------* * CLASS lcl_excel_uploader DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_excel_uploader DEFINITION.PUBLIC SECTION.DATA: header_rows_count TYPE i.DATA: max_rows TYPE i.DATA: filename TYPE localfile.DATA: sheet_name TYPE alsmex_tabline-value.METHODS:constructor.METHODS:upload CHANGING ct_data TYPE ANY TABLE.PRIVATE SECTION.DATA: lv_tot_components TYPE i.METHODS:do_uploadIMPORTINGiv_begin TYPE iiv_end TYPE iEXPORTINGrv_empty TYPE flagCHANGINGct_data TYPE STANDARD TABLE.ENDCLASS. "lcl_excel_uploader DEFINITION*----------------------------------------------------------------------* * CLASS lcl_excel_uploader IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------*CLASS lcl_excel_uploader IMPLEMENTATION.METHOD constructor.max_rows = 9999.ENDMETHOD. "constructorMETHOD upload.DATA: lo_struct TYPE REF TO cl_abap_structdescr,lo_table TYPE REF TO cl_abap_tabledescr,lt_comp TYPE cl_abap_structdescr=>component_table.lo_table ?= cl_abap_structdescr=>describe_by_data( ct_data ).lo_struct ?= lo_table->get_table_line_type( ).lt_comp = lo_struct->get_components( ). *lv_tot_components = lines( lt_comp ). *DATA: lv_empty TYPE flag,lv_begin TYPE i,lv_end TYPE i. *lv_begin = header_rows_count + 1.lv_end = max_rows.WHILE lv_empty IS INITIAL.do_upload(EXPORTINGiv_begin = lv_beginiv_end = lv_endIMPORTINGrv_empty = lv_emptyCHANGINGct_data = ct_data).lv_begin = lv_end + 1.lv_end = lv_begin + max_rows.ENDWHILE.ENDMETHOD. "upload *METHOD do_upload.DATA: li_exceldata TYPE STANDARD TABLE OF zalsmex_tabline.DATA: ls_exceldata LIKE LINE OF li_exceldata.DATA: lv_tot_rows TYPE i.DATA: lv_packet TYPE i.FIELD-SYMBOLS: <struc> TYPE any,<field> TYPE any.* Upload this packetCALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename = filenamei_begin_col = 1i_begin_row = iv_begini_end_col = lv_tot_componentsi_end_row = iv_endi_sheet_name = sheet_nameTABLESintern = li_exceldataEXCEPTIONSinconsistent_parameters = 1upload_ole = 2OTHERS = 3. * something wrong, exitIF sy-subrc NE 0.MESSAGE '導入文件失敗,請檢查文件是否存在未被鎖定!' TYPE 'S' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.rv_empty = 'X'.ENDIF.* No rows uploaded, exitIF li_exceldata IS INITIAL AND sheet_name = '基本-物料主數據'.MESSAGE '模板為空,請檢查模板!' TYPE 'S' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.rv_empty = 'X'.ENDIF.* Move from Row, Col to Flat StructureLOOP AT li_exceldata INTO ls_exceldata." Append new rowAT NEW row.APPEND INITIAL LINE TO ct_data ASSIGNING <struc>.ENDAT." component and its valueASSIGN COMPONENT ls_exceldata-col OF STRUCTURE <struc> TO <field>.IF sy-subrc EQ 0.<field> = ls_exceldata-value.ENDIF." add the row countAT END OF row.IF <struc> IS NOT INITIAL.lv_tot_rows = lv_tot_rows + 1.ENDIF.ENDAT.ENDLOOP.* packet has more rows than uploaded rows, * no more packet left. Thus exitlv_packet = iv_end - iv_begin.IF lv_tot_rows LT lv_packet.rv_empty = 'X'.ENDIF.ENDMETHOD. "do_upload ENDCLASS. "lcl_excel_uploader IMPLEMENTATIONTYPES: BEGIN OF ty_mian_upload,zsort TYPE string, "編碼matnr TYPE string, "物料編號maktx TYPE string, "物料描述mtart TYPE string, "商品類型matkl TYPE string, "物料組attyp TYPE string, "商品類別zconv_unit TYPE string, "是否單位轉換meins TYPE string, "基本單位umrez TYPE string, "比值bstme TYPE string, "采購單位zconv_cd TYPE string, "是否列出XXzconv_xm TYPE string, "是否列出XXzconv_fz TYPE string, "是否列出XXmhdhb TYPE string, "總貨架壽命zconv_deli TYPE string, "是否配貨單位(用于標識現裱 /現烤)sobsl TYPE string, "特殊采購類bklas TYPE string, "評估類stprs TYPE string, "標準價END OF ty_mian_upload.TYPES: BEGIN OF ty_pur_upload,zsort TYPE string, "編碼lifnr TYPE string, "供應商werks TYPE string, "工廠mwskz TYPE string, "稅代碼netpr TYPE string, "凈價ean11 TYPE string, "GTINEND OF ty_pur_upload.TYPES: BEGIN OF ty_logistics_alv,zsort TYPE string, "編碼werks TYPE marc-werks, "工廠dismm TYPE marc-dismm, "RP類型disls TYPE marc-disls, "批量大小bstrf TYPE marc-bstrf, "舍入值dispo TYPE marc-dispo, "存貨計劃員/RP控制器xchpf TYPE marc-xchpf, "批次管理lgfsb TYPE marc-lgfsb, "庫存地點/外部采購倉儲地點zmein TYPE marc-zmein, "是否配貨單位(用于標識現裱 /現烤)beskz TYPE marc-beskz, "采購類型sobsl TYPE marc-sobsl, "特殊采購類rgekz TYPE marc-rgekz, "反沖lgpro TYPE marc-lgpro, "生產倉儲地點webaz TYPE marc-webaz, "收貨處理時間fhori TYPE marc-fhori, "計劃邊際碼strgr TYPE marc-strgr, "策略組vrmod TYPE marc-vrmod, "消耗模式vint1 TYPE marc-vint1, "向前消耗期間vint2 TYPE marc-vint2, "逆向消耗期間mtvfp TYPE marc-mtvfp, "可用性檢查sbdkz TYPE marc-sbdkz, "獨立/集中fevor TYPE marc-fevor, "生產管理員sfcpf TYPE marc-sfcpf, "生產計劃參數文件frtme TYPE marc-frtme, "生產單位uneto TYPE marc-uneto, "不足交貨允差ueeto TYPE marc-ueeto, "過度交貨允差END OF ty_logistics_alv.TYPES: BEGIN OF ty_main_alv,icon TYPE char4, "指示text TYPE string, "提示文本zsort TYPE char30, "編碼matnr TYPE mara-matnr, "物料編號mtart TYPE mara-mtart, "商品類型matkl TYPE mara-matkl, "物料組attyp TYPE mara-attyp, "商品類別zconv_unit TYPE char1, "是否單位轉換maktx TYPE makt-maktx, "物料描述meins TYPE mara-meins, "基本單位umrez TYPE marm-umrez, "比值bstme TYPE mara-bstme, "采購單位taklv TYPE mara-taklv, "稅收分類mhdrz TYPE mara-mhdrz, "剩余貨架壽命mhdhb TYPE mara-mhdhb, "總貨架壽命zconv_cd TYPE char1, "是否列出XXzconv_xm TYPE char1, "是否列出XXzconv_fz TYPE char1, "是否列出XXmtpos TYPE mvke-mtpos, "項目類別組kondm TYPE mvke-kondm, "物料定價組ktgrm TYPE mvke-ktgrm, "科目設置組lstfl TYPE mvke-lstfl, "列表-存儲lstvz TYPE mvke-lstvz, "列表-分銷中心zconv_deli TYPE char1, "是否配貨單位(用于標識現裱 /現烤)sobsl TYPE marc-sobsl, "特殊采購類bklas TYPE mbew-bklas, "評估類peinh TYPE mbew-peinh, "價格單位stprs TYPE mbew-stprs, "標準價zconv_pur TYPE char1, "是否擴充采購組織z_conv_sales TYPE char200,"擴充信息顯示 vkorg TYPE mvke-vkorg, "銷售組織 vtweg TYPE mvke-vtweg, "分銷渠道END OF ty_main_alv.TYPES: BEGIN OF ty_pur_alv,zsort TYPE char30, "編碼lifnr TYPE eina-lifnr, "供應商ekorg TYPE eine-ekorg, "采購組織werks TYPE eine-werks, "工廠ekgrp TYPE eine-ekgrp, "采購組mwskz TYPE eine-mwskz, "稅代碼netpr TYPE eine-netpr, "凈價waers TYPE eine-waers, " 貨幣碼peinh TYPE eine-peinh, " 價格單位bprme TYPE eine-bprme, "訂單價格單位(采購)ean11 TYPE mean-ean11, "GTINhpean TYPE mean-hpean, "主 GTINlartn TYPE mlea-lartn, "是否分配GTIN到當前供應商lfean TYPE mlea-lfean, "供應商的主GTINnumtp TYPE numtp, "GTIN類型END OF ty_pur_alv.DATA: go_alv TYPE REF TO cl_salv_table.TYPES: ty_main_t TYPE TABLE OF ty_main_alv WITH KEY zsort,ty_pur_t TYPE TABLE OF ty_pur_alv WITH KEY zsort.DATA: gt_outmain TYPE ty_main_t,gt_outpur TYPE ty_pur_t,gt_logistics_alv TYPE TABLE OF ty_logistics_alv.DATA: gs_text TYPE smp_dyntxt.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE l_title1. PARAMETERS : p_file TYPE string OBLIGATORY MODIF ID m1. SELECTION-SCREEN END OF BLOCK b1.SELECTION-SCREEN FUNCTION KEY 1.INITIALIZATION.PERFORM frm_init_funckey.p_file = 'C:\' && text-t01 && '.XLS'.l_title1 = '選擇文件'.AT SELECTION-SCREEN OUTPUT.AT SELECTION-SCREEN.IF sscrfields-ucomm = 'FC01'.PERFORM frm_download_template.ENDIF.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.PERFORM frm_f4_request.START-OF-SELECTION.PERFORM frm_read_excel.END-OF-SELECTION.PERFORM frm_show_alv.*&---------------------------------------------------------------------* *& Form FRM_F4_REQUEST *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_f4_request .DATA: lv_rc TYPE i.DATA: lt_file_table TYPE filetable,wa_file_table TYPE file_table.CALL METHOD cl_gui_frontend_services=>file_open_dialogEXPORTINGwindow_title = '打開文件'CHANGINGfile_table = lt_file_tablerc = lv_rc.IF sy-subrc = 0.READ TABLE lt_file_table INTO wa_file_table INDEX 1.p_file = wa_file_table-filename.ENDIF. ENDFORM. " FRM_F4_REQUEST *&---------------------------------------------------------------------* *& Form FRM_READ_EXCEL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_read_excel.DATA: lt_main_upload TYPE TABLE OF ty_mian_upload,wa_main_upload TYPE ty_mian_upload,lt_pur_upload TYPE TABLE OF ty_pur_upload,wa_pur_upload TYPE ty_pur_upload.DATA: l_main_comp TYPE i,l_pur_comp TYPE i.DATA: lo_struct TYPE REF TO cl_abap_structdescr,lo_table TYPE REF TO cl_abap_tabledescr,lt_comp TYPE cl_abap_structdescr=>component_table.DATA: lo_uploader TYPE REF TO lcl_excel_uploader.TYPES: BEGIN OF ty_logrt,lgort TYPE t001l-lgort,END OF ty_logrt.DATA: lt_t023 TYPE TABLE OF t023, "物料組lt_t006 TYPE TABLE OF t006, "單位lt_t001l TYPE TABLE OF ty_logrt, "庫存地點lt_lfa1 TYPE TABLE OF lfa1, "供應商lt_kna1 TYPE TABLE OF kna1. "客戶DATA: wa_main_alv TYPE ty_main_alv,wa_outpur TYPE ty_pur_alv.DATA: l_continue_flag TYPE string.DATA: lt_ean_type TYPE TABLE OF typeinterv,wa_ean_type TYPE typeinterv.DATA: l_matnr TYPE mara-matnr."get components numbers(RTTS)lo_table ?= cl_abap_structdescr=>describe_by_data( lt_main_upload ). "Mainlo_struct ?= lo_table->get_table_line_type( ).lt_comp = lo_struct->get_components( ).l_main_comp = lines( lt_comp ).lo_table ?= cl_abap_structdescr=>describe_by_data( lt_pur_upload ). "Purchaselo_struct ?= lo_table->get_table_line_type( ).lt_comp = lo_struct->get_components( ).l_pur_comp = lines( lt_comp )."read excel dataCREATE OBJECT lo_uploader.lo_uploader->max_rows = 1000. "設置讀取最大行,默認9999lo_uploader->filename = p_file.lo_uploader->header_rows_count = 3."Mainlo_uploader->sheet_name = '基本-物料主數據'.lo_uploader->upload( CHANGING ct_data = lt_main_upload ).IF sy-subrc NE 0.MESSAGE '讀取數據失敗,請檢查模板!' TYPE 'E'.ENDIF."Purchaselo_uploader->sheet_name = '附加-采購視圖數據'.lo_uploader->upload( CHANGING ct_data = lt_pur_upload ).IF sy-subrc NE 0.MESSAGE '讀取數據失敗,請檢查模板!' TYPE 'E'.ENDIF.SORT lt_main_upload BY zsort ASCENDING.SORT lt_pur_upload BY zsort lifnr ASCENDING ean11 DESCENDING."loading check dataSELECT * FROM t023 INTO TABLE lt_t023 ORDER BY matkl ASCENDING.SELECT * FROM t006 INTO TABLE lt_t006 ORDER BY msehi ASCENDING.SELECT DISTINCT lgort FROM t001l INTO TABLE lt_t001l ORDER BY lgort ASCENDING.SELECT * FROM lfa1 INTO TABLE lt_lfa1 ORDER BY lifnr ASCENDING.SELECT * FROM kna1 INTO TABLE lt_kna1 ORDER BY kunnr ASCENDING."處理導入的數據并且賦默認值LOOP AT lt_main_upload INTO wa_main_upload.CLEAR: wa_main_alv."condensed all fieldPERFORM frm_condensed_allfield USING l_main_comp CHANGING wa_main_upload."檢查序列碼IF strlen( wa_main_upload-zsort ) NE 5 OR wa_main_upload-zsort+0(1) NE 'A'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '排序編碼不符合規范!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSE.wa_main_alv-zsort = wa_main_upload-zsort.ENDIF."檢查商品類型IF wa_main_upload-mtart NE 'Z001' AND wa_main_upload-mtart NE 'Z002' AND wa_main_upload-mtart NE 'Z003' ANDwa_main_upload-mtart NE 'Z005' AND wa_main_upload-mtart NE 'Z007' AND wa_main_upload-mtart NE 'Z008'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '商品類型僅允許輸入Z001/Z002/Z003/Z005/Z007/Z008!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSE.wa_main_alv-mtart = wa_main_upload-mtart.ENDIF."檢查物料編碼CASE wa_main_alv-mtart.WHEN 'Z001' OR 'Z002'. "Z001/Z002WHEN OTHERS. "Z003/Z005/Z007/Z008IF wa_main_upload-matnr IS INITIAL.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料編碼必輸!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.ENDCASE.wa_main_alv-matnr = wa_main_upload-matnr.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = wa_main_alv-matnrIMPORTINGoutput = wa_main_alv-matnr."檢查物料組READ TABLE lt_t023 TRANSPORTING NO FIELDS WITH KEY matkl = wa_main_upload-matkl BINARY SEARCH.IF sy-subrc = 0.wa_main_alv-matkl = wa_main_upload-matkl.ELSE.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料組在SAP中不存在!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.CASE wa_main_alv-mtart.WHEN 'Z001'.IF wa_main_upload-matkl+0(1) NE '1'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料組只允許1*!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.WHEN 'Z002'.IF wa_main_upload-matkl+0(1) NE '2'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料組只允許2*!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.WHEN 'Z003'.IF wa_main_upload-matkl+0(1) NE '4'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料組只允許4*!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.WHEN 'Z005'.IF wa_main_upload-matkl+0(1) NE '7'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料組只允許5*!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.WHEN 'Z007'.IF wa_main_upload-matkl+0(1) NE '3'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料組只允許7*!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.WHEN 'Z008'.IF wa_main_upload-matkl+0(1) NE '6'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料組只允許6*!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.ENDCASE."檢查商品類別IF wa_main_upload-attyp NE '00' AND wa_main_upload-attyp NE '10'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '商品類別僅允許輸入00/10!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSE.wa_main_alv-attyp = wa_main_upload-attyp.ENDIF."檢查是否轉換單位IF wa_main_upload-zconv_unit IS NOT INITIAL AND wa_main_upload-zconv_unit NE 'X'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否單位轉換僅允許輸入空或X!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSEIF wa_main_upload-zconv_unit IS NOT INITIAL.wa_main_alv-zconv_unit = wa_main_upload-zconv_unit.ENDIF."物料描述IF wa_main_upload-maktx IS INITIAL.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '物料描述必輸!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSE.wa_main_alv-maktx = wa_main_upload-maktx.ENDIF."基本單位READ TABLE lt_t006 TRANSPORTING NO FIELDS WITH KEY msehi = wa_main_upload-meins BINARY SEARCH.IF sy-subrc NE 0.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '基本單位在SPA中不存在!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSE.wa_main_alv-meins = wa_main_upload-meins.ENDIF."比值 & 采購單位IF wa_main_alv-zconv_unit = 'X'.IF wa_main_upload-umrez IS INITIAL OR wa_main_upload-bstme IS INITIAL.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '比值/采購單位必輸!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.IF zcl_common_tools=>check_valid_number( wa_main_upload-umrez ) = abap_false.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '比值只能輸入數字!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.READ TABLE lt_t006 TRANSPORTING NO FIELDS WITH KEY msehi = wa_main_upload-bstme BINARY SEARCH.IF sy-subrc NE 0.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '采購單位在SPA中不存在!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.wa_main_alv-umrez = wa_main_upload-umrez.wa_main_alv-bstme = wa_main_upload-bstme.ENDIF."稅收分類IF wa_main_alv-matkl = '200112' OR wa_main_alv-matkl = '200117' ORwa_main_alv-matkl = '700701' OR wa_main_alv-matkl = '700703' OR wa_main_alv-matkl = '200118'.wa_main_alv-taklv = '7'.ELSE.wa_main_alv-taklv = '1'.ENDIF."剩余貨架壽命 & 總貨架壽命IF wa_main_upload-mhdhb IS NOT INITIAL AND zcl_common_tools=>check_valid_number( wa_main_upload-mhdhb ) = abap_false.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '總貨架壽命只能輸入數字!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSEIF wa_main_upload-mhdhb IS NOT INITIAL.wa_main_alv-mhdrz = '1'.wa_main_alv-mhdhb = wa_main_upload-mhdhb.ENDIF."是否在列表分配CD/XM/FZ的列表IF wa_main_upload-zconv_cd IS NOT INITIAL AND wa_main_upload-zconv_cd NE 'X'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否列出XX僅允許輸入空或X!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSEIF wa_main_upload-zconv_xm IS NOT INITIAL AND wa_main_upload-zconv_xm NE 'X'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否列出XX僅允許輸入空或X!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSEIF wa_main_upload-zconv_fz IS NOT INITIAL AND wa_main_upload-zconv_fz NE 'X'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否列出XX僅允許輸入空或X!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSEIF wa_main_upload-zconv_cd IS INITIAL AND wa_main_upload-zconv_xm IS INITIAL AND wa_main_upload-zconv_fz IS INITIAL.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否列出XX/XX/XX至少選擇一個!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSE.wa_main_alv-zconv_cd = wa_main_upload-zconv_cd.wa_main_alv-zconv_xm = wa_main_upload-zconv_xm.wa_main_alv-zconv_fz = wa_main_upload-zconv_fz.ENDIF."固定值 項目類別組wa_main_alv-mtpos = 'NORM'."物料定價組CASE wa_main_alv-mtart.WHEN 'Z001'.IF wa_main_alv-matkl = '100501' OR wa_main_alv-matkl = '100502'.wa_main_alv-kondm = '50'.ELSE.wa_main_alv-kondm = '10'.ENDIF.WHEN 'Z002'.IF wa_main_alv-matkl = '200301'.wa_main_alv-kondm = '40'.ELSEIF wa_main_alv-matkl = '200110' OR wa_main_alv-matkl = '200201'.wa_main_alv-kondm = '30'.ELSE.wa_main_alv-kondm = '20'.ENDIF.WHEN OTHERS.ENDCASE.IF strlen( wa_main_alv-maktx ) >= 2.IF wa_main_alv-zconv_cd = 'X' AND wa_main_alv-maktx+0(2) = 'YW'.wa_main_alv-kondm = '70'.ENDIF.ENDIF."科目組設置CASE wa_main_alv-mtart.WHEN 'Z001'.wa_main_alv-ktgrm = 'Z1'.WHEN 'Z002'.IF wa_main_alv-matkl = '200112' OR wa_main_alv-matkl = '200117'.wa_main_alv-ktgrm = 'ZD'.ELSE.wa_main_alv-ktgrm = 'Z2'.ENDIF.WHEN 'Z003'.wa_main_alv-ktgrm = 'Z3'.WHEN OTHERS.wa_main_alv-ktgrm = 'Z4'.ENDCASE."列表-存儲wa_main_alv-lstfl = '02'."列表-分銷中心wa_main_alv-lstvz = '02'.***后勤需要讀入的值"是否配貨單位(用于標識現裱 /現烤)IF wa_main_upload-zconv_deli IS NOT INITIAL AND ( wa_main_upload-zconv_deli NE 'B' AND wa_main_upload-zconv_deli NE 'K' AND wa_main_upload-zconv_deli NE 'X' ).PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '是否配貨單位僅允許輸入空或B/K/N/X!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSEIF wa_main_upload-zconv_deli IS NOT INITIAL.wa_main_alv-zconv_deli = wa_main_upload-zconv_deli.ENDIF."特殊采購類IF wa_main_alv-mtart = 'Z003'.wa_main_alv-sobsl = wa_main_upload-sobsl.ENDIF."生成后勤數據IF wa_main_alv-zconv_cd = 'X'.PERFORM frm_fill_logistics USING 'X' 'AAZ1' wa_main_alv . "X 表示生產公司 空 表示銷售公司 R表示參考公司PERFORM frm_fill_logistics USING '' 'AAY1' wa_main_alv. "X 表示生產公司 空 表示銷售公司 R表示參考公司ENDIF.IF wa_main_alv-zconv_xm = 'X'.PERFORM frm_fill_logistics USING 'X' 'BBZ1' wa_main_alv.PERFORM frm_fill_logistics USING '' 'BBY1' wa_main_alv.ENDIF.IF wa_main_alv-zconv_fz = 'X'.PERFORM frm_fill_logistics USING 'X' 'CCZ1' wa_main_alv.PERFORM frm_fill_logistics USING '' 'CCY1' wa_main_alv.ENDIF."參考工廠數據PERFORM frm_fill_logistics USING 'R' '99DC' wa_main_alv.PERFORM frm_fill_logistics USING 'R' '99ST' wa_main_alv."評估類CASE wa_main_alv-mtart.WHEN 'Z001'.wa_main_alv-bklas = '7920'.WHEN 'Z002'.IF wa_main_alv-matkl = '200112' OR wa_main_alv-matkl = '200117' ORwa_main_alv-matkl = '200118'.wa_main_alv-bklas = '7901'.ELSE.wa_main_alv-bklas = '7900'.ENDIF.WHEN 'Z003'.wa_main_alv-bklas = '3100'.WHEN 'Z005'.wa_main_alv-bklas = '3050'.WHEN 'Z007'.wa_main_alv-bklas = '7930'.WHEN 'Z008'.IF wa_main_upload-bklas IS INITIAL.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '評估類必填!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.wa_main_alv-bklas = wa_main_upload-bklas.WHEN OTHERS.ENDCASE."價格單位wa_main_alv-peinh = '1000'."標準價IF wa_main_upload-stprs IS NOT INITIAL AND zcl_common_tools=>check_valid_number( wa_main_upload-stprs ) = abap_false.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' '標準價只能輸入數字!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ELSE.wa_main_alv-stprs = wa_main_upload-stprs.ENDIF."是否擴充采購視圖IF wa_main_alv-mtart NE 'Z003'.wa_main_alv-zconv_pur = 'X'.READ TABLE lt_pur_upload TRANSPORTING NO FIELDS WITH KEY zsort = wa_main_alv-zsort BINARY SEARCH.IF sy-subrc NE 0.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' 'SHEET[附加-采購視圖數據]未維護數據!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本CONTINUE.ENDIF.LOOP AT lt_pur_upload INTO wa_pur_upload WHERE zsort = wa_main_alv-zsort.CLEAR: wa_outpur,lt_ean_type,wa_ean_type.l_continue_flag = sy-tabix."condensed all fieldPERFORM frm_condensed_allfield USING l_pur_comp CHANGING wa_pur_upload.wa_outpur-zsort = wa_pur_upload-zsort."供應商wa_outpur-lifnr = wa_pur_upload-lifnr.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput = wa_outpur-lifnrIMPORTINGoutput = wa_outpur-lifnr.READ TABLE lt_lfa1 TRANSPORTING NO FIELDS WITH KEY lifnr = wa_outpur-lifnr.IF sy-subrc NE 0.CLEAR:wa_outpur-lifnr.l_continue_flag = '附加-采購視圖數據,行:' && l_continue_flag && '供應商在SAP中不存在!'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否錯誤 2.消息文本EXIT.ENDIF."采購組織wa_outpur-ekorg = '1000'."工廠CASE wa_pur_upload-werks.WHEN 'AAZ1'OR 'AAY1' OR 'BBZ1' OR 'BBY1' OR 'CCZ1' OR 'CCY1'.wa_outpur-werks = wa_pur_upload-werks.WHEN OTHERS.l_continue_flag = '附加-采購視圖數據,行:' && l_continue_flag && '工廠只允許輸入AAZ1/AAY1/BBZ1/BBY1/CCZ1/CCY1!'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否錯誤 2.消息文本EXIT.ENDCASE."采購組CASE wa_pur_upload-werks.WHEN 'AAZ1' OR 'BBZ1' OR 'CCZ1'.wa_outpur-ekgrp = 'B11'.WHEN OTHERS.wa_outpur-ekgrp = 'B21'.ENDCASE."稅代碼wa_outpur-mwskz = wa_pur_upload-mwskz."凈價IF wa_pur_upload-netpr IS NOT INITIAL AND zcl_common_tools=>check_valid_number( wa_pur_upload-netpr ) = abap_false.l_continue_flag = '附加-采購視圖數據,行:' && l_continue_flag && '凈價只能輸入數字!'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否錯誤 2.消息文本EXIT.ELSEIF wa_pur_upload-netpr IS NOT INITIAL.wa_outpur-netpr = wa_pur_upload-netpr.ENDIF."貨幣碼wa_outpur-waers = 'CNY'."價格單位wa_outpur-peinh = '1'."訂單價格單位(采購)IF wa_main_alv-zconv_unit = 'X'.wa_outpur-bprme = wa_main_alv-bstme.ELSE.wa_outpur-bprme = wa_main_alv-meins.ENDIF."GTINIF wa_pur_upload-ean11 IS NOT INITIAL.SELECT SINGLE matnr FROM mara INTO l_matnr WHERE ean11 = wa_pur_upload-ean11.IF sy-subrc = 0.SHIFT l_matnr LEFT DELETING LEADING '0'.l_continue_flag = '附加-采購視圖數據,行:' && l_continue_flag && 'GTIN編碼已經分配給物料:' && l_matnr && '!'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否錯誤 2.消息文本EXIT.ENDIF.SELECT SINGLE matnr FROM mean INTO l_matnr WHERE ean11 = wa_pur_upload-ean11.IF sy-subrc = 0.SHIFT l_matnr LEFT DELETING LEADING '0'.l_continue_flag = '附加-采購視圖數據,行:' && l_continue_flag && 'GTIN編碼已經分配給物料:' && l_matnr && '!'.PERFORM frm_fill_outtab TABLES gt_outmain USING 'X' l_continue_flag CHANGING wa_main_alv . "1.是否錯誤 2.消息文本EXIT.ENDIF.ENDIF."EAN No.wa_outpur-ean11 = wa_pur_upload-ean11."EAN TypeCALL FUNCTION 'EAN_TYPE'EXPORTINGi_ean = wa_outpur-ean11TABLESe_tab_eantp = lt_ean_type.READ TABLE lt_ean_type INTO wa_ean_type INDEX 1.IF sy-subrc = 0.wa_outpur-numtp = wa_ean_type-eantyp.ENDIF."主GTINAT NEW zsort.wa_outpur-hpean = 'X'.ENDAT."是否分配GTIN到當前供應商wa_outpur-lartn = 'X'."供應商的主GTINAT NEW lifnr.wa_outpur-lfean = 'X'.ENDAT.APPEND wa_outpur TO gt_outpur.CLEAR: l_continue_flag.ENDLOOP.IF l_continue_flag IS NOT INITIAL.CONTINUE.ENDIF.ENDIF."銷售視圖IF wa_main_alv-zconv_cd = 'X'.wa_main_alv-z_conv_sales = '銷售組織1001 1002#'.ENDIF.IF wa_main_alv-zconv_xm = 'X'.wa_main_alv-z_conv_sales = wa_main_alv-z_conv_sales && '銷售組織2001 2002#'.ENDIF.IF wa_main_alv-zconv_fz = 'X'.wa_main_alv-z_conv_sales = wa_main_alv-z_conv_sales && '銷售組織3001 3002#'.ENDIF.wa_main_alv-z_conv_sales = '將擴充:' && wa_main_alv-z_conv_sales && '(*001擴充渠道20,*002擴充渠道10 20 30 40)'."All data readyPERFORM frm_fill_outtab TABLES gt_outmain USING '' '本數據將執行創建物料!' CHANGING wa_main_alv . "1.是否錯誤 2.消息文本ENDLOOP. ENDFORM. " FRM_READ_EXCEL *&---------------------------------------------------------------------* *& Form FRM_SHOW_ALV *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_show_alv .DATA: lo_columns TYPE REF TO cl_salv_columns.DATA: lo_column TYPE REF TO cl_salv_column.DATA: lo_display TYPE REF TO cl_salv_display_settings."注冊事件DATA: lo_events_c TYPE REF TO lcl_events,lo_events TYPE REF TO cl_salv_events_table.CREATE OBJECT lo_events_c."show dataTRY.cl_salv_table=>factory(IMPORTINGr_salv_table = go_alvCHANGINGt_table = gt_outmain[] ).CATCH cx_salv_msg.ENDTRY.lo_columns = go_alv->get_columns( ). "獲取對象lo_columns->set_optimize( 'X' ). "設置行寬自適應TRY.lo_column = lo_columns->get_column( 'ICON' ). "獲取列lo_column->set_long_text( '狀態' ). "設置列長文本描述lo_column->set_medium_text( '狀態' ). "設置列中文本描述lo_column->set_short_text( '狀態' ). "設置列短文本描述CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'TEXT' ). "獲取列lo_column->set_long_text( '狀態文本' ). "設置列長文本描述lo_column->set_medium_text( '狀態文本' ). "設置列中文本描述lo_column->set_short_text( '狀態文本' ). "設置列短文本描述CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'ZSORT' ).lo_column->set_long_text( '導入序號' ).lo_column->set_medium_text( '導入序號' ).lo_column->set_short_text( '導入序號' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'ATTYP' ).lo_column->set_long_text( '商品類別' ).lo_column->set_medium_text( '商品類別' ).lo_column->set_short_text( '商品類別' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'ZCONV_UNIT' ).lo_column->set_long_text( '是否單位轉換' ).lo_column->set_medium_text( '是否單位轉換' ).lo_column->set_short_text( '是否單位轉換' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'UMREZ' ).lo_column->set_long_text( '比值' ).lo_column->set_medium_text( '比值' ).lo_column->set_short_text( '比值' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'Z_CONV_SALES' ).lo_column->set_long_text( '銷售視圖擴充信息顯示' ).lo_column->set_medium_text( '銷售視圖擴充信息顯示' ).lo_column->set_short_text( '銷售視圖擴充信息顯示' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'PEINH' ).lo_column->set_long_text( '價格單位' ).lo_column->set_medium_text( '價格單位' ).lo_column->set_short_text( '價格單位' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'BSTME' ).lo_column->set_long_text( '采購單位' ).lo_column->set_medium_text( '采購單位' ).lo_column->set_short_text( '采購單位' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'ZCONV_PUR' ).lo_column->set_long_text( '是否擴充采購視圖' ).lo_column->set_medium_text( '是否擴充采購視圖' ).lo_column->set_short_text( '是否擴充采購視圖' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'ZCONV_CD' ).lo_column->set_long_text( '是否列出XX' ).lo_column->set_medium_text( '是否列出XX' ).lo_column->set_short_text( '是否列出XX' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'ZCONV_XM' ).lo_column->set_long_text( '是否列出XX' ).lo_column->set_medium_text( '是否列出XX' ).lo_column->set_short_text( '是否列出XX' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'ZCONV_FZ' ).lo_column->set_long_text( '是否列出XX' ).lo_column->set_medium_text( '是否列出XX' ).lo_column->set_short_text( '是否列出XX' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.TRY.lo_column = lo_columns->get_column( 'ZCONV_DELI' ).lo_column->set_long_text( '是否配貨單位' ).lo_column->set_medium_text( '是否配貨單位' ).lo_column->set_short_text( '是否配貨單位' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY."設置自定義狀態欄go_alv->set_screen_status(pfstatus = 'STANDARD_FULLSCREEN'report = sy-cprogset_functions = go_alv->c_functions_all ).lo_events = go_alv->get_event( ). "獲取事件對象SET HANDLER lo_events_c->on_user_command FOR lo_events. "注冊on_user_command事件SET HANDLER lo_events_c->on_double_click FOR lo_events.lo_display = go_alv->get_display_settings( ). "獲取對象 "lo_display->set_list_header( text-t01 ). "設置GUI抬頭文本go_alv->display( ).ENDFORM. " FRM_SHOW_ALV *&---------------------------------------------------------------------* *& Form FRM_on_user_command *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_E_SALV_FUNCTION text *----------------------------------------------------------------------* FORM frm_on_user_command USING p_ucomm.DATA: is_stable TYPE lvc_s_stbl.FIELD-SYMBOLS: <fs_data> TYPE ty_main_alv.CASE p_ucomm.WHEN 'EXEC'.READ TABLE gt_outmain TRANSPORTING NO FIELDS WITH KEY icon = icon_green_light text = '本數據將執行創建物料!'.IF sy-subrc NE 0.MESSAGE '無可創建物料的行,請修正錯誤再執行創建!' TYPE 'E'.ELSE.LOOP AT gt_outmain ASSIGNING <fs_data> WHERE icon = icon_green_light AND text = '本數據將執行創建物料!'.PERFORM frm_material_creation USING <fs_data>.ENDLOOP.ENDIF.WHEN OTHERS.ENDCASE.is_stable-row = 'X'. "保持行is_stable-col = 'X'. "保持列CALL METHOD go_alv->refresh( EXPORTING s_stable = is_stable ). ENDFORM. " FRM_on_user_command *&---------------------------------------------------------------------* *& Form FRM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_download_template .DATA: l_fullpath TYPE string,l_path TYPE string,l_filename TYPE string,l_default_name TYPE string,l_filter TYPE string,l_destination TYPE rlgrap-filename,ls_key TYPE wwwdatatab,l_rc TYPE sy-subrc,l_objid TYPE wwwdata-objid.CLEAR: l_fullpath,l_path,l_filename,l_filter,l_destination,ls_key.l_filter = 'XLS|*.XLS'.l_default_name = text-t01.CALL METHOD cl_gui_frontend_services=>file_save_dialogEXPORTINGdefault_file_name = l_default_namefile_filter = l_filter"cl_gui_frontend_services=>filetype_allCHANGINGfilename = l_filenamepath = l_pathfullpath = l_fullpathEXCEPTIONScntl_error = 1error_no_gui = 2not_supported_by_gui = 3.IF l_fullpath IS NOT INITIAL.IF strlen( l_fullpath ) GT 128.MESSAGE text-m02 TYPE 'E'.ENDIF.l_destination = l_fullpath.l_objid = sy-repid. *&**SMW0上傳的方式SELECT relid objid checkout checknew INTO ls_key UP TO 1 ROWSFROM wwwdataWHERE relid = 'MI'AND objid = l_objidORDER BY srtf2 DESCENDING.EXIT.ENDSELECT. *&**下載模版IF ls_key IS NOT INITIAL.CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGkey = ls_keydestination = l_destinationIMPORTINGrc = l_rc.IF l_rc EQ 0.MESSAGE text-m08 TYPE 'S'.p_file = l_fullpath.ELSE.MESSAGE text-m10 TYPE 'E'.ENDIF.ELSE.MESSAGE text-m09 TYPE 'E'.ENDIF.ENDIF. ENDFORM. " FRM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* *& Form FRM_INIT_FUNCKEY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_init_funckey .DATA: ls_smp_dyntxt TYPE smp_dyntxt.ls_smp_dyntxt-text = '下載模板'.ls_smp_dyntxt-icon_id = icon_export.ls_smp_dyntxt-icon_text = '下載模板'.ls_smp_dyntxt-quickinfo = '下載導入模板'.sscrfields-functxt_01 = ls_smp_dyntxt. ENDFORM. " FRM_INIT_FUNCKEY *&---------------------------------------------------------------------* *& Form frm_fill_outtab *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_1006 text * -->P_1007 text * <--P_wa_main_ALV text * -->P_gt_outmain text *----------------------------------------------------------------------* FORM frm_fill_outtab TABLES gt_outmain TYPE ty_main_tUSING value(p1)value(p2)CHANGING wa_main_alv TYPE ty_main_alv.IF p1 = 'X'.wa_main_alv-icon = icon_red_light.ELSE.wa_main_alv-icon = icon_green_light.ENDIF.wa_main_alv-text = p2.APPEND wa_main_alv TO gt_outmain. ENDFORM. " frm_fill_outtab *&---------------------------------------------------------------------* *& Form FRM_CONDENSED_ALLFIELD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_wa_main_ALV text *----------------------------------------------------------------------* FORM frm_condensed_allfield USING value(p1) CHANGING wa_data.FIELD-SYMBOLS: <fs_field> TYPE any,<fs_value> TYPE any.ASSIGN wa_data TO <fs_field>.DO p1 TIMES.ASSIGN COMPONENT sy-index OF STRUCTURE wa_data TO <fs_value>.IF sy-subrc = 0.CONDENSE <fs_value> NO-GAPS.ENDIF.ENDDO. ENDFORM. " FRM_CONDENSED_ALLFIELD *&---------------------------------------------------------------------* *& Form FRM_DOUBLE_CLICK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_ROW text * -->P_COLUMN text *----------------------------------------------------------------------* FORM frm_double_click USING p_rowp_column.DATA : lr_detail TYPE REF TO cl_salv_table.DATA: lo_columns TYPE REF TO cl_salv_columns,lo_column TYPE REF TO cl_salv_column,lo_column_list TYPE REF TO cl_salv_column_list,lo_display TYPE REF TO cl_salv_display_settings.DATA: lo_cols_tab TYPE REF TO cl_salv_columns_table,lo_col_tab TYPE REF TO cl_salv_column_table.FIELD-SYMBOLS: <fs_outmain> TYPE ty_main_alv.DATA: lt_outpur TYPE ty_pur_t,lt_logistics TYPE TABLE OF ty_logistics_alv.DATA: lt_sellist TYPE TABLE OF spopli,wa_sellist TYPE spopli.DATA: l_antwort TYPE c.FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE.* 選擇條件wa_sellist-varoption = '顯示后勤分銷數據'.APPEND wa_sellist TO lt_sellist.wa_sellist-varoption = '顯示采購數據'.APPEND wa_sellist TO lt_sellist.CALL FUNCTION 'POPUP_TO_DECIDE_LIST'EXPORTINGtitel = '提示'textline1 = '選擇顯示的內容:'mark_max = 1 "最大選擇數mark_flag = 'X' "選擇框標志,如果是‘X’表示是checkbox,如果是空,表示是radioIMPORTINGanswer = l_antwortTABLESt_spopli = lt_sellistEXCEPTIONStoo_much_answers = 1too_much_marks = 2."取得點擊物料的明顯清單READ TABLE gt_outmain ASSIGNING <fs_outmain> INDEX p_row.IF sy-subrc = 0.CASE l_antwort.WHEN '1'.lt_logistics = gt_logistics_alv.DELETE lt_logistics WHERE zsort NE <fs_outmain>-zsort.SORT lt_logistics BY zsort.ASSIGN lt_logistics TO <fs_table>.WHEN '2'.lt_outpur = gt_outpur.DELETE lt_outpur WHERE zsort NE <fs_outmain>-zsort.SORT lt_outpur BY zsort.ASSIGN lt_outpur TO <fs_table>.WHEN OTHERS.RETURN.ENDCASE.ENDIF."check initialIF <fs_table> IS INITIAL.MESSAGE '無明細數據可顯示!' TYPE 'S' DISPLAY LIKE 'E'.EXIT.ENDIF."show detailsTRY.CALL METHOD cl_salv_table=>factoryIMPORTINGr_salv_table = lr_detailCHANGINGt_table = <fs_table>.CATCH cx_salv_msg .ENDTRY."columns settinglo_columns = lr_detail->get_columns( ). "獲取對象lo_columns->set_optimize( 'X' ). "設置行寬自適應lo_cols_tab = lr_detail->get_columns( ). "獲取對象TRY.lo_column = lo_columns->get_column( 'ZSORT' ).lo_column->set_long_text( '導入序號' ).lo_column->set_medium_text( '導入序號' ).lo_column->set_short_text( '導入序號' ).CATCH cx_salv_not_found. "#EC NO_HANDLERENDTRY.lo_display = lr_detail->get_display_settings( ). "獲取對象IF l_antwort = '1'.lo_display->set_list_header( '后勤分銷視圖明細' ). "設置GUI抬頭文本ELSEIF l_antwort = '2'.lo_display->set_list_header( '采購視圖明細' ). "設置GUI抬頭文本ENDIF. "IF lr_detail IS BOUND.lr_detail->set_screen_popup(start_column = 10end_column = 110start_line = 4end_line = 14 ).lr_detail->display( ).ENDIF. ENDFORM. " FRM_DOUBLE_CLICK *&---------------------------------------------------------------------* *& Form FRM_FILL_LOGISTICS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_1770 text * -->P_WA_MAIN_ALV text *----------------------------------------------------------------------* FORM frm_fill_logistics USING value(p1)value(p2)wa_main_alv TYPE ty_main_alv.DATA: wa_logistics_alv TYPE ty_logistics_alv.wa_logistics_alv-zsort = wa_main_alv-zsort."工廠wa_logistics_alv-werks = p2.IF p1 = 'X'. "生產公司"RP類型CASE wa_main_alv-mtart.WHEN 'Z001'.IF wa_main_alv-matkl = '100101'.wa_logistics_alv-dismm = 'M0'.ELSE.wa_logistics_alv-dismm = 'PD'.ENDIF.WHEN 'Z002' OR 'Z008'.wa_logistics_alv-dismm = 'ND'.WHEN OTHERS.wa_logistics_alv-dismm = 'PD'.ENDCASE."批量大小wa_logistics_alv-disls = 'EX'."舍入值IF wa_main_alv-zconv_unit = 'X'.wa_logistics_alv-bstrf = wa_main_alv-umrez.ELSE.wa_logistics_alv-bstrf = '1'.ENDIF."存貨計劃員/RP控制器IF strlen( wa_main_alv-matkl ) > 1.CASE wa_main_alv-matkl+0(1).WHEN '1'.IF wa_main_alv-matkl = '100101'.wa_logistics_alv-dispo = 'C02'.ELSEIF wa_main_alv-matkl = '100501' ORwa_main_alv-matkl = '100502' ORwa_main_alv-matkl = '400401'.wa_logistics_alv-dispo = 'C03'.ELSE.wa_logistics_alv-dispo = 'C01'.ENDIF.WHEN '4'.wa_logistics_alv-dispo = 'B01'.WHEN '7'.wa_logistics_alv-dispo = 'Y01'.WHEN '3'.wa_logistics_alv-dispo = 'Y02'.WHEN OTHERS.ENDCASE.ENDIF."批次管理CASE wa_main_alv-mtart.WHEN 'Z003'.wa_logistics_alv-xchpf = 'X'.WHEN 'Z005'.IF strlen( wa_main_alv-matkl ) > 1 AND wa_main_alv-matkl+0(1) = '7'.IF wa_main_alv-matkl NE '700601' AND wa_main_alv-matkl NE '700701' AND wa_main_alv-matkl NE '700703'.wa_logistics_alv-xchpf = 'X'.ENDIF.ENDIF.WHEN OTHERS.ENDCASE."庫存地點/外部采購倉儲地點CASE wa_main_alv-mtart.WHEN 'Z001'.IF wa_main_alv-matkl = '100501' OR wa_main_alv-matkl = '100502'.wa_logistics_alv-lgfsb = '5002'.ELSE.wa_logistics_alv-lgfsb = '5001'.ENDIF.WHEN 'Z003'.wa_logistics_alv-lgfsb = '2001'.WHEN 'Z005'.wa_logistics_alv-lgfsb = '1001'.WHEN 'Z007'.wa_logistics_alv-lgfsb = '1002'.WHEN 'Z008'.wa_logistics_alv-lgfsb = '1003'.WHEN OTHERS.ENDCASE."是否配貨單位(用于標識現裱 /現烤)->決定配貨單位IF wa_main_alv-zconv_deli CA 'BKX'. "WHEN B/K/NIF wa_main_alv-zconv_unit = 'X'.wa_logistics_alv-zmein = wa_main_alv-bstme.ELSE.wa_logistics_alv-zmein = ''.ENDIF.ENDIF."采購類型CASE wa_main_alv-mtart.WHEN 'Z001' OR 'Z003'.wa_logistics_alv-beskz = 'E'.WHEN 'Z005' OR 'Z007' OR 'Z008'.wa_logistics_alv-beskz = 'F'.WHEN OTHERS.ENDCASE."特殊采購類wa_logistics_alv-sobsl = wa_main_alv-sobsl."反沖CASE wa_main_alv-mtart.WHEN 'Z002' OR 'Z003' OR 'Z005' OR 'Z007'.wa_logistics_alv-rgekz = '2'.ENDCASE."生產倉儲地點CASE wa_main_alv-mtart.WHEN 'Z001'.IF wa_main_alv-matkl = '100501' OR wa_main_alv-matkl = '100502'.wa_logistics_alv-lgpro = '5002'.ELSE.wa_logistics_alv-lgpro = '5001'.ENDIF.WHEN 'Z003' OR 'Z005' OR 'Z007'.wa_logistics_alv-lgpro = '2001'.WHEN OTHERS.ENDCASE."收貨處理時間IF wa_main_alv-mtart = 'Z001'.wa_logistics_alv-webaz = '1'.ENDIF."計劃邊際碼CASE wa_main_alv-mtart.WHEN 'Z001' OR 'Z003' OR 'Z005' OR 'Z007'.wa_logistics_alv-fhori = '000'.ENDCASE."策略組IF strlen( wa_main_alv-matkl ) > 1.CASE wa_main_alv-matkl+0(1).WHEN '1' OR '3' OR '4' OR '5' OR '7'.IF wa_main_alv-matkl = '100101'.wa_logistics_alv-strgr = '50'.ELSE.wa_logistics_alv-strgr = '10'.ENDIF.WHEN OTHERS.ENDCASE.ENDIF."消耗模式wa_logistics_alv-vrmod = '2'."向前消耗期間wa_logistics_alv-vint1 = '30'."逆向消耗期間wa_logistics_alv-vint2 = '30'."可用性檢查wa_logistics_alv-mtvfp = '02'."獨立/集中wa_logistics_alv-sbdkz = '2'."生產管理員CASE wa_main_alv-mtart.WHEN 'Z001'.wa_logistics_alv-fevor = '001'.WHEN 'Z003'.wa_logistics_alv-fevor = '002'.ENDCASE."生產計劃參數文件CASE wa_main_alv-mtart.WHEN 'Z001' OR 'Z003'.IF wa_main_alv-matkl NE '100101'.wa_logistics_alv-sfcpf = 'Z00001'.ENDIF.ENDCASE."生產單位IF wa_main_alv-mtart = 'Z003'.IF wa_main_alv-zconv_unit = 'X' AND wa_main_alv-bstme = 'BEI'.wa_logistics_alv-frtme = 'BEI'.ELSEIF wa_main_alv-zconv_unit NE 'X' AND wa_main_alv-meins = 'BEI'.wa_logistics_alv-frtme = 'BEI'.ENDIF.ENDIF."不足交貨允差 & 過度交貨允差CASE wa_main_alv-mtart.WHEN 'Z001' OR 'Z003'.wa_logistics_alv-uneto = '20'.wa_logistics_alv-ueeto = '20'.ENDCASE.ELSEIF p1 = 'R'. "參考99st 99dc"RP類型wa_logistics_alv-dismm = 'ND'."庫存地點/外部采購倉儲地點wa_logistics_alv-lgfsb = '1001'."采購類型CASE wa_main_alv-mtart.WHEN 'Z001' OR 'Z003'.wa_logistics_alv-beskz = 'E'.WHEN 'Z005' OR 'Z007' OR 'Z008'.wa_logistics_alv-beskz = 'F'.WHEN OTHERS.ENDCASE."可用性檢查wa_logistics_alv-mtvfp = '02'.ELSE. "銷售公司 +"RP類型wa_logistics_alv-dismm = 'ND'."庫存地點/外部采購倉儲地點CASE wa_main_alv-mtart.WHEN 'Z002'.wa_logistics_alv-lgfsb = '1004'.WHEN OTHERS.wa_logistics_alv-lgfsb = '1001'.ENDCASE."采購類型CASE wa_main_alv-mtart.WHEN 'Z001' OR 'Z003'.wa_logistics_alv-beskz = 'E'.WHEN 'Z005' OR 'Z007' OR 'Z008'.wa_logistics_alv-beskz = 'F'.WHEN OTHERS.ENDCASE."可用性檢查wa_logistics_alv-mtvfp = '02'.ENDIF.APPEND wa_logistics_alv TO gt_logistics_alv. ENDFORM. " FRM_FILL_LOGISTICS *&---------------------------------------------------------------------* *& Form FRM_MATERIAL_CREATION *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_<FS_DATA> text *----------------------------------------------------------------------* FORM frm_material_creation USING ps_data TYPE ty_main_alv.FIELD-SYMBOLS: <fs_pur> TYPE ty_pur_alv,<fs_logistics> TYPE ty_logistics_alv."ReCoding By RogerDATA: ls_headdata TYPE bapie1mathead, "Header datalt_clientdata TYPE TABLE OF bapie1marart, "Client data CLIENTEXT CLIENTEXTX 用于自定義增強的字段lt_clientdatax TYPE TABLE OF bapie1marartx,lt_addnlclientdata TYPE TABLE OF bapie1maw1rt, "basic addition datalt_addnlclientdatax TYPE TABLE OF bapie1maw1rtx,lt_materialdescription TYPE TABLE OF bapie1maktrt, "material description datalt_plantdata TYPE TABLE OF bapie1marcrt, "plant level data PLANTEXT PLANTEXTX 用于自定義增強的字段lt_plantdatax TYPE TABLE OF bapie1marcrtx,lt_plantext TYPE TABLE OF bapie1marcextrt,lt_plantextx TYPE TABLE OF bapie1marcextrtx,lt_valuationdata TYPE TABLE OF bapie1mbewrt, "valuation datalt_valuationdatax TYPE TABLE OF bapie1mbewrtx,lt_storagelocationdata TYPE TABLE OF bapie1mardrt, "Storage Location STORAGELOCATIONEXT STORAGELOCATIONEXTX 用于自定義增強的字段lt_storagelocationdatax TYPE TABLE OF bapie1mardrtx,lt_unitsofmeasure TYPE TABLE OF bapie1marmrt, "多單位轉換比例 & 文本lt_unitsofmeasurex TYPE TABLE OF bapie1marmrtx,lt_internationalartnos TYPE TABLE OF bapie1meanrt, "國際商品號(GTINs) global levellt_vendorean TYPE TABLE OF bapie1mleart, "vendor levellt_inforecord_general TYPE TABLE OF bapieina, "采購信息記錄 PIRlt_inforecord_purchorg TYPE TABLE OF wrfbapieine,lt_listingconditions TYPE TABLE OF wlk1_ueb, "execute listing data * lt_plantkeys TYPE TABLE OF bapie1wrkkey, " * lt_storagelocationkeys TYPE TABLE OF bapie1lgokey, * lt_valuationtypekeys TYPE TABLE OF bapie1bwakey,lt_salesdata TYPE TABLE OF bapie1mvkert,lt_salesdatax TYPE TABLE OF bapie1mvkertx,lt_return TYPE TABLE OF bapireturn1, "Global return tablewa_clientdata TYPE bapie1marart,wa_clientdatax TYPE bapie1marartx,wa_addnlclientdata TYPE bapie1maw1rt,wa_addnlclientdatax TYPE bapie1maw1rtx,wa_materialdescription TYPE bapie1maktrt,wa_plantdata TYPE bapie1marcrt,wa_plantdatax TYPE bapie1marcrtx,wa_plantext TYPE bapie1marcextrt,wa_plantextx TYPE bapie1marcextrtx,wa_valuationdata TYPE bapie1mbewrt,wa_valuationdatax TYPE bapie1mbewrtx,wa_storagelocationdata TYPE bapie1mardrt,wa_storagelocationdatax TYPE bapie1mardrtx,wa_unitsofmeasure TYPE bapie1marmrt,wa_unitsofmeasurex TYPE bapie1marmrtx,wa_internationalartnos TYPE bapie1meanrt,wa_vendorean TYPE bapie1mleart,wa_layoutmoduleassgmt TYPE bapie1malgrt,wa_layoutmoduleassgmtx TYPE bapie1malgrtx,wa_inforecord_general TYPE bapieina,wa_inforecord_purchorg TYPE wrfbapieine,wa_listingconditions TYPE wlk1_ueb, * wa_plantkeys TYPE bapie1wrkkey, * wa_storagelocationkeys TYPE bapie1lgokey, * wa_valuationtypekeys TYPE bapie1bwakey,wa_return TYPE bapireturn1,wa_return_commit TYPE bapiret2.DATA: lt_bapimatinr TYPE TABLE OF bapimatinr,wa_bapimatinr TYPE bapimatinr.DATA: lt_matreturn TYPE TABLE OF merrdat,wa_matreturn TYPE merrdat.DATA: lt_stolocation_conf TYPE TABLE OF zmmr034_conf,wa_stolocation_conf TYPE zmmr034_conf.DATA: l_conditions TYPE string.DATA: lt_mean TYPE TABLE OF mean,wa_mean TYPE mean,lt_mlea TYPE TABLE OF mlea,wa_mlea TYPE mlea,l_tabix TYPE sy-tabix.DATA: ls_zallocate TYPE zallocate,ls_zallocatex TYPE zallocatex.CASE ps_data-zconv_deli.WHEN 'B'. "現裱 + 常規l_conditions = `ZEXTEND_TYPE IN ( 'B','N' ) AND zstatus = 'X'`.WHEN 'K'. "現烤 + 常規l_conditions = `ZEXTEND_TYPE IN ( 'K','N' ) AND zstatus = 'X'`.WHEN 'X'. "現裱 + 現烤 + 常規l_conditions = `ZEXTEND_TYPE IN ( 'B','K','N' ) AND zstatus = 'X'`.WHEN OTHERS.l_conditions = `ZEXTEND_TYPE = 'N' AND zstatus = 'X'`.ENDCASE.SORT gt_outpur BY zsort lifnr ASCENDING."查詢已經存在的GTINSELECT * FROM mean INTO TABLE lt_mean WHERE matnr = ps_data-matnr AND hpean = 'X'.SELECT * FROM mlea INTO TABLE lt_mlea WHERE matnr = ps_data-matnr AND lfean = 'X'."query configurationSELECT * FROM zmmr034_conf INTO TABLE lt_stolocation_conf WHERE (l_conditions).*=======>Material NumberIF ps_data-matnr IS INITIAL.CALL FUNCTION 'BAPI_MATERIAL_GETINTNUMBERRET'EXPORTINGmaterial_type = ps_data-mtartmaterial_group = ps_data-matklmaterial_category = ps_data-attypTABLESmaterial_number = lt_bapimatinr.READ TABLE lt_bapimatinr INTO wa_bapimatinr INDEX 1.IF sy-subrc = 0.ps_data-matnr = wa_bapimatinr-material.ELSE.ps_data-icon = icon_red_light.ps_data-text = '獲取物料編碼失敗,請稍后重試!'.RETURN.ENDIF.ENDIF.*=======>Header data * ls_headdata-function = '004'. "Function Typels_headdata-material = ps_data-matnr. "商品編碼ls_headdata-matl_type = ps_data-mtart. "商品類型ls_headdata-matl_group = ps_data-matkl. "物料組ls_headdata-matl_cat = ps_data-attyp. "商品類別 * ls_headdata-no_appl_log = 'X'. "不使用SLG1輸出消息,直接輸出第一條錯誤,一般調試的時候使用可獲得詳細錯誤日志"View Open Indicatorls_headdata-basic_view = 'X'. "基本數據視圖ls_headdata-list_view = 'X'. "列表視圖ls_headdata-sales_view = 'X'. "銷售視圖ls_headdata-logdc_view = 'X'. "邏輯分銷中心視圖ls_headdata-logst_view = 'X'. "后勤存儲視圖 * ls_HEADDATA-POS_VIEW = 'X'. "POS視圖**=======>Basic View"Retail client level * wa_clientdata-function = '004'. "Function Typewa_clientdata-material = ps_data-matnr. "商品編碼IF ps_data-zconv_unit NE 'X'.wa_clientdata-base_uom = ps_data-meins. "基本計量單位wa_clientdata-po_unit = ''. "只有一個單位采購訂單的計量單位留空ELSE.wa_clientdata-base_uom = ps_data-meins. "基本計量單位wa_clientdata-po_unit = ps_data-bstme. "采購訂單的計量單位ENDIF.wa_clientdata-tax_class = ps_data-taklv. "稅收分類wa_clientdata-division = '01'. "產品組wa_clientdata-price_band = '1'. "價格標記類別wa_clientdata-minremlife = ps_data-mhdrz. "剩余貨架壽命wa_clientdata-shelf_life = ps_data-mhdhb. "總貨架壽命APPEND wa_clientdata TO lt_clientdata.* wa_clientdatax-function = '004'. "Function Typewa_clientdatax-material = ps_data-matnr. "商品編碼wa_clientdatax-base_uom = 'X'.wa_clientdatax-po_unit = 'X'.wa_clientdatax-tax_class = 'X'.wa_clientdatax-division = 'X'.wa_clientdatax-price_band = 'X'.wa_clientdatax-minremlife = 'X'.wa_clientdatax-shelf_life = 'X'.APPEND wa_clientdatax TO lt_clientdatax."Addition data * wa_addnlclientdata-function = '004'. "Function Typewa_addnlclientdata-material = ps_data-matnr. "商品編碼wa_addnlclientdata-val_class = ps_data-bklas. "評估類IF ps_data-zconv_unit NE 'X'.wa_addnlclientdata-sales_unit = ''."只有一個單位銷售單位留空wa_addnlclientdata-issue_unit = ''."只有一個單位發貨單位留空ELSE.wa_addnlclientdata-sales_unit = ''. "銷售單位wa_addnlclientdata-issue_unit = ps_data-bstme."發貨單位ENDIF.wa_addnlclientdata-loadinggrp = '0001'.wa_addnlclientdata-repl_list = '1'.wa_addnlclientdata-li_proc_st = ps_data-lstfl. "列表:存儲 清單程序wa_addnlclientdata-li_proc_dc = ps_data-lstvz. "清單:分銷中心 清單程序wa_addnlclientdata-list_st_fr = sy-datum.wa_addnlclientdata-list_st_to = '99991231'.wa_addnlclientdata-list_dc_fr = sy-datum.wa_addnlclientdata-list_dc_to = '99991231'.wa_addnlclientdata-sell_st_fr = sy-datum.wa_addnlclientdata-sell_st_to = '99991231'.wa_addnlclientdata-sell_dc_fr = sy-datum.wa_addnlclientdata-sell_dc_to = '99991231'.APPEND wa_addnlclientdata TO lt_addnlclientdata.* wa_addnlclientdatax-function = '004'. "Function Type.wa_addnlclientdatax-material = ps_data-matnr. "商品編碼wa_addnlclientdatax-val_class = 'X'.wa_addnlclientdatax-sales_unit = 'X'.wa_addnlclientdatax-issue_unit = 'X'.wa_addnlclientdatax-loadinggrp = 'X'.wa_addnlclientdatax-repl_list = 'X'.wa_addnlclientdatax-li_proc_st = 'X'.wa_addnlclientdatax-li_proc_dc = 'X'.wa_addnlclientdatax-list_st_fr = 'X'.wa_addnlclientdatax-list_st_to = 'X'.wa_addnlclientdatax-list_dc_fr = 'X'.wa_addnlclientdatax-list_dc_to = 'X'.wa_addnlclientdatax-sell_st_fr = 'X'.wa_addnlclientdatax-sell_st_to = 'X'.wa_addnlclientdatax-sell_dc_fr = 'X'.wa_addnlclientdatax-sell_dc_to = 'X'.APPEND wa_addnlclientdatax TO lt_addnlclientdatax."material Description * wa_materialdescription-function = '004'. "Function Typewa_materialdescription-material = ps_data-matnr. "商品編碼wa_materialdescription-langu = sy-langu. "語言wa_materialdescription-matl_desc = ps_data-maktx. "物料描述APPEND wa_materialdescription TO lt_materialdescription.LOOP AT gt_logistics_alv ASSIGNING <fs_logistics> WHERE zsort = ps_data-zsort.CLEAR:wa_plantdata,wa_plantdatax,wa_valuationdata,wa_valuationdatax."plant data 創建物料時 必須新增99ST 99DC 兩個參考工廠的數據,否則報錯MARC-XXXX必輸(可通過事務代碼:WSS1查看配置的參考工廠 99DC = 分銷中心類別的參考工廠的代碼 99ST = 倉儲類別的參考工廠的代碼) * wa_plantdata-function = '004'. "Function Typewa_plantdata-material = ps_data-matnr. "商品編碼wa_plantdata-plant = <fs_logistics>-werks. "工廠READ TABLE gt_outpur ASSIGNING <fs_pur> WITH KEY zsort = <fs_logistics>-zsort werks = <fs_logistics>-werks.IF sy-subrc = 0.wa_plantdata-pur_group = <fs_pur>-ekgrp. "采購組ENDIF.wa_plantdata-mrp_type = <fs_logistics>-dismm. "RP類型wa_plantdata-lotsizekey = <fs_logistics>-disls. "批量大小wa_plantdata-round_val = <fs_logistics>-bstrf. "舍入值wa_plantdata-period_ind = 'W'. "期間標識wa_plantdata-mrp_ctrler = <fs_logistics>-dispo. "RP 控制者wa_plantdata-batch_mgmt = <fs_logistics>-xchpf. "批次管理wa_plantdata-sloc_exprc = <fs_logistics>-lgfsb. "庫存地點/外部采購倉儲地點wa_plantdata-proc_type = <fs_logistics>-beskz. "采購類型wa_plantdata-spproctype = <fs_logistics>-sobsl. "特殊采購類wa_plantdata-backflush = <fs_logistics>-rgekz. "反沖標識wa_plantdata-iss_st_loc = <fs_logistics>-lgpro. "生產倉儲地點wa_plantdata-gr_pr_time = <fs_logistics>-webaz. "收貨處理時間wa_plantdata-sm_key = <fs_logistics>-fhori. "計劃邊際碼wa_plantdata-plan_strgp = <fs_logistics>-strgr. "策略組wa_plantdata-consummode = <fs_logistics>-vrmod. "消耗模式wa_plantdata-bwd_cons = <fs_logistics>-vint1. "逆向消耗期間wa_plantdata-fwd_cons = <fs_logistics>-vint2. "向前消耗期間wa_plantdata-availcheck = <fs_logistics>-mtvfp. "可用性檢查wa_plantdata-dep_req_id = <fs_logistics>-sbdkz. "獨立/集中wa_plantdata-production_scheduler = <fs_logistics>-fevor. "生產管理員wa_plantdata-prod_prof = <fs_logistics>-sfcpf. "生產計劃參數文件wa_plantdata-prod_unit = <fs_logistics>-frtme. "只有一個單位生產單位留空wa_plantdata-under_tol = <fs_logistics>-uneto. "不足交貨允差wa_plantdata-over_tol = <fs_logistics>-ueeto. "過度交貨允差wa_plantdata-lot_size = '1000'. "批量產品成本核算ls_zallocate-zmein = <fs_logistics>-zmein. "自定義增強字段 配貨單位wa_plantext-material = ps_data-matnr. "商品編碼wa_plantext-plant = <fs_logistics>-werks. "工廠wa_plantext-field1 = 'ZALLOCATE'.wa_plantext+250(*) = ls_zallocate. "自定義增強字段 配貨單位 =>需要CMOD增強 MGV00003-ZXMGVU07* wa_plantdatax-function = '004'. "Function Typewa_plantdatax-material = ps_data-matnr. "商品編碼wa_plantdatax-plant = <fs_logistics>-werks. "工廠wa_plantdatax-pur_group = 'X'.wa_plantdatax-mrp_type = 'X'.wa_plantdatax-lotsizekey = 'X'.wa_plantdatax-round_val = 'X'.wa_plantdatax-mrp_ctrler = 'X'.wa_plantdatax-batch_mgmt = 'X'.wa_plantdatax-sloc_exprc = 'X'.wa_plantdatax-proc_type = 'X'.wa_plantdatax-spproctype = 'X'.wa_plantdatax-backflush = 'X'.wa_plantdatax-iss_st_loc = 'X'.wa_plantdatax-gr_pr_time = 'X'.wa_plantdatax-sm_key = 'X'.wa_plantdatax-plan_strgp = 'X'.wa_plantdatax-consummode = 'X'.wa_plantdatax-bwd_cons = 'X'.wa_plantdatax-fwd_cons = 'X'.wa_plantdatax-availcheck = 'X'.wa_plantdatax-dep_req_id = 'X'.wa_plantdatax-production_scheduler = 'X'.wa_plantdatax-prod_prof = 'X'.wa_plantdatax-prod_unit = 'X'.wa_plantdatax-under_tol = 'X'.wa_plantdatax-over_tol = 'X'.wa_plantdatax-lot_size = 'X'.ls_zallocatex-zmein = 'X'. "自定義增強字段 配貨單位wa_plantextx-material = ps_data-matnr. "商品編碼wa_plantextx-plant = <fs_logistics>-werks. "工廠wa_plantextx-field1 = 'ZALLOCATEX'.wa_plantextx+250(*) = ls_zallocatex. "自定義增強字段 配貨單位"Valuation data 會計/估算 * wa_valuationdata-function = '004'. "Function Typewa_valuationdata-material = ps_data-matnr. "商品編碼wa_valuationdata-val_area = <fs_logistics>-werks. "Plantwa_valuationdata-price_unit = ps_data-peinh. "價格單位wa_valuationdata-val_class = ps_data-bklas. "評估類CASE ps_data-mtart.WHEN 'Z001'. "自制品wa_valuationdata-price_ctrl = 'S'. "價格控制IF <fs_logistics>-werks = '99ST' OR <fs_logistics>-werks = 'AAY1' OR <fs_logistics>-werks = 'BBY1' OR "銷售公司 Z001才設置標準價<fs_logistics>-werks = 'CCY1'.wa_valuationdata-std_price = ps_data-stprs. "標準價格ELSE.CLEAR: wa_valuationdata-std_price.ENDIF.WHEN 'Z002'. "外賣品wa_valuationdata-price_ctrl = 'S'. "價格控制wa_valuationdata-std_price = ps_data-stprs. "標準價格WHEN OTHERS.wa_valuationdata-price_ctrl = 'V'. "價格控制ENDCASE.* wa_valuationdatax-function = '004'. "Function Typewa_valuationdatax-material = ps_data-matnr. "商品編碼wa_valuationdatax-val_area = <fs_logistics>-werks.wa_valuationdatax-val_class = 'X'.wa_valuationdatax-price_unit = 'X'.wa_valuationdatax-price_ctrl = 'X'.wa_valuationdatax-std_price = 'X'.IF <fs_logistics>-werks = '99ST' OR <fs_logistics>-werks = '99DC'. "擴展物料工廠時,99ST 99DC不進行擴展;防止Listing改到之前的參考工廠評估數據SELECT SINGLE COUNT(*) FROM mara WHERE matnr = ps_data-matnr.IF sy-subrc NE 0.APPEND wa_plantdata TO lt_plantdata.APPEND wa_plantdatax TO lt_plantdatax.APPEND wa_valuationdata TO lt_valuationdata.APPEND wa_valuationdatax TO lt_valuationdatax.APPEND wa_plantext TO lt_plantext.APPEND wa_plantextx TO lt_plantextx.ENDIF.ELSE.APPEND wa_plantdata TO lt_plantdata.APPEND wa_plantdatax TO lt_plantdatax.APPEND wa_valuationdata TO lt_valuationdata.APPEND wa_valuationdatax TO lt_valuationdatax.APPEND wa_plantext TO lt_plantext.APPEND wa_plantextx TO lt_plantextx.ENDIF."銷售視圖 生產公司 + 銷售公司 + 參考公司IF ps_data-zconv_cd = 'X'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1001' '30'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1002' '10'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1002' '20'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1002' '30'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '1002' '40'.ENDIF.IF ps_data-zconv_xm = 'X'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2001' '30'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2002' '10'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2002' '20'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2002' '30'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '2002' '40'.ENDIF.IF ps_data-zconv_fz = 'X'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3001' '30'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3002' '10'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3002' '20'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3002' '30'.PERFORM frm_extend_sales TABLES lt_salesdata lt_salesdatax USING ps_data '3002' '40'.ENDIF."Extend Storage LocationLOOP AT lt_stolocation_conf INTO wa_stolocation_conf WHERE mtart = ps_data-mtart AND werks = <fs_logistics>-werks.IF wa_stolocation_conf-lgort = '3005' AND ( ps_data-matkl NE '100501' AND ps_data-matkl NE '100502' ).CONTINUE.ELSEIF ps_data-matkl NE '400401' AND ( wa_stolocation_conf-lgort = '3004' OR wa_stolocation_conf-lgort = '3005').CONTINUE.ENDIF.* wa_storagelocationdata-function = '004'. "Function Typewa_storagelocationdata-material = ps_data-matnr. "商品編碼wa_storagelocationdata-plant = <fs_logistics>-werks. "工廠wa_storagelocationdata-stge_loc = wa_stolocation_conf-lgort. "庫位APPEND wa_storagelocationdata TO lt_storagelocationdata.* wa_storagelocationdatax-function = '004'. "Function Typewa_storagelocationdatax-material = ps_data-matnr. "商品編碼wa_storagelocationdatax-plant = <fs_logistics>-werks. "工廠wa_storagelocationdatax-stge_loc = wa_stolocation_conf-lgort. "庫位APPEND wa_storagelocationdatax TO lt_storagelocationdatax.ENDLOOP.ENDLOOP."Units of measure * wa_unitsofmeasure-function = '004'. "Function Typewa_unitsofmeasure-material = ps_data-matnr. "商品編碼IF ps_data-zconv_unit = 'X'.wa_unitsofmeasure-alt_unit = ps_data-bstme. "采購單位wa_unitsofmeasure-numerator = ps_data-umrez."基本計量單位轉換分子ELSE.wa_unitsofmeasure-alt_unit = ps_data-meins. "基本單位wa_unitsofmeasure-numerator = '1'. "基本計量單位轉換分子ENDIF.wa_unitsofmeasure-denominatr = '1'. "轉換為基本計量單位的分母"全局主GTIN沿用舊的,沒有舊GTIN就設置新的供應商主GITN為全局GTINREAD TABLE lt_mean INTO wa_mean WITH KEY hpean = 'X'.IF sy-subrc = 0.wa_unitsofmeasure-ean_upc = wa_mean-ean11.wa_unitsofmeasure-ean_cat = wa_mean-eantp.ELSE.READ TABLE gt_outpur ASSIGNING <fs_pur> WITH KEY zsort = ps_data-zsort hpean = 'X'.IF sy-subrc = 0 AND <fs_pur>-ean11 IS NOT INITIAL. "導入GTIN為空,則設置舊的主GTIN為主GTINwa_unitsofmeasure-ean_upc = <fs_pur>-ean11.wa_unitsofmeasure-ean_cat = <fs_pur>-numtp.ENDIF.ENDIF.APPEND wa_unitsofmeasure TO lt_unitsofmeasure.* wa_unitsofmeasurex-function = '004'. "Function Typewa_unitsofmeasurex-material = ps_data-matnr. "商品編碼IF ps_data-zconv_unit = 'X'.wa_unitsofmeasurex-alt_unit = ps_data-bstme. "基本單位ELSE.wa_unitsofmeasurex-alt_unit = ps_data-meins. "基本單位ENDIF.wa_unitsofmeasurex-numerator = 'X'.wa_unitsofmeasurex-denominatr = 'X'.wa_unitsofmeasurex-ean_upc = 'X'.wa_unitsofmeasurex-ean_cat = 'X'.APPEND wa_unitsofmeasurex TO lt_unitsofmeasurex.LOOP AT gt_outpur ASSIGNING <fs_pur> WHERE zsort = ps_data-zsort.CLEAR: wa_vendorean,wa_inforecord_general,wa_inforecord_purchorg,wa_internationalartnos.IF <fs_pur>-ean11 IS NOT INITIAL. * wa_internationalartnos-function = '004'. "Function Typewa_internationalartnos-material = ps_data-matnr. "商品編碼IF ps_data-zconv_unit NE 'X'.wa_internationalartnos-unit = ps_data-meins. "基本計量單位ELSE.wa_internationalartnos-unit = ps_data-bstme. "采購單位ENDIF.wa_internationalartnos-ean_upc = <fs_pur>-ean11. "GTINwa_internationalartnos-ean_cat = <fs_pur>-numtp. "GTIN類型APPEND wa_internationalartnos TO lt_internationalartnos.ENDIF."國際文件號(GTIN) FOR VENDORIF <fs_pur>-lifnr IS NOT INITIAL AND <fs_pur>-ean11 IS NOT INITIAL. * wa_vendorean-function = '004'. "Function Typewa_vendorean-material = ps_data-matnr. "商品編碼IF ps_data-zconv_unit NE 'X'.wa_vendorean-unit = ps_data-meins. "基本計量單位ELSE.wa_vendorean-unit = ps_data-bstme. "采購單位ENDIF.wa_vendorean-vendor_no = <fs_pur>-lifnr. "供應商wa_vendorean-ean_upc = <fs_pur>-ean11. "GTINwa_vendorean-main_ean = <fs_pur>-lfean. "當前供應商的主GTINAPPEND wa_vendorean TO lt_vendorean.ENDIF."采購信息記錄(PIR) 生產公司 + 銷售公司IF ( <fs_pur>-werks = 'AAZ1' OR <fs_pur>-werks = 'BBZ1' OR<fs_pur>-werks = 'CCZ1' OR <fs_pur>-werks = 'AAY1' OR<fs_pur>-werks = 'BBY1' OR <fs_pur>-werks = 'CCY1' ) AND ps_data-matkl NE '200110'."此物料組不導入PIR"查詢是否已經存在采購信息記錄SELECT SINGLE a~infnrINTO wa_inforecord_general-info_recFROM eina AS aINNER JOIN eine AS b ON a~infnr = b~infnrWHERE a~lifnr = <fs_pur>-lifnr AND a~matnr = ps_data-matnr.wa_inforecord_general-material = ps_data-matnr. "物料編碼wa_inforecord_general-mat_grp = <fs_pur>-ekgrp. "采購組wa_inforecord_general-vendor = <fs_pur>-lifnr. "供應商IF ps_data-zconv_unit = 'X'.wa_inforecord_general-po_unit = ps_data-bstme. "采購單位wa_inforecord_general-base_uom = ps_data-meins. "基本單位ELSE.wa_inforecord_general-po_unit = ps_data-meins. "采購單位wa_inforecord_general-base_uom = ps_data-meins. "基本單位ENDIF.IF ps_data-ZCONV_UNIT = 'X'.wa_inforecord_general-CONV_NUM1 = ps_data-UMREZ. "訂單價格單位轉換為訂單單位的分子ELSE.wa_inforecord_general-CONV_NUM1 = '1'. "訂單價格單位轉換為訂單單位的分子ENDIF.wa_inforecord_general-CONV_DEN1 = '1'. "訂單價格單位轉換為訂單單位的分母wa_inforecord_purchorg-info_rec = wa_inforecord_general-info_rec. "采購信息記錄號wa_inforecord_purchorg-material = ps_data-matnr. "物料編碼wa_inforecord_purchorg-vendor = <fs_pur>-lifnr. "供應商wa_inforecord_purchorg-purch_org = <fs_pur>-ekorg. "采購組織wa_inforecord_purchorg-info_type = '0'. "采購信息記錄分類wa_inforecord_purchorg-plant = <fs_pur>-werks. "工廠wa_inforecord_purchorg-pur_group = <fs_pur>-ekgrp. "采購組wa_inforecord_purchorg-currency = <fs_pur>-waers. "貨幣碼wa_inforecord_purchorg-net_price = <fs_pur>-netpr."凈價wa_inforecord_purchorg-price_unit = <fs_pur>-peinh."價格單位IF ps_data-zconv_unit = 'X'.wa_inforecord_purchorg-orderpr_un = ps_data-bstme."采購單位ELSE.wa_inforecord_purchorg-orderpr_un = ps_data-meins."基本單位ENDIF.wa_inforecord_purchorg-tax_code = <fs_pur>-mwskz. "稅碼APPEND wa_inforecord_purchorg TO lt_inforecord_purchorg.AT END OF lifnr.APPEND wa_inforecord_general TO lt_inforecord_general.CLEAR: wa_inforecord_purchorg-plant.APPEND wa_inforecord_purchorg TO lt_inforecord_purchorg. "非工廠層級導入ENDAT.ENDIF.ENDLOOP."listing dataIF ps_data-zconv_cd = abap_true.IF sy-mandt = 240.wa_listingconditions-filia = 'Z001'. "分類ELSE.wa_listingconditions-filia = 'CD'. "分類ENDIF.wa_listingconditions-artnr = ps_data-matnr. "物料編碼wa_listingconditions-changeid = 'J'. "修改類型 (U, I, E, D)wa_listingconditions-datab = sy-datum. "開始生效日期wa_listingconditions-datbi = '99991231'. "有效截至日期APPEND wa_listingconditions TO lt_listingconditions.ENDIF.IF ps_data-zconv_xm = abap_true.IF sy-mandt = 240.wa_listingconditions-filia = 'Z002'. "分類ELSE.wa_listingconditions-filia = 'XM'. "分類ENDIF.wa_listingconditions-artnr = ps_data-matnr. "物料編碼wa_listingconditions-changeid = 'J'. "修改類型 (U, I, E, D)wa_listingconditions-datab = sy-datum. "開始生效日期wa_listingconditions-datbi = '99991231'. "有效截至日期APPEND wa_listingconditions TO lt_listingconditions.ENDIF.IF ps_data-zconv_fz = abap_true.wa_listingconditions-filia = 'FZ'. "分類wa_listingconditions-artnr = ps_data-matnr. "物料編碼wa_listingconditions-changeid = 'J'. "修改類型 (U, I, E, D)wa_listingconditions-datab = sy-datum. "開始生效日期wa_listingconditions-datbi = '99991231'. "有效截至日期APPEND wa_listingconditions TO lt_listingconditions.ENDIF.LOOP AT lt_vendorean INTO wa_vendorean WHERE main_ean = 'X'. "供應商主GTIN始終以舊的為主l_tabix = sy-tabix.READ TABLE lt_mlea TRANSPORTING NO FIELDS WITH KEY matnr = wa_vendorean-material meinh = wa_vendorean-unit lifnr = wa_vendorean-vendor_no.IF sy-subrc = 0.CLEAR: wa_vendorean-main_ean.MODIFY lt_vendorean FROM wa_vendorean INDEX l_tabix.ENDIF.ENDLOOP.CALL FUNCTION 'WRF_MATERIAL_MAINTAINDATA_RT'EXPORTINGheaddata = ls_headdataTABLESreturn = lt_returnclientdata = lt_clientdataclientdatax = lt_clientdataxaddnlclientdata = lt_addnlclientdataaddnlclientdatax = lt_addnlclientdataxmaterialdescription = lt_materialdescriptionplantdata = lt_plantdataplantdatax = lt_plantdataxplantext = lt_plantextplantextx = lt_plantextxstoragelocationdata = lt_storagelocationdatastoragelocationdatax = lt_storagelocationdataxunitsofmeasure = lt_unitsofmeasureunitsofmeasurex = lt_unitsofmeasurexinternationalartnos = lt_internationalartnosvendorean = lt_vendoreanvaluationdata = lt_valuationdatavaluationdatax = lt_valuationdataxsalesdata = lt_salesdatasalesdatax = lt_salesdatax * POSDATA = lt_POSDATA * POSDATAX = lt_POSDATAX * plantkeys = lt_plantkeys * storagelocationkeys = lt_storagelocationkeys * valuationtypekeys = lt_valuationtypekeysinforecord_general = lt_inforecord_generalinforecord_purchorg = lt_inforecord_purchorglistingconditions = lt_listingconditions.CLEAR:wa_return,ps_data-text.LOOP AT lt_return INTO wa_return WHERE type = 'A' OR type = 'E' OR type = 'X' .ps_data-icon = icon_red_light.ps_data-text = ps_data-text && wa_return-id && wa_return-number && ':' && wa_return-message && '#'.ENDLOOP.IF wa_return IS INITIAL.COMMIT WORK AND WAIT.ps_data-icon = icon_green_light.ps_data-text = '物料創建成功!'.ELSE.ROLLBACK WORK.ENDIF.ENDFORM. " FRM_MATERIAL_CREATION *&---------------------------------------------------------------------* *& Form FRM_EXTEND_SALES *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_LT_SALESDATA text * -->P_LT_SALESDATAX text * -->P_4944 text *----------------------------------------------------------------------* FORM frm_extend_sales TABLES pt_salesdata STRUCTURE bapie1mvkertpt_salesdatax STRUCTURE bapie1mvkertxUSING ps_data TYPE ty_main_alvvalue(p1)value(p2).DATA: wa_salesdata TYPE bapie1mvkert,wa_salesdatax TYPE bapie1mvkertx.* wa_salesdata-function = '004'. "Function Typewa_salesdata-material = ps_data-matnr. "商品編碼wa_salesdata-sales_org = p1. "銷售組織wa_salesdata-distr_chan = p2. "銷售渠道wa_salesdata-mat_pr_grp = ps_data-kondm. "物料定價組wa_salesdata-acct_assgt = ps_data-ktgrm. "科目設置組wa_salesdata-sales_unit = ps_data-meins. "銷售單位APPEND wa_salesdata TO pt_salesdata.* wa_salesdatax-function = '004'. "Function Typewa_salesdatax-material = ps_data-matnr. "商品編碼wa_salesdatax-sales_org = p1. "銷售組織wa_salesdatax-distr_chan = p2. "銷售渠道wa_salesdatax-mat_pr_grp = 'X'. "物料定價組wa_salesdatax-acct_assgt = 'X'. "科目設置組 * wa_salesdatax-sales_unit = 'X'. "銷售單位APPEND wa_salesdatax TO pt_salesdatax.ENDFORM. " FRM_EXTEND_SALES-
導入增強字段需要SMOD/CMOD增強:MGV00003=>EXIT_SAPL1001_003
DATA:ls_zallocate TYPE zallocate,ls_zallocatex TYPE zallocatex.FIELD-SYMBOLS: <fs_stru> TYPE any,<fs_value> TYPE any,<fs_strux> TYPE any,<fs_valuex> TYPE any.DATA: lo_struct TYPE REF TO cl_abap_structdescr,lo_table TYPE REF TO cl_abap_tabledescr,lt_comp TYPE cl_abap_structdescr=>component_table. DATA: l_main_comp TYPE i."get components numbers(RTTS) lo_struct ?= cl_abap_structdescr=>describe_by_name( 'zallocate' ). "Main lt_comp = lo_struct->get_components( ). l_main_comp = lines( lt_comp ).ls_zallocate = f_plantext+250(*). ls_zallocatex = f_plantextx+250(*).ASSIGN ls_zallocate TO <fs_stru>. ASSIGN ls_zallocatex TO <fs_strux>.CHECK <fs_stru> IS ASSIGNED. CHECK <fs_strux> IS ASSIGNED.IF f_plantext-field1 = 'ZALLOCATE'.DO l_main_comp TIMES. "如果更新標識為空,則不處理對應字段ASSIGN COMPONENT sy-tabix OF STRUCTURE <fs_stru> TO <fs_value>.ASSIGN COMPONENT sy-tabix OF STRUCTURE <fs_strux> TO <fs_valuex>.IF <fs_value> IS ASSIGNED AND <fs_valuex> IS ASSIGNED.IF <fs_valuex> NE 'X'.CLEAR: <fs_value>.ENDIF.ENDIF.ENDDO.MOVE-CORRESPONDING ls_zallocate TO f_marc_ueb. ENDIF.
-
總結
以上是生活随笔為你收集整理的MM41/MM42/MM43零售物料主数据BAPI创建示例(WRF_MATERIAL_MAINTAINDATA_RT)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 主机电子游戏攻略资源分享
- 下一篇: Netty的断线重连