以下程序不代表企业PRD中的真实程序.
程序中带有 select * 的代码请见谅,由于并不十分影响此程序性能,因此没有修改.
Description: YCOR1005_N
单船收入成本表
单船收入成本表
*---------------------------------------------------------------------* * PROGRAM ID : YCOR1005 * * APPLICATION NAME : CO * * AUTHOR : Victor.Pan * * TRANSACTION : ZCOR05 * * PROGRAM TYPE : REPORT * * OUTPUT : ALV_GRID DYNAMIC OUTPUT * * SAP RELEASE : 4.6C * * DESCRIPTION : 单船收入成本表 * * CREATED TIME : 2006-11-11 * *---------------------------------------------------------------------* * LOG DATE REL CHANGE DESCRIPTION WHO * *=====================================================================* * 001 2006-12-01 LAST-CHANGED COMMENTARY Victor.Pan * *---------------------------------------------------------------------* REPORT YCOR1005 . include YCOR1005_TOP_N. *INCLUDE YCOR1005_TOP. include YCOR1005_CONTROL_N. *INCLUDE YCOR1005_CONTROL. * screen elements SELECTION-SCREEN BEGIN OF BLOCK RAD1 WITH FRAME TITLE TEXT-003. PARAMETERS: BUKRS LIKE BSIS-BUKRS OBLIGATORY. SELECT-OPTIONS: ABPER FOR BSEG-ABPER OBLIGATORY."期间 PARAMETERS: VR TYPE ZCO04_A-ZVARIANT DEFAULT '1' MATCHCODE OBJECT ZCOVARIANT. SELECTION-SCREEN END OF BLOCK RAD1. SELECTION-SCREEN BEGIN OF BLOCK RAD2 WITH FRAME TITLE TEXT-002. PARAMETERS: H1 RADIOBUTTON GROUP A1 USER-COMMAND SELE DEFAULT 'X'. "半成品 PARAMETERS: H2 RADIOBUTTON GROUP A1 ."产成品 PARAMETERS: ORDER_10(10) . SELECTION-SCREEN END OF BLOCK RAD2. AT SELECTION-SCREEN ON ORDER_10. *IF H1 = 'X'. * TH1 = '1121020100'. * ELSEIF H2 = 'X'. * TH1 = '1121040100'. * ENDIF. IF ORDER_10 IS INITIAL. MESSAGE W000(ZFI01) WITH '订单组不能为空'. STOP. ENDIF. AT SELECTION-SCREEN ON ABPER. IF ABPER-LOW = '' OR ABPER-HIGH = ''. MESSAGE E000(ZFI01) WITH '期间不能为空'. ENDIF. AT SELECTION-SCREEN ON VALUE-REQUEST FOR ORDER_10. IF H1 = 'X'. TH1 = '1121020100'. ELSEIF H2 = 'X'. TH1 = '1121040100'. ENDIF. DATA : f4help LIKE TABLE OF ddshretval WITH HEADER LINE. DATA: dynpprog LIKE SY-REPID. DATA: F4_LIST1 LIKE F4_LIST OCCURS 0. dynpprog = SY-REPID. perFORM GET_ORDER_F4_10 TABLES F4_LIST1.."获得订单与f4列表 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'ORDER_10' dynpprog = dynpprog dynpnr = sy-dynnr stepl = '1' window_title = '选择值' value_org = 'S' TABLES value_tab = F4_LIST1 return_tab = f4help. ORDER_10 = f4help-fieldval. *AT SELECTION-SCREEN ON ORDER_10. * IF ORDER_10 IS INITIAL. * MESSAGE W000(ZFI01) WITH '订单组不能为空'. * STOP. * ENDIF. AT SELECTION-SCREEN. AUTHORITY-CHECK OBJECT 'ZBUKRS' ID 'BUKRS' FIELD BUKRS. IF SY-SUBRC <> 0. MESSAGE E000(ZFI01) WITH '没有此公司代码权限'. ENDIF. *AT SELECTION-SCREEN OUTPUT. *BREAK ZHENPAN. START-OF-SELECTION. DATA: LAST_UCOMM TYPE SY-UCOMM. DATA: SALE_NODE TYPE LVC_NKEY. CLEAR SALE_COST_ELEMENT[]. "获得输出列表组 PERFORM GET_DISPLAY_LIST_GROUP TABLES OUT_CG USING VR . PERFORM GET_SALE_COST_ELEMENT TABLES SALE_COST_ELEMENT USING VR. "获得销售成本要素 CLEAR: ORDER_LIST ,ORDER_LIST[]. PERFORM GET_ORDER TABLES ORDER_LIST."获得订单 END-OF-SELECTION. CALL SCREEN 100. include YCOR1005_PROCESS_DATA_N. include YCOR1005_100_N. include YCOR1005_TEST_N. *Text elements *---------------------------------------------------------- * 001 成本要素组 * 002 半成品/产成品 * 003 选择条件 *Selection texts *---------------------------------------------------------- * ABPER 期间 * BUKRS 公司代码 * H1 半成品 * H2 产成品 * ORDER_10 订单组(前10位) * VR 变式 *Messages *---------------------------------------------------------- * * Message class: 00 * 208 & * * Message class: ZFI01 * 000 &1&2&3&4&5
Extracted by Direct Download 46cd version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 46C
Description: YCOR1005_TOP_N
Include YCOR1005_TOP
Include YCOR1005_TOP
*----------------------------------------------------------------------* * INCLUDE YCOR1005_TOP * *----------------------------------------------------------------------* TABLES: BSIS,AUFK,COSP,BSEG,COSS,ZCO04_A,BKPF,COAS,CSKA. DATA: BEGIN OF BELNR_LIST OCCURS 0, "凭证列表 BUKRS LIKE BSIS-BUKRS, GJAHR LIKE BSIS-GJAHR, BELNR LIKE BSIS-BELNR, END OF BELNR_LIST. DATA: BEGIN OF ORDER_LIST OCCURS 0, "订单列表 ORDER LIKE AUFK-AUFNR, END OF ORDER_LIST. DATA: BEGIN OF F4_LIST OCCURS 0, ORDER_10 LIKE AUFK-AUFNR, TEXT LIKE COAS-KTEXT, END OF F4_LIST. DATA: BEGIN OF COST_ELEMENT OCCURS 0,"成本要素列表 ELEMENT LIKE COSP-KSTAR, Z1 LIKE ZCO04_A-Z1,"取数属性 ATTR LIKE ZCO04_A-ATTR,"+/-属性 END OF COST_ELEMENT. DATA: BEGIN OF COST_ELEMENT_GROUP OCCURS 0,"成本要素组列表 ZINDEX LIKE ZCO04_A-ZINDEX,"list_index ELEMENT_GROUP LIKE GRPDYNP-NAME_COALL, Z1 LIKE ZCO04_A-Z1,"取数属性 ATTR LIKE ZCO04_A-ATTR,"+/-属性 END OF COST_ELEMENT_GROUP. DATA: BEGIN OF LIST_STRUCTURE OCCURS 0, ELEMENT_GROUP LIKE GRPDYNP-NAME_COALL, ELEMENT LIKE COSP-KSTAR, TP(1), "G: GROUP ; E: ELEMENT END OF LIST_STRUCTURE. DATA: SALE_COST_ELEMENT LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE. DATA: new_table TYPE REF TO data."out_data table space DATA: new_line TYPE REF TO data."out_data line space DATA: SALE_line TYPE REF TO data. "销售收入数据行 space DATA: COST_LINE TYPE REF TO DATA. "成本行 space DATA: JUDGE_LINE TYPE REF TO DATA. "判断行 DATA: JUDGE_TABLE TYPE REF TO DATA. "判断表 FIELD-SYMBOLS: <J_TABLE> TYPE ANY TABLE, <J_LINE> TYPE ANY. FIELD-SYMBOLS: <l_table> TYPE ANY TABLE, <l_line> TYPE ANY, <l_field> TYPE ANY, <SALE_LINE> TYPE ANY,"销售收入 <COST_LINE> TYPE ANY,"成本 <GP_LINE> TYPE ANY,"毛利 <TCOST_LINE> TYPE ANY."暂估成本 DATA: OUT_table TYPE REF TO data. DATA: OUT_line TYPE REF TO data. DATA: GP_LINE TYPE REF TO DATA. DATA: TCOST_LINE TYPE REF TO DATA."暂估成本 FIELD-SYMBOLS: <OUT_TABLE> TYPE ANY TABLE, <OUT_line> TYPE ANY, <OUT_field> TYPE ANY. "INORDER TO GET HIGH PERFORMANCE,GET DATA INTO DB_TABLE "FIRST FIELD-SYMBOLS: <DB_TABLE> TYPE ANY TABLE, <DB_LINE> TYPE ANY, <DB_FIELD> TYPE ANY. DATA: DB_TABLE TYPE REF TO DATA. DATA: DB_LINE TYPE REF TO DATA. DATA: top_key TYPE lvc_nkey. DATA: SHIPNAME(100). DATA: BEGIN OF EXPAND_key1 OCCURS 0, GROUP LIKE GRPDYNP-NAME_COALL, CKEY TYPE lvc_nkey, END OF EXPAND_KEY1. DATA: OUT_CG LIKE COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE."输出结构 DATA: TH1 TYPE BSIS-HKONT."判断产成品还是半成品
Extracted by Direct Download 46cd version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 46C
Description: YCOR1005_CONTROL_N
Include YCOR1005_CONTROL
Include YCOR1005_CONTROL
*----------------------------------------------------------------------* * INCLUDE YCOR1005_CONTROL * *----------------------------------------------------------------------* DATA: g_alv_tree TYPE REF TO cl_gui_alv_tree, g_custom_container TYPE REF TO cl_gui_custom_container. DATA: gt_fieldcatalog TYPE lvc_t_fcat. DATA: it_fieldcat TYPE lvc_t_fcat. CLASS lcl_tree_event_receiver DEFINITION. PUBLIC SECTION. * §2. Define an event handler method to build up a context menu * (postfix of event name: _CONTEXT_MENU_REQUEST). * This event is fired each time the user klick with the right * mouse button on a node. METHODS: handle_node_cm_req FOR EVENT node_context_menu_request OF cl_gui_alv_tree IMPORTING node_key menu. * §3. Define an event handler method to respond to a function code * triggered by your menu (postfix: _CONTEXT_MENU_SELECTED). * This event is fired when the user selects an entry of the * build up context menu. METHODS: handle_node_cm_sel FOR EVENT node_context_menu_selected OF cl_gui_alv_tree IMPORTING node_key fcode sender. * 'sender' is an implicit event parameter that is provided by * ABAP Objects runtime system. It contains a reference to the * object that fired the event. You may directly use it to * call methods of this instance. ENDCLASS. ****************************************************************** CLASS lcl_tree_event_receiver IMPLEMENTATION. * §4. Implement your event handler methods. METHOD handle_node_cm_req. * Event parameter 'menu' holds a reference to the standard context * menu of ALV Tree (functions 'Expand'/'Collapse' on nodes). * You may either append your own functions (separated by a line) * or clear the menu if you do not want to allow standard functions. * In this case the standard menu is cleared. CALL METHOD menu->clear. * The next line defines one line of the context menu. CALL METHOD menu->add_function EXPORTING fcode = 'DEL_SUBTREE' text = text-901. "Delete Subtree ENDMETHOD. *-------------------------------------------- METHOD handle_node_cm_sel. * At this point of execution, the user selected a menu entry of the * menu build up in event handler method handle_node_cm_req. * Query your own function codes and react accordingly. DATA l_rc TYPE c. case fcode. when 'DEL_SUBTREE'. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING textline1 = 'Do you really want to delete'(902) textline2 = 'this node and all its subnodes?'(903) titel = 'Confirmation'(904) cancel_display = ' ' IMPORTING answer = l_rc. IF l_rc EQ 'J'. CALL METHOD sender->delete_subtree EXPORTING i_node_key = node_key. * Do not forget to refresh the display when you change the contents * of your list. CALL METHOD sender->frontend_update. ENDIF. endcase. ENDMETHOD. *--------------------------------------------- ENDCLASS.
Extracted by Direct Download 46cd version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 46C
Description: YCOR1005_PROCESS_DATA_N
Include YCOR1005_PROCESS_DATA
Include YCOR1005_PROCESS_DATA
*----------------------------------------------------------------------* * INCLUDE YCOR1005_PROCESS_DATA * *----------------------------------------------------------------------* * 获得销售成本要素 FORM GET_SALE_COST_ELEMENT TABLES SE STRUCTURE COST_ELEMENT USING VR TYPE ZCO04_A-ZVARIANT. CLEAR SE[]. DATA: CE LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE. SELECT * FROM ZCO04_A WHERE ZVARIANT = VR AND Z1 = 'A'."get data from custom PERFORM GET_COST_ELEMENT_LIST TABLES CE USING ZCO04_A-COST_GROUP ZCO04_A-Z1 ZCO04_A-ATTR 0. APPEND LINES OF CE TO SALE_COST_ELEMENT. ENDSELECT. ENDFORM. *"2. 提取BSIS表半成品科目(1121020100) * 或产成品(1121040100)过帐日期为在选定日期范围内, * 凭证类型为SB的所有凭证。 FORM GET_BELNR_01 TABLES BELNR STRUCTURE BELNR_LIST . CLEAR: BELNR,BELNR[]. DATA: T1 TYPE BSEG-ABPER. SELECT * FROM BSIS WHERE BLART = 'SB' AND BUKRS = BUKRS AND HKONT = TH1.. T1 = BSIS-BUDAT(6). IF T1 IN ABPER. BELNR-GJAHR = BSIS-GJAHR. BELNR-BUKRS = BSIS-BUKRS. BELNR-BELNR = BSIS-BELNR. APPEND BELNR. CLEAR BELNR. ENDIF. ENDSELECT. ENDFORM. *3. 根据凭证查询BSEG的ZUONR字段, 得出订单号。 FORM GET_ORDER_LIST TABLES ORDER STRUCTURE ORDER_LIST. CLEAR: ORDER,ORDER[]. DATA: BELNR LIKE BELNR_LIST OCCURS 0 WITH HEADER LINE. PERFORM GET_BELNR_01 TABLES BELNR. DATA: T1 TYPE BSEG-ABPER. LOOP AT BELNR. CLEAR: BSEG,ORDER_LIST. SELECT SINGLE ZUONR FROM BSEG INTO ORDER-ORDER WHERE BELNR = BELNR-BELNR AND GJAHR = BELNR-GJAHR AND BUKRS = BELNR-BUKRS. IF ORDER-ORDER <> ''. APPEND ORDER. CLEAR ORDER. ENDIF. ENDLOOP. SORT ORDER BY ORDER. DELETE ADJACENT DUPLICATES FROM ORDER. ENDFORM. "获得订单组F4订单列表 *---------------------------------------------------------------------* * FORM GET_ORDER_F4_10 * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> F4_LIST * *---------------------------------------------------------------------* FORM GET_ORDER_F4_10 TABLES F4_LIST STRUCTURE F4_LIST. CLEAR: F4_LIST,F4_LIST[]. DATA: ORDER LIKE ORDER_LIST OCCURS 0 WITH HEADER LINE. PERFORM GET_ORDER_LIST TABLES ORDER. CLEAR ORDER_10. CLEAR ORDER_LIST[]. CLEAR F4_LIST[]. LOOP AT ORDER. PERFORM GET_ORDER_TEXT USING ORDER-ORDER CHANGING F4_LIST-TEXT. DATA: S1(100). SPLIT F4_LIST-TEXT AT '-' INTO SHIPNAME S1. F4_LIST-TEXT = SHIPNAME. F4_LIST-ORDER_10 = ORDER-ORDER(10). APPEND F4_LIST. CLEAR F4_LIST. ENDLOOP. SORT F4_LIST BY ORDER_10. DELETE ADJACENT DUPLICATES FROM F4_LIST. ENDFORM. "根据选择屏幕,获得订单列表 *---------------------------------------------------------------------* * FORM GET_ORDER * *---------------------------------------------------------------------* * 获取订单 * *---------------------------------------------------------------------* FORM GET_ORDER TABLES OLIST STRUCTURE ORDER_LIST. DATA: S1(100). CLEAR: OLIST,OLIST[]. CONCATENATE ORDER_10 '%' INTO S1. CONDENSE S1 NO-GAPS. SELECT * FROM COAS WHERE AUFNR LIKE S1. OLIST-ORDER = COAS-AUFNR. APPEND OLIST. CLEAR OLIST. ENDSELECT. ENDFORM. "根据成本要素组获得子成本要素组 *---------------------------------------------------------------------* * FORM GET_COST_ELEMENT_LIST * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> T1 * * --> COST_GROUP * * --> LEVEL = 0 : 返回所有子组 * --> LEVEL = 1 : 返回一级子组 *---------------------------------------------------------------------* FORM GET_COST_ELEMENT_GROUP_LIST TABLES T1 STRUCTURE COST_ELEMENT_GROUP USING COST_GROUP LEVEL. CLEAR T1[]. DATA: T_NODES LIKE GRPOBJECTS OCCURS 0 WITH HEADER LINE. DATA: T_VALUES LIKE GRPVALUES OCCURS 0 WITH HEADER LINE. DATA: C_INFO LIKE GRPHINFO. DATA: C_OVERWRITE LIKE SY-DATAR. DATA: E_SETID LIKE SETHIER-SETID. CONCATENATE '01022300' COST_GROUP INTO E_SETID. CALL FUNCTION 'K_HIERARCHY_TABLES_READ' EXPORTING E_CLASS = '0102' E_SETID = E_SETID E_KOKRS = '2300' E_OLD_LINE_LEVEL = 1 TABLES T_NODES = T_NODES T_VALUES = T_VALUES CHANGING C_INFO = C_INFO C_OVERWRITE = C_OVERWRITE. IF LEVEL = 1. LOOP AT T_NODES WHERE HLEVEL = LEVEL. CLEAR T1. T1-ELEMENT_GROUP = T_NODES-SHORTNAME. APPEND T1. ENDLOOP. ELSEIF LEVEL = 0. LOOP AT T_NODES WHERE HLEVEL > 0. CLEAR T1. T1-ELEMENT_GROUP = T_NODES-SHORTNAME. APPEND T1. ENDLOOP. ENDIF. ENDFORM. "根据成本要素组获得子成本要素 *---------------------------------------------------------------------* * FORM GET_COST_ELEMENT_LIST * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> T1 * * --> COST_GROUP * * --> LEVEL = 0 : 返回所有子要素 * --> LEVEL = 1 : 返回一级子素 *---------------------------------------------------------------------* FORM GET_COST_ELEMENT_LIST TABLES T1 STRUCTURE COST_ELEMENT USING COST_GROUP Z1 ATTR LEVEL. CLEAR T1[]. DATA: CG LIKE COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE. DATA: T_NODES LIKE GRPOBJECTS OCCURS 0 WITH HEADER LINE. DATA: T_VALUES LIKE GRPVALUES OCCURS 0 WITH HEADER LINE. DATA: C_INFO LIKE GRPHINFO. DATA: C_OVERWRITE LIKE SY-DATAR. DATA: E_SETID LIKE SETHIER-SETID. CONCATENATE '01022300' COST_GROUP INTO E_SETID. CALL FUNCTION 'K_HIERARCHY_TABLES_READ' EXPORTING E_CLASS = '0102' E_SETID = E_SETID E_KOKRS = '2300' E_OLD_LINE_LEVEL = 1 TABLES T_NODES = T_NODES T_VALUES = T_VALUES CHANGING C_INFO = C_INFO C_OVERWRITE = C_OVERWRITE. IF LEVEL = 1. LOOP AT T_VALUES WHERE SETID = E_SETID. CLEAR T1. T1-Z1 = Z1. T1-ATTR = ATTR. IF T_VALUES-VTO = ''. T1-ELEMENT = T_VALUES-VFROM. APPEND T1. ELSE. SELECT * FROM CSKA WHERE KTOPL = '2300' AND ( KSTAR BETWEEN T_VALUES-VFROM AND T_VALUES-VTO ). T1-ELEMENT = CSKA-KSTAR. APPEND T1. ENDSELECT. ENDIF. ENDLOOP. ELSEIF LEVEL = 0. PERFORM GET_COST_ELEMENT_GROUP_LIST TABLES CG USING COST_GROUP 0. CG-ELEMENT_GROUP = COST_GROUP. APPEND CG. LOOP AT CG. CLEAR E_SETID. CONCATENATE '01022300' CG-ELEMENT_GROUP INTO E_SETID. LOOP AT T_VALUES WHERE SETID = E_SETID. CLEAR T1. T1-Z1 = Z1. T1-ATTR = ATTR. IF T_VALUES-VTO = ''. T1-ELEMENT = T_VALUES-VFROM. APPEND T1. ELSE. SELECT * FROM CSKA WHERE KTOPL = '2300' AND ( KSTAR BETWEEN T_VALUES-VFROM AND T_VALUES-VTO ). T1-ELEMENT = CSKA-KSTAR. APPEND T1. ENDSELECT. ENDIF. ENDLOOP. ENDLOOP. ENDIF. ENDFORM. *---------------------------------------------------------------------* * FORM GET_COSP_WTG_VIA_GROUP * *---------------------------------------------------------------------* * 根据成本要素组/订单获得业务货币值 *---------------------------------------------------------------------* * --> ORDER * * --> COST_GROUP * * --> P1 * * --> P2 * * --> WTG * *---------------------------------------------------------------------* FORM GET_COSP_WTG_VIA_GROUP USING ORDER COST_GROUP Z1 ATTR P1 "期间开始 P2 "期间结束 CHANGING WTG. CLEAR WTG. DATA: WTG_TAB LIKE COSP-WTG001. DATA: COST_ELEM LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE. PERFORM GET_COST_ELEMENT_LIST TABLES COST_ELEM USING COST_GROUP Z1 ATTR 0 . LOOP AT COST_ELEM. PERFORM GET_COSP_WTG_VIA_ORDER USING ORDER COST_ELEM-ELEMENT P1 "期间开始 P2 "期间结束 CHANGING WTG_TAB. WTG = WTG + WTG_TAB. ENDLOOP. ENDFORM. "根据订单号/成本要素/期间 获得业务货币值 *---------------------------------------------------------------------* * FORM GET_COSP_WTG * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> ORDER * * --> COST_ELEMENT * * --> P1 期间开始 TYPE I * --> P2 期间结束 TYPE I * --> WTG * *---------------------------------------------------------------------* FORM GET_COSP_WTG_VIA_ORDER USING ORDER COST_ELEMENT P1 "期间开始 P2 "期间结束 CHANGING WTG. CLEAR WTG. DATA: FN(30). DATA: FN_P(3) TYPE N VALUE '000'. DATA: TMP(10). DATA: PERIOD TYPE I. FIELD-SYMBOLS: <F1> TYPE ANY. DATA: OBJNR TYPE COSP-OBJNR. CONCATENATE 'OR' ORDER INTO OBJNR. DATA: P1_IN TYPE I. IF P1(4) = P2(4). PERIOD = P2 - P1 + 1. SELECT * FROM COSP WHERE GJAHR = P1(4) AND OBJNR = OBJNR AND WRTTP = '04' AND KSTAR = COST_ELEMENT. DO PERIOD TIMES. IF SY-INDEX = 1. FN_P = P1+4(2).. ELSE. FN_P = P1+4(2) + SY-INDEX - 1. ENDIF. CLEAR FN. CONCATENATE 'WKG' FN_P INTO FN. ASSIGN COMPONENT FN OF STRUCTURE COSP TO <F1> . WTG = WTG + <F1>. ENDDO. ENDSELECT. SELECT * FROM COSS WHERE GJAHR = P1(4) AND OBJNR = OBJNR AND WRTTP = '04' AND KSTAR = COST_ELEMENT. DO PERIOD TIMES. IF SY-INDEX = 1. FN_P = P1+4(2). ELSE. FN_P = P1+4(2) + SY-INDEX - 1. ENDIF. CLEAR FN. CONCATENATE 'WKG' FN_P INTO FN. ASSIGN COMPONENT FN OF STRUCTURE COSS TO <F1> . WTG = WTG + <F1>. ENDDO. ENDSELECT. ELSE. PERIOD = 12 - P1+4(2) + 1. SELECT * FROM COSP WHERE GJAHR = P1(4) AND OBJNR = OBJNR AND WRTTP = '04' AND KSTAR = COST_ELEMENT. DO PERIOD TIMES. IF SY-INDEX = 1. FN_P = P1+4(2). ELSE. FN_P = P1+4(2) + SY-INDEX - 1. ENDIF. CLEAR FN. CONCATENATE 'WKG' FN_P INTO FN. ASSIGN COMPONENT FN OF STRUCTURE COSP TO <F1> . WTG = WTG + <F1>. ENDDO. ENDSELECT. SELECT * FROM COSS WHERE GJAHR = P1(4) AND OBJNR = OBJNR AND WRTTP = '04' AND KSTAR = COST_ELEMENT. DO PERIOD TIMES. IF SY-INDEX = 1. FN_P = P1+4(2). ELSE. FN_P = P1+4(2) + SY-INDEX - 1. ENDIF. CLEAR FN. CONCATENATE 'WKG' FN_P INTO FN. ASSIGN COMPONENT FN OF STRUCTURE COSS TO <F1> . WTG = WTG + <F1>. ENDDO. ENDSELECT. PERIOD = P2+4(2). SELECT * FROM COSP WHERE GJAHR = P2(4) AND OBJNR = OBJNR AND WRTTP = '04' AND KSTAR = COST_ELEMENT. DO PERIOD TIMES. IF SY-INDEX = 1. FN_P = 1. ELSE. FN_P = SY-INDEX. ENDIF. CLEAR FN. CONCATENATE 'WKG' FN_P INTO FN. ASSIGN COMPONENT FN OF STRUCTURE COSP TO <F1> . WTG = WTG + <F1>. ENDDO. ENDSELECT. SELECT * FROM COSS WHERE GJAHR = P2(4) AND OBJNR = OBJNR AND WRTTP = '04' AND KSTAR = COST_ELEMENT. DO PERIOD TIMES. IF SY-INDEX = 1. FN_P = 1. ELSE. FN_P = SY-INDEX. ENDIF. CLEAR FN. CONCATENATE 'WKG' FN_P INTO FN. ASSIGN COMPONENT FN OF STRUCTURE COSS TO <F1> . WTG = WTG + <F1>. ENDDO. ENDSELECT. ENDIF. ENDFORM. "获得成本要素组文本 *---------------------------------------------------------------------* * FORM GET_COST_GROUP_TEXT * *---------------------------------------------------------------------* * 获得成本要素组文本 * *---------------------------------------------------------------------* * --> COST_GROUP * * --> TEXT * *---------------------------------------------------------------------* FORM GET_COST_GROUP_TEXT USING COST_GROUP CHANGING TEXT. CLEAR TEXT. SELECT SINGLE DESCRIPT FROM SETHEADERT INTO TEXT WHERE SETCLASS = '0102' AND SETNAME = COST_GROUP. ENDFORM. "获得成本要素文本 *---------------------------------------------------------------------* * FORM GET_COST_ELEMENT_TEXT * *---------------------------------------------------------------------* * 获得成本要素文本 * *---------------------------------------------------------------------* * --> ELEMENT * * --> TEXT * *---------------------------------------------------------------------* FORM GET_COST_ELEMENT_TEXT USING ELEMENT CHANGING TEXT. CLEAR TEXT. SELECT SINGLE KTEXT FROM CSKU INTO TEXT WHERE KSTAR = ELEMENT AND SPRAS = '1' AND KTOPL = '2300'. ENDFORM. "获得订单描述 *---------------------------------------------------------------------* * FORM GET_ORDER_TEXT * *---------------------------------------------------------------------* * 获得订单文本 * *---------------------------------------------------------------------* * --> ORDER * * --> TEXT * *---------------------------------------------------------------------* FORM GET_ORDER_TEXT USING ORDER CHANGING TEXT. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = ORDER IMPORTING OUTPUT = ORDER. CLEAR TEXT. SELECT SINGLE KTEXT FROM COAS INTO TEXT WHERE AUFNR = ORDER. ENDFORM. *&---------------------------------------------------------------------* *& Form GENERATE_SALE_LINE_DATA *&---------------------------------------------------------------------* * 生成销售收入行 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GENERATE_SALE_LINE_DATA CHANGING SALE_LINE. clear sale_line. DATA: FN(3) TYPE N VALUE '000'. DATA: FD(30). DATA: T1 LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE. FIELD-SYMBOLS: <ELEMENT_GROUP> TYPE ANY, <TOTAL> TYPE ANY, <TOTAL_PERCENT> TYPE ANY, <FIELD> TYPE ANY, <PERCENT_FIELD> TYPE ANY, <OUT_FIELD> TYPE ANY. ASSIGN COMPONENT 'ELEMENT_GROUP' OF STRUCTURE SALE_LINE TO <ELEMENT_GROUP>. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE SALE_LINE TO <TOTAL>. SELECT * FROM ZCO04_A WHERE Z1 = 'A'. <ELEMENT_GROUP> = ZCO04_A-COST_GROUP. CLEAR T1[]. PERFORM GET_COST_ELEMENT_LIST TABLES T1 USING ZCO04_A-COST_GROUP ZCO04_A-Z1 ZCO04_A-ATTR 0. LOOP AT T1. * clear <db_line>. PERFORM GET_INTERNAL_LINE_DATA USING T1-ELEMENT CHANGING <DB_LINE>. LOOP AT ORDER_LIST. FN = SY-TABIX. CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <DB_LINE> TO <OUT_FIELD>. ASSIGN COMPONENT FD OF STRUCTURE SALE_LINE TO <FIELD>. <FIELD> = <FIELD> + <OUT_FIELD>. <TOTAL> = <TOTAL> + <OUT_FIELD>. ENDLOOP. ENDLOOP. ENDSELECT. ENDFORM. " GENERATE_SALE_LINE_DATA *---------------------------------------------------------------------* * FORM GENERATE_COST_LINE_DATA * *---------------------------------------------------------------------* * 计算毛利 * *---------------------------------------------------------------------* * --> COST_LINE * *---------------------------------------------------------------------* FORM GENERATE_GP_LINE_DATA. DATA: FN(3) TYPE N VALUE '000'. DATA: FD(30). FIELD-SYMBOLS: <PERCENT_FIELD> TYPE ANY,"ITEM_LINE <OUT_FIELD> TYPE ANY, "ITEM_LINE <TOTAL> TYPE ANY, <PERCENT> TYPE ANY, <SALE_FIELD> TYPE ANY, <SALE_TOTAL> TYPE ANY, <ELEMENT> TYPE ANY, <GP_TOTAL> TYPE ANY, <GP_TOTAL_PERCENT> TYPE ANY, <GP_FIELD> TYPE ANY, <GP_PERCENT> TYPE ANY, <Z1> TYPE ANY, <ATTR> TYPE ANY. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE <GP_LINE> TO <GP_TOTAL>. ASSIGN COMPONENT 'PERCENT' OF STRUCTURE <GP_LINE> TO <GP_TOTAL_PERCENT>. LOOP AT <DB_TABLE> ASSIGNING <DB_LINE>. ASSIGN COMPONENT 'ELEMENT' OF STRUCTURE <DB_LINE> TO <ELEMENT>. ASSIGN COMPONENT 'Z1' OF STRUCTURE <DB_LINE> TO <Z1>. IF <Z1> = 'B' OR <Z1> = 'C'. * READ TABLE SALE_COST_ELEMENT WITH KEY ELEMENT = <ELEMENT>. * IF SY-SUBRC <> 0. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE <DB_LINE> TO <TOTAL>. ASSIGN COMPONENT 'PERCENT' OF STRUCTURE <DB_LINE> TO <PERCENT>. <GP_TOTAL> = <GP_TOTAL> + <TOTAL>. LOOP AT ORDER_LIST. FN = SY-TABIX. "---------PERCENT CLEAR FD. CONCATENATE 'PERCENT' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <GP_LINE> TO <PERCENT_FIELD>. CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <DB_LINE> TO <OUT_FIELD>. ASSIGN COMPONENT FD OF STRUCTURE <GP_LINE> TO <GP_FIELD>. <GP_FIELD> = <GP_FIELD> + <OUT_FIELD>. ENDLOOP. ENDIF. ENDLOOP. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE <SALE_LINE> TO <SALE_TOTAL>. DATA: T2 TYPE P DECIMALS 2. T2 = <SALE_TOTAL> - <GP_TOTAL>. <GP_TOTAL> = T2."<SALE_TOTAL> - <GP_TOTAL>. IF <SALE_TOTAL> <> 0. <GP_TOTAL_PERCENT> = <GP_TOTAL> / <SALE_TOTAL>. DATA: P1 TYPE P DECIMALS 2. P1 = <GP_TOTAL_PERCENT>. <GP_TOTAL_PERCENT> = P1. ENDIF. LOOP AT ORDER_LIST. FN = SY-TABIX. "---------PERCENT CLEAR FD. CONCATENATE 'PERCENT' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <GP_LINE> TO <PERCENT_FIELD>. CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <SALE_LINE> TO <SALE_FIELD>. ASSIGN COMPONENT FD OF STRUCTURE <GP_LINE> TO <GP_FIELD>. <GP_FIELD> = <SALE_FIELD> - <GP_FIELD>. IF <SALE_FIELD> <> 0. <PERCENT_FIELD> = <GP_FIELD> / <SALE_FIELD>. P1 = <PERCENT_FIELD>. <PERCENT_FIELD> = P1. ENDIF. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form GET_DATA_INTO_DB_TABLE *&---------------------------------------------------------------------* * 从数据库获得成本元素/订单对应表 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GET_DATA_INTO_DB_TABLE. DATA: ELEM_LIST LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE. DATA: EL LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE. LOOP AT OUT_CG. PERFORM GET_COST_ELEMENT_LIST TABLES EL USING OUT_CG-ELEMENT_GROUP OUT_CG-Z1 OUT_CG-ATTR 0 . LOOP AT EL. EL-Z1 = OUT_CG-Z1. EL-ATTR = OUT_CG-ATTR. MODIFY EL. ENDLOOP. APPEND LINES OF EL TO ELEM_LIST. ENDLOOP. LOOP AT ELEM_LIST. PERFORM GET_DB_LINE_DATA USING ELEM_LIST-ELEMENT ELEM_LIST-Z1 ELEM_LIST-ATTR CHANGING <DB_LINE>. INSERT <DB_LINE> INTO TABLE <DB_TABLE>. ENDLOOP. ENDFORM. " GET_DATA_INTO_DB_TABLE *---------------------------------------------------------------------* * FORM GET_INTERNAL_LINE_DATA * *---------------------------------------------------------------------* * 根据成本元素,从内表中取得相关行数据 * *---------------------------------------------------------------------* * --> ELEMENT * * --> CLINE * *---------------------------------------------------------------------* FORM GET_INTERNAL_LINE_DATA USING ELEMENT CHANGING CLINE. LOOP AT <DB_TABLE> ASSIGNING <DB_LINE>. ASSIGN COMPONENT 'ELEMENT' OF STRUCTURE <DB_LINE> TO <DB_FIELD>. IF <DB_FIELD> = ELEMENT. CLINE = <DB_LINE>. EXIT. ENDIF. ENDLOOP. ENDFORM. *---------------------------------------------------------------------* * FORM GET_DB_LINE_DATA * *---------------------------------------------------------------------* * 从数据库中读取成本元素/订单对应的值 到工作区 *---------------------------------------------------------------------* * --> ELEMENT * * --> CLINE * *---------------------------------------------------------------------* FORM GET_DB_LINE_DATA USING ELEMENT "成本要素 Z1 " 取数属性 ATTR "+/-属性 CHANGING CLINE. CLEAR CLINE. DATA: FN(3) TYPE N VALUE '000'. DATA: FD(30). DATA: WTG_TAB TYPE COSP-WTG001. FIELD-SYMBOLS: <OUT_FIELD> TYPE ANY, "ITEM_LINE <PERCENT_FIELD> TYPE ANY,"ITEM_LINE <TOTAL_PERCENT> TYPE ANY,"ITEM_LINE <SUM_FIELD> TYPE ANY,"ITEM_LINE <Z1> TYPE ANY, <ATTR> TYPE ANY. ASSIGN COMPONENT 'ELEMENT' OF STRUCTURE CLINE TO <OUT_FIELD>. <OUT_FIELD> = ELEMENT. ASSIGN COMPONENT 'Z1' OF STRUCTURE CLINE TO <Z1>. <Z1> = Z1. ASSIGN COMPONENT 'ATTR' OF STRUCTURE CLINE TO <ATTR>. <ATTR> = ATTR. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE CLINE TO <SUM_FIELD>. ASSIGN COMPONENT 'PERCENT' OF STRUCTURE CLINE TO <TOTAL_PERCENT>. LOOP AT ORDER_LIST. FN = SY-TABIX. "---------AMOUNT CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE CLINE TO <OUT_FIELD>. "------------------------------------------- "--------PERCENT CLEAR FD. CONCATENATE 'PERCENT' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE CLINE TO <PERCENT_FIELD>. "-------------------------------------------- CLEAR WTG_TAB. IF Z1 = 'A' OR Z1 = 'B'. PERFORM GET_COSP_WTG_VIA_ORDER USING ORDER_LIST-ORDER ELEMENT ABPER-LOW "期间开始 ABPER-HIGH "期间结束 CHANGING WTG_TAB. IF Z1 = 'A'AND H1 = 'X'. WTG_TAB = 0. ENDIF. ELSEIF Z1 = 'C'. "佣金 SELECT * FROM BSEG WHERE BUKRS = BUKRS AND ZUONR = ORDER_LIST-ORDER AND HKONT = ELEMENT. SELECT SINGLE * FROM BKPF WHERE BELNR = BSEG-BELNR AND BUKRS = BUKRS. IF SY-SUBRC = 0. DATA: D6 TYPE BSEG-ABPER. CLEAR D6. CONCATENATE BKPF-GJAHR BKPF-MONAT INTO D6. IF D6 BETWEEN ABPER-LOW AND ABPER-HIGH. WTG_TAB = WTG_TAB + BSEG-DMBTR. ENDIF. ENDIF. ENDSELECT. ENDIF. IF ATTR = '-'. WTG_TAB = WTG_TAB * -1. ENDIF. <OUT_FIELD> = WTG_TAB. <SUM_FIELD> = <SUM_FIELD> + WTG_TAB. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form MODIFY_INTERNAL_TABLE *&---------------------------------------------------------------------* * 计算百分比 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM MODIFY_INTERNAL_DB_TABLE. DATA: FN(3) TYPE N VALUE '000'. DATA: FD(30). FIELD-SYMBOLS: <PERCENT_FIELD> TYPE ANY,"ITEM_LINE <OUT_FIELD> TYPE ANY, "ITEM_LINE <TOTAL> TYPE ANY, <PERCENT> TYPE ANY, <SALE_FIELD> TYPE ANY, <SALE_TOTAL> TYPE ANY, <ELEMENT> TYPE ANY. LOOP AT <DB_TABLE> ASSIGNING <DB_LINE>. ASSIGN COMPONENT 'ELEMENT' OF STRUCTURE <DB_LINE> TO <ELEMENT>. READ TABLE SALE_COST_ELEMENT WITH KEY ELEMENT = <ELEMENT>. IF SY-SUBRC <> 0. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE <DB_LINE> TO <TOTAL>. ASSIGN COMPONENT 'PERCENT' OF STRUCTURE <DB_LINE> TO <PERCENT>. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE <SALE_LINE> TO <SALE_TOTAL>. IF <SALE_TOTAL> <> 0. <PERCENT> = <TOTAL> / <SALE_TOTAL>. DATA: P1 TYPE P DECIMALS 2. P1 = <PERCENT>. <PERCENT> = P1. ENDIF. LOOP AT ORDER_LIST. FN = SY-TABIX. "---------PERCENT CLEAR FD. CONCATENATE 'PERCENT' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <DB_LINE> TO <PERCENT_FIELD>. CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <DB_LINE> TO <OUT_FIELD>. ASSIGN COMPONENT FD OF STRUCTURE <SALE_LINE> TO <SALE_FIELD>. IF <SALE_FIELD> <> 0. <PERCENT_FIELD> = <OUT_FIELD> / <SALE_FIELD>. P1 = <PERCENT_FIELD>. <PERCENT_FIELD> = P1. ENDIF. ENDLOOP. ENDIF. ENDLOOP. ENDFORM. " MODIFY_INTERNAL_TABLE *&---------------------------------------------------------------------* *& Form GENERATE_TCOST_LINE_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GENERATE_TCOST_LINE_DATA. DATA: FN(3) TYPE N VALUE '000'. DATA: T1 TYPE D. DATA: FD(30). FIELD-SYMBOLS: <PERCENT_FIELD> TYPE ANY,"ITEM_LINE <OUT_FIELD> TYPE ANY, "ITEM_LINE <TOTAL> TYPE ANY, <PERCENT> TYPE ANY, <SALE_FIELD> TYPE ANY, <SALE_TOTAL> TYPE ANY, <ELEMENT> TYPE ANY, <TCOST_TOTAL> TYPE ANY, <TCOST_TOTAL_PERCENT> TYPE ANY, <TCOST_FIELD> TYPE ANY, <TCOST_PERCENT> TYPE ANY. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE <TCOST_LINE> TO <TCOST_TOTAL>. SELECT * FROM BSIS WHERE HKONT = '1121020200' AND BUKRS = BUKRS AND SGTXT <> '2006年末在制品'. IF BSIS-ZUONR(10) = ORDER_10. T1 = BSIS-BUDAT(6). IF T1 IN ABPER. IF BSIS-SHKZG = 'H'. BSIS-DMBTR = BSIS-DMBTR * -1. ENDIF. "暂估成本到订单 LOOP AT ORDER_LIST. FN = SY-TABIX. "---------PERCENT CLEAR FD. CONCATENATE 'PERCENT' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <TCOST_LINE> TO <PERCENT_FIELD>. CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <TCOST_LINE> TO <TCOST_FIELD>. IF ORDER_LIST-ORDER = BSIS-ZUONR. <TCOST_FIELD> = <TCOST_FIELD> + BSIS-DMBTR. ENDIF. ENDLOOP. "-------------- <TCOST_TOTAL> = <TCOST_TOTAL> + BSIS-DMBTR. ENDIF. ENDIF. ENDSELECT. IF H2 = 'X'. <TCOST_TOTAL> = <TCOST_TOTAL> * -1. ENDIF. ENDFORM. " GENERATE_TCOST_LINE_DATA *&---------------------------------------------------------------------* *& Form GET_DISPLAY_LIST_GROUP *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GET_DISPLAY_LIST_GROUP TABLES CG STRUCTURE COST_ELEMENT_GROUP USING VR TYPE ZCO04_A-ZVARIANT. CLEAR: CG[]. SELECT * FROM ZCO04_A WHERE ZVARIANT = VR. MOVE-CORRESPONDING ZCO04_A TO CG. CG-ELEMENT_GROUP = ZCO04_A-COST_GROUP. APPEND CG. CLEAR CG. ENDSELECT. ENDFORM. " GET_DISPLAY_LIST_GROUP
Extracted by Direct Download 46cd version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 46C
Description: YCOR1005_100_N
Include YCOR1005_100
Include YCOR1005_100
*----------------------------------------------------------------------* * INCLUDE YCOR1005_100 * *----------------------------------------------------------------------* MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'MAIN100'. * SET TITLEBAR 'xxx'. ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_0100 INPUT. LAST_UCOMM = SY-UCOMM. DATA: ET_CHILDREN1 TYPE LVC_T_NKEY. DATA: CL TYPE I. DATA: ET_CHILDREN TYPE LVC_T_NKEY. CALL METHOD G_ALV_TREE->COLLAPSE_ALL_NODES. CASE SY-UCOMM. WHEN 'BACK'. SET SCREEN 0.LEAVE SCREEN. WHEN 'F1'. * CALL METHOD G_ALV_TREE->COLLAPSE_ALL_NODES. WHEN 'F2'. LOOP AT EXPAND_KEY1. CONDENSE EXPAND_KEY1-GROUP NO-GAPS. CL = STRLEN( EXPAND_KEY1-GROUP ). CLEAR ET_CHILDREN[]. CALL METHOD G_ALV_TREE->GET_CHILDREN EXPORTING I_NODE_KEY = EXPAND_KEY1-CKEY IMPORTING ET_CHILDREN = ET_CHILDREN. IF NOT ET_CHILDREN[] IS INITIAL. CALL METHOD g_alv_tree->expand_node EXPORTING i_node_key = EXPAND_KEY1-CKEY I_EXPAND_SUBTREE = 'X'. ENDIF. ENDLOOP. LOOP AT EXPAND_KEY1. * CLEAR ET_CHILDREN1[]. * CALL METHOD G_ALV_TREE->GET_CHILDREN * EXPORTING I_NODE_KEY = EXPAND_KEY1-CKEY * IMPORTING ET_CHILDREN = ET_CHILDREN1. * IF NOT ET_CHILDREN1[] IS INITIAL. * CALL METHOD g_alv_tree->COLLAPSE_SUBTREE * EXPORTING I_NODE_KEY = EXPAND_KEY1-CKEY. * ENDIF. IF EXPAND_KEY1-GROUP = 'GD0101' OR EXPAND_KEY1-GROUP = 'GD0102' OR EXPAND_KEY1-GROUP = 'GD0103'. CALL METHOD g_alv_tree->expand_node EXPORTING i_node_key = EXPAND_KEY1-CKEY I_LEVEL_COUNT = 1. ENDIF. CONDENSE EXPAND_KEY1-GROUP NO-GAPS. CL = STRLEN( EXPAND_KEY1-GROUP ). IF CL > 6 . CALL METHOD g_alv_tree->COLLAPSE_SUBTREE EXPORTING I_NODE_KEY = EXPAND_KEY1-CKEY. ENDIF. ENDLOOP. WHEN 'F3'. LOOP AT EXPAND_KEY1. CONDENSE EXPAND_KEY1-GROUP NO-GAPS. CL = STRLEN( EXPAND_KEY1-GROUP ). CLEAR ET_CHILDREN[]. CALL METHOD G_ALV_TREE->GET_CHILDREN EXPORTING I_NODE_KEY = EXPAND_KEY1-CKEY IMPORTING ET_CHILDREN = ET_CHILDREN. IF NOT ET_CHILDREN[] IS INITIAL. CALL METHOD g_alv_tree->expand_node EXPORTING i_node_key = EXPAND_KEY1-CKEY I_EXPAND_SUBTREE = 'X'. ENDIF. ENDLOOP. ENDCASE. ENDMODULE. " USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* *& Module CONTROL_INIT OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE CONTROL_INIT OUTPUT. IF g_alv_tree IS INITIAL. PERFORM init_tree. CALL METHOD cl_gui_cfw=>flush EXCEPTIONS cntl_system_error = 1 cntl_error = 2. IF sy-subrc NE 0. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = 'Automation Queue failure'(801) txt1 = 'Internal error:'(802) txt2 = 'A method in the automation queue'(803) txt3 = 'caused a failure.'(804). ENDIF. ENDIF. CALL METHOD cl_gui_cfw=>flush EXCEPTIONS cntl_system_error = 1 cntl_error = 2. CALL METHOD g_alv_tree->frontend_update. ENDMODULE. " CONTROL_INIT OUTPUT *&---------------------------------------------------------------------* *& Form init_tree *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM init_tree. CREATE OBJECT g_alv_tree EXPORTING parent = cl_gui_container=>screen0 node_selection_mode = cl_gui_column_tree=>node_sel_mode_single item_selection = ' ' no_html_header = '' 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 x208(00) WITH 'ERROR'. "#EC NOTEXT ENDIF. PERFORM BUILD_OUT_TABLE. PERFORM GET_DATA_INTO_DB_TABLE. * IF H1 <> 'X'. PERFORM GENERATE_SALE_LINE_DATA CHANGING <SALE_LINE>. * ENDIF. PERFORM MODIFY_INTERNAL_DB_TABLE. PERFORM GENERATE_GP_LINE_DATA. PERFORM GENERATE_TCOST_LINE_DATA. PERFORM build_fieldcatalog. DATA l_hierarchy_header TYPE treev_hhdr. PERFORM build_hierarchy_header CHANGING l_hierarchy_header. data: IT_LIST_COMMENTARY type SLIS_T_LISTHEADER. DATA: HEADER_TEXT(100). * PERFORM GET_COST_GROUP_TEXT USING CGP * CHANGING HEADER_TEXT. perform build_comment using it_list_commentary HEADER_TEXT. CALL METHOD g_alv_tree->set_table_for_first_display EXPORTING is_hierarchy_header = l_hierarchy_header IT_LIST_COMMENTARY = IT_LIST_COMMENTARY I_BACKGROUND_ID = 'ALV_BACKGROUND' CHANGING it_fieldcatalog = gt_fieldcatalog it_outtab = <out_table>[]. "table must be empty perFORM create_hierarchy_all. PERFORM register_events. * Update calculations which were initially defined by field DO_SUM * of the fieldcatalog. (see build_fieldcatalog). CALL METHOD g_alv_tree->update_calculations. * Send data to frontend. CALL METHOD g_alv_tree->frontend_update. ENDFORM. " init_tree *&---------------------------------------------------------------------* *& Form build_hierarchy_header *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_L_HIERARCHY_HEADER text *----------------------------------------------------------------------* FORM build_hierarchy_header CHANGING p_hierarchy_header TYPE treev_hhdr. p_hierarchy_header-heading = '成本要素组'. p_hierarchy_header-tooltip = '成本要素组'. p_hierarchy_header-width = 35. p_hierarchy_header-width_pix = ''. ENDFORM. " build_hierarchy_header *&---------------------------------------------------------------------* *& Form build_fieldcatalog *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM build_fieldcatalog. DATA: is_fieldcat LIKE LINE OF it_fieldcat. DATA: ls_fieldcatalog TYPE lvc_s_fcat. DATA: INDEX TYPE I VALUE 0. LOOP AT IT_FIELDCAT INTO IS_FIELDCAT. CLEAR ls_fieldcatalog. MOVE-CORRESPONDING IS_FIELDCAT TO ls_fieldcatalog. IF ls_fieldcatalog-FIELDNAME = 'ELEMENT_GROUP' OR ls_fieldcatalog-FIELDNAME = 'ELEMENT' OR ls_fieldcatalog-FIELDNAME = 'Z1' OR ls_fieldcatalog-FIELDNAME = 'ATTR'. ls_fieldcatalog-no_out = 'X'. ELSE. LS_FIELDCATALOG-DATATYPE = 'CURR'. LS_FIELDCATALOG-INTTYPE = 'P'. LS_FIELDCATALOG-INTLEN = 15. LS_FIELDCATALOG-DECIMALS = 2. LS_FIELDCATALOG-DECIMALS_O = 2. ls_fieldcatalog-do_sum = 'X'. ls_fieldcatalog-REF_FIELD = 'WTG001'. ls_fieldcatalog-REF_TABLE = 'COSP'. * ls_fieldcatalog-CFIELDNAME = 'CURRENCY'. ls_fieldcatalog-h_ftype = 'SUM'. ENDIF. INDEX = INDEX + 1. ls_fieldcatalog-col_pos = INDEX. APPEND ls_fieldcatalog to gt_fieldcatalog. ENDLOOP. ENDFORM. " build_fieldcatalog *&---------------------------------------------------------------------* *& Form create_hierarchy *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* *---------------------------------------------------------------------* * FORM add_element * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> ELEMENT * * --> P_RELAT_KEY * * --> P_NODE_KEY * *---------------------------------------------------------------------* FORM add_element USING element p_relat_key TYPE lvc_nkey CHANGING p_node_key TYPE lvc_nkey. DATA: l_node_text TYPE lvc_value, l_month(15) TYPE c. "output string for month FIELD-SYMBOLS: <FIELD> TYPE ANY. ASSIGN COMPONENT 'ELEMENT' OF STRUCTURE element TO <FIELD>. * get name for node text PERFORM GET_COST_ELEMENT_TEXT USING <FIELD> CHANGING l_node_text. CONCATENATE <FIELD> l_node_text INTO l_node_text. * add node CALL METHOD g_alv_tree->add_node EXPORTING i_relat_node_key = p_relat_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = element IMPORTING e_new_node_key = p_node_key. ENDFORM. *---------------------------------------------------------------------* * FORM add_element_group * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> ELEMENT_GROUP * * --> P_RELAT_KEY * * --> P_NODE_KEY * *---------------------------------------------------------------------* FORM add_element_group USING CLINE TYPE ANY p_relat_key TYPE lvc_nkey CHANGING p_node_key TYPE lvc_nkey. DATA: l_node_text TYPE lvc_value, l_month(15) TYPE c. "output string for month FIELD-SYMBOLS: <FIELD> TYPE ANY. ASSIGN COMPONENT 'ELEMENT_GROUP' OF STRUCTURE CLINE TO <FIELD>. * get name for node text PERFORM GET_COST_GROUP_TEXT USING <FIELD> CHANGING l_node_text. * add node CALL METHOD g_alv_tree->add_node EXPORTING i_relat_node_key = p_relat_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = CLINE IMPORTING e_new_node_key = p_node_key. ENDFORM. *---------------------------------------------------------------------* * FORM add_L1 * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> CLINE * * --> P_RELAT_KEY * * --> P_NODE_KEY * *---------------------------------------------------------------------* FORM add_L1 USING CLINE TYPE ANY p_relat_key TYPE lvc_nkey CHANGING p_node_key TYPE lvc_nkey. CALL METHOD g_alv_tree->add_node EXPORTING i_relat_node_key = p_relat_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = '毛利' is_outtab_line = CLINE IMPORTING e_new_node_key = p_node_key. ENDFORM. *---------------------------------------------------------------------* * FORM add_L2 * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> CLINE * * --> P_RELAT_KEY * * --> P_NODE_KEY * *---------------------------------------------------------------------* FORM add_L2 USING CLINE TYPE ANY p_relat_key TYPE lvc_nkey CHANGING p_node_key TYPE lvc_nkey. CALL METHOD g_alv_tree->add_node EXPORTING i_relat_node_key = p_relat_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = '暂估成本' is_outtab_line = CLINE IMPORTING e_new_node_key = p_node_key. ENDFORM. *&---------------------------------------------------------------------* *& Form register_events *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM register_events. DATA: lt_events TYPE cntl_simple_events, l_event TYPE cntl_simple_event, l_event_receiver TYPE REF TO lcl_tree_event_receiver. *................................................................ * The following four tree events registers ALV Tree in the constructor * method itself. * - cl_gui_column_tree=>eventid_expand_no_children * (needed to load data to frontend when a user expands a node) * - cl_gui_column_tree=>eventid_header_context_men_req * (needed for header context menu) * - cl_gui_column_tree=>eventid_header_click * (allows selection of columns (only when item selection activated)) * - cl_gui_column_tree=>eventid_item_keypress * (needed for F1-Help (only when item selection activated)) * * Nevertheless you have to provide their IDs again if you register * additional events with SET_REGISTERED_EVENTS (see below). * To do so, call first method GET_REGISTERED_EVENTS (this way, * all already registered events remain registered, even your own): call method g_alv_tree->get_registered_events importing events = lt_events. * (If you do not these events will be deregistered!!!). * You do not have to register events of the toolbar again. *.................................................................... * Register additional events for your own purposes: * §5. Register first context menu event on frontend (with postfix * (_REQUEST). The second is registered automatically. l_event-eventid = cl_gui_column_tree=>eventid_node_context_menu_req. APPEND l_event TO lt_events. * register events on frontend CALL METHOD g_alv_tree->set_registered_events EXPORTING events = lt_events EXCEPTIONS cntl_error = 1 cntl_system_error = 2 illegal_event_combination = 3. IF sy-subrc <> 0. MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT ENDIF. *-------------------- * §6. Register both context menu events on backend (ABAP Objects * event handling). CREATE OBJECT l_event_receiver. SET HANDLER l_event_receiver->handle_node_cm_req FOR g_alv_tree. SET HANDLER l_event_receiver->handle_node_cm_sel FOR g_alv_tree. ENDFORM. " register_events *&---------------------------------------------------------------------* *& Form BUILD_OUT_TABLE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM BUILD_OUT_TABLE. CLEAR it_fieldcat[]. DATA: is_fieldcat LIKE LINE OF it_fieldcat. is_fieldcat-fieldname = 'ELEMENT_GROUP'. is_fieldcat-ref_field = 'NAME_COALL'.. is_fieldcat-ref_table = 'GRPDYNP'. is_fieldcat-COLTEXT = '成本要素组'. APPEND is_fieldcat TO it_fieldcat. clear is_fieldcat. is_fieldcat-fieldname = 'ELEMENT'. is_fieldcat-ref_field = 'KSTAR'.. is_fieldcat-ref_table = 'COSP'. is_fieldcat-COLTEXT = '成本要素'. APPEND is_fieldcat TO it_fieldcat. clear is_fieldcat. is_fieldcat-fieldname = 'Z1'. is_fieldcat-ref_field = 'Z1'.. is_fieldcat-ref_table = 'ZCO04_A'. is_fieldcat-COLTEXT = '取数属性'. APPEND is_fieldcat TO it_fieldcat. clear is_fieldcat. is_fieldcat-fieldname = 'ATTR'. is_fieldcat-ref_field = 'ATTR'.. is_fieldcat-ref_table = 'ZCO04_A'. is_fieldcat-COLTEXT = '+/-属性'. APPEND is_fieldcat TO it_fieldcat. clear is_fieldcat. is_fieldcat-fieldname = 'TOTAL'. is_fieldcat-datatype = 'DEC'. is_fieldcat-decimals = 2. * is_fieldcat-ref_field = 'AUFNR'.. * is_fieldcat-ref_table = 'AUFK'. is_fieldcat-COLTEXT = '合计'. APPEND is_fieldcat TO it_fieldcat. clear is_fieldcat. is_fieldcat-fieldname = 'PERCENT'. is_fieldcat-datatype = 'DEC'. is_fieldcat-decimals = 2. is_fieldcat-EDIT_MASK = '____%'. is_fieldcat-NO_ZERO = 'X'. is_fieldcat-LZERO = 'X'. * is_fieldcat-ref_field = 'AUFNR'.. * is_fieldcat-ref_table = 'AUFK'. is_fieldcat-COLTEXT = '成本占收入比例'. is_fieldcat-decimals = 2. APPEND is_fieldcat TO it_fieldcat. DATA: ORDER_N(3) TYPE N VALUE '000'. LOOP AT ORDER_LIST. ORDER_N = SY-TABIX. CLEAR is_fieldcat. CONCATENATE 'ORDER' ORDER_N INTO is_fieldcat-fieldname. * is_fieldcat-ref_field = 'AUFNR'.. * is_fieldcat-ref_table = 'AUFK'. is_fieldcat-datatype = 'DEC'. is_fieldcat-decimals = 2. * is_fieldcat-NO_ZERO = 'X'. PERFORM GET_ORDER_TEXT USING ORDER_LIST-ORDER CHANGING is_fieldcat-COLTEXT. APPEND is_fieldcat TO it_fieldcat. CLEAR: is_fieldcat-fieldname,is_fieldcat-COLTEXT, is_fieldcat-ref_field,is_fieldcat-ref_table, is_fieldcat-EDIT_MASK. CONCATENATE 'PERCENT' ORDER_N INTO is_fieldcat-fieldname. is_fieldcat-COLTEXT = '成本占收入比例'. is_fieldcat-decimals = 2. is_fieldcat-EDIT_MASK = '____%'. APPEND is_fieldcat TO it_fieldcat. ENDLOOP. CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = it_fieldcat IMPORTING ep_table = new_table. CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = it_fieldcat IMPORTING ep_table = OUT_table. ASSIGN new_table->* TO <l_table>. CREATE DATA new_line LIKE LINE OF <l_table>. ASSIGN new_line->* TO <l_line>. clear <l_table>[]. ASSIGN OUT_TABLE->* TO <OUT_TABLE>. CREATE DATA OUT_LINE LIKE LINE OF <OUT_TABLE>. ASSIGN OUT_LINE->* TO <OUT_LINE>. CLEAR <OUT_TABLE>[]. "-----------CREATE SALE LINE TO CALC SALE DATA CREATE DATA SALE_line LIKE LINE OF <l_table>. ASSIGN SALE_line->* TO <SALE_line>. "------------------------------- "-----------CREATE COST LINE TO CALC SALE DATA CREATE DATA COST_line LIKE LINE OF <l_table>. ASSIGN COST_line->* TO <COST_line>. "------------------------------- "-----------CREATE DB_TABLE------------------- CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = it_fieldcat IMPORTING ep_table = DB_table. ASSIGN DB_TABLE->* TO <DB_TABLE>. CREATE DATA DB_LINE LIKE LINE OF <DB_TABLE>. ASSIGN DB_LINE->* TO <DB_LINE>. CLEAR <DB_TABLE>[]. "--------------CREATE GP_LINE CREATE DATA GP_LINE LIKE LINE OF <DB_TABLE>. ASSIGN GP_LINE->* TO <GP_LINE>. CREATE DATA JUDGE_LINE LIKE LINE OF <DB_TABLE>. ASSIGN JUDGE_LINE->* TO <J_LINE>. CREATE DATA TCOST_LINE LIKE LINE OF <DB_TABLE>. ASSIGN TCOST_LINE->* TO <TCOST_LINE>. ENDFORM. " BUILD_OUT_TABLE "清空line,除了成本要素组和成本要素 *---------------------------------------------------------------------* * FORM CLEAR_NEW_LINE * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> CLINE * *---------------------------------------------------------------------* FORM CLEAR_NEW_LINE USING CLINE. DATA: GP LIKE GRPDYNP-NAME_COALL. DATA: EM LIKE COSP-KSTAR. DATA: FN(3) TYPE N VALUE '000'. DATA: FD(30). FIELD-SYMBOLS: <FIELD1> TYPE ANY, <FIELD2> TYPE ANY. ASSIGN COMPONENT 'ELEMENT_GROUP' OF STRUCTURE CLINE TO <FIELD1>. GP = <FIELD1>. ASSIGN COMPONENT 'ELEMENT' OF STRUCTURE CLINE TO <FIELD2>. EM = <FIELD2>. <FIELD1> = GP. <FIELD2> = EM. LOOP AT ORDER_LIST. FN = SY-TABIX. CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE CLINE TO <FIELD1>. <FIELD1> = 0. ENDLOOP. ENDFORM. *---------------------------------------------------------------------* * FORM GET_NEW_LINE * *---------------------------------------------------------------------* * 获得输出行内容 *---------------------------------------------------------------------* * --> CLINE * * --> G_E * *---------------------------------------------------------------------* FORM GET_NEW_LINE USING CLINE G_E Z1 ATTR. "'G': GROUP : 'E' : ELEMENT. DATA: FN(3) TYPE N VALUE '000'. DATA: FD(30). DATA: WTG_TAB TYPE COSP-WTG001. FIELD-SYMBOLS: <OUT_FIELD> TYPE ANY, "ITEM_LINE <PERCENT_FIELD> TYPE ANY,"ITEM_LINE <TOTAL_PERCENT> TYPE ANY,"ITEM_LINE <SUM_FIELD> TYPE ANY,"ITEM_LINE <G_E> TYPE ANY,"ITEM_LINE <COST_FIELD> TYPE ANY, "COST_LINE <COST_PERCENT> TYPE ANY,"COST_LINE PERCENT <SALE_FIELD> TYPE ANY." SALE_LINE IF G_E = 'G'. ASSIGN COMPONENT 'ELEMENT_GROUP' OF STRUCTURE CLINE TO <G_E>. ELSEIF G_E = 'E'. ASSIGN COMPONENT 'ELEMENT' OF STRUCTURE CLINE TO <G_E>. ENDIF. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE CLINE TO <SUM_FIELD>. ASSIGN COMPONENT 'PERCENT' OF STRUCTURE CLINE TO <TOTAL_PERCENT>. ASSIGN COMPONENT 'PERCENT' OF STRUCTURE CLINE TO <COST_PERCENT>. LOOP AT ORDER_LIST. FN = SY-TABIX. "---------AMOUNT CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE CLINE TO <OUT_FIELD>. "------------------------------------------- "-----------COST LINE FIELD AMOUNT ASSIGN COMPONENT FD OF STRUCTURE <COST_LINE> TO <COST_FIELD>. " "--------PERCENT CLEAR FD. CONCATENATE 'PERCENT' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE CLINE TO <PERCENT_FIELD>. "-------------------------------------------- "-----------SALE FIELD ASSIGN COMPONENT FD OF STRUCTURE <SALE_LINE> TO <SALE_FIELD>. "----------------------------------------------- CLEAR WTG_TAB. IF G_E = 'G'. PERFORM GET_COSP_WTG_VIA_GROUP USING ORDER_LIST-ORDER <G_E> Z1 ATTR ABPER-LOW "期间开始 ABPER-HIGH "期间结束 CHANGING WTG_TAB. ELSEIF G_E = 'E'. PERFORM GET_COSP_WTG_VIA_ORDER USING ORDER_LIST-ORDER <G_E> ABPER-LOW "期间开始 ABPER-HIGH "期间结束 CHANGING WTG_TAB. READ TABLE SALE_COST_ELEMENT WITH KEY ELEMENT = <G_E>. IF SY-SUBRC <> 0. IF <SALE_FIELD> <> 0. <PERCENT_FIELD> = WTG_TAB / <SALE_FIELD>. ENDIF. <TOTAL_PERCENT> = <TOTAL_PERCENT> + <PERCENT_FIELD>. <COST_FIELD> = <COST_FIELD> + WTG_TAB. <COST_PERCENT> = <COST_PERCENT> + <PERCENT_FIELD>. ENDIF. ENDIF. <OUT_FIELD> = WTG_TAB. <SUM_FIELD> = <SUM_FIELD> + WTG_TAB. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form BUILD_OUT_TABLE_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM BUILD_OUT_TABLE_DATA. "<L_LINE> "<L_TABLE> FIELD-SYMBOLS: <L_FIELD> TYPE ANY, <Z1> TYPE ANY, <ATTR> TYPE ANY. DATA: FN(3) TYPE N VALUE '000'. DATA: FD(30). DATA: WTG_TAB TYPE COSP-WTG001. LOOP AT COST_ELEMENT_GROUP. CLEAR <OUT_LINE>. LOOP AT ORDER_LIST. FN = SY-TABIX. CLEAR FD. CONCATENATE 'ORDER' FN INTO FD. ASSIGN COMPONENT FD OF STRUCTURE <OUT_LINE> TO <OUT_FIELD>. CLEAR WTG_TAB. PERFORM GET_COSP_WTG_VIA_GROUP USING ORDER_LIST-ORDER COST_ELEMENT_GROUP-ELEMENT_GROUP COST_ELEMENT_GROUP-Z1 COST_ELEMENT_GROUP-ATTR ABPER-LOW "期间开始 ABPER-HIGH "期间结束 CHANGING WTG_TAB. <OUT_FIELD> = <OUT_FIELD> + WTG_TAB. * <OUT_FIELD> = 1000000. ENDLOOP. ASSIGN COMPONENT 'Z1' OF STRUCTURE <OUT_LINE> TO <Z1>. <Z1> = COST_ELEMENT_GROUP-Z1. ASSIGN COMPONENT 'ATTR' OF STRUCTURE <OUT_LINE> TO <ATTR>. <ATTR> = COST_ELEMENT_GROUP-ATTR. INSERT <OUT_LINE> INTO TABLE <OUT_TABLE>. CLEAR <OUT_LINE>. ENDLOOP. ENDFORM. " BUILD_OUT_TABLE_DATA
Extracted by Direct Download 46cd version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 46C
Description: YCOR1005_TEST_N
Include YCOR1005_TEST
Include YCOR1005_TEST
*----------------------------------------------------------------------* * INCLUDE YCOR1005_TEST * *----------------------------------------------------------------------* FORM create_hierarchy_all. DATA: l_GROUP_key TYPE lvc_nkey, l_last_key TYPE lvc_nkey, l_top_key TYPE lvc_nkey. DATA: HEADER_TEXT TYPE LVC_VALUE. * PERFORM GET_COST_GROUP_TEXT USING CGP * CHANGING HEADER_TEXT. * data: IS_NODE_LAYOUT type LVC_S_LAYN. * IS_NODE_LAYOUT-DISABLED = 'X'. * CALL METHOD g_alv_tree->add_node * EXPORTING * i_relat_node_key = '' * i_relationship = cl_gui_column_tree=>relat_last_child * i_node_text = HEADER_TEXT * IS_NODE_LAYOUT = IS_NODE_LAYOUT * IMPORTING * e_new_node_key = l_top_key. TOP_KEY = L_TOP_KEY. PERFORM create_hierarchy_group USING '' '' '' 0 ''."l_top_key. PERFORM add_L1 USING <GP_LINE> l_top_key CHANGING l_GROUP_key. PERFORM add_L2 USING <TCOST_LINE> l_top_key CHANGING l_GROUP_key. * PERFORM add_L2 USING <OUT_LINE> * l_top_key * CHANGING l_GROUP_key. ENDFORM. " create_hierarchy *---------------------------------------------------------------------* * FORM build_comment * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> PT_LIST_COMMENTARY * * --> HEADER_TEXT * *---------------------------------------------------------------------* form build_comment using pt_list_commentary type slis_t_listheader HEADER_TEXT. data: ls_line type slis_listheader. * * LIST HEADING LINE: TYPE H clear ls_line. ls_line-typ = 'H'. * LS_LINE-KEY: NOT USED FOR THIS TYPE ls_line-info = '单船车间收入成本表'. "#EC NOTEXT append ls_line to pt_list_commentary. * STATUS LINE: TYPE S clear ls_line. ls_line-typ = 'S'. ls_line-key = '期间:'. "#EC NOTEXT CONCATENATE ABPER-low '-' ABPER-high into ls_line-info. "#EC NOTEXT append ls_line to pt_list_commentary. ls_line-key = '船名:'. DATA: S1(100). DATA: ST(12). CLEAR ST. CONCATENATE ORDER_10 '%' INTO ST. SELECT SINGLE KTEXT FROM COAS INTO S1 WHERE AUFNR LIKE ST. CLEAR SHIPNAME. SPLIT S1 AT '-' INTO SHIPNAME S1. ls_line-info = SHIPNAME. "#EC NOTEXT append ls_line to pt_list_commentary. * ACTION LINE: TYPE A * clear ls_line. * ls_line-typ = 'A'. ** LS_LINE-KEY: NOT USED FOR THIS TYPE * ls_line-info = 'actual data'. "#EC NOTEXT * append ls_line to pt_list_commentary. ENDFORM. *---------------------------------------------------------------------* * FORM create_hierarchy_group * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> L_GROUP_KEY * * --> L_LAST_KEY * * --> L_TOP_KEY * *---------------------------------------------------------------------* FORM create_hierarchy_group USING ELEMENT_GROUP Z1 ATTR LEVEL l_top_key TYPE lvc_nkey. DATA: l_GROUP_key TYPE lvc_nkey. FIELD-SYMBOLS: <L_FIELD> TYPE ANY, <FIELD> TYPE ANY. DATA: FN(3) TYPE N VALUE '000'. DATA: FD(30). DATA: WTG_TAB TYPE COSP-WTG001. DATA: ELEM_LIST LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE. DATA: GP_LIST LIKE COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE. DATA: GP LIKE GRPDYNP-NAME_COALL. DATA: EM LIKE COSP-KSTAR. DATA: INDEX TYPE I. * GP_LIST[] = OUT_CG[]. IF LEVEL = 0. GP_LIST[] = OUT_CG[]. ELSE. PERFORM GET_COST_ELEMENT_GROUP_LIST TABLES GP_LIST USING ELEMENT_GROUP 1. ENDIF. LOOP AT GP_LIST. CLEAR <OUT_LINE>. ASSIGN COMPONENT 'ELEMENT_GROUP' OF STRUCTURE <OUT_LINE> TO <FIELD>. <FIELD> = GP_LIST-ELEMENT_GROUP. GP = GP_LIST-ELEMENT_GROUP. PERFORM CLEAR_NEW_LINE USING <OUT_LINE>. DATA: B(1). CLEAR B. PERFORM JUDGE_GROUP_OUTPUT USING GP_LIST-ELEMENT_GROUP GP_LIST-Z1 GP_LIST-ATTR CHANGING B. IF B <> 'X'. PERFORM add_element_group USING <OUT_LINE> l_top_key CHANGING l_GROUP_key. EXPAND_key1-GROUP = GP_LIST-ELEMENT_GROUP. EXPAND_key1-CKEY = l_GROUP_key. APPEND EXPAND_key1. PERFORM create_hierarchy_group USING GP_LIST-ELEMENT_GROUP GP_LIST-Z1 GP_LIST-ATTR -1 l_GROUP_key. ENDIF. ENDLOOP. "add element IF GP_LIST[] IS INITIAL. PERFORM GET_COST_ELEMENT_LIST TABLES ELEM_LIST USING ELEMENT_GROUP Z1 ATTR 1 . LOOP AT ELEM_LIST. ASSIGN COMPONENT 'ELEMENT' OF STRUCTURE <OUT_LINE> TO <FIELD>. <FIELD> = ELEM_LIST-ELEMENT. EM = ELEM_LIST-ELEMENT. PERFORM GET_INTERNAL_LINE_DATA USING ELEM_LIST-ELEMENT CHANGING <OUT_LINE>. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE <OUT_LINE> TO <FIELD>. IF <FIELD> <> 0. PERFORM add_element USING <OUT_LINE> l_top_key CHANGING l_GROUP_key. ENDIF. PERFORM CLEAR_NEW_LINE USING <OUT_LINE>. ENDLOOP. ENDIF. ENDFORM. "JUDGE GROUP IF OUTPUT B = 'X' MEANS NO-OUTPUT. *---------------------------------------------------------------------* * FORM JUDGE_GROUP_OUTPUT * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> GROUP * * --> B * *---------------------------------------------------------------------* FORM JUDGE_GROUP_OUTPUT USING GROUP Z1 ATTR CHANGING B. DATA: ELEM_LIST LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE. CLEAR ELEM_LIST[]. DATA: W1 TYPE COSP-WTG001. CLEAR W1. FIELD-SYMBOLS: <FIELD1> TYPE ANY. PERFORM GET_COST_ELEMENT_LIST TABLES ELEM_LIST USING GROUP Z1 ATTR 0 . LOOP AT ELEM_LIST. * PERFORM CLEAR_NEW_LINE USING <OUT_LINE>. CLEAR <J_LINE>. PERFORM GET_INTERNAL_LINE_DATA USING ELEM_LIST-ELEMENT CHANGING <J_LINE>. ASSIGN COMPONENT 'TOTAL' OF STRUCTURE <J_LINE> TO <FIELD1>. W1 = W1 + <FIELD1>. ENDLOOP. IF W1 = 0. B = 'X'. ENDIF. ENDFORM.