查看文章
 
ALV TREE + 动态显示列(1)
2008-10-25 19:39

由于BAIDU限制发贴字数,所有必需把1,2,3,4合起来才是完整的代码。

以下程序不代表企业PRD中的真实程序.

程序中带有 select * 的代码请见谅,由于并不十分影响此程序性能,因此没有修改.
Description: YCOR1005_N
单船收入成本表

*---------------------------------------------------------------------*
* PROGRAM ID          : YCOR1005                                      *
* APPLICATION NAME    : CO                                            *
* TRANSACTION         : ZCOR05                                        *
* PROGRAM TYPE        : REPORT                                        *
* OUTPUT              : ALV_GRID DYNAMIC OUTPUT                       *
* SAP RELEASE         : 4.6C                                          *
* DESCRIPTION         : 单船收入成本表                                *
* CREATED TIME        : 2006-11-11                                    *
*---------------------------------------------------------------------*
*  LOG  DATE     REL  CHANGE DESCRIPTION                  WHO         *
*=====================================================================*
*  001 2006-12-01 LAST-CHANGED  COMMENTARY  Victor.Pan                *
*---------------------------------------------------------------------*

REPORT  YCOR1005                      .
include YCOR1005_TOP_N.
*INCLUDE YCOR1005_TOP.
include YCOR1005_CONTROL_N.
*INCLUDE YCOR1005_CONTROL.
* screen elements
SELECTION-SCREEN BEGIN OF BLOCK RAD1
 WITH FRAME TITLE TEXT-003.
PARAMETERS: BUKRS LIKE BSIS-BUKRS OBLIGATORY.
SELECT-OPTIONS: ABPER FOR BSEG-ABPER OBLIGATORY."期间
PARAMETERS: VR TYPE ZCO04_A-ZVARIANT DEFAULT '1'
            MATCHCODE OBJECT ZCOVARIANT.

SELECTION-SCREEN END OF BLOCK RAD1.
SELECTION-SCREEN BEGIN OF BLOCK RAD2
 WITH FRAME TITLE TEXT-002.
PARAMETERS: H1 RADIOBUTTON GROUP A1 USER-COMMAND SELE DEFAULT 'X'.
"半成品
PARAMETERS: H2 RADIOBUTTON GROUP A1 ."产成品
PARAMETERS: ORDER_10(10) .
SELECTION-SCREEN END OF BLOCK RAD2.

AT SELECTION-SCREEN ON ORDER_10.
*IF H1 = 'X'.
*    TH1 = '1121020100'.
*  ELSEIF H2 = 'X'.
*    TH1 = '1121040100'.
*  ENDIF.
  IF ORDER_10 IS INITIAL.
    MESSAGE W000(ZFI01) WITH '订单组不能为空'.
    STOP.
  ENDIF.
AT SELECTION-SCREEN ON ABPER.
IF ABPER-LOW = '' OR ABPER-HIGH = ''.
   MESSAGE E000(ZFI01) WITH '期间不能为空'.
ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ORDER_10.

IF H1 = 'X'.
    TH1 = '1121020100'.
  ELSEIF H2 = 'X'.
    TH1 = '1121040100'.
  ENDIF.

  DATA : f4help LIKE TABLE OF ddshretval WITH HEADER LINE.
  DATA: dynpprog LIKE SY-REPID.
  DATA: F4_LIST1 LIKE F4_LIST OCCURS 0.
  dynpprog = SY-REPID.
  perFORM GET_ORDER_F4_10 TABLES F4_LIST1.."获得订单与f4列表
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
       EXPORTING
            retfield     = 'ORDER_10'
            dynpprog     = dynpprog
            dynpnr       = sy-dynnr
            stepl        = '1'
            window_title = '选择值'
            value_org    = 'S'
       TABLES
            value_tab    = F4_LIST1
            return_tab   = f4help.
  ORDER_10 = f4help-fieldval.

*AT SELECTION-SCREEN ON ORDER_10.
*  IF ORDER_10 IS INITIAL.
*    MESSAGE W000(ZFI01) WITH '订单组不能为空'.
*    STOP.
*  ENDIF.
AT SELECTION-SCREEN.
AUTHORITY-CHECK OBJECT 'ZBUKRS' ID 'BUKRS'  FIELD BUKRS.
IF SY-SUBRC <> 0.
   MESSAGE E000(ZFI01) WITH '没有此公司代码权限'.
