您的位置:首页 > 其它

ALV_GRID + 动态显示列

2007-12-18 10:50 323 查看
Description: YCOR1004_N
单船收入成本明细表

*---------------------------------------------------------------------*
* PROGRAM ID          : YCOR1004                                      *
* APPLICATION NAME    : CO                                            *
* AUTHOR              : Victor.Pan                                    *
* TRANSACTION         : ZCOR06                                        *
* PROGRAM TYPE        : REPORT                                        *
* OUTPUT              : ALV_TREE 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  YCOR1004                      .
include YCOR1004_TOP_N.

*Screen elements
SELECTION-SCREEN BEGIN OF BLOCK RAD1
WITH FRAME TITLE TEXT-003.
PARAMETERS: BUKRS LIKE BSEG-BUKRS OBLIGATORY."公司代码
SELECT-OPTIONS: ABPER FOR BSEG-ABPER OBLIGATORY."期间
*PARAMETERS: CGP LIKE GRPDYNP-NAME_COALL DEFAULT 'GD01'.
PARAMETERS: VR LIKE ZCO04_B-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."产成品

SELECT-OPTIONS: PRCTR FOR COAS-PRCTR."利润中心
SELECTION-SCREEN END OF BLOCK RAD2.
SELECTION-SCREEN BEGIN OF BLOCK RAD3
WITH FRAME TITLE TEXT-001.
PARAMETERS: M1 RADIOBUTTON GROUP A2  USER-COMMAND SELE DEFAULT 'X' .
"千元
PARAMETERS: M2 RADIOBUTTON GROUP A2."元
SELECTION-SCREEN END OF BLOCK RAD3.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR PRCTR-LOW.
*PERFORM GET_F4 CHANGING PRCTR-LOW.
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR PRCTR-HIGH.
*PERFORM GET_F4 CHANGING PRCTR-HIGH.
AT SELECTION-SCREEN.
AUTHORITY-CHECK OBJECT 'ZBUKRS' ID 'BUKRS'  FIELD BUKRS.
IF SY-SUBRC <> 0.
MESSAGE E000(ZFI01) WITH '没有此公司代码权限'.
ENDIF.
START-OF-SELECTION.
PERFORM GET_PRCTR."获得列润中心与订单
PERFORM GET_SALE_COST_ELEMENT TABLES SALE_COST_ELEMENT
USING VR. "获得销售成本要素

CALL SCREEN 100.
include YCOR1004_PROCESS_DATA_N.
include YCOR1004_FORMS_N.

*Text elements
*----------------------------------------------------------
* 001 单位选择
* 002 半成品/产成品
* 003 选择条件

*Selection texts
*----------------------------------------------------------
* ABPER         期间
* BUKRS         公司代码
* CGP         成本要素组
* H1         半成品
* H2         产成品
* M1         千元
* M2         元
* PRCTR         利润中心
* VR         变式

*Messages
*----------------------------------------------------------
*
* 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: YCOR1004_TOP_N
Include YCOR1004_TOP

*----------------------------------------------------------------------*
*   INCLUDE YCOR1004_TOP                                               *
*----------------------------------------------------------------------*
TABLES: BSIS,AUFK,COSP,BSEG,COAS,COSS,ZCO04_A,BKPF,CSKA.
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 pa0002-nachn,
ORDER LIKE AUFK-AUFNR,
END OF F4_LIST.
DATA: BEGIN OF F4_LIST_SHOW OCCURS 0,
PRCTR LIKE COAS-PRCTR,
TEXT LIKE COAS-KTEXT,
END OF F4_LIST_SHOW.
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,"成本要素组列表
ELEMENT_GROUP LIKE GRPDYNP-NAME_COALL,
Z1   LIKE ZCO04_A-Z1,"取数属性
ATTR LIKE ZCO04_A-ATTR,"+/-属性
END OF COST_ELEMENT_GROUP.
DATA: CG01 LIKE COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
DATA: CE01 LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE.
DATA: SALE_COST_ELEMENT LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE.

DATA: NEW_TABLE TYPE REF TO DATA.
DATA: NEW_LINE TYPE REF TO DATA.
FIELD-SYMBOLS: <OUT_TABLE> TYPE ANY TABLE,
<OUT_LINE> TYPE ANY.
DATA: gt_fieldcatalog TYPE lvc_t_fcat.
DATA: it_fieldcat TYPE lvc_t_fcat."CREATE TABLE STRUCTURE
data: gt_fieldcat type lvc_t_fcat."display structure
DATA: is_fieldcat LIKE LINE OF it_fieldcat."WORK AREA
DATA: CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: GO_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA: LAST_COMMAND TYPE SY-UCOMM.
DATA: TH1 TYPE BSIS-HKONT.


Extracted by Direct Download 46cd version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 46C
Description: YCOR1004_PROCESS_DATA_N
Include YCOR1004_PROCESS_DATA

*----------------------------------------------------------------------*
*   INCLUDE YCOR1004_PROCESS_DATA                                      *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  GET_PRCTR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_PRCTR.
CLEAR ORDER_LIST[].
CLEAR F4_LIST[].
CLEAR F4_LIST_SHOW[].
DATA: T1 TYPE BSEG-ABPER.

