以下程序不代表企业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 *
*----------------------------------------------------------------------*
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 *
*----------------------------------------------------------------------*
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 *
*----------------------------------------------------------------------*
* 获得销售成本要素
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 *
*----------------------------------------------------------------------*
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 *
*----------------------------------------------------------------------*
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.