ABAP源码--当前及可用库存查询
*& REPORT? ZCOK_MM_RINVINQ12.
*???? System?????? ?: ******** ERP項目
*???? Module??????? : MM
*???? Program????? : 庫存查詢
*???? Author??????? ?: 大樹
*???? Description? : 當前庫存以及可用庫存查詢,可對行項目雙擊彈出明細窗口
********************************************************************************************************????????
REPORT? zcok_mm_rinvinq12 MESSAGE-ID zcok_mes01.
*Define tables
TABLES : mchb,mara,t001w,t001l.
*for alv
TYPE-POOLS: slis,vrm.
DATA:
? i_fieldcat_alv? TYPE slis_t_fieldcat_alv, "Define the fieldcat
? i_layout????????? TYPE slis_layout_alv,???? "alv format
? i_fieldcat?????? ?TYPE slis_fieldcat_alv,?? "
? i_events??????? TYPE slis_t_event,??????? "alv event
? i_title??????????? ?TYPE lvc_title,
? w_events??????? LIKE LINE OF i_events,
? i_list_comments TYPE slis_t_listheader,?? "alv listheader
? w_list_comments LIKE LINE OF i_list_comments,
? w_repid LIKE sy-repid.??????????????????? " current program
*Define the fields of internal table
DATA:
? BEGIN OF hd_itab OCCURS 0,
??? werks LIKE mchb-werks,?? "工廠
??? lgort LIKE mchb-lgort,?? "庫存地點
??? lgobe LIKE t001l-lgobe,? "庫存地點描述
??? matnr LIKE mchb-matnr,?? "物料
??? maktx LIKE makt-maktx,?? "物料描述
??? matkl LIKE mara-matkl,?? "物料組
??? spart LIKE mara-spart,?? "產品組
??? vtext LIKE tspat-vtext,? "產品組描述
??? xchpf LIKE marc-xchpf,?? "批次管理是否啟用
??? charg LIKE mchb-charg,?? "批號
??? sobkz LIKE msku-sobkz,?? "特殊庫存標示
??? clabs LIKE mchb-clabs,?? "基本計量單位下的庫存數量 當xchpf為'X'時取值
??? meins LIKE mara-meins,?? "基本計量單位
??? zkcsl LIKE mchb-clabs,?? "kg單位下的庫存數量(可用)
??? zkcjs LIKE mchb-clabs,?? "庫存件數
??? zmeinh LIKE marm-meinh,? "件數對應單位 顯示用
??? xmeinh LIKE marm-meinh,? "件數對應單位
??? kunnr LIKE msku-kunnr,?? "客戶號
??? name1 LIKE kna1-name1,?? "客戶名稱
??? lifnr LIKE mslb-lifnr,?? "供應商號
??? name2 LIKE lfa1-name1,?? "供應商名稱
??? vbeln LIKE mska-vbeln,?? "銷售訂單號
??? posnr LIKE mska-posnr,?? "銷售訂單項目號
??? mng01 LIKE mdez-mng01,?? "可用庫存 md04 事物碼 PLAAB = '02' 時數量
??? mng01js LIKE mchb-clabs,?? "可用庫存件數 md04 事物碼 PLAAB = '02' 時件數
??? color(4) TYPE c,
? END OF hd_itab.
DATA:pop_data LIKE TABLE OF hd_itab WITH HEADER LINE.
DATA:ltd_data LIKE HASHED TABLE OF hd_itab WITH HEADER LINE
?????? WITH UNIQUE KEY werks lgort lgobe matnr maktx matkl spart vtext xchpf charg
?????????????????????? sobkz meins zmeinh xmeinh kunnr name1 lifnr name2 vbeln posnr color.
"定義統計結果內表(必須是哈希內表)
DATA:
? BEGIN OF pop_itab OCCURS 0,
??? werks LIKE mchb-werks,?? "工廠
??? lgort LIKE mchb-lgort,?? "庫存地點
??? lgobe LIKE t001l-lgobe,? "庫存地點描述
??? matnr LIKE mchb-matnr,?? "物料
??? charg LIKE mchb-charg,?? "批號
??? clabs LIKE mchb-clabs,?? "基本計量單位下的庫存數量 當xchpf為'X'時取值
??? meins LIKE mara-meins,?? "基本計量單位
??? zmeinh LIKE marm-meinh,? "件數對應單位 顯示用
??? xmeinh LIKE marm-meinh,? "件數對應單位
??? zkcjs LIKE mchb-clabs,?? "庫存件數
??? sort0 LIKE mdez-sort0,????????????????????????????????? "md04日期
??? delb0 LIKE mdez-delb0,????????????????????????????????? "md04 mrp元素
??? extra LIKE mdez-extra,?? "MD04 MRP元素數據
??? mng01 LIKE mdez-mng01,?? "可用庫存收貨/需求
??? mng02 LIKE mdez-mng02,?? "可用庫存數量
??? mngjs LIKE mdez-mng01,?? "可用庫存件數
??? md4li LIKE mdez-md4li,?? "供應商
??? md4kd LIKE mdez-md4kd,?? "客戶
??? kunli TYPE c LENGTH 35,? "客戶/供應商整合至一列
? END OF pop_itab.
DATA:
? BEGIN OF mara_itab OCCURS 0,
??? matnr LIKE mara-matnr,
??? meins LIKE mara-meins,
? END OF mara_itab.
DATA:
? BEGIN OF unit_itab OCCURS 0,
??? matnr LIKE marm-matnr,
??? meinh LIKE marm-meinh,
? END OF unit_itab.
DATA:
? BEGIN OF unit_count_itab OCCURS 0,
??? matnr LIKE marm-matnr,
??? vcount TYPE i,
? END OF unit_count_itab.
*-----------------------------------------------------------------------*
*???????????????????????????? Define for list_box
*-----------------------------------------------------------------------*
DATA: name1 TYPE vrm_id,
????? list1 TYPE vrm_values,
????? value1 LIKE LINE OF list1.
*-----------------------------------------------------------------------*
*???????????????????????????? Define for 進度條
*-----------------------------------------------------------------------*
DATA: i_prog TYPE i,
i_prog2 TYPE i.
*修改選擇屏,增加單選按鈕,控制用戶進入當前庫存查詢界面或者是可用庫存查詢界面
SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS:
p_po RADIOBUTTON GROUP rad1 USER-COMMAND p_po DEFAULT 'X'.???????????? "P_PO當前庫存查詢
SELECTION-SCREEN COMMENT 13(18) stext-02 FOR FIELD p_po.
SELECTION-SCREEN POSITION 37.
PARAMETERS:
p_mr RADIOBUTTON GROUP rad1.
SELECTION-SCREEN COMMENT 40(18) stext-03 FOR FIELD p_mr.?????????????? "P_MR可用庫存查詢
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK 001 .
*Define selecltion screen
SELECTION-SCREEN BEGIN OF BLOCK 002 WITH FRAME TITLE t1.
SELECT-OPTIONS:s_matnr FOR mchb-matnr MEMORY ID matnr.???????????????? "物料編碼
SELECT-OPTIONS:s_werks FOR t001w-werks MEMORY ID werks OBLIGATORY.???? "工廠 為必填項目
SELECT-OPTIONS:s_lgort FOR t001l-lgort? MEMORY ID lgort OBLIGATORY.???? "庫存地點 為必填項目
SELECT-OPTIONS:s_charg FOR mchb-charg? MEMORY ID charg.???????????????? "批號
SELECT-OPTIONS:s_matkl FOR mara-matkl MEMORY ID matkl.???????????????? "物料組
SELECT-OPTIONS:s_spart FOR mara-spart MEMORY ID spart.???????????????? "產品組
SELECT-OPTIONS:s_sort0 FOR mchb-ersda NO INTERVALS NO-EXTENSION MEMORY ID ersda DEFAULT sy-datum.???????????????? "可用日期
PARAMETERS:s_sobkz LIKE msku-sobkz AS LISTBOX VISIBLE LENGTH 20? DEFAULT '*'.???????????????? "特殊庫存標識
SELECTION-SCREEN END OF BLOCK 002.
AT SELECTION-SCREEN OUTPUT.?????????????????? "初始化選擇屏幕中類型下拉菜單項
? stext-02 = '當前庫存查詢'.
? stext-03 = '可用庫存查詢'.
? REFRESH list1.
*? APPEND VALUE1 TO LIST1.
? name1 = 'S_SOBKZ'.
? value1-key = '*'.
? value1-text = '公司庫存'.
? APPEND value1 TO list1.
? name1 = 'S_SOBKZ'.
? value1-key = 'W'.
? value1-text = '客戶庫存'.
? APPEND value1 TO list1.
? value1-key = 'E'.
? value1-text = '銷售訂單庫存'.
? APPEND value1 TO list1.
? value1-key = 'O'.
? value1-text = '供應商庫存'.
? APPEND value1 TO list1.
? CALL FUNCTION 'VRM_SET_VALUES'
??? EXPORTING
????? id???? = name1
????? values = list1.
? PERFORM set_screen.
*Program initialization
INITIALIZATION.
*Select data
START-OF-SELECTION.
? PERFORM getdata.????? "Read data
? PERFORM processdata.
? PERFORM events_build. "alv event
? PERFORM layout_build. "define alv format attribute
? PERFORM fields_build. "define information of fieldcat
? PERFORM display_data.
END-OF-SELECTION.
? DATA:
??? pagenum TYPE i VALUE 1. "report number
END-OF-PAGE.
? pagenum = pagenum + 1.
*double click event of row item
AT LINE-SELECTION.
**&---------------------------------------------------------------------*
**& FORM SET_SCREEN
**&---------------------------------------------------------------------*
** SET SCREEN ELEMENT DISPLAY
**----------------------------------------------------------------------*
FORM set_screen.
? IF p_po EQ 'X'.
??? LOOP AT SCREEN.
????? IF screen-name = 'S_LGORT' OR
???????? screen-name = '%_S_LGORT_%_APP_%-TEXT' OR
???????? screen-name = '%_S_LGORT_%_APP_%-OPTI_PUSH' OR
???????? screen-name = 'S_LGORT-LOW' OR
???????? screen-name = '%_S_LGORT_%_APP_%-TO_PUSH' OR
???????? screen-name = 'S_LGORT-HIGH' OR
???????? screen-name = '%_S_LGORT_%_APP_%-VALU_PUSH'.
??????? screen-active = 1.
??????? MODIFY SCREEN.
??????? CONTINUE.
????? ENDIF.
????? IF screen-name = 'S_CHARG' OR
???????? screen-name = '%_S_CHARG_%_APP_%-TEXT' OR
???????? screen-name = '%_S_CHARG_%_APP_%-OPTI_PUSH' OR
???????? screen-name = 'S_CHARG-LOW' OR
???????? screen-name = '%_S_CHARG_%_APP_%-TO_PUSH' OR
???????? screen-name = 'S_CHARG-HIGH' OR
???????? screen-name = '%_S_CHARG_%_APP_%-VALU_PUSH'.
??????? screen-active = 1.
??????? MODIFY SCREEN.
??????? CONTINUE.
????? ENDIF.
????? IF screen-name = 'S_SOBKZ' OR
???????? screen-name = '%_S_SOBKZ_%_APP_%-TEXT' OR
???????? screen-name = '%_S_SOBKZ_%_APP_%-OPTI_PUSH' OR
???????? screen-name = 'S_SOBKZ-LOW' OR
???????? screen-name = '%_S_SOBKZ_%_APP_%-TO_PUSH' OR
???????? screen-name = 'S_SOBKZ-HIGH' OR
???????? screen-name = '%_S_SOBKZ_%_APP_%-VALU_PUSH'.
??????? screen-active = 1.
??????? MODIFY SCREEN.
??????? CONTINUE.
????? ENDIF.
????? IF screen-name = 'S_SORT0' OR
???????? screen-name = '%_S_SORT0_%_APP_%-TEXT' OR
???????? screen-name = '%_S_SORT0_%_APP_%-OPTI_PUSH' OR
???????? screen-name = 'S_SORT0-LOW' OR
???????? screen-name = '%_S_SORT0_%_APP_%-TO_PUSH' OR
???????? screen-name = 'S_SORT0-HIGH' OR
???????? screen-name = '%_S_SORT0_%_APP_%-VALU_PUSH'.
??????? screen-active = 0.
??????? MODIFY SCREEN.
??????? CONTINUE.
????? ENDIF.
??? ENDLOOP.
? ELSEIF p_mr EQ 'X'.
??? LOOP AT SCREEN.
????? IF screen-name = 'S_LGORT' OR
???????? screen-name = '%_S_LGORT_%_APP_%-TEXT' OR
???????? screen-name = '%_S_LGORT_%_APP_%-OPTI_PUSH' OR
???????? screen-name = 'S_LGORT-LOW' OR
???????? screen-name = '%_S_LGORT_%_APP_%-TO_PUSH' OR
???????? screen-name = 'S_LGORT-HIGH' OR
???????? screen-name = '%_S_LGORT_%_APP_%-VALU_PUSH'.
??????? screen-active = 0.
??????? MODIFY SCREEN.
??????? CONTINUE.
????? ENDIF.
????? IF screen-name = 'S_CHARG' OR
???????? screen-name = '%_S_CHARG_%_APP_%-TEXT' OR
???????? screen-name = '%_S_CHARG_%_APP_%-OPTI_PUSH' OR
???????? screen-name = 'S_CHARG-LOW' OR
???????? screen-name = '%_S_CHARG_%_APP_%-TO_PUSH' OR
???????? screen-name = 'S_CHARG-HIGH' OR
???????? screen-name = '%_S_CHARG_%_APP_%-VALU_PUSH'.
??????? screen-active = 0.
??????? MODIFY SCREEN.
??????? CONTINUE.
????? ENDIF.
????? IF screen-name = 'S_SOBKZ' OR
???????? screen-name = '%_S_SOBKZ_%_APP_%-TEXT' OR
???????? screen-name = '%_S_SOBKZ_%_APP_%-OPTI_PUSH' OR
???????? screen-name = 'S_SOBKZ-LOW' OR
???????? screen-name = '%_S_SOBKZ_%_APP_%-TO_PUSH' OR
???????? screen-name = 'S_SOBKZ-HIGH' OR
???????? screen-name = '%_S_SOBKZ_%_APP_%-VALU_PUSH'.
??????? screen-active = 0.
??????? MODIFY SCREEN.
??????? CONTINUE.
????? ENDIF.
????? IF screen-name = 'S_SORT0' OR
???????? screen-name = '%_S_SORT0_%_APP_%-TEXT' OR
???????? screen-name = '%_S_SORT0_%_APP_%-OPTI_PUSH' OR
???????? screen-name = 'S_SORT0-LOW' OR
???????? screen-name = '%_S_SORT0_%_APP_%-TO_PUSH' OR
???????? screen-name = 'S_SORT0-HIGH' OR
???????? screen-name = '%_S_SORT0_%_APP_%-VALU_PUSH'.
??????? screen-active = 1.
??????? MODIFY SCREEN.
??????? CONTINUE.
????? ENDIF.
??? ENDLOOP.
??? FREE:? s_lgort, s_charg, s_sobkz.??????????? "當切換到可用庫存查詢界面時候?? 初始化這三個變量
? ENDIF.
ENDFORM.??????????????????? "SET_SCREEN
*&--------------------------------------------------------------------*
*&????? Form? getdata
*&--------------------------------------------------------------------*
*????? Get data and select relevant fields form database table
*---------------------------------------------------------------------*
FORM getdata.
? CLEAR hd_itab.
? CLEAR hd_itab[].
? CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
??? EXPORTING
????? text = '數據處理中,請等待...'.
? PERFORM sub_get_packing.???????? "獲取物料可用于進行件數換算的內表--包含物料編碼以及件數換算單位
? IF s_sobkz <> 'W' AND s_sobkz <> 'E' AND s_sobkz <> 'O'.
??? "如果沒有選擇特殊庫存標識
??? SELECT mchb~werks mchb~lgort mchb~charg mchb~matnr mara~matkl mara~spart marc~xchpf mchb~clabs????? "取批次庫存數量????????????????????????????????? "取批次庫存數量
??? INTO CORRESPONDING FIELDS OF TABLE hd_itab
??? FROM mchb
??? INNER JOIN marc ON mchb~matnr = marc~matnr AND mchb~werks = marc~werks
??? INNER JOIN mara ON mchb~matnr = mara~matnr
????? WHERE mchb~matnr IN s_matnr
??????? AND mchb~werks IN s_werks
??????? AND mchb~lgort IN s_lgort
??????? AND mchb~charg IN s_charg
??????? AND mara~matkl IN s_matkl
??????? AND mara~spart IN s_spart
??????? AND marc~xchpf = 'X'.
??? SELECT mard~werks mard~lgort mard~matnr mara~matkl mara~spart marc~xchpf mard~labst AS clabs???? "取非批次庫存數量
??? APPENDING CORRESPONDING FIELDS OF TABLE hd_itab
??? FROM mard
??? INNER JOIN marc ON mard~matnr = marc~matnr AND mard~werks = marc~werks
??? INNER JOIN mara ON mard~matnr = mara~matnr
????? WHERE mard~matnr IN s_matnr
??????? AND mard~werks IN s_werks
??????? AND mard~lgort IN s_lgort
??????? AND mara~matkl IN s_matkl
??????? AND mara~spart IN s_spart
??????? AND marc~xchpf <> 'X'.
??? IF s_sobkz = ' '.?? "如果選擇了企業庫存標識'*' 則不再去獲取三種特殊庫存數量
????? "如果沒有選擇特殊庫存標識 也沒有選擇企業庫存標識,則依次再獲取三種特殊庫存庫存量
????? PERFORM sub_getdata_msku.
????? PERFORM sub_getdata_mska.
????? PERFORM sub_getdata_mslb.
??? ENDIF.
? ELSEIF s_sobkz = 'W'.????????? "獲取客戶庫存數量
??? PERFORM sub_getdata_msku.
? ELSEIF s_sobkz = 'E'.????????? "獲取供應商庫存數量
??? PERFORM sub_getdata_mska.
? ELSEIF s_sobkz = 'O'.????????? "獲取銷售訂單庫存數量
??? PERFORM sub_getdata_mslb.
? ENDIF.
? SELECT matnr meins
? INTO CORRESPONDING FIELDS OF TABLE mara_itab
? FROM mara.
? SORT mara_itab ASCENDING BY matnr.
? SORT hd_itab ASCENDING BY matnr.
? DELETE hd_itab WHERE clabs = 0.?? "排除庫存數量為零的記錄
ENDFORM.???? "getdata
*&---------------------------------------------------------------------*
*&????? Form? PROCESSDATA
*&---------------------------------------------------------------------*
FORM processdata .
? DATA: l_serno TYPE i,
??????? s_serno TYPE string.
? LOOP AT hd_itab.
??? IF hd_itab-lgort IS NOT INITIAL.
????? SELECT SINGLE lgobe INTO hd_itab-lgobe FROM t001l
??????? WHERE werks = hd_itab-werks AND lgort = hd_itab-lgort.
??? ENDIF.
??? SELECT SINGLE maktx INTO hd_itab-maktx FROM makt
????? WHERE matnr = hd_itab-matnr AND spras = '1'.
??? SELECT SINGLE vtext INTO hd_itab-vtext FROM tspat
????? WHERE spart = hd_itab-spart AND spras = '1'.
??? READ TABLE mara_itab INTO mara_itab WITH KEY matnr = hd_itab-matnr?? "用內表代替select語句,意圖提高性能
??? BINARY SEARCH.
??? IF sy-subrc = 0.
????? hd_itab-meins = mara_itab-meins.
??? ENDIF.
**基本計量單位換算公斤數量
**每基本單位等于多少KG,如果kzmeinh = 'X'則為每KG等于多少基本單位
**如果基本單位為KG,則直接將基本單位庫存數量賦值給公斤計庫存數量
??? CASE hd_itab-meins.
????? WHEN 'KG'.
??????? hd_itab-zkcsl = hd_itab-clabs.
????? WHEN OTHERS.
??????? CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
????????? EXPORTING
??????????? input??????????????? = hd_itab-clabs????? "clabs--基本計量單位下庫存數量,為傳入參數
??????????? kzmeinh????????????? = ' '
??????????? matnr??????????????? = hd_itab-matnr
??????????? meinh??????????????? = 'KG'
????????? IMPORTING
??????????? output?????????????? = hd_itab-zkcsl????? "輸出值賦值給zkcsl--公斤計庫存數量
????????? EXCEPTIONS
??????????? conversion_not_found = 1
??????????? input_invalid??????? = 2
??????????? material_not_found?? = 3
??????????? meinh_not_found????? = 4
??????????? meins_missing??????? = 5
??????????? no_meinh???????????? = 6
??????????? output_invalid?????? = 7
??????????? overflow???????????? = 8
??????????? OTHERS?????????????? = 9.
??????? IF sy-subrc <> 0.
* Implement suitable error handling here
??????? ENDIF.
??? ENDCASE.
??? READ TABLE unit_itab INTO unit_itab WITH KEY matnr = hd_itab-matnr?? "用內表代替select語句,意圖提高性能
??? BINARY SEARCH.
??? hd_itab-xmeinh = unit_itab-meinh.
**調用函數,進行當前庫存件數換算
??? CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
????? EXPORTING
??????? i_matnr????????????? = hd_itab-matnr
??????? i_in_me????????????? = hd_itab-meins
??????? i_out_me???????????? = hd_itab-xmeinh
??????? i_menge????????????? = hd_itab-clabs
????? IMPORTING
??????? e_menge????????????? = hd_itab-zkcjs
????? EXCEPTIONS
??????? error_in_application = 1
??????? error??????????????? = 2
??????? OTHERS?????????????? = 3.
??? MODIFY hd_itab.
??? CLEAR hd_itab.
? ENDLOOP.
? IF p_mr = 'X'.??????????????????? "根據判斷標識決定是否進行可用庫存數量計算
??? PERFORM sub_get_stock_requirements.? "可用庫存數量
??? LOOP AT hd_itab.
**基本計量單位換算公斤數量
**每基本單位等于多少KG,如果kzmeinh = 'X'則為每KG等于多少基本單位
**如果基本單位為KG,則直接將基本單位庫存數量賦值給公斤計庫存數量
????? CASE hd_itab-meins.
??????? WHEN 'KG'.
????????? hd_itab-zkcsl = hd_itab-mng01.
??????? WHEN OTHERS.
????????? CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
??????????? EXPORTING
????????????? input??????????????? = hd_itab-mng01????? "mng01--基本計量單位下可用庫存數量,為傳入參數
????????????? kzmeinh????????????? = ' '
????????????? matnr??????????????? = hd_itab-matnr
????????????? meinh??????????????? = 'KG'
??????????? IMPORTING
????????????? output?????????????? = hd_itab-zkcsl????? "輸出值賦值給zkcsl--公斤計可用庫存數量
??????????? EXCEPTIONS
????????????? conversion_not_found = 1
????????????? input_invalid??????? = 2
????????????? material_not_found?? = 3
????????????? meinh_not_found????? = 4
????????????? meins_missing??????? = 5
????????????? no_meinh???????????? = 6
????????????? output_invalid?????? = 7
????????????? overflow???????????? = 8
????????????? OTHERS?????????????? = 9.
????????? IF sy-subrc <> 0.
* Implement suitable error handling here
????????? ENDIF.
????? ENDCASE.
**調用函數,進行可用庫存件數換算
????? CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
??????? EXPORTING
????????? i_matnr????????????? = hd_itab-matnr
????????? i_in_me????????????? = hd_itab-meins
????????? i_out_me???????????? = hd_itab-xmeinh
????????? i_menge????????????? = hd_itab-mng01
??????? IMPORTING
????????? e_menge????????????? = hd_itab-mng01js
??????? EXCEPTIONS
????????? error_in_application = 1
????????? error??????????????? = 2
????????? OTHERS?????????????? = 3.
??? MODIFY hd_itab.
??? CLEAR hd_itab.
??? ENDLOOP.
? ENDIF.
? LOOP AT hd_itab.
**調用函數,根據登錄時候的語言顯示條目單位采用何種語言顯示“如中文 套、件 而英文 EA ST ”
??? CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'?? "新增功能
????? EXPORTING
??????? input????????? = hd_itab-xmeinh
??????? language?????? = sy-langu
????? IMPORTING
??????? output???????? = hd_itab-zmeinh
????? EXCEPTIONS
??????? unit_not_found = 1
??????? OTHERS???????? = 2.
??? MODIFY hd_itab.
??? CLEAR hd_itab.
??? l_serno = l_serno + 1.
? ENDLOOP.
? s_serno = l_serno .
? IF p_po = 'X'.
??? CONCATENATE '當前庫存查詢:? '? s_serno ' 條記錄' INTO i_title.
? ELSE.
??? CONCATENATE '可用庫存查詢:? '? s_serno ' 條記錄' INTO i_title.
? ENDIF.
ENDFORM.??????????????????? " PROCESSDATA
*&---------------------------------------------------------------------*
*&????? Form? sub_get_packing
*&---------------------------------------------------------------------*
*?????? 排除KG 和 L單位后,取唯一包裝,輸出物料編碼和包裝單位
*----------------------------------------------------------------------*
FORM sub_get_packing.
? CLEAR unit_itab.
? CLEAR unit_itab[].
? CLEAR unit_count_itab.
? CLEAR unit_count_itab[].
? SELECT matnr meinh
? INTO CORRESPONDING FIELDS OF TABLE unit_itab
? FROM marm
? WHERE meinh <> 'KG' AND meinh <> 'L'.
? SELECT DISTINCT matnr COUNT( * )
???? INTO unit_count_itab
?????? FROM marm
?????? WHERE meinh <> 'L' AND meinh <> 'KG'
?????? GROUP BY matnr
?????? HAVING COUNT( * ) > 1.
??? APPEND unit_count_itab.
? ENDSELECT.
? SORT unit_itab ASCENDING BY matnr.
? SORT unit_count_itab ASCENDING BY matnr.
? LOOP AT unit_itab INTO unit_itab.
??? READ TABLE unit_count_itab INTO unit_count_itab WITH KEY matnr = unit_itab-matnr?? "用內表代替select語句,意圖提高性能
??? BINARY SEARCH.
??? IF sy-subrc = 0.
????? DELETE TABLE unit_itab.
??? ENDIF.
? ENDLOOP.
ENDFORM.??????????????????? "sub_get_packing
*&---------------------------------------------------------------------*
*&????? Form? sub_getdata_msku
*&---------------------------------------------------------------------*
*?????? text
*----------------------------------------------------------------------*
FORM sub_getdata_msku.
? SELECT? msku~werks msku~charg msku~sobkz msku~matnr mara~matkl mara~spart msku~kulab AS clabs? msku~kunnr kna1~name1
? APPENDING CORRESPONDING FIELDS OF TABLE hd_itab
? FROM msku
*? INNER JOIN mara ON msku~matnr = mara~matnr
? INNER JOIN kna1 ON msku~kunnr = kna1~kunnr
? INNER JOIN mara ON msku~matnr = mara~matnr
*? INNER JOIN makt ON msku~matnr = makt~matnr AND makt~spras = '1'??? "取物料中文描述,'1'表示中文? 'E'表示英文
??? WHERE msku~matnr IN s_matnr
????? AND msku~werks IN s_werks
????? AND msku~charg IN s_charg
????? AND mara~matkl IN s_matkl
????? AND mara~spart IN s_spart.
*??? ORDER BY msku~werks msku~matnr msku~charg.
ENDFORM.??????????????????? "sub_getdata_msku
*&---------------------------------------------------------------------*
*&????? Form? sub_getdata_mska
*&---------------------------------------------------------------------*
*?????? text
*----------------------------------------------------------------------*
FORM sub_getdata_mska.
? SELECT? mska~werks mska~lgort mska~charg mska~sobkz mska~matnr mara~matkl mara~spart? mska~kalab AS clabs? mska~vbeln mska~posnr
? APPENDING CORRESPONDING FIELDS OF TABLE hd_itab
? FROM mska
? INNER JOIN mara ON mska~matnr = mara~matnr
*? INNER JOIN mara ON mska~matnr = mara~matnr
*? INNER JOIN t001l ON mska~lgort = t001l~lgort AND mska~werks = t001l~werks??? "取庫存地點描述
*? INNER JOIN makt ON mska~matnr = makt~matnr AND makt~spras = '1'??? "取物料中文描述,'1'表示中文? 'E'表示英文
??? WHERE mska~matnr IN s_matnr
????? AND mska~werks IN s_werks
????? AND mska~charg IN s_charg
????? AND mara~matkl IN s_matkl
????? AND mara~spart IN s_spart.
*??? ORDER BY mska~werks mska~lgort mska~matnr mska~charg.
ENDFORM.??????????????????? "sub_getdata_mska
*&---------------------------------------------------------------------*
*&????? Form? sub_getdata_mslb
*&---------------------------------------------------------------------*
*?????? text
*----------------------------------------------------------------------*
FORM sub_getdata_mslb.
? SELECT? mslb~werks mslb~charg mslb~sobkz mslb~matnr mara~matkl mara~spart mslb~lblab AS clabs mslb~lifnr lfa1~name1 AS name2
? APPENDING CORRESPONDING FIELDS OF TABLE hd_itab
? FROM mslb
*? INNER JOIN mara ON mslb~matnr = mara~matnr
? INNER JOIN lfa1 ON mslb~lifnr = lfa1~lifnr
? INNER JOIN mara ON mslb~matnr = mara~matnr
*? INNER JOIN makt ON mslb~matnr = makt~matnr AND makt~spras = '1'??? "取物料中文描述,'1'表示中文? 'E'表示英文
??? WHERE mslb~matnr IN s_matnr
????? AND mslb~werks IN s_werks
????? AND mslb~charg IN s_charg
????? AND mara~matkl IN s_matkl
????? AND mara~spart IN s_spart.
ENDFORM.??????????????????? "sub_getdata_mslb
*&--------------------------------------------------------------------*
*&????? Form? layout_build
*&--------------------------------------------------------------------*
*????? Define ALV layout attribute
*---------------------------------------------------------------------*
FORM layout_build .
? i_layout-zebra = 'X'.
*? i_layout-detail_popup = 'X'.
? i_layout-no_vline = ' '.
? i_layout-colwidth_optimize = 'X'.
*? i_layout-detail_initial_lines = 'X'.
*? i_layout-detail_titlebar = 'detail content'.
*? i_layout-box_fieldname? = 'LINE'.
*? i_layout-f2code = '&ETA'.
*? i_layout-f2code = '&IC1'.
? i_layout-info_fieldname = 'COLOR'.? "Color value
? i_layout-no_colhead = ' '.
? w_repid = sy-repid.
ENDFORM.??????????????????? " layout_build
總結
以上是生活随笔為你收集整理的ABAP源码--当前及可用库存查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采购退货流程
- 下一篇: 刘烨:家里官方语言是中文 听不懂娘仨说法