"成品与半成品
IF H1 = 'X'.
TH1 = '1121020100'.
ELSEIF H2 = 'X'.
TH1 = '1121040100'.
ENDIF.
SELECT * FROM BSIS WHERE "BLART = 'SB'
"AND
BUKRS = BUKRS
"  AND PRCTR IN PRCTR
AND HKONT = TH1.
T1 = BSIS-BUDAT(6).
IF T1 IN ABPER.
CLEAR: BSEG,ORDER_LIST-ORDER.
*      SELECT SINGLE ZUONR FROM BSEG INTO ORDER_LIST-ORDER
*             WHERE BELNR = BSIS-BELNR
*             AND GJAHR = BSIS-GJAHR
*             AND BUKRS = BUKRS
*             AND WRBTR <> 0.
*      IF ORDER_LIST-ORDER <> ''.
ORDER_LIST-ORDER = BSIS-ZUONR.
APPEND ORDER_LIST.   "加入订单列表
*      ENDIF.
ENDIF.
ENDSELECT.
SORT ORDER_LIST BY ORDER.
DELETE ADJACENT DUPLICATES FROM ORDER_LIST."删除冗余
"CREATE F4_LIST
LOOP AT ORDER_LIST.
SELECT PRCTR FROM COAS INTO F4_LIST_SHOW-PRCTR
WHERE AUFNR = ORDER_LIST-ORDER.
PERFORM GET_PRCTR_TEXT USING F4_LIST_SHOW-PRCTR
CHANGING F4_LIST_SHOW-TEXT.
APPEND F4_LIST_SHOW.  "加入F4_列表
ENDSELECT.
ENDLOOP.
SORT F4_LIST_SHOW BY PRCTR.
DELETE ADJACENT DUPLICATES FROM F4_LIST_SHOW."删除冗余
ENDFORM.                    " GET_PRCTR
"利润中心
*---------------------------------------------------------------------*
*       FORM GET_PRCTR_TEXT                                           *
*---------------------------------------------------------------------*
*       获得利润中心文本                                              *
*---------------------------------------------------------------------*
*  -->  PRCTR                                                         *
*  -->  TEXT                                                          *
*---------------------------------------------------------------------*
FORM GET_PRCTR_TEXT USING PRCTR
CHANGING TEXT.
CLEAR TEXT.
SELECT SINGLE KTEXT FROM CEPCT
INTO TEXT WHERE SPRAS = '1'
AND PRCTR = PRCTR
AND KOKRS = '2300'.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM BUILD_OUT_TABLE                                          *
*---------------------------------------------------------------------*
*       create output alv structure                                   *
*---------------------------------------------------------------------*
FORM BUILD_OUT_TABLE.
CLEAR it_fieldcat[].
clear is_fieldcat.
is_fieldcat-fieldname = 'AUART'.
is_fieldcat-ref_field = 'AUART'..
is_fieldcat-ref_table = 'COAS'.
is_fieldcat-COLTEXT = '工程类型'.
APPEND is_fieldcat TO it_fieldcat.
clear is_fieldcat.
is_fieldcat-fieldname = 'AUART_TEXT'.
is_fieldcat-ref_field = 'KTEXT'..
is_fieldcat-ref_table = 'COAS'.
is_fieldcat-COLTEXT = '工程类型'.
APPEND is_fieldcat TO it_fieldcat.

clear is_fieldcat.
is_fieldcat-fieldname = 'AUFNR'.
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 = 'AUFNR_TEXT'.
is_fieldcat-ref_field = 'KTEXT'.
is_fieldcat-ref_table = 'COAS'.
is_fieldcat-COLTEXT = '订单名称'.
APPEND is_fieldcat TO it_fieldcat.
clear is_fieldcat.
is_fieldcat-fieldname = 'ORDER_STATUS'.
is_fieldcat-COLTEXT = '订单状态'.
APPEND is_fieldcat TO it_fieldcat.
clear is_fieldcat.
is_fieldcat-fieldname = 'ORDER10'.
is_fieldcat-COLTEXT = '订单组'.
APPEND is_fieldcat TO it_fieldcat.

clear is_fieldcat.
is_fieldcat-fieldname = 'IN_AMOUNT'.
is_fieldcat-ref_field = 'WTG001'.
is_fieldcat-ref_table = 'COSP'.
is_fieldcat-COLTEXT = '收入金额'.
is_fieldcat-do_sum = 'X'.
APPEND is_fieldcat TO it_fieldcat.
PERFORM BUILD_COL01.
PERFORM BUILD_COL02.
clear is_fieldcat.
is_fieldcat-fieldname = 'COST_AMOUNT'.
is_fieldcat-ref_field = 'WTG001'.
is_fieldcat-ref_table = 'COSP'.
is_fieldcat-COLTEXT = '成本'.
is_fieldcat-do_sum = 'X'.
APPEND is_fieldcat TO it_fieldcat.
clear is_fieldcat.
is_fieldcat-fieldname = 'PROFIT'.
is_fieldcat-ref_field = 'WTG001'.
is_fieldcat-ref_table = 'COSP'.
is_fieldcat-COLTEXT = '毛利'.
is_fieldcat-do_sum = 'X'.
APPEND is_fieldcat TO it_fieldcat.
clear is_fieldcat.
is_fieldcat-fieldname = 'PROFIT_RATE'.
is_fieldcat-ref_field = 'WTG001'.
is_fieldcat-ref_table = 'COSP'.
is_fieldcat-COLTEXT = '毛利率%'.
*  is_fieldcat-EDIT_MASK = '____%'.
is_fieldcat-NO_ZERO = 'X'.
is_fieldcat-LZERO = ''.
is_fieldcat-do_sum = ''.
APPEND is_fieldcat TO it_fieldcat.
clear is_fieldcat.
is_fieldcat-fieldname = 'TCOST'.
is_fieldcat-ref_field = 'WTG001'.
is_fieldcat-ref_table = 'COSP'.
is_fieldcat-COLTEXT = '暂估成本'.
is_fieldcat-do_sum = 'X'.
APPEND is_fieldcat TO it_fieldcat.

CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fieldcat
IMPORTING
ep_table        = new_table.

ASSIGN new_table->* TO <OUT_table>.
CREATE DATA new_line LIKE LINE OF <OUT_table>.
ASSIGN new_line->* TO <OUT_line>.
clear <OUT_table>[].
ENDFORM.
*---------------------------------------------------------------------*
*       FORM BUILD_COL02                                              *
*---------------------------------------------------------------------*
*       build cost element cols                                       *
*---------------------------------------------------------------------*
FORM BUILD_COL02.
DATA: CE LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE.
"get cost elements list via group id.
*  PERFORM GET_COST_ELEMENT_LIST  TABLES CE
*                              USING 'GD0102'
*                                    0.
PERFORM GET_COST_ELEMENT_ME TABLES CE.
CE01[] = CE[].
DATA: COST_N(3) TYPE N VALUE '000'.
LOOP AT CE.
COST_N = SY-TABIX.
CLEAR is_fieldcat.
CONCATENATE 'ELEMENT' COST_N INTO is_fieldcat-fieldname.
is_fieldcat-ref_field = 'WTG001'.
is_fieldcat-ref_table = 'COSP'.
PERFORM GET_COST_ELEMENT_TEXT
USING CE-ELEMENT
CHANGING is_fieldcat-COLTEXT.
is_fieldcat-do_sum = 'X'.
APPEND is_fieldcat TO it_fieldcat.

ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM BUILD_COL01                                              *
*---------------------------------------------------------------------*
*       build sub element group alv output cols                       *
*---------------------------------------------------------------------*
FORM BUILD_COL01.
DATA: COST_GROUP LIKE COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
"get cost subgroup list via group id.
*  PERFORM GET_COST_ELEMENT_GROUP_LIST
*       TABLES COST_GROUP
*              USING 'GD0102'
*                   1.
PERFORM GET_COST_ELEMENT_GROUP_ME TABLES COST_GROUP.
CG01[] = COST_GROUP[].
DATA: COST_N(3) TYPE N VALUE '000'.
LOOP AT COST_GROUP.
COST_N = SY-TABIX.
CLEAR is_fieldcat.
CONCATENATE 'GROUP' COST_N INTO is_fieldcat-fieldname.
is_fieldcat-ref_field = 'WTG001'.
is_fieldcat-ref_table = 'COSP'.
PERFORM GET_COST_GROUP_TEXT
USING COST_GROUP-ELEMENT_GROUP
CHANGING is_fieldcat-COLTEXT.
is_fieldcat-do_sum = 'X'.
APPEND is_fieldcat TO it_fieldcat.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_F4                                                   *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  NAME                                                          *
*---------------------------------------------------------------------*
FORM GET_F4 CHANGING NAME.
DATA : f4help LIKE TABLE OF ddshretval WITH HEADER LINE.
DATA: dynpprog LIKE SY-REPID.
dynpprog = SY-REPID.
perFORM GET_PRCTR. "获得利润中心
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield     = 'PRCTR'
dynpprog     = dynpprog
dynpnr       = sy-dynnr
stepl        = '1'
window_title = '选择值'
value_org    = 'S'
TABLES
value_tab    = F4_LIST_SHOW
return_tab   = f4help.
NAME = f4help-fieldval.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'MAIN'.
IF GO_GRID IS INITIAL.
CREATE OBJECT container1
EXPORTING
container_name = 'C1'.
CREATE OBJECT GO_GRID
EXPORTING  i_parent = container1.
PERFORM BUILD_OUT_TABLE.  "build output table structure
PERFORM GET_OUT_TABLE_DATA."get output data
ENDIF.
CLEAR GT_FIELDCAT[].
IF LAST_COMMAND = 'F2'.
PERFORM TRANSFER_IT_TO_GT_02.  "format output catlog
ELSEIF LAST_COMMAND = 'F3'.
PERFORM TRANSFER_IT_TO_GT_03.
ELSE.
PERFORM TRANSFER_IT_TO_GT_01.
ENDIF.
DATA: SLA TYPE LVC_S_LAYO.
SLA-CWIDTH_OPT = 'X'.
DATA:   IT_SORT TYPE LVC_T_SORT.
DATA:   IT_TAB TYPE LVC_S_SORT.
CLEAR IT_SORT[].
IT_TAB-FIELDNAME = 'ORDER_STATUS'.
IT_TAB-SPOS = '1'.
IT_TAB-UP = 'X'.
IT_TAB-DOWN = SPACE.
IT_TAB-SUBTOT = 'X'.
APPEND IT_TAB TO IT_SORT.
IT_TAB-FIELDNAME = 'ORDER10'.
IT_TAB-SPOS = '2'.
IT_TAB-UP = 'X'.
IT_TAB-DOWN = SPACE.
IT_TAB-SUBTOT = 'X'.
APPEND IT_TAB TO IT_SORT.
CONCATENATE '单船收入成本明细表      '
ABPER-LOW '-' ABPER-HIGH INTO SLA-GRID_TITLE.
PERFORM MODIFY_OUTPUT.
call method go_grid->set_table_for_first_display
exporting
*      is_variant                    = LS_VARI
i_save                        = 'X'
is_layout                     = sla
changing
it_outtab                     = <OUT_TABLE>[]
it_fieldcatalog               = gt_fieldcat[]
IT_SORT = IT_SORT[]
exceptions
invalid_parameter_combination = 1
program_error                 = 2
too_many_lines                = 3
others                        = 4.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
LAST_COMMAND = SY-UCOMM.
CASE SY-UCOMM.
WHEN 'BACK'.
SET SCREEN 0.LEAVE SCREEN.
WHEN 'F1'.
WHEN 'F2'.
WHEN 'F3'.
ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Form  BUILD_DETAIL_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_DETAIL_TABLE.