ENDIF.
*AT SELECTION-SCREEN OUTPUT.
*BREAK ZHENPAN.
START-OF-SELECTION.

  DATA: LAST_UCOMM TYPE SY-UCOMM.
  DATA: SALE_NODE TYPE LVC_NKEY.
  CLEAR SALE_COST_ELEMENT[].
  "获得输出列表组
  PERFORM GET_DISPLAY_LIST_GROUP
          TABLES OUT_CG
          USING VR .
  PERFORM GET_SALE_COST_ELEMENT TABLES SALE_COST_ELEMENT
          USING VR. "获得销售成本要素
  CLEAR: ORDER_LIST ,ORDER_LIST[].
  PERFORM GET_ORDER TABLES ORDER_LIST."获得订单

END-OF-SELECTION.
  CALL SCREEN 100.
  include YCOR1005_PROCESS_DATA_N.
  include YCOR1005_100_N.
  include YCOR1005_TEST_N.

*Text elements
*----------------------------------------------------------
* 001 成本要素组
* 002 半成品/产成品
* 003 选择条件

*Selection texts
*----------------------------------------------------------
* ABPER         期间
* BUKRS         公司代码
* H1         半成品
* H2         产成品
* ORDER_10         订单组(前10位)
* VR         变式

*Messages
*----------------------------------------------------------
*
* Message class: 00
* 208 &
*
* Message class: ZFI01
* 000 &1&2&3&4&5

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

*----------------------------------------------------------------------*
*   INCLUDE YCOR1005_TOP                                               *
*----------------------------------------------------------------------*
TABLES: BSIS,AUFK,COSP,BSEG,COSS,ZCO04_A,BKPF,COAS,CSKA.
DATA: BEGIN OF BELNR_LIST OCCURS 0, "凭证列表
      BUKRS LIKE BSIS-BUKRS,
      GJAHR LIKE BSIS-GJAHR,
      BELNR LIKE BSIS-BELNR,
      END OF BELNR_LIST.
DATA: BEGIN OF ORDER_LIST OCCURS 0, "订单列表
      ORDER LIKE AUFK-AUFNR,
      END OF ORDER_LIST.
DATA: BEGIN OF F4_LIST OCCURS 0,
      ORDER_10 LIKE AUFK-AUFNR,
      TEXT LIKE COAS-KTEXT,
      END OF F4_LIST.

DATA: BEGIN OF COST_ELEMENT OCCURS 0,"成本要素列表
      ELEMENT LIKE COSP-KSTAR,
      Z1   LIKE ZCO04_A-Z1,"取数属性
      ATTR LIKE ZCO04_A-ATTR,"+/-属性
      END OF COST_ELEMENT.
DATA: BEGIN OF COST_ELEMENT_GROUP OCCURS 0,"成本要素组列表
      ZINDEX LIKE ZCO04_A-ZINDEX,"list_index
      ELEMENT_GROUP LIKE GRPDYNP-NAME_COALL,
      Z1   LIKE ZCO04_A-Z1,"取数属性
      ATTR LIKE ZCO04_A-ATTR,"+/-属性
      END OF COST_ELEMENT_GROUP.
DATA: BEGIN OF LIST_STRUCTURE OCCURS 0,
      ELEMENT_GROUP LIKE GRPDYNP-NAME_COALL,
      ELEMENT LIKE COSP-KSTAR,
      TP(1), "G: GROUP ; E: ELEMENT
      END OF LIST_STRUCTURE.
DATA: SALE_COST_ELEMENT LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE.
DATA: new_table TYPE REF TO data."out_data table space
DATA: new_line  TYPE REF TO data."out_data line space
DATA: SALE_line  TYPE REF TO data. "销售收入数据行 space
DATA: COST_LINE TYPE REF TO DATA.  "成本行 space
DATA: JUDGE_LINE TYPE REF TO DATA. "判断行
DATA: JUDGE_TABLE TYPE REF TO DATA. "判断表
FIELD-SYMBOLS: <J_TABLE> TYPE ANY TABLE,
               <J_LINE> TYPE ANY.
FIELD-SYMBOLS: <l_table> TYPE ANY TABLE,
               <l_line>  TYPE ANY,
               <l_field> TYPE ANY,
               <SALE_LINE> TYPE ANY,"销售收入
               <COST_LINE> TYPE ANY,"成本
               <GP_LINE> TYPE ANY,"毛利
               <TCOST_LINE> TYPE ANY."暂估成本

DATA: OUT_table TYPE REF TO data.
DATA: OUT_line  TYPE REF TO data.
DATA: GP_LINE TYPE REF TO DATA.
DATA: TCOST_LINE TYPE REF TO DATA."暂估成本

FIELD-SYMBOLS: <OUT_TABLE> TYPE ANY TABLE,
               <OUT_line>  TYPE ANY,
               <OUT_field> TYPE ANY.
"INORDER TO GET HIGH PERFORMANCE,GET DATA INTO DB_TABLE
"FIRST
FIELD-SYMBOLS: <DB_TABLE> TYPE ANY TABLE,
               <DB_LINE> TYPE ANY,
               <DB_FIELD> TYPE ANY.
DATA: DB_TABLE TYPE REF TO DATA.
DATA: DB_LINE TYPE REF TO DATA.
DATA: top_key TYPE lvc_nkey.
DATA: SHIPNAME(100).
  DATA: BEGIN OF EXPAND_key1 OCCURS 0,
        GROUP LIKE GRPDYNP-NAME_COALL,
        CKEY TYPE lvc_nkey,
        END OF EXPAND_KEY1.
DATA: OUT_CG LIKE COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE."输出结构
DATA: TH1 TYPE BSIS-HKONT."判断产成品还是半成品

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

*----------------------------------------------------------------------*
*   INCLUDE YCOR1005_CONTROL                                           *
*----------------------------------------------------------------------*
DATA: g_alv_tree         TYPE REF TO cl_gui_alv_tree,
      g_custom_container TYPE REF TO cl_gui_custom_container.
DATA: gt_fieldcatalog TYPE lvc_t_fcat.
DATA: it_fieldcat TYPE lvc_t_fcat.
CLASS lcl_tree_event_receiver DEFINITION.

  PUBLIC SECTION.
* §2. Define an event handler method to build up a context menu
*     (postfix of event name: _CONTEXT_MENU_REQUEST).
* This event is fired each time the user klick with the right
* mouse button on a node.
    METHODS: handle_node_cm_req
      FOR EVENT node_context_menu_request OF cl_gui_alv_tree
      IMPORTING node_key menu.

* §3. Define an event handler method to respond to a function code
*     triggered by your menu (postfix: _CONTEXT_MENU_SELECTED).
* This event is fired when the user selects an entry of the
* build up context menu.
    METHODS: handle_node_cm_sel
      FOR EVENT node_context_menu_selected OF cl_gui_alv_tree
      IMPORTING node_key fcode sender.
* 'sender' is an implicit event parameter that is provided by
* ABAP Objects runtime system. It contains a reference to the
* object that fired the event. You may directly use it to
* call methods of this instance.

ENDCLASS.
******************************************************************
CLASS lcl_tree_event_receiver IMPLEMENTATION.
* §4. Implement your event handler methods.

  METHOD handle_node_cm_req.
* Event parameter 'menu' holds a reference to the standard context
* menu of ALV Tree (functions 'Expand'/'Collapse' on nodes).
* You may either append your own functions (separated by a line)
* or clear the menu if you do not want to allow standard functions.

* In this case the standard menu is cleared.
    CALL METHOD menu->clear.
* The next line defines one line of the context menu.
    CALL METHOD menu->add_function
        EXPORTING
           fcode = 'DEL_SUBTREE'
           text  = text-901.        "Delete Subtree

  ENDMETHOD.
*--------------------------------------------
  METHOD handle_node_cm_sel.
* At this point of execution, the user selected a menu entry of the
* menu build up in event handler method handle_node_cm_req.
* Query your own function codes and react accordingly.
    DATA l_rc TYPE c.

    case fcode.
    when 'DEL_SUBTREE'.
      CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
           EXPORTING
                textline1      = 'Do you really want to delete'(902)
                textline2      = 'this node and all its subnodes?'(903)
                titel          = 'Confirmation'(904)
                cancel_display = ' '
           IMPORTING
                answer         = l_rc.
      IF l_rc EQ 'J'.
        CALL METHOD sender->delete_subtree
           EXPORTING i_node_key = node_key.
* Do not forget to refresh the display when you change the contents
* of your list.
        CALL METHOD sender->frontend_update.
      ENDIF.
    endcase.
  ENDMETHOD.
*---------------------------------------------
ENDCLASS.

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

*----------------------------------------------------------------------*
*   INCLUDE YCOR1005_PROCESS_DATA                                      *
*----------------------------------------------------------------------*
* 获得销售成本要素
FORM GET_SALE_COST_ELEMENT TABLES SE STRUCTURE COST_ELEMENT
                           USING VR TYPE ZCO04_A-ZVARIANT.
  CLEAR SE[].
  DATA: CE LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE.
  SELECT * FROM ZCO04_A WHERE ZVARIANT = VR
        AND Z1 = 'A'."get data from custom
    PERFORM GET_COST_ELEMENT_LIST  TABLES CE
                           USING ZCO04_A-COST_GROUP
                                 ZCO04_A-Z1
                                 ZCO04_A-ATTR
                                 0.
    APPEND LINES OF CE TO  SALE_COST_ELEMENT.
  ENDSELECT.
ENDFORM.
*"2. 提取BSIS表半成品科目(1121020100)
* 或产成品(1121040100)过帐日期为在选定日期范围内,
* 凭证类型为SB的所有凭证。
FORM GET_BELNR_01 TABLES BELNR STRUCTURE BELNR_LIST .
  CLEAR: BELNR,BELNR[].

  DATA: T1 TYPE BSEG-ABPER.
  SELECT * FROM BSIS WHERE BLART = 'SB'
                     AND BUKRS = BUKRS
                     AND HKONT = TH1..
    T1 = BSIS-BUDAT(6).
    IF T1 IN ABPER.
      BELNR-GJAHR = BSIS-GJAHR.
      BELNR-BUKRS = BSIS-BUKRS.
      BELNR-BELNR = BSIS-BELNR.
      APPEND BELNR.
      CLEAR BELNR.
    ENDIF.
  ENDSELECT.
ENDFORM.
*3. 根据凭证查询BSEG的ZUONR字段, 得出订单号。
FORM GET_ORDER_LIST TABLES ORDER STRUCTURE ORDER_LIST.
  CLEAR: ORDER,ORDER[].
  DATA: BELNR LIKE BELNR_LIST OCCURS 0 WITH HEADER LINE.
  PERFORM GET_BELNR_01 TABLES BELNR.
  DATA: T1 TYPE BSEG-ABPER.
  LOOP AT BELNR.
    CLEAR: BSEG,ORDER_LIST.
    SELECT SINGLE ZUONR FROM BSEG INTO ORDER-ORDER
           WHERE BELNR = BELNR-BELNR
           AND GJAHR = BELNR-GJAHR
           AND BUKRS = BELNR-BUKRS.
    IF ORDER-ORDER <> ''.
      APPEND ORDER.
      CLEAR ORDER.
    ENDIF.
  ENDLOOP.
  SORT ORDER BY ORDER.
  DELETE ADJACENT DUPLICATES FROM ORDER.
ENDFORM.
"获得订单组F4订单列表
*---------------------------------------------------------------------*
*       FORM GET_ORDER_F4_10                                          *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  F4_LIST                                                       *
*---------------------------------------------------------------------*
FORM GET_ORDER_F4_10 TABLES F4_LIST STRUCTURE F4_LIST.
  CLEAR: F4_LIST,F4_LIST[].
  DATA: ORDER LIKE ORDER_LIST OCCURS 0 WITH HEADER LINE.
  PERFORM GET_ORDER_LIST TABLES ORDER.
  CLEAR ORDER_10.
  CLEAR ORDER_LIST[].
  CLEAR F4_LIST[].
  LOOP AT ORDER.
    PERFORM GET_ORDER_TEXT USING ORDER-ORDER
                 CHANGING F4_LIST-TEXT.
    DATA: S1(100).
    SPLIT F4_LIST-TEXT AT '-' INTO SHIPNAME S1.
    F4_LIST-TEXT = SHIPNAME.
    F4_LIST-ORDER_10   = ORDER-ORDER(10).
    APPEND F4_LIST.
    CLEAR F4_LIST.
  ENDLOOP.
  SORT F4_LIST BY ORDER_10.
  DELETE ADJACENT DUPLICATES FROM F4_LIST.
ENDFORM.
"根据选择屏幕,获得订单列表
*---------------------------------------------------------------------*
*       FORM GET_ORDER                                                *
*---------------------------------------------------------------------*
*       获取订单                                                      *
*---------------------------------------------------------------------*
FORM GET_ORDER TABLES OLIST STRUCTURE ORDER_LIST.
  DATA: S1(100).
  CLEAR: OLIST,OLIST[].
  CONCATENATE ORDER_10 '%' INTO S1.
  CONDENSE S1 NO-GAPS.
  SELECT * FROM COAS WHERE AUFNR LIKE S1.
    OLIST-ORDER = COAS-AUFNR.
    APPEND OLIST.
    CLEAR OLIST.
  ENDSELECT.
ENDFORM.
"根据成本要素组获得子成本要素组
*---------------------------------------------------------------------*
*       FORM GET_COST_ELEMENT_LIST                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  T1                                                            *
*  -->  COST_GROUP                                                    *
*  -->  LEVEL = 0 : 返回所有子组
*  -->  LEVEL = 1 : 返回一级子组
*---------------------------------------------------------------------*
FORM GET_COST_ELEMENT_GROUP_LIST  TABLES T1 STRUCTURE COST_ELEMENT_GROUP
                                  USING COST_GROUP
                                         LEVEL.
  CLEAR T1[].

  DATA: T_NODES LIKE GRPOBJECTS OCCURS 0 WITH HEADER LINE.
  DATA:  T_VALUES LIKE GRPVALUES OCCURS 0 WITH HEADER LINE.
  DATA: C_INFO LIKE GRPHINFO.
  DATA: C_OVERWRITE LIKE SY-DATAR.
  DATA: E_SETID LIKE SETHIER-SETID.
  CONCATENATE '01022300' COST_GROUP INTO E_SETID.
  CALL FUNCTION 'K_HIERARCHY_TABLES_READ'
       EXPORTING
            E_CLASS          = '0102'
            E_SETID          = E_SETID
            E_KOKRS          = '2300'
            E_OLD_LINE_LEVEL = 1
       TABLES
            T_NODES          = T_NODES
            T_VALUES         = T_VALUES
       CHANGING
            C_INFO           = C_INFO
            C_OVERWRITE      = C_OVERWRITE.
  IF LEVEL = 1.
    LOOP AT T_NODES WHERE HLEVEL = LEVEL.
      CLEAR T1.
      T1-ELEMENT_GROUP = T_NODES-SHORTNAME.
      APPEND  T1.
    ENDLOOP.
  ELSEIF LEVEL = 0.
    LOOP AT T_NODES WHERE HLEVEL > 0.
      CLEAR T1.
      T1-ELEMENT_GROUP = T_NODES-SHORTNAME.
      APPEND  T1.
    ENDLOOP.
  ENDIF.
ENDFORM.
"根据成本要素组获得子成本要素
*---------------------------------------------------------------------*
*       FORM GET_COST_ELEMENT_LIST                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  T1                                                            *
*  -->  COST_GROUP                                                    *
*  -->  LEVEL = 0 : 返回所有子要素
*  -->  LEVEL = 1 : 返回一级子素
*---------------------------------------------------------------------*
FORM GET_COST_ELEMENT_LIST  TABLES T1 STRUCTURE COST_ELEMENT
                            USING COST_GROUP
                                  Z1
                                  ATTR
                                  LEVEL.
  CLEAR T1[].
  DATA: CG LIKE COST_ELEMENT_GROUP OCCURS 0 WITH HEADER LINE.
  DATA: T_NODES LIKE GRPOBJECTS OCCURS 0 WITH HEADER LINE.
  DATA:  T_VALUES LIKE GRPVALUES OCCURS 0 WITH HEADER LINE.
  DATA: C_INFO LIKE GRPHINFO.
  DATA: C_OVERWRITE LIKE SY-DATAR.
  DATA: E_SETID LIKE SETHIER-SETID.
  CONCATENATE '01022300' COST_GROUP INTO E_SETID.
  CALL FUNCTION 'K_HIERARCHY_TABLES_READ'
       EXPORTING
            E_CLASS          = '0102'
            E_SETID          = E_SETID
            E_KOKRS          = '2300'
            E_OLD_LINE_LEVEL = 1
       TABLES
            T_NODES          = T_NODES
            T_VALUES         = T_VALUES
       CHANGING
            C_INFO           = C_INFO
            C_OVERWRITE      = C_OVERWRITE.
  IF LEVEL = 1.
    LOOP AT T_VALUES WHERE SETID = E_SETID.
      CLEAR T1.
      T1-Z1 = Z1.
      T1-ATTR = ATTR.
      IF T_VALUES-VTO = ''.
        T1-ELEMENT = T_VALUES-VFROM.
        APPEND  T1.
      ELSE.
        SELECT * FROM CSKA WHERE KTOPL = '2300'
                 AND ( KSTAR BETWEEN T_VALUES-VFROM
                       AND T_VALUES-VTO ).
          T1-ELEMENT =  CSKA-KSTAR.
          APPEND  T1.
        ENDSELECT.
      ENDIF.

    ENDLOOP.
  ELSEIF LEVEL = 0.
    PERFORM GET_COST_ELEMENT_GROUP_LIST TABLES CG
                           USING COST_GROUP 0.
    CG-ELEMENT_GROUP = COST_GROUP.
    APPEND CG.
    LOOP AT CG.
      CLEAR E_SETID.
      CONCATENATE '01022300' CG-ELEMENT_GROUP INTO E_SETID.
      LOOP AT T_VALUES WHERE SETID = E_SETID.
        CLEAR T1.
         T1-Z1 = Z1.
        T1-ATTR = ATTR.
        IF T_VALUES-VTO = ''.
          T1-ELEMENT = T_VALUES-VFROM.
          APPEND  T1.
        ELSE.
          SELECT * FROM CSKA WHERE KTOPL = '2300'
                   AND ( KSTAR BETWEEN T_VALUES-VFROM
                         AND T_VALUES-VTO ).
            T1-ELEMENT =  CSKA-KSTAR.
            APPEND  T1.
          ENDSELECT.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM GET_COSP_WTG_VIA_GROUP                                   *
*---------------------------------------------------------------------*
*       根据成本要素组/订单获得业务货币值

*---------------------------------------------------------------------*
*  -->  ORDER                                                         *
*  -->  COST_GROUP                                                    *
*  -->  P1                                                            *
*  -->  P2                                                            *
*  -->  WTG                                                           *
*---------------------------------------------------------------------*
FORM GET_COSP_WTG_VIA_GROUP USING ORDER
                        COST_GROUP
                        Z1
                        ATTR
                        P1    "期间开始
                        P2    "期间结束
                  CHANGING WTG.
  CLEAR WTG.
  DATA: WTG_TAB LIKE COSP-WTG001.
  DATA: COST_ELEM LIKE COST_ELEMENT OCCURS 0 WITH HEADER LINE.

  PERFORM GET_COST_ELEMENT_LIST  TABLES COST_ELEM
                         USING COST_GROUP
                               Z1
                               ATTR
                               0  .
  LOOP AT COST_ELEM.
    PERFORM GET_COSP_WTG_VIA_ORDER USING ORDER
                  COST_ELEM-ELEMENT
                  P1    "期间开始
                  P2    "期间结束
            CHANGING WTG_TAB.
    WTG = WTG + WTG_TAB.
  ENDLOOP.
ENDFORM.
"根据订单号/成本要素/期间 获得业务货币值
*---------------------------------------------------------------------*
*       FORM GET_COSP_WTG                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  ORDER                                                         *
*  -->  COST_ELEMENT                                                  *
*  -->  P1     期间开始   TYPE I
*  -->  P2   期间结束     TYPE I
*  -->  WTG                                                           *
*---------------------------------------------------------------------*
FORM GET_COSP_WTG_VIA_ORDER USING ORDER
                        COST_ELEMENT
                        P1    "期间开始
                        P2    "期间结束
                  CHANGING WTG.
  CLEAR WTG.
  DATA: FN(30).
  DATA: FN_P(3) TYPE N VALUE '000'.
  DATA: TMP(10).
  DATA: PERIOD TYPE I.

  FIELD-SYMBOLS: <F1> TYPE ANY.
  DATA: OBJNR TYPE COSP-OBJNR.
  CONCATENATE 'OR' ORDER INTO OBJNR.
  DATA: P1_IN TYPE I.
  IF P1(4) = P2(4).
    PERIOD = P2 - P1 + 1.
    SELECT * FROM COSP WHERE GJAHR = P1(4)
             AND OBJNR = OBJNR
             AND WRTTP = '04'
             AND KSTAR = COST_ELEMENT.
      DO PERIOD TIMES.
        IF SY-INDEX = 1.
          FN_P = P1+4(2)..
        ELSE.
          FN_P = P1+4(2) + SY-INDEX - 1.
        ENDIF.
        CLEAR FN.
        CONCATENATE 'WKG' FN_P INTO FN.
        ASSIGN COMPONENT FN OF STRUCTURE COSP TO <F1> .
        WTG = WTG + <F1>.
      ENDDO.
    ENDSELECT.
    SELECT * FROM COSS WHERE GJAHR  = P1(4)
             AND OBJNR = OBJNR
             AND WRTTP = '04'
             AND KSTAR = COST_ELEMENT.
      DO PERIOD TIMES.
        IF SY-INDEX = 1.
          FN_P = P1+4(2).
        ELSE.
          FN_P = P1+4(2) + SY-INDEX - 1.
        ENDIF.
        CLEAR FN.
        CONCATENATE 'WKG' FN_P INTO FN.
        ASSIGN COMPONENT FN OF STRUCTURE COSS TO <F1> .
        WTG = WTG + <F1>.
      ENDDO.
    ENDSELECT.
  ELSE.
    PERIOD = 12 - P1+4(2) + 1.
    SELECT * FROM COSP WHERE GJAHR = P1(4)
             AND OBJNR = OBJNR
             AND WRTTP = '04'
             AND KSTAR = COST_ELEMENT.
      DO PERIOD TIMES.
        IF SY-INDEX = 1.
          FN_P = P1+4(2).
        ELSE.
          FN_P = P1+4(2) + SY-INDEX - 1.
        ENDIF.
        CLEAR FN.
        CONCATENATE 'WKG' FN_P INTO FN.
        ASSIGN COMPONENT FN OF STRUCTURE COSP TO <F1> .
        WTG = WTG + <F1>.
      ENDDO.
    ENDSELECT.
    SELECT * FROM COSS WHERE GJAHR  = P1(4)
             AND OBJNR = OBJNR
             AND WRTTP = '04'
             AND KSTAR = COST_ELEMENT.
      DO PERIOD TIMES.
        IF SY-INDEX = 1.
          FN_P = P1+4(2).
        ELSE.
          FN_P = P1+4(2) + SY-INDEX - 1.
        ENDIF.
        CLEAR FN.
        CONCATENATE 'WKG' FN_P INTO FN.
        ASSIGN COMPONENT FN OF STRUCTURE COSS TO <F1> .
        WTG = WTG + <F1>.
      ENDDO.
    ENDSELECT.

    PERIOD = P2+4(2).
    SELECT * FROM COSP WHERE GJAHR = P2(4)
             AND OBJNR = OBJNR
             AND WRTTP = '04'
             AND KSTAR = COST_ELEMENT.
      DO PERIOD TIMES.
        IF SY-INDEX = 1.
          FN_P = 1.
        ELSE.
          FN_P = SY-INDEX.
        ENDIF.
        CLEAR FN.
        CONCATENATE 'WKG' FN_P INTO FN.
        ASSIGN COMPONENT FN OF STRUCTURE COSP TO <F1> .
        WTG = WTG + <F1>.
      ENDDO.
    ENDSELECT.
    SELECT * FROM COSS WHERE GJAHR  = P2(4)
             AND OBJNR = OBJNR
             AND WRTTP = '04'
             AND KSTAR = COST_ELEMENT.
      DO PERIOD TIMES.
        IF SY-INDEX = 1.
          FN_P = 1.
        ELSE.
          FN_P = SY-INDEX.
        ENDIF.
        CLEAR FN.
        CONCATENATE 'WKG' FN_P INTO FN.
        ASSIGN COMPONENT FN OF STRUCTURE COSS TO <F1> .
        WTG = WTG + <F1>.
      ENDDO.
    ENDSELECT.

  ENDIF.

ENDFORM.

类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(385)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu