ALV_GRID + 动态显示列

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.
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值