ENDFORM.                    " BUILD_DETAIL_TABLE
*&---------------------------------------------------------------------*
*&      Form  TRANSFER_IT_TO_GT_01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM TRANSFER_IT_TO_GT_01.
LOOP AT IT_FIELDCAT INTO is_fieldcat.
IF is_fieldcat-FIELDNAME = 'AUART'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME = 'AUFNR'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME(7) = 'ELEMENT'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME(5) = 'GROUP'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME = 'ORDER10'.
is_fieldcat-no_out = 'X'.
ENDIF.
APPEND is_fieldcat TO GT_FIELDCAT.
ENDLOOP.
ENDFORM.                    " TRANSFER_IT_TO_GT_01
*---------------------------------------------------------------------*
*       FORM TRANSFER_IT_TO_GT_02                                     *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM TRANSFER_IT_TO_GT_02.
LOOP AT IT_FIELDCAT INTO is_fieldcat.
IF is_fieldcat-FIELDNAME = 'AUART'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME = 'AUFNR'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME(7) = 'ELEMENT'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME = 'ORDER10'.
is_fieldcat-no_out = 'X'.
ENDIF.
APPEND is_fieldcat TO GT_FIELDCAT.
ENDLOOP.
ENDFORM.                    " TRANSFER_IT_TO_GT_01
*---------------------------------------------------------------------*
*       FORM TRANSFER_IT_TO_GT_03                                     *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM TRANSFER_IT_TO_GT_03.
LOOP AT IT_FIELDCAT INTO is_fieldcat.
IF is_fieldcat-FIELDNAME = 'AUART'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME = 'AUFNR'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME(5) = 'GROUP'.
is_fieldcat-no_out = 'X'.
ELSEIF is_fieldcat-FIELDNAME = 'ORDER10'.
is_fieldcat-no_out = 'X'.
ENDIF.
APPEND is_fieldcat TO GT_FIELDCAT.
ENDLOOP.
ENDFORM.                    " TRANSFER_IT_TO_GT_01
*---------------------------------------------------------------------*
*       FORM GET_OUT_TABLE_DATA                                       *
*---------------------------------------------------------------------*
*       get output data                                               *
*---------------------------------------------------------------------*
FORM GET_OUT_TABLE_DATA.
FIELD-SYMBOLS: <FIELD> TYPE ANY,
<FIELD1> TYPE ANY,
<AUFNR> TYPE ANY,
<ORDER10> TYPE ANY.

LOOP AT ORDER_LIST.

CLEAR <OUT_LINE>.

"get line item from db
PERFORM GET_LINE_DB_DATA USING ORDER_LIST-ORDER
CHANGING <OUT_LINE>.

ASSIGN COMPONENT 'AUFNR' OF STRUCTURE
<OUT_LINE> TO <AUFNR>.
ASSIGN COMPONENT 'ORDER10' OF STRUCTURE
<OUT_LINE> TO <ORDER10>.
<ORDER10> = <AUFNR>(10).
ASSIGN COMPONENT 'IN_AMOUNT' OF STRUCTURE
<OUT_LINE> TO <FIELD>.
ASSIGN COMPONENT 'COST_AMOUNT' OF STRUCTURE
<OUT_LINE> TO <FIELD1>.
IF <FIELD> <> 0 OR <FIELD1> <> 0.

INSERT <OUT_LINE> INTO TABLE <OUT_TABLE>.
ENDIF.
ENDLOOP.
DATA: ORDER1 LIKE ORDER_LIST OCCURS 0 WITH HEADER LINE.
CLEAR ORDER1[].

SELECT * FROM BSIS WHERE
BUKRS = BUKRS
AND HKONT = '1121020200'
AND ZUONR <> ''.

DATA: T1 TYPE D.
T1 = BSIS-BUDAT(6).
IF T1 IN ABPER.
CLEAR: BSEG,ORDER1-ORDER.
ORDER1-ORDER = BSIS-ZUONR.
DATA: D1(20).
CLEAR D1.
CONCATENATE BSIS-ZUONR(10) '%' INTO D1.
SELECT SINGLE * FROM BSIS WHERE ZUONR LIKE D1
AND HKONT = TH1.
IF SY-SUBRC = 0.
READ TABLE ORDER_LIST WITH KEY ORDER = ORDER1-ORDER.
IF SY-SUBRC <> 0.
APPEND ORDER1.   "加入订单列表
ENDIF.
ENDIF.
ENDIF.
ENDSELECT.
DELETE ADJACENT DUPLICATES FROM ORDER1.

LOOP AT ORDER1.
CLEAR <OUT_LINE>.
ASSIGN COMPONENT 'AUFNR' OF STRUCTURE <OUT_LINE>
TO <FIELD1>.
<FIELD1> = ORDER1-ORDER.
ASSIGN COMPONENT 'AUFNR_TEXT' OF STRUCTURE <OUT_LINE>
TO <FIELD1>.
PERFORM GET_ORDER_TEXT USING ORDER1-ORDER
CHANGING <FIELD1>.
ASSIGN COMPONENT 'AUART' OF STRUCTURE <OUT_LINE>
TO <FIELD1>.
PERFORM GET_AUART USING ORDER1-ORDER   "获得订单
CHANGING <FIELD1>.

DATA: AUART TYPE AUFK-AUART.
AUART = <FIELD1>.
ASSIGN COMPONENT 'AUART_TEXT' OF STRUCTURE <OUT_LINE>
TO <FIELD1>.
PERFORM GET_AUART_TEXT USING AUART
CHANGING <FIELD1>.
ASSIGN COMPONENT 'ORDER_STATUS' OF STRUCTURE <OUT_LINE>
TO <FIELD1>.
PERFORM GET_AUFNR_STATUS USING ORDER1-ORDER     "获得订单状态
CHANGING <FIELD1>.

"暂估成本
ASSIGN COMPONENT 'TCOST' OF STRUCTURE  <OUT_LINE>
TO <FIELD1>.
SELECT * FROM BSIS WHERE
BUKRS = BUKRS
*                         AND PRCTR IN PRCTR
AND HKONT = '1121020200'
AND SGTXT <> '2006年末在制品'.
IF  BSIS-ZUONR = ORDER1-ORDER.
T1 = BSIS-BUDAT(6).
IF T1 IN ABPER.
IF BSIS-SHKZG = 'H'.
BSIS-DMBTR = BSIS-DMBTR * -1.
ENDIF.
SELECT SINGLE * FROM COAS WHERE AUFNR = ORDER1-ORDER
AND PRCTR IN PRCTR.
IF SY-SUBRC = 0.
<FIELD1> = <FIELD1> +  BSIS-DMBTR.
ENDIF.
ENDIF.
ENDIF.
ENDSELECT.
IF M1 = 'X'.
<FIELD1> = <FIELD1> / 1000.
ENDIF.

"get line item from db
*    PERFORM GET_LINE_DB_DATA USING ORDER_LIST-ORDER
*                             CHANGING <OUT_LINE>.

ASSIGN COMPONENT 'AUFNR' OF STRUCTURE
<OUT_LINE> TO <AUFNR>.
<AUFNR> = ORDER1-ORDER.
ASSIGN COMPONENT 'ORDER10' OF STRUCTURE
<OUT_LINE> TO <ORDER10>.
<ORDER10> = <AUFNR>(10).
ASSIGN COMPONENT 'IN_AMOUNT' OF STRUCTURE
<OUT_LINE> TO <FIELD>.
ASSIGN COMPONENT 'COST_AMOUNT' OF STRUCTURE
<OUT_LINE> TO <FIELD1>.
*    IF <FIELD> <> 0 OR <FIELD1> <> 0.

INSERT <OUT_LINE> INTO TABLE <OUT_TABLE>.
*    ENDIF.

ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_LINE1                                                *
*---------------------------------------------------------------------*
*       get line data from db                                        *
*---------------------------------------------------------------------*
*  -->  ORDER                                                         *
*  -->  CLINE                                                         *
*---------------------------------------------------------------------*
FORM GET_LINE_DB_DATA USING ORDER
CHANGING CLINE.
FIELD-SYMBOLS: <FIELD1> TYPE ANY.
ASSIGN COMPONENT 'AUFNR' OF STRUCTURE CLINE
TO <FIELD1>.
<FIELD1> = ORDER.
ASSIGN COMPONENT 'AUFNR_TEXT' OF STRUCTURE CLINE
TO <FIELD1>.
PERFORM GET_ORDER_TEXT USING ORDER
CHANGING <FIELD1>.
ASSIGN COMPONENT 'AUART' OF STRUCTURE CLINE
TO <FIELD1>.
PERFORM GET_AUART USING ORDER   "获得订单
CHANGING <FIELD1>.

DATA: AUART TYPE AUFK-AUART.
AUART = <FIELD1>.
ASSIGN COMPONENT 'AUART_TEXT' OF STRUCTURE CLINE
TO <FIELD1>.
PERFORM GET_AUART_TEXT USING AUART
CHANGING <FIELD1>.
ASSIGN COMPONENT 'ORDER_STATUS' OF STRUCTURE CLINE
TO <FIELD1>.
PERFORM GET_AUFNR_STATUS USING ORDER     "获得订单状态
CHANGING <FIELD1>.
ASSIGN COMPONENT 'IN_AMOUNT' OF STRUCTURE CLINE
TO <FIELD1>.
DATA: SG LIKE COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
DATA: D1 TYPE BSEG-DMBTR.
"获得销售收入成本要素组
CLEAR SG[].
PERFORM GET_SALE_ELEMENT_GROUP_ME TABLES SG .
LOOP AT SG.
CLEAR D1.
PERFORM GET_COSP_WTG_VIA_GROUP USING ORDER
SG-ELEMENT_GROUP
SG-Z1
SG-ATTR
ABPER-LOW    "期间开始
ABPER-HIGH   "期间结束
CHANGING D1.
<FIELD1> = <FIELD1> + D1.
ENDLOOP.
DATA: COST_N(3) TYPE N VALUE '000'.
DATA: FN(30).
DATA: COST_AMOUNT TYPE COSP-WTG001.
"获得成本要素数据
LOOP AT CE01.
COST_N = SY-TABIX.
CONCATENATE 'ELEMENT' COST_N INTO FN.
ASSIGN COMPONENT FN OF STRUCTURE CLINE
TO <FIELD1>.
PERFORM GET_COSP_WTG_VIA_ORDER1 USING ORDER
CE01-ELEMENT
CE01-Z1
CE01-ATTR
ABPER-LOW    "期间开始
ABPER-HIGH   "期间结束
CHANGING <FIELD1>.
COST_AMOUNT = COST_AMOUNT + <FIELD1>.
ENDLOOP.
ASSIGN COMPONENT 'COST_AMOUNT' OF STRUCTURE CLINE
TO <FIELD1>.
<FIELD1> = COST_AMOUNT.
DATA: SALE_AMOUNT TYPE COSP-WTG001.

FIELD-SYMBOLS: <F1> TYPE ANY,
<F2> TYPE ANY.
ASSIGN COMPONENT 'IN_AMOUNT' OF STRUCTURE CLINE
TO <F1>.
SALE_AMOUNT = <F1>.
"毛利
ASSIGN COMPONENT 'PROFIT' OF STRUCTURE CLINE
TO <F2>.
<F2> = <F1> - COST_AMOUNT.
"毛利率
ASSIGN COMPONENT 'PROFIT_RATE' OF STRUCTURE CLINE
TO <F1>.
IF SALE_AMOUNT <> 0.
<F1> = <F2> / SALE_AMOUNT.
ENDIF.
"获得成本要素组数据
LOOP AT CG01.
COST_N = SY-TABIX.
CLEAR FN.
CONCATENATE 'GROUP' COST_N INTO FN.
ASSIGN COMPONENT FN OF STRUCTURE CLINE
TO <FIELD1>.
PERFORM GET_COSP_WTG_VIA_GROUP USING ORDER
CG01-ELEMENT_GROUP
CG01-Z1
CG01-ATTR
ABPER-LOW    "期间开始
ABPER-HIGH    "期间结束
CHANGING <FIELD1>.
ENDLOOP.
*  "暂估成本
*  "暂估成本
DATA: T1 TYPE D.
ASSIGN COMPONENT 'TCOST' OF STRUCTURE  CLINE
TO <FIELD1>.
SELECT * FROM BSIS WHERE
BUKRS = BUKRS
*                         AND PRCTR IN PRCTR
AND HKONT = '1121020200'
AND SGTXT <> '2006年末在制品'.
IF  BSIS-ZUONR = ORDER_LIST-ORDER.
T1 = BSIS-BUDAT(6).
IF T1 IN ABPER.
IF BSIS-SHKZG = 'H'.
BSIS-DMBTR = BSIS-DMBTR * -1.
ENDIF.
SELECT SINGLE * FROM COAS WHERE AUFNR = ORDER_LIST-ORDER
AND PRCTR IN PRCTR.
IF SY-SUBRC = 0.
<FIELD1> = <FIELD1> +  BSIS-DMBTR.
ENDIF.
ENDIF.
ENDIF.
ENDSELECT.
IF M1 = 'X'.
<FIELD1> = <FIELD1> / 1000.
ENDIF.

ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_AUART                                                *
*---------------------------------------------------------------------*
*       获得订单类型                                                   *
*---------------------------------------------------------------------*
*  -->  AUFNR                                                         *
*  -->  AUART                                                         *
*---------------------------------------------------------------------*
FORM GET_AUART USING AUFNR
CHANGING AUART.
CLEAR AUART.
SELECT SINGLE AUART FROM AUFK INTO AUART
WHERE AUFNR = AUFNR.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_AUART_TEXT                                           *
*---------------------------------------------------------------------*
*       获得订单类型文本
*---------------------------------------------------------------------*
*  -->  AUART                                                         *
*  -->  TEXT                                                          *
*---------------------------------------------------------------------*
FORM GET_AUART_TEXT USING AUART
CHANGING TEXT.
CLEAR TEXT.
SELECT SINGLE TXT FROM T003P INTO TEXT
WHERE SPRAS = '1' AND AUART = AUART.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_AUFNR_STATUS                                         *
*---------------------------------------------------------------------*
*       获取订单状态                                                  *
*---------------------------------------------------------------------*
*  -->  AUFNR                                                         *
*  -->  STATUS                                                        *
*---------------------------------------------------------------------*
FORM GET_AUFNR_STATUS USING AUFNR
CHANGING STATUS.
SELECT * FROM COAS WHERE AUFNR = AUFNR.
IF COAS-PHAS0 = 'X'.
STATUS = '已创建'.
ENDIF.
IF COAS-PHAS1 = 'X'.
STATUS = '已下达'.
ENDIF.
IF COAS-PHAS2 = 'X'.
STATUS = '完成'.
ENDIF.
ENDSELECT.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM MODIFY_OUTPUT                                            *
*---------------------------------------------------------------------*
*      把整列为0的列隐藏                                              *
*---------------------------------------------------------------------*
FORM MODIFY_OUTPUT.
DATA: FN(30).
DATA: COST_N(3) TYPE N VALUE '000'.
FIELD-SYMBOLS: <FIELD1> TYPE ANY.
DATA: W1 TYPE COSP-WTG001.
CLEAR W1.
LOOP AT CE01.
COST_N = SY-TABIX.
CLEAR FN.
CONCATENATE 'ELEMENT' COST_N INTO FN.
CLEAR W1.
LOOP AT <OUT_TABLE> ASSIGNING <OUT_LINE>.
ASSIGN COMPONENT FN OF STRUCTURE <OUT_LINE>
TO <FIELD1>.
W1 = W1 + <FIELD1>.
ENDLOOP.
IF W1 = 0.
"隐藏FN
PERFORM MODIFY_OUTPUT_gt_fieldcat USING FN.
ENDIF.
ENDLOOP.
LOOP AT CG01.
COST_N = SY-TABIX.
CLEAR FN.
CONCATENATE 'GROUP' COST_N INTO FN.
CLEAR W1.
LOOP AT <OUT_TABLE> ASSIGNING <OUT_LINE>.
ASSIGN COMPONENT FN OF STRUCTURE <OUT_LINE>
TO <FIELD1>.
W1 = W1 + <FIELD1>.
ENDLOOP.
IF W1 = 0.
PERFORM MODIFY_OUTPUT_gt_fieldcat USING FN.
ENDIF.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM MODIFY_OUTPUT_gt_fieldcat                                *
*---------------------------------------------------------------------*
*       隐藏某一列                                                    *
*---------------------------------------------------------------------*
*  -->  FN                                                            *
*---------------------------------------------------------------------*
FORM MODIFY_OUTPUT_gt_fieldcat USING FN.
LOOP AT GT_FIELDCAT INTO IS_FIELDCAT.
IF IS_FIELDCAT-FIELDNAME = FN.
IS_FIELDCAT-NO_OUT = 'X'.
MODIFY GT_FIELDCAT FROM IS_FIELDCAT.
ENDIF.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_SALE_COST_ELEMENT                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  SE                                                            *
*  -->  VR                                                            *
*---------------------------------------------------------------------*
FORM GET_SALE_COST_ELEMENT TABLES SE STRUCTURE COST_ELEMENT
USING VR TYPE ZCO04_A-ZVARIANT.

DATA: CE LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE.
DATA: COST_GROUP LIKE  COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
CLEAR COST_GROUP[].

SELECT * FROM ZCO04_A WHERE Z1 = 'A' "get data from custom
AND ZVARIANT = VR.
CLEAR CE[].
PERFORM GET_COST_ELEMENT_LIST  TABLES CE
USING ZCO04_A-COST_GROUP
ZCO04_A-Z1
ZCO04_A-ATTR
0.
APPEND LINES OF CE TO  SE.
ENDSELECT.

ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_SALE_ELEMENT_GROUP_ME                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  SG                                                            *
*---------------------------------------------------------------------*
FORM GET_SALE_ELEMENT_GROUP_ME TABLES SG STRUCTURE  COST_ELEMENT_GROUP.
CLEAR SG[].
DATA: COST_GROUP LIKE  COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
CLEAR COST_GROUP[].

SELECT * FROM ZCO04_A WHERE ZVARIANT = VR AND Z1 = 'A'.
SG-ELEMENT_GROUP = ZCO04_A-COST_GROUP.
SG-Z1 = ZCO04_A-Z1.
SG-ATTR = ZCO04_A-ATTR.
APPEND SG.
CLEAR SG.
ENDSELECT.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_COST_ELEMENT_GROUP_ME                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  CG                                                            *
*---------------------------------------------------------------------*
FORM GET_COST_ELEMENT_GROUP_ME TABLES CG STRUCTURE  COST_ELEMENT_GROUP.
DATA: COST_GROUP LIKE  COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
DATA: C1 LIKE  COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
"get cost subgroup list via group id.
CLEAR CG[].
SELECT  * FROM ZCO04_A WHERE ZVARIANT = VR
AND ( Z1 = 'B' OR Z1 = 'C' ).
CG-ELEMENT_GROUP = ZCO04_A-COST_GROUP.
CG-Z1 = ZCO04_A-Z1.
CG-ATTR = ZCO04_A-ATTR.
APPEND CG.
CLEAR CG.
ENDSELECT.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM GET_COST_ELEMENT_ME                                      *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  CE                                                            *
*---------------------------------------------------------------------*
FORM GET_COST_ELEMENT_ME TABLES CE STRUCTURE  COST_ELEMENT.
DATA: COST_GROUP LIKE  COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
DATA: C1 LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE.
CLEAR COST_GROUP[].
PERFORM GET_COST_ELEMENT_GROUP_ME TABLES COST_GROUP.
LOOP AT COST_GROUP.
CLEAR C1[].
PERFORM GET_COST_ELEMENT_LIST  TABLES C1
USING COST_GROUP-ELEMENT_GROUP
COST_GROUP-Z1
COST_GROUP-ATTR
0.
APPEND LINES OF C1 TO CE.
ENDLOOP.

ENDFORM.


Extracted by Direct Download 46cd version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 46C

Description: YCOR1004_FORMS_N
Include YCOR1004_FORMS

"根据成本要素组获得子成本要素组
*---------------------------------------------------------------------*
*       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
Z1
ATTR
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-Z1 = Z1.
T1-ATTR = ATTR.
T1-ELEMENT_GROUP = T_NODES-SHORTNAME.
APPEND  T1.
ENDLOOP.
ELSEIF LEVEL = 0.
LOOP AT T_NODES WHERE HLEVEL > 0.
CLEAR T1.
T1-Z1 = Z1.
T1-ATTR = ATTR.
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
Z1 ATTR 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_ORDER1 USING ORDER
COST_ELEM-ELEMENT
COST_ELEM-Z1
COST_ELEM-ATTR
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_ORDER1 USING ORDER
COST_ELEMENT
Z1
ATTR
P1    "期间开始 200601  6位
P2    "期间结束 200611
CHANGING WTG.
CLEAR WTG.
DATA: FN(30).
DATA: FN_P(3) TYPE N VALUE '000'.
DATA: TMP(10).
DATA: PERIOD TYPE I.

DATA: P1_IN TYPE I.
FIELD-SYMBOLS: <F1> TYPE ANY.
DATA: OBJNR TYPE COSP-OBJNR.
CONCATENATE 'OR' ORDER INTO OBJNR.
IF P1(4) = P2(4).
PERIOD = P2 - P1 + 1.
IF ( Z1 = 'A' OR Z1 = 'B' ).
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.
ELSEIF Z1 = 'C'.
SELECT * FROM BSEG WHERE BUKRS = BUKRS
AND ZUONR = ORDER
AND HKONT = COST_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 P1 AND P2.
WTG = WTG + BSEG-WRBTR.
ENDIF.
ENDIF.

ENDSELECT.
ENDIF.
ELSE.
DATA: N1(4) TYPE N,
N2(4) TYPE N,
N3(4) TYPE N.
DATA: TP01 TYPE ABPER_RF.
DATA: TP02 TYPE ABPER_RF.
DATA: TP03 TYPE ABPER_RF.
DATA: TP04 TYPE ABPER_RF.
TP01 = P1.
TP02 = TP01.
TP02+4(2) = 12.
DATA: W1 TYPE BSEG-WRBTR.
DATA: SUM1 TYPE BSEG-WRBTR.
CLEAR: W1,SUM1.

PERFORM GET_COSP_WTG_VIA_ORDER1 USING ORDER
COST_ELEMENT
Z1
ATTR
TP01    "期间开始 200601  6位
TP02    "期间结束 200611
CHANGING W1.
SUM1 = SUM1 + W1.
DATA: IP1 TYPE I.
IP1 = P2(4) - P1(4).
IF ( IP1 > 1 ).
IP1 = IP1 - 1.
DO IP1 TIMES.
TP01(4) = TP01(4) + 1.
TP01+4(2) = '01'.
TP02 = TP01.
TP02+4(2) = '12'.
CLEAR W1.
PERFORM GET_COSP_WTG_VIA_ORDER1 USING ORDER
COST_ELEMENT
Z1
ATTR
TP01    "期间开始 200601  6位
TP02    "期间结束 200611
CHANGING W1.
SUM1 = SUM1 + W1.
ENDDO.
TP01(4) = TP01(4) + 1.
TP01+4(2) = '01'.
CLEAR W1.
PERFORM GET_COSP_WTG_VIA_ORDER1 USING ORDER
COST_ELEMENT
Z1
ATTR
TP01    "期间开始 200601  6位
P2    "期间结束 200611
CHANGING W1.
SUM1 = SUM1 + W1.
ELSE.
TP01(4) = TP01(4) + 1.
TP01+4(2) = '01'.
CLEAR W1.
PERFORM GET_COSP_WTG_VIA_ORDER1 USING ORDER
COST_ELEMENT
Z1
ATTR
TP01    "期间开始 200601  6位
P2    "期间结束 200611
CHANGING W1.
SUM1 = SUM1 + W1.
ENDIF.
WTG = SUM1.

ENDIF.

ENDFORM.
FORM GET_COSP_WTG_VIA_ORDER USING ORDER
COST_ELEMENT
Z1
ATTR
P1    "期间开始 200601  6位
P2    "期间结束 200611
CHANGING WTG.
CLEAR WTG.
DATA: FN(30).
DATA: FN_P(3) TYPE N VALUE '000'.
DATA: TMP(10).
DATA: PERIOD TYPE I.

DATA: P1_IN TYPE I.
FIELD-SYMBOLS: <F1> TYPE ANY.
DATA: OBJNR TYPE COSP-OBJNR.
CONCATENATE 'OR' ORDER INTO OBJNR.
IF P1(4) = P2(4).
PERIOD = P2 - P1 + 1.
IF ( Z1 = 'A' OR Z1 = 'B' ).
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.
ELSEIF Z1 = 'C'.
SELECT * FROM BSEG WHERE BUKRS = BUKRS
AND ZUONR = ORDER
AND HKONT = COST_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 P1 AND P2.
WTG = WTG + BSEG-WRBTR.
ENDIF.
ENDIF.

ENDSELECT.
ENDIF.
ELSE.
PERIOD = 12 - P1+4(2) + 1.
IF ( Z1 = 'A' OR Z1 = 'B' ).
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.
ELSEIF Z1 = 'C'.
SELECT * FROM BSEG WHERE BUKRS = BUKRS
AND ZUONR = ORDER
AND HKONT = COST_ELEMENT.
SELECT SINGLE * FROM BKPF WHERE BELNR = BSEG-BELNR
AND BUKRS = BUKRS.
IF SY-SUBRC = 0.
CLEAR D6.
CONCATENATE BKPF-GJAHR BKPF-MONAT INTO D6.
IF D6 BETWEEN P1 AND P2.
WTG = WTG + BSEG-WRBTR.
ENDIF.
ENDIF.

ENDSELECT.

ENDIF.
ENDIF.
IF Z1 = 'A'.
IF H1 = 'X'.
WTG = 0.
ENDIF.
ENDIF.
IF ATTR = '-'.
WTG = WTG * -1.
ENDIF.
IF M1 = 'X'.
WTG = WTG / 1000.
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'.
CONCATENATE ELEMENT TEXT INTO TEXT.
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: