*&---------------------------------------------------------------------*
*& Report ZTEST_Y006
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_Y006 NO STANDARD PAGE HEADING.
TABLES: STPOX,MARA.
CLASS: CL_GUI_COLUMN_TREE DEFINITION LOAD,
CL_GUI_CFW DEFINITION LOAD .
DATA: TREE1 TYPE REF TO CL_HRPAYNA_GUI_ALV_TREE," CL_GUI_ALV_TREE ,
MR_TOOLBAR TYPE REF TO CL_GUI_TOOLBAR .
DATA: GS_STPOX TYPE STPOX,
GT_STPOX TYPE STPOX OCCURS 0,
GT_FIELDCATALOG TYPE LVC_T_FCAT,
GT_ITEM_LAYOUT TYPE LVC_T_LACI,
GS_ITEM_LAYOUT TYPE LVC_S_LACI,
OKCODE LIKE SY-UCOMM .
TYPES: BEGIN OF GS_F.
INCLUDE STRUCTURE STPOX.
TYPES: NODE_KEY TYPE LVC_NKEY,
* MENGE_EA TYPE stpo-menge, "CHANGE BY XULE 20160308
MENGE_EA TYPE P DECIMALS 0,"ADD BY XULE 20160308
MEINS_EA TYPE STRING,
* MENGE_DEL TYPE stpo-menge,
STATUS_STR(255) TYPE C,
END OF GS_F.
DATA: GS_XSTPOX TYPE GS_F ,
WA_XSTPOX TYPE GS_F,
GT_XSTPOX TYPE GS_F OCCURS 0.
DATA GT_TREETAB TYPE GS_F OCCURS 0.
DATA: L_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: WA_TOPMAT TYPE CSTMAT,
WA_DSTST TYPE CSDATA-XFELD.
DATA: IT_MATCAT TYPE STANDARD TABLE OF CSCMAT.
DATA:BEGIN OF GT_MSPR OCCURS 0,
MATNR LIKE MSPR-MATNR,"物料
WERKS LIKE MSPR-WERKS,"工厂
LGORT LIKE MSPR-LGORT,"库存地点
LGOBE LIKE T001L-LGOBE,"库存地点描述
SOBKZ LIKE MSPR-SOBKZ,"特殊库存标识
PSPNR LIKE MSPR-PSPNR,"WBS
PRLAB LIKE MSPR-PRLAB,"项目库存数量
END OF GT_MSPR.
DATA:BEGIN OF GT_MARM OCCURS 0,
MATNR TYPE MARM-MATNR,
MEINH TYPE MARM-MEINH,
BRGEW TYPE MARM-BRGEW,
UMREN TYPE MARM-UMREN,
END OF GT_MARM.
DATA:BEGIN OF GT_AFKO OCCURS 0,
AUFNR LIKE AFKO-AUFNR,
PLNBEZ LIKE AFKO-PLNBEZ,
GAMNG LIKE AFKO-GAMNG,
END OF GT_AFKO.
DATA:BEGIN OF GT_MSEG OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MATNR LIKE MSEG-MATNR,
END OF GT_MSEG.
PARAMETERS:
*p_matnr LIKE mara-matnr ,
P_WERKS LIKE EKPO-WERKS DEFAULT 'HB01' .
SELECT-OPTIONS S_MATNR FOR MARA-MATNR.
*INCLUDE ZPPR016_LCL.
START-OF-SELECTION.
PERFORM GETDATA USING 'X'.
PERFORM FRM_PROCESS_DATA.
START-OF-SELECTION.
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Form getdata
*&---------------------------------------------------------------------*
FORM GETDATA USING PV_MEHRS.
REFRESH GT_MARM.
DATA:BEGIN OF LT_MATNR OCCURS 0,
MATNR TYPE MATNR,
MAKTX TYPE MAKT-MAKTX,
MEINS TYPE MARA-MEINS,
END OF LT_MATNR.
SELECT A~MATNR B~MAKTX C~MEINS INTO TABLE LT_MATNR
FROM MARC AS A JOIN MAKT AS B
ON A~MATNR = B~MATNR
JOIN MARA AS C
ON C~MATNR = A~MATNR
WHERE A~MATNR IN S_MATNR AND A~WERKS = P_WERKS
AND B~SPRAS = SY-LANGU.
LOOP AT LT_MATNR.
REFRESH GT_STPOX.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
CAPID = 'PP01' " p_capid
DATUV = SY-DATUM
MEHRS = PV_MEHRS
* stlal = '01' "可选BOM
* stlan = '2' "BOM 用途
MTNRV = LT_MATNR-MATNR
WERKS = P_WERKS
* emeng = 1
IMPORTING
TOPMAT = WA_TOPMAT
DSTST = WA_DSTST
TABLES
STB = GT_STPOX
MATCAT = IT_MATCAT
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MATERIAL_NOT_FOUND = 3
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7
CONVERSION_ERROR = 8
OTHERS = 9.
CLEAR GS_XSTPOX.
GS_XSTPOX-STUFE = 1.
GS_XSTPOX-OJTXB = LT_MATNR-MAKTX.
GS_XSTPOX-IDNRK = LT_MATNR-MATNR.
SELECT SINGLE BMENG INTO GS_XSTPOX-MENGE
FROM STKO AS A
JOIN MAST AS B
ON A~STLNR = B~STLNR
AND A~STLAL = B~STLAL
WHERE A~STLTY = 'M'
AND B~STLAN = '1'
AND B~MATNR = LT_MATNR-MATNR
AND B~WERKS = P_WERKS.
GS_XSTPOX-MEINS = LT_MATNR-MEINS.
GS_XSTPOX-OJTXP = LT_MATNR-MAKTX.
GS_XSTPOX-XTLTY = 1.
GS_XSTPOX-XTLNR = 1.
GS_XSTPOX-XTLAN = 1.
GS_XSTPOX-XTLAL = 1.
APPEND GS_XSTPOX TO GT_TREETAB.
APPEND GS_XSTPOX TO GT_XSTPOX.
LOOP AT GT_STPOX INTO GS_STPOX.
MOVE-CORRESPONDING GS_STPOX TO GS_XSTPOX .
GS_XSTPOX-STUFE = GS_XSTPOX-STUFE + 1.
APPEND GS_XSTPOX TO GT_XSTPOX.
ENDLOOP.
ENDLOOP.
IF GT_XSTPOX[] IS NOT INITIAL .
SELECT MATNR
MEINH
BRGEW
UMREN
INTO TABLE GT_MARM FROM MARM
FOR ALL ENTRIES IN GT_XSTPOX
WHERE MATNR = GT_XSTPOX-IDNRK
AND MEINH <> GT_XSTPOX-MEINS.
LOOP AT GT_XSTPOX INTO GS_XSTPOX.
CLEAR GT_MARM.
READ TABLE GT_MARM WITH KEY MATNR = GS_XSTPOX-IDNRK.
IF SY-SUBRC EQ 0 AND GT_MARM-BRGEW <> 0.
GS_XSTPOX-MENGE_EA = GS_XSTPOX-MENGE * GT_MARM-UMREN / GT_MARM-BRGEW.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = GT_MARM-MEINH
LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
* OUTPUT =
SHORT_TEXT = GS_XSTPOX-MEINS_EA
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
MODIFY GT_XSTPOX FROM GS_XSTPOX.
ENDLOOP.
ENDIF.
IF GT_XSTPOX[] IS NOT INITIAL .
SELECT A~MATNR A~WERKS A~LGORT B~LGOBE A~SOBKZ A~PSPNR A~PRLAB
INTO TABLE GT_MSPR
FROM MSPR AS A INNER JOIN T001L AS B ON A~LGORT = B~LGORT AND A~WERKS = B~WERKS
FOR ALL ENTRIES IN GT_XSTPOX
WHERE A~MATNR = GT_XSTPOX-IDNRK
AND A~WERKS = P_WERKS
AND A~SOBKZ = 'Q'
AND A~PRLAB NE 0.
* 从表AFKO中取出该物料用到哪个生产订单中
SELECT AUFNR PLNBEZ GAMNG INTO TABLE GT_AFKO
FROM AFKO
FOR ALL ENTRIES IN GT_XSTPOX
WHERE PLNBEZ = GT_XSTPOX-IDNRK
AND PLNBEZ NOT LIKE 'N%'.
* 从表MSEG中取出移动类型为261的物料
SELECT MATNR INTO CORRESPONDING FIELDS OF TABLE GT_MSEG
FROM AUFM
FOR ALL ENTRIES IN GT_XSTPOX
WHERE MATNR = GT_XSTPOX-IDNRK
AND WERKS = P_WERKS
AND BWART = '261'.
ENDIF.
SORT GT_MSPR BY MATNR .
SORT GT_AFKO BY PLNBEZ.
SORT GT_MSEG BY MATNR.
ENDFORM. "getdata
*----------------------------------------------------------------------*
"定义事件注册类(使用双击事件)
*----------------------------------------------------------------------*
* INCLUDE BCALV_TREE_EVENT_REC_DRAGDROP *
*----------------------------------------------------------------------*
CLASS cl_tree_event_receiver DEFINITION.
PUBLIC SECTION.
* double click item
METHODS handle_double_click
FOR EVENT node_double_click OF cl_gui_alv_tree_simple
IMPORTING index_outtab
grouplevel.
ENDCLASS. "CL_TREE_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
* CLASS CL_TREE_EVENT_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS cl_tree_event_receiver IMPLEMENTATION.
METHOD handle_double_click.
CHECK NOT index_outtab IS INITIAL.
"获取当前行
* READ TABLE gt_show(数据内表) INTO l_wa_data INDEX index_outtab.
if sy-subrc = 0.
"事件操作
endif.
ENDMETHOD. "HANDLE_DOUBLE_CLICK
ENDCLASS. "CL_TREE_EVENT_RECEIVER IMPLEMENTATION
* MODULE status_9000 OUTPUT
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'MAIN'.
SET TITLEBAR 'TITLE'.
IF TREE1 IS INITIAL.
PERFORM INIT_TREE.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDMODULE. " PBO_9000 OUTPUT
*----------------------------------------------------------------------*
* MODULE user_command_9000 INPUT
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE OKCODE.
WHEN 'EXIT' OR 'CANC'.
CALL METHOD TREE1->FREE.
LEAVE PROGRAM .
WHEN 'BACK'.
CALL METHOD TREE1->FREE.
LEAVE TO SCREEN 0.
WHEN 'EXCEL'.
CALL FUNCTION 'ZXLWB_CALLFORM'
EXPORTING
IV_FORMNAME = 'ZXLS_TREE'
IV_CONTEXT_REF = TREE1
* IV_VIEWER_TITLE = SY-TITLE
* IV_VIEWER_CALLBACK_PROG = SY-CPROG
* IV_VIEWER_CALLBACK_FORM =
* IV_VIEWER_SUPPRESS =
* IV_PROTECT =
* IV_SAVE_AS =
* IT_DOCPROPERTIES =
* IMPORTING
* EV_DOCUMENT_RAWDATA =
EXCEPTIONS
PROCESS_TERMINATED = 1
OTHERS = 2
.
WHEN 'EXCEL_ALL'.
REFRESH GT_XSTPOX.
PERFORM GETDATA USING 'X'.
PERFORM FRM_PROCESS_DATA.
TREE1->FREE( ).
PERFORM INIT_TREE.
* PERFORM FRM_GRANCE_TREE_DATA.
* LOOP AT GT_XSTPOX INTO WA_xstpox.
* PERFORM frm_add_nodes USING WA_xstpox.
* ENDLOOP.
* CALL FUNCTION 'ZXLWB_CALLFORM'
* EXPORTING
* IV_FORMNAME = 'ZXLS_TREE'
* IV_CONTEXT_REF = TREE1
** IV_VIEWER_TITLE = SY-TITLE
** IV_VIEWER_CALLBACK_PROG = SY-CPROG
** IV_VIEWER_CALLBACK_FORM =
** IV_VIEWER_SUPPRESS =
** IV_PROTECT =
** IV_SAVE_AS =
** IT_DOCPROPERTIES =
** IMPORTING
** EV_DOCUMENT_RAWDATA =
* EXCEPTIONS
* PROCESS_TERMINATED = 1
* OTHERS = 2
* .
WHEN OTHERS.
CALL METHOD CL_GUI_CFW=>DISPATCH.
ENDCASE.
CLEAR OKCODE.
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDMODULE. " okcode INPUT
*&---------------------------------------------------------------------*
*& Form init_tree
*&---------------------------------------------------------------------*
FORM INIT_TREE .
* APPEND LINES OF GT_XSTPOX to GT_TREETAB.
* CREATE OBJECT TREE_EVENT_RECEIVER.
DATA: tree_event_receiver TYPE REF TO cl_tree_event_receiver.
CREATE OBJECT tree_event_receiver.
PERFORM BUILD_FIELDCATALOG.
CREATE OBJECT TREE1
EXPORTING
* parent = l_custom_container
PARENT = CL_GUI_CONTAINER=>SCREEN0
NODE_SELECTION_MODE = CL_GUI_COLUMN_TREE=>NODE_SEL_MODE_SINGLE
ITEM_SELECTION = 'X'
NO_HTML_HEADER = 'X'
NO_TOOLBAR = ' '
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
ILLEGAL_NODE_SELECTION_MODE = 5
FAILED = 6
ILLEGAL_COLUMN_NAME = 7.
IF SY-SUBRC <> 0.
MESSAGE '创建TREE错误' TYPE 'E'.
ENDIF.
DATA L_HIERARCHY_HEADER TYPE TREEV_HHDR.
PERFORM BUILD_HIERARCHY_HEADER CHANGING L_HIERARCHY_HEADER.
DATA: LS_VARIANT TYPE DISVARIANT.
LS_VARIANT-REPORT = SY-REPID.
* BREAK-POINT.
CALL METHOD TREE1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_HIERARCHY_HEADER = L_HIERARCHY_HEADER
I_BACKGROUND_ID = 'ALV_BACKGROUND'
I_SAVE = 'A'
IS_VARIANT = LS_VARIANT
CHANGING
* IT_OUTTAB = GT_STPOX "table must be emty !!
IT_OUTTAB = GT_TREETAB"table must be emty !!
IT_FIELDCATALOG = GT_FIELDCATALOG.
PERFORM FRM_GRANCE_TREE_DATA.
PERFORM REGISTER_EVENTS.
* SET HANDLER TREE_EVENT_RECEIVER->EXPAND_NC FOR TREE1.
* SET HANDLER TREE_EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR TREE1.
CALL METHOD TREE1->UPDATE_CALCULATIONS.
CALL METHOD TREE1->FRONTEND_UPDATE.
ENDFORM. " init_tree
*&---------------------------------------------------------------------*
*& Form build_fieldcatalog
*&---------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG.
DATA: LS_FIELDCATALOG TYPE LVC_S_FCAT.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'STPOX'
CHANGING
CT_FIELDCAT = GT_FIELDCATALOG.
* BREAK-POINT.
LOOP AT GT_FIELDCATALOG INTO LS_FIELDCATALOG.
* CASE ls_fieldcatalog-fieldname.
* WHEN 'CARRID' OR 'CONNID' OR 'FLDATE'.
* ls_fieldcatalog-no_out = 'X'.
* ls_fieldcatalog-key = ''.
* WHEN 'PRICE' OR 'SEATSOCC' OR 'SEATSMAX' OR 'PAYMENTSUM'.
** ls_fieldcatalog-do_sum = 'X'.
* WHEN 'PLANETYPE'.
* ls_fieldcatalog-edit = 'X'.
* ls_fieldcatalog-style = cl_gui_alv_grid=>mc_style_enabled .
* ENDCASE.
* MODIFY GT_FIELDCATALOG FROM LS_FIELDCATALOG.
CASE LS_FIELDCATALOG-FIELDNAME.
* WHEN 'OJTXB'.
* LS_FIELDCATALOG-COL_POS = '1'.
WHEN 'IDNRK'.
LS_FIELDCATALOG-COL_POS = '1'.
WHEN 'MENGE'.
LS_FIELDCATALOG-COL_POS = '2'.
WHEN 'MEINS'.
LS_FIELDCATALOG-COL_POS = '3'.
WHEN OTHERS.
DELETE GT_FIELDCATALOG INDEX SY-TABIX .
CONTINUE.
ENDCASE.
MODIFY GT_FIELDCATALOG FROM LS_FIELDCATALOG TRANSPORTING COL_POS.
ENDLOOP.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-COL_POS = '4'.
LS_FIELDCATALOG-FIELDNAME = 'MENGE_EA'.
LS_FIELDCATALOG-DATATYPE = 'QUAN'.
LS_FIELDCATALOG-INTTYPE = 'P'.
LS_FIELDCATALOG-INTLEN = '13'.
LS_FIELDCATALOG-REPTEXT = '件数'.
LS_FIELDCATALOG-DD_OUTLEN = '13'.
* LS_FIELDCATALOG-REF_FIELD = 'INSTPATH'.
* LS_FIELDCATALOG-REF_TABLE = 'TSKTL'.
LS_FIELDCATALOG-SCRTEXT_M = '件数'.
LS_FIELDCATALOG-SCRTEXT_S = LS_FIELDCATALOG-SCRTEXT_M.
LS_FIELDCATALOG-SCRTEXT_L = LS_FIELDCATALOG-SCRTEXT_M.
APPEND LS_FIELDCATALOG TO GT_FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-COL_POS = '5'.
LS_FIELDCATALOG-FIELDNAME = 'MEINS_EA'.
LS_FIELDCATALOG-DATATYPE = 'CHAR'.
LS_FIELDCATALOG-INTTYPE = 'C'.
LS_FIELDCATALOG-INTLEN = '6'.
LS_FIELDCATALOG-REPTEXT = '附加单位'.
LS_FIELDCATALOG-DD_OUTLEN = '6'.
* LS_FIELDCATALOG-REF_FIELD = 'INSTPATH'.
* LS_FIELDCATALOG-REF_TABLE = 'TSKTL'.
LS_FIELDCATALOG-SCRTEXT_M = '附加单位'.
LS_FIELDCATALOG-SCRTEXT_S = LS_FIELDCATALOG-SCRTEXT_M.
LS_FIELDCATALOG-SCRTEXT_L = LS_FIELDCATALOG-SCRTEXT_M.
APPEND LS_FIELDCATALOG TO GT_FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-COL_POS = '6'.
LS_FIELDCATALOG-FIELDNAME = 'STATUS_STR'.
LS_FIELDCATALOG-DATATYPE = 'CHAR'.
LS_FIELDCATALOG-INTTYPE = 'C'.
LS_FIELDCATALOG-INTLEN = '255'.
LS_FIELDCATALOG-REPTEXT = '状态'.
LS_FIELDCATALOG-DD_OUTLEN = '255'.
* LS_FIELDCATALOG-REF_FIELD = 'INSTPATH'.
* LS_FIELDCATALOG-REF_TABLE = 'TSKTL'.
LS_FIELDCATALOG-SCRTEXT_M = '状态'.
LS_FIELDCATALOG-SCRTEXT_S = LS_FIELDCATALOG-SCRTEXT_M.
LS_FIELDCATALOG-SCRTEXT_L = LS_FIELDCATALOG-SCRTEXT_M.
APPEND LS_FIELDCATALOG TO GT_FIELDCATALOG.
ENDFORM. " build_fieldcatalog
*&---------------------------------------------------------------------*
*& Form build_hierarchy_header
*&---------------------------------------------------------------------*
FORM BUILD_HIERARCHY_HEADER CHANGING
P_HIERARCHY_HEADER TYPE TREEV_HHDR.
*
P_HIERARCHY_HEADER-HEADING = 'BOM层次'.
P_HIERARCHY_HEADER-TOOLTIP = 'ToolTip'.
P_HIERARCHY_HEADER-WIDTH = 30.
P_HIERARCHY_HEADER-WIDTH_PIX = ''.
*
ENDFORM. " build_hierarchy_header
*&---------------------------------------------------------------------*
*& Form add_complete_line
*&---------------------------------------------------------------------*
FORM ADD_COMPLETE_LINE USING PS_STPOX TYPE GS_F "STPOX
P_RELAT_KEY TYPE LVC_NKEY
CHANGING P_NODE_KEY TYPE LVC_NKEY.
DATA: L_NODE_TEXT TYPE LVC_VALUE.
* set item-layout
DATA: LT_ITEM_LAYOUT TYPE LVC_T_LAYI,
LS_ITEM_LAYOUT TYPE LVC_S_LAYI.
* DATA: stufe_num(2) TYPE n.
DATA LS_LVC_LAYN TYPE LVC_S_LAYN.
LS_ITEM_LAYOUT-FIELDNAME = TREE1->C_HIERARCHY_COLUMN_NAME.
LS_ITEM_LAYOUT-CLASS = CL_GUI_COLUMN_TREE=>ITEM_CLASS_TEXT.
* ls_item_layout-editable = 'X'.
LS_ITEM_LAYOUT-CHOSEN = 'X'. " 设置为选中状态
IF PS_STPOX-XTLTY IS INITIAL
AND PS_STPOX-XTLNR IS INITIAL
AND PS_STPOX-XTLAN IS INITIAL
AND PS_STPOX-XTLAL IS INITIAL.
LS_LVC_LAYN-ISFOLDER = ' '. " 文件夹格式
LS_LVC_LAYN-EXPANDER = ' '. " 展开
LS_LVC_LAYN-N_IMAGE = '@05@'. " 展开
ELSE.
LS_LVC_LAYN-ISFOLDER = 'X'. " 文件夹格式
LS_LVC_LAYN-EXPANDER = 'X'. " 展开
LS_LVC_LAYN-N_IMAGE = '@04@'. " 展开
LS_LVC_LAYN-EXP_IMAGE = '@05@'. " 展开
ENDIF.
APPEND LS_ITEM_LAYOUT TO LT_ITEM_LAYOUT.
* l_node_text = ps_stpox-ojtxp.
* stufe_num = ps_stpox-stufe.
*
* CONCATENATE stufe_num ',' ps_stpox-ojtxp INTO l_node_text.
L_NODE_TEXT = PS_STPOX-OJTXP.
CALL METHOD TREE1->ADD_NODE
EXPORTING
I_RELAT_NODE_KEY = P_RELAT_KEY
I_RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
IS_OUTTAB_LINE = PS_STPOX
IS_NODE_LAYOUT = LS_LVC_LAYN
I_NODE_TEXT = L_NODE_TEXT
IT_ITEM_LAYOUT = LT_ITEM_LAYOUT
IMPORTING
E_NEW_NODE_KEY = P_NODE_KEY.
ENDFORM. " add_complete_line
*&---------------------------------------------------------------------*
*& Form REGISTER_EVENTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM REGISTER_EVENTS .
DATA: LT_EVENTS TYPE CNTL_SIMPLE_EVENTS,
L_EVENT TYPE CNTL_SIMPLE_EVENT.
* define the events which will be passed to the backend
CLEAR L_EVENT.
L_EVENT-EVENTID = CL_GUI_COLUMN_TREE=>EVENTID_NODE_DOUBLE_CLICK.
L_EVENT-APPL_EVENT = 'X'.
APPEND L_EVENT TO LT_EVENTS.
CLEAR L_EVENT.
L_EVENT-EVENTID = CL_GUI_COLUMN_TREE=>EVENTID_EXPAND_NO_CHILDREN.
APPEND L_EVENT TO LT_EVENTS.
CLEAR L_EVENT.
L_EVENT-EVENTID = CL_GUI_COLUMN_TREE=>EVENTID_HEADER_CLICK.
APPEND L_EVENT TO LT_EVENTS.
CLEAR L_EVENT.
L_EVENT-EVENTID = CL_GUI_COLUMN_TREE=>EVENTID_NODE_KEYPRESS.
APPEND L_EVENT TO LT_EVENTS.
CLEAR L_EVENT.
* register events
CALL METHOD TREE1->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = LT_EVENTS
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
ILLEGAL_EVENT_COMBINATION = 3.
IF SY-SUBRC <> 0.
MESSAGE X534(0K).
ENDIF.
ENDFORM. " REGISTER_EVENTS
*&---------------------------------------------------------------------*
*& Form FRM_GRANCE_TREE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GRANCE_TREE_DATA .
DATA: L1 TYPE LVC_NKEY ,L2 TYPE LVC_NKEY ,L3 TYPE LVC_NKEY ,L4 TYPE LVC_NKEY ,
L5 TYPE LVC_NKEY ,L6 TYPE LVC_NKEY ,L7 TYPE LVC_NKEY ,L8 TYPE LVC_NKEY ,
L_KEY TYPE LVC_NKEY,
L_LAST_KEY TYPE LVC_NKEY ,
ADDED .
LOOP AT GT_XSTPOX INTO GS_XSTPOX .
MOVE-CORRESPONDING GS_XSTPOX TO GS_STPOX.
* CASE GS_STPOX-STUFE .
CASE GS_XSTPOX-STUFE .
WHEN '1'.
L_KEY = ''.
WHEN '2'.
L_KEY = L1.
WHEN '3'.
L_KEY = L2.
WHEN '4'.
L_KEY = L3.
WHEN '5'.
L_KEY = L4.
WHEN '6'.
L_KEY = L5.
ENDCASE.
PERFORM ADD_COMPLETE_LINE USING GS_XSTPOX L_KEY
CHANGING L_LAST_KEY.
GS_XSTPOX-NODE_KEY = L_LAST_KEY.
CASE GS_STPOX-STUFE .
WHEN '1'.
L1 = L_LAST_KEY.
WHEN '2'.
L2 = L_LAST_KEY.
WHEN '3'.
L3 = L_LAST_KEY.
WHEN '4'.
L4 = L_LAST_KEY.
WHEN '5'.
L5 = L_LAST_KEY.
WHEN '6'.
L6 = L_LAST_KEY.
ENDCASE.
MODIFY GT_XSTPOX FROM GS_XSTPOX .
ENDLOOP.
ENDFORM. " FRM_GRANCE_TREE_DATA
*&---------------------------------------------------------------------*
*& Form FRM_ADD_NODES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ADD_NODES USING PS_XSTPOX TYPE GS_F.
DATA: L1 TYPE LVC_NKEY ,L2 TYPE LVC_NKEY ,L3 TYPE LVC_NKEY ,L4 TYPE LVC_NKEY ,
L5 TYPE LVC_NKEY ,L6 TYPE LVC_NKEY ,L7 TYPE LVC_NKEY ,L8 TYPE LVC_NKEY ,
L_KEY TYPE LVC_NKEY,
L_LAST_KEY TYPE LVC_NKEY ,
ADDED .
LOOP AT GT_XSTPOX INTO GS_XSTPOX WHERE NODE_KEY IS INITIAL.
MOVE-CORRESPONDING GS_XSTPOX TO GS_STPOX.
CASE GS_STPOX-STUFE .
WHEN '1'.
L_KEY = ''.
WHEN '2'.
L_KEY = L1.
WHEN '3'.
L_KEY = L2.
WHEN '4'.
L_KEY = L3.
WHEN '5'.
L_KEY = L4.
WHEN '6'.
L_KEY = L5.
ENDCASE.
PERFORM ADD_CHILD_NOTES USING GS_XSTPOX PS_XSTPOX-NODE_KEY
CHANGING L_LAST_KEY.
GS_XSTPOX-NODE_KEY = L_LAST_KEY.
CASE GS_STPOX-STUFE .
WHEN '1'.
L1 = L_LAST_KEY.
WHEN '2'.
L2 = L_LAST_KEY.
WHEN '3'.
L3 = L_LAST_KEY.
WHEN '4'.
L4 = L_LAST_KEY.
WHEN '5'.
L5 = L_LAST_KEY.
WHEN '6'.
L6 = L_LAST_KEY.
ENDCASE.
MODIFY GT_XSTPOX FROM GS_XSTPOX .
ENDLOOP.
ENDFORM. " FRM_ADD_NODES
*&---------------------------------------------------------------------*
*& Form ADD_CHILD_NOTES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GS_STPOX text
* -->P_L_KEY text
* <--P_L_LAST_KEY text
*----------------------------------------------------------------------*
FORM ADD_CHILD_NOTES USING PS_STPOX TYPE GS_F
P_RELAT_KEY TYPE LVC_NKEY
CHANGING P_NODE_KEY TYPE LVC_NKEY.
DATA: L_NODE_TEXT TYPE LVC_VALUE.
* set item-layout
DATA: LT_ITEM_LAYOUT TYPE LVC_T_LAYI,
LS_ITEM_LAYOUT TYPE LVC_S_LAYI.
* DATA: stufe_num(2) TYPE n.
DATA LS_LVC_LAYN TYPE LVC_S_LAYN.
LS_ITEM_LAYOUT-FIELDNAME = TREE1->C_HIERARCHY_COLUMN_NAME.
LS_ITEM_LAYOUT-CLASS = CL_GUI_COLUMN_TREE=>ITEM_CLASS_TEXT.
* ls_item_layout-editable = 'X'.
LS_ITEM_LAYOUT-CHOSEN = 'X'. " 设置为选中状态
IF PS_STPOX-XTLTY IS INITIAL
AND PS_STPOX-XTLNR IS INITIAL
AND PS_STPOX-XTLAN IS INITIAL
AND PS_STPOX-XTLAL IS INITIAL.
LS_LVC_LAYN-ISFOLDER = ' '. " 文件夹格式
LS_LVC_LAYN-EXPANDER = ' '. " 展开
LS_LVC_LAYN-N_IMAGE = '@05@'. " 展开
ELSE.
LS_LVC_LAYN-ISFOLDER = 'X'. " 文件夹格式
LS_LVC_LAYN-EXPANDER = 'X'. " 展开
LS_LVC_LAYN-N_IMAGE = '@04@'. " 展开
LS_LVC_LAYN-EXP_IMAGE = '@05@'. " 展开
ENDIF.
APPEND LS_ITEM_LAYOUT TO LT_ITEM_LAYOUT.
L_NODE_TEXT = PS_STPOX-OJTXP.
CALL METHOD TREE1->ADD_NODE
EXPORTING
I_RELAT_NODE_KEY = P_RELAT_KEY
I_RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
IS_OUTTAB_LINE = PS_STPOX
IS_NODE_LAYOUT = LS_LVC_LAYN
I_NODE_TEXT = L_NODE_TEXT
IT_ITEM_LAYOUT = LT_ITEM_LAYOUT
IMPORTING
E_NEW_NODE_KEY = P_NODE_KEY.
ENDFORM. " ADD_CHILD_NOTES
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PROCESS_DATA .
DATA: L_LGORT LIKE T001L-LGOBE,
L_PRLAB TYPE STRING,
L_MENGE TYPE STRING,
L_MEINS TYPE STRING,
L_PRLAB1 LIKE MSEG-MENGE,
L_MENGE1 LIKE MSEG-MENGE,
L_MENGE_DEL TYPE STRING.
DATA: L_NUM LIKE SY-TABIX.
DATA L_GAMNG TYPE STRING.
DATA LV_TABIX TYPE SY-TABIX.
LOOP AT GT_XSTPOX INTO GS_XSTPOX.
L_MENGE1 = GS_XSTPOX-MENGE.
L_MENGE_DEL = GS_XSTPOX-MENGE_EA.
LOOP AT GT_MSPR WHERE MATNR = GS_XSTPOX-IDNRK.
LV_TABIX = SY-TABIX.
L_LGORT = GT_MSPR-LGOBE.
L_PRLAB1 = GT_MSPR-PRLAB.
IF L_MENGE1 = L_PRLAB1.
L_MENGE = L_MENGE1.
L_PRLAB = L_PRLAB1.
CLEAR GT_MARM.
READ TABLE GT_MARM WITH KEY MATNR = GS_XSTPOX-IDNRK.
IF SY-SUBRC EQ 0 AND GT_MARM-BRGEW <> 0.
L_PRLAB = L_PRLAB * GT_MARM-UMREN / GT_MARM-BRGEW.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = GT_MARM-MEINH
LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
* OUTPUT =
SHORT_TEXT = L_MEINS
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
L_MENGE_DEL = L_MENGE_DEL - L_PRLAB.
CONCATENATE GS_XSTPOX-STATUS_STR L_LGORT L_PRLAB L_MEINS INTO GS_XSTPOX-STATUS_STR.
CONDENSE GS_XSTPOX-STATUS_STR NO-GAPS.
DELETE GT_MSPR INDEX LV_TABIX.
MODIFY GT_XSTPOX FROM GS_XSTPOX.
EXIT.
ELSEIF L_MENGE1 > L_PRLAB1.
L_MENGE = L_MENGE1.
L_PRLAB = L_PRLAB1.
CLEAR GT_MARM.
READ TABLE GT_MARM WITH KEY MATNR = GS_XSTPOX-IDNRK.
IF SY-SUBRC EQ 0 AND GT_MARM-BRGEW <> 0.
L_PRLAB = L_PRLAB * GT_MARM-UMREN / GT_MARM-BRGEW.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = GT_MARM-MEINH
LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
* OUTPUT = L_MEINS
SHORT_TEXT = L_MEINS
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
L_MENGE_DEL = L_MENGE_DEL - L_PRLAB.
CONCATENATE GS_XSTPOX-STATUS_STR L_LGORT L_PRLAB L_MEINS INTO GS_XSTPOX-STATUS_STR.
CONDENSE GS_XSTPOX-STATUS_STR NO-GAPS.
L_MENGE1 = L_MENGE1 - L_PRLAB.
DELETE GT_MSPR INDEX LV_TABIX.
MODIFY GT_XSTPOX FROM GS_XSTPOX.
CONTINUE.
ELSE.
L_MENGE = L_MENGE1.
L_PRLAB = L_PRLAB1.
CLEAR GT_MARM.
READ TABLE GT_MARM WITH KEY MATNR = GS_XSTPOX-IDNRK.
IF SY-SUBRC EQ 0 AND GT_MARM-BRGEW <> 0.
L_MENGE = L_MENGE * GT_MARM-UMREN / GT_MARM-BRGEW.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = GT_MARM-MEINH
LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
* OUTPUT = L_MEINS
SHORT_TEXT = L_MEINS
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
L_MENGE_DEL = L_MENGE_DEL - L_MENGE.
CONCATENATE GS_XSTPOX-STATUS_STR L_LGORT L_MENGE L_MEINS INTO GS_XSTPOX-STATUS_STR.
CONDENSE GS_XSTPOX-STATUS_STR NO-GAPS.
GT_MSPR-PRLAB = L_PRLAB - GS_XSTPOX-MENGE.
MODIFY GT_MSPR.
MODIFY GT_XSTPOX FROM GS_XSTPOX.
EXIT.
ENDIF.
CLEAR: L_LGORT ,L_PRLAB,L_MENGE.
ENDLOOP.
IF L_MENGE_DEL <> GS_XSTPOX-MENGE_EA AND L_MENGE_DEL > 0.
CONCATENATE GS_XSTPOX-STATUS_STR '缺少:' L_MENGE_DEL L_MEINS INTO GS_XSTPOX-STATUS_STR.
CONDENSE GS_XSTPOX-STATUS_STR NO-GAPS.
ENDIF.
IF GS_XSTPOX-STATUS_STR IS INITIAL.
CLEAR GT_MSEG.
READ TABLE GT_MSEG WITH KEY MATNR = GS_XSTPOX-IDNRK.
IF SY-SUBRC = 0.
GS_XSTPOX-STATUS_STR = '已消耗' .
CONDENSE GS_XSTPOX-STATUS_STR.
ENDIF.
MODIFY GT_XSTPOX FROM GS_XSTPOX.
ENDIF.
IF GS_XSTPOX-STATUS_STR IS INITIAL.
L_NUM = 0.
LOOP AT GT_AFKO WHERE PLNBEZ = GS_XSTPOX-IDNRK.
L_NUM = L_NUM + 1.
IF L_NUM EQ 1.
CLEAR L_GAMNG.
L_GAMNG = GT_AFKO-GAMNG.
CONCATENATE '生产订单号:' GS_XSTPOX-STATUS_STR GT_AFKO-AUFNR `数量:` L_GAMNG INTO GS_XSTPOX-STATUS_STR.
CONDENSE GS_XSTPOX-STATUS_STR.
ELSEIF L_NUM NE 1.
GS_XSTPOX-STATUS_STR = '有多个生产订单' .
CONDENSE GS_XSTPOX-STATUS_STR.
EXIT.
ENDIF.
MODIFY GT_XSTPOX FROM GS_XSTPOX.
ENDLOOP.
ENDIF.
IF GS_XSTPOX-STATUS_STR IS INITIAL.
GS_XSTPOX-STATUS_STR = '未开始操作'.
ENDIF.
MODIFY GT_XSTPOX FROM GS_XSTPOX.
CLEAR:GS_XSTPOX,L_MENGE,L_LGORT,L_PRLAB.
ENDLOOP.
ENDFORM. " FRM_PROCESS_DATA