ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 动态取数的运用

动态取数的运用

原创 Linux操作系统 作者:hzq2010 时间:2011-04-12 15:16:58 0 删除 编辑
REPORT  zrfi_pp_trace_list_test.
*----------------------------------------------------------------------*
*                          TABLE WORKAREA DECLARE                      *
*----------------------------------------------------------------------*
TABLES bsik.
*----------------------------------------------------------------------*
*                              DATA DEFINE                             *
*----------------------------------------------------------------------*
TYPE-POOLS slis.


FIELD-SYMBOLS:  TYPE table.

DATA: w_fcat1   TYPE lvc_t_fcat WITH HEADER LINE,
      i_head   TYPE LINE OF lvc_t_fcat ,
      gp_table TYPE REF TO data.


DATA  lwk_repid LIKE sy-repid VALUE sy-repid.

DATA: i_fcat TYPE lvc_t_fcat,
      pp_field TYPE slis_fieldcat_alv OCCURS 0 WITH HEADER LINE,
      w_fcat TYPE lvc_s_fcat,
      w_layo TYPE lvc_s_layo,
*      w_layo TYPE slis_layout_alv,
      i_excluding  TYPE slis_t_extab,
      gs_sort TYPE lvc_s_sort,
      gt_sort TYPE lvc_t_sort,
*      gs_sort type LINE OF slis_t_sortinfo_alv,
*      gt_sort type slis_t_sortinfo_alv,
      gs_event TYPE slis_alv_event,
      gt_events TYPE slis_t_event,
      gv_txt TYPE slis_t_listheader,
      gv_title TYPE lvc_title.

DATA:BEGIN OF gi_list OCCURS 0,
      bukrs LIKE bsik-bukrs,
      lifnr LIKE bsik-lifnr,
      land1 LIKE lfa1-land1,
      name1(60TYPE c,
      vertn LIKE bsik-vertn,
      bwart(8TYPE c,
      ebeln LIKE bsik-ebeln,
      zhong(60TYPE c,
      neirong(20TYPE c,
      dmbtr_g LIKE ekbe-dmbtr,
      dmbtr_p LIKE bsik-dmbtr,
      waers LIKE bsik-waers,
      wrbtr LIKE bsik-wrbtr,
      dmbt1 LIKE bsik-dmbtr,
      dmbt2 LIKE bsik-dmbtr,
      dmbt3 LIKE bsik-dmbtr,
      dmbt4 LIKE bsik-dmbtr,
      dmbt5 LIKE bsik-dmbtr,
      dmbt6 LIKE bsik-dmbtr,
      dmbt7 LIKE bsik-dmbtr,
      dmbt8 LIKE bsik-dmbtr,
      gsber LIKE bsik-gsber,
      cbox(1TYPE c,
    END OF gi_list.

RANGES:r_hkont FOR bsik-hkont,
       r_budat FOR bsik-budat.

DATA:BEGIN OF gi_temp OCCURS 0,
      bukrs LIKE bsik-bukrs,
      lifnr LIKE bsik-lifnr,
      vertn LIKE bsik-vertn,
      bwart(8TYPE c,
      waers LIKE bsik-waers,
      ebeln LIKE bsik-ebeln,
      ebelp LIKE bsik-ebelp,
      budat LIKE bsik-budat,
      shkzg LIKE bsik-shkzg,
      dmbtr LIKE bsik-dmbtr,
      wrbtr LIKE bsik-wrbtr,
      gsber LIKE bsik-gsber,
      ebeln_t LIKE bsik-ebeln,
     END OF gi_temp.

DATA:BEGIN OF gi_pre OCCURS 0,
      bukrs LIKE bsik-bukrs,
      belnr LIKE bsik-belnr,
      gjahr LIKE bsik-gjahr,
      buzei LIKE bsik-buzei,
      rebzg LIKE bsik-rebzg,
      rebzj LIKE bsik-rebzj,
      rebzz LIKE bsik-rebzz,
      lifnr LIKE bsik-lifnr,
      vertn LIKE bsik-vertn,
      ebeln LIKE bsik-ebeln,
      ebelp LIKE bsik-ebelp,
      budat LIKE bsik-budat,
      waers LIKE bsik-waers,
      shkzg LIKE bsik-shkzg,
      dmbtr LIKE bsik-dmbtr,
      wrbtr LIKE bsik-wrbtr,
      gsber LIKE bsik-gsber,
      ebeln_t LIKE bsik-ebeln,
      elikz LIKE ekpo-elikz,
      bwart(8TYPE c,
     END OF gi_pre.

DATABEGIN OF gi_bwart1 OCCURS 0,
        shkzg  LIKE ekbe-shkzg,
        bpmng  LIKE ekbe-bpmng,
        bpwes  LIKE ekbe-bpwes,
      END OF gi_bwart1.

DATA: gi_bwart2 LIKE TABLE OF gi_bwart1 WITH HEADER LINE.


DATA:BEGIN OF gi_ekbe OCCURS 0,
      ebeln LIKE ekbe-ebeln,
      ebelp LIKE ekbe-ebelp,
      waers LIKE ekbe-waers,
      zekkn LIKE ekbe-zekkn,
      vgabe LIKE ekbe-vgabe,
      gjahr LIKE ekbe-gjahr,
      belnr LIKE ekbe-belnr,
      buzei LIKE ekbe-buzei,
      shkzg LIKE ekbe-shkzg,
      dmbtr LIKE ekbe-dmbtr,
     END OF gi_ekbe.

DATA:BEGIN OF gi_ekbet OCCURS 0,
      ebeln LIKE ekbe-ebeln,
      ebelp LIKE ekbe-ebelp,
      waers LIKE ekbe-waers,
      dmbtr LIKE ekbe-dmbtr,
     END OF gi_ekbet.

DATABEGIN OF gi_waers OCCURS 0,
        waers LIKE bsik-waers,
        ktext LIKE tcurt-ktext,
      END OF gi_waers.

DATA:gv_dmbtr LIKE ekbe-dmbtr.
DATA: gv_name1(35TYPE c.
DATA: gv_name2(35TYPE c.
DATA: gv_total TYPE p DECIMALS 3.
DATA: gv_i TYPE i.
DATA: gv_amount TYPE p DECIMALS 3.

DATA:gv_date1 TYPE d,
     gv_date2 TYPE d,
     gv_date3 TYPE d,
     gv_date4 TYPE d,
     gv_date5 TYPE d,
     gv_date6 TYPE d,
     gv_date7 TYPE d,
     gv_date8 TYPE d.
*----------------------------------------------------------------------*
*                           SELECTION-SCREEN                           *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.

SELECT-OPTIONS:s_bukrs FOR bsik-bukrs OBLIGATORY,
               s_gsber FOR bsik-gsber,
               s_vertn FOR bsik-vertn,
               s_lifnr FOR bsik-lifnr.

PARAMETERS p_budat LIKE bsik-budat OBLIGATORY DEFAULT sy-datum.

SELECTION-SCREEN END OF BLOCK block1.
*----------------------------------------------------------------------*
*                            INITIALIZATION                            *
*----------------------------------------------------------------------*
INITIALIZATION.

  lwk_repid = sy-repid.

  CLEAR:r_hkont,r_hkont[].

  r_hkont-sign = 'I'.
  r_hkont-option = 'EQ'.

  r_hkont-low = '0000115001'.
  APPEND r_hkont.

  CLEAR r_hkont-low.
  r_hkont-low = '0000115002'.
  APPEND r_hkont.

  CLEAR r_hkont.
*----------------------------------------------------------------------*
*                           START-OF-SELECTION                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM frm_get_data.
  PERFORM frm_fieldcat_build.
  PERFORM frm_alv_list.
*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_get_data.

  gv_date1 = p_budat.
  gv_date2 = gv_date1 - 90.
  gv_date3 = gv_date2 - 90.
  gv_date4 = gv_date3 - 180.
  gv_date5 = gv_date4 - 360.
  gv_date6 = gv_date5 - 360.
  gv_date7 = gv_date6 - 360.
  gv_date8 = gv_date7 - 360.

  CLEAR:r_budat,r_budat[].

  r_budat-sign = 'I'.
  r_budat-option = 'BT'.
  r_budat-low = '00010101'.
  r_budat-high = p_budat.
  APPEND r_budat.
  CLEAR r_budat.

  CLEAR:gi_pre,gi_pre[],gi_temp,gi_temp[].

  SELECT bsik~bukrs
         bsik~belnr
         bsik~gjahr
         bsik~buzei
         bsik~rebzg
         bsik~rebzj
         bsik~rebzz
         bsik~lifnr
         bsik~vertn
         bsik~ebeln
         bsik~ebelp
         bsik~budat
         bsik~waers
         bsik~shkzg
         bsik~dmbtr
         bsik~wrbtr
         bsik~gsber
         ekpo~elikz
  INTO CORRESPONDING FIELDS OF TABLE gi_pre
  FROM bsik LEFT JOIN ekpo
   ON  ekpo~ebeln  = bsik~ebeln
   AND ekpo~ebelp = bsik~ebelp
  WHERE bsik~bukrs IN s_bukrs
    AND bsik~hkont IN r_hkont
    AND bsik~lifnr IN s_lifnr
    AND bsik~vertn IN s_vertn
    AND bsik~budat IN r_budat
    AND bsik~gsber IN s_gsber.

  CLEAR gv_i.
  LOOP AT gi_pre WHERE NOT ebeln IS INITIAL AND NOT ebelp IS INITIAL.
    gv_i = sy-tabix.
    IF gi_pre-elikz = 'X'.
      gi_pre-bwart = '105(101)'.
    ELSE.
      REFRESH: gi_bwart1[],gi_bwart2[].
      SELECT shkzg bpmng bpwes
        INTO CORRESPONDING FIELDS OF TABLE gi_bwart1
        FROM ekbe
        WHERE ekbe~ebeln = gi_pre-ebeln
          AND ekbe~ebelp = gi_pre-ebelp
          AND ekbe~bewtp = 'E'.

      IF gi_bwart1[] IS INITIAL.
        gi_pre-bwart = ''.
      ELSE.
        LOOP AT gi_bwart1.
          IF gi_bwart1-shkzg = 'H'.
            gi_bwart1-bpmng = 0 - gi_bwart1-bpmng.
            gi_bwart1-bpwes = 0 - gi_bwart1-bpwes.
          ENDIF.
          COLLECT  gi_bwart1 INTO gi_bwart2.
        ENDLOOP.
        READ TABLE gi_bwart2 INDEX 1.

        gv_total =  gi_bwart2-bpmng + gi_bwart2-bpwes .

        IF gv_total > 0.
          gi_pre-bwart = '103'.
        ELSE.
          gi_pre-bwart = ''.
        ENDIF.
      ENDIF.
    ENDIF.
    MODIFY gi_pre INDEX gv_i.
  ENDLOOP.




  SELECT bukrs
         belnr
         gjahr
         buzei
         rebzg
         rebzj
         rebzz
         lifnr
         vertn
         ebeln
         ebelp
         budat
         waers
         shkzg
         dmbtr
         wrbtr
         gsber
  APPENDING CORRESPONDING FIELDS OF TABLE gi_pre
  FROM bsak
  WHERE bukrs IN s_bukrs
    AND hkont IN r_hkont
    AND lifnr IN s_lifnr
    AND vertn IN s_vertn
    AND augdt <= sy-datum
    AND augdt > p_budat
    AND gsber IN s_gsber
    AND shkzg = 'S'.

  IF gi_pre[] IS INITIAL.
    MESSAGE i208(00WITH text-not.
    STOP.
  ENDIF.

  LOOP AT gi_pre.

    IF gi_pre-shkzg = 'H'.

      SELECT SINGLE budat
      INTO gi_pre-budat
      FROM bsik
      WHERE bukrs = gi_pre-bukrs
        AND belnr = gi_pre-rebzg
        AND gjahr = gi_pre-rebzj
        AND buzei = gi_pre-rebzz.

      IF sy-subrc <> 0.

        SELECT SINGLE budat
        INTO gi_pre-budat
        FROM bsak
        WHERE bukrs = gi_pre-bukrs
          AND belnr = gi_pre-rebzg
          AND gjahr = gi_pre-rebzj
          AND buzei = gi_pre-rebzz.

      ENDIF.
    ENDIF.
    MOVE-CORRESPONDING gi_pre TO gi_temp.
    COLLECT gi_temp.
    CLEAR:gi_pre,gi_temp.
  ENDLOOP.

  LOOP AT gi_temp.
    gi_temp-ebeln_t = gi_temp-ebeln.
    MODIFY gi_temp TRANSPORTING ebeln_t.
    CLEAR gi_temp.
  ENDLOOP.


  SORT gi_temp STABLE ASCENDING BY bukrs lifnr vertn bwart waers ebeln gsber.

  SELECT ebeln
         ebelp
         zekkn
         vgabe
         gjahr
         belnr
         buzei
         shkzg
         dmbtr
         waers
  INTO CORRESPONDING FIELDS OF TABLE gi_ekbe
  FROM ekbe
  FOR ALL ENTRIES IN gi_temp
  WHERE ebeln = gi_temp-ebeln_t
    AND vgabe = '1'.

  IF sy-subrc = 0.

    SORT gi_ekbe STABLE ASCENDING BY ebeln ebelp waers.

    CLEAR:gi_ekbet,gi_ekbet[],gv_dmbtr.

    LOOP AT gi_ekbe.
      IF gi_ekbe-shkzg = 'S'.
        gv_dmbtr = gv_dmbtr + gi_ekbe-dmbtr.
      ELSEIF gi_ekbe-shkzg = 'H'.
        gv_dmbtr = gv_dmbtr - gi_ekbe-dmbtr.
      ENDIF.
      gi_ekbet-ebeln = gi_ekbe-ebeln.
      gi_ekbet-ebelp = gi_ekbe-ebelp.
      gi_ekbet-waers = gi_ekbe-waers.
      AT END OF waers.
        IF gv_dmbtr <> 0.
          gi_ekbet-dmbtr = gv_dmbtr.
          APPEND gi_ekbet.
        ENDIF.
        CLEAR:gi_ekbet,gv_dmbtr.
      ENDAT.
      CLEAR gi_ekbe.
    ENDLOOP.

    IF NOT gi_ekbet[] IS INITIAL.
      SORT gi_ekbet STABLE ASCENDING BY ebeln.
    ENDIF.
  ENDIF.

  CLEAR:gi_list,gi_list[].

  LOOP AT gi_temp.
    gi_list-bukrs = gi_temp-bukrs.
    gi_list-lifnr = gi_temp-lifnr.

    IF NOT gi_list-lifnr  IS INITIAL.
      CLEAR: gv_name1,gv_name2.
      SELECT SINGLE land1 name1 name3
         INTO (gi_list-land1, gv_name1, gv_name2)
         FROM lfa1
         WHERE lfa1~lifnr = gi_list-lifnr.

      CONCATENATE gv_name1 gv_name2 INTO gi_list-name1.
    ENDIF.

    gi_list-vertn = gi_temp-vertn.
    gi_list-waers = gi_temp-waers.
    gi_list-ebeln = gi_temp-ebeln.
    gi_list-gsber = gi_temp-gsber.
    gi_list-bwart = gi_temp-bwart.

    IF NOT gi_temp-ebeln_t IS INITIAL.
      READ TABLE gi_ekbet WITH KEY ebeln = gi_temp-ebeln_t
                                   ebelp = gi_temp-ebelp
                                   waers = gi_temp-waers
                                   BINARY SEARCH.
      IF sy-subrc = 0.
        gi_list-dmbtr_g = gi_ekbet-dmbtr.
      ENDIF.

    ENDIF.

    IF gi_temp-shkzg = 'H'.
      gi_temp-dmbtr = 0 - gi_temp-dmbtr.
      gi_temp-wrbtr = 0 - gi_temp-wrbtr.
    ENDIF.

    gi_list-dmbtr_p = gi_list-dmbtr_p + gi_temp-dmbtr.

    IF gi_temp-waers <> 'RMB'.
      gi_list-wrbtr = gi_list-wrbtr + gi_temp-wrbtr.
    ENDIF.

    IF gi_temp-budat <= gv_date1 AND gi_temp-budat > gv_date2.
      gi_list-dmbt1 = gi_list-dmbt1 + gi_temp-dmbtr.
    ELSEIF gi_temp-budat <= gv_date2 AND gi_temp-budat > gv_date3.
      gi_list-dmbt2 = gi_list-dmbt2 + gi_temp-dmbtr.
    ELSEIF gi_temp-budat <= gv_date3 AND gi_temp-budat > gv_date4.
      gi_list-dmbt3 = gi_list-dmbt3 + gi_temp-dmbtr.
    ELSEIF gi_temp-budat <= gv_date4 AND gi_temp-budat > gv_date5.
      gi_list-dmbt4 = gi_list-dmbt4 + gi_temp-dmbtr.
    ELSEIF gi_temp-budat <= gv_date5 AND gi_temp-budat > gv_date6.
      gi_list-dmbt5 = gi_list-dmbt5 + gi_temp-dmbtr.
    ELSEIF gi_temp-budat <= gv_date6 AND gi_temp-budat > gv_date7.
      gi_list-dmbt6 = gi_list-dmbt6 + gi_temp-dmbtr.
    ELSEIF gi_temp-budat <= gv_date7 AND gi_temp-budat > gv_date8.
      gi_list-dmbt7 = gi_list-dmbt7 + gi_temp-dmbtr.
    ELSEIF gi_temp-budat <= gv_date8.
      gi_list-dmbt8 = gi_list-dmbt8 + gi_temp-dmbtr.
    ENDIF.

    AT END OF ebeln.
      IF gi_list-dmbtr_p <> 0.
        IF NOT gi_list-vertn IS INITIAL .
          gi_list-neirong = '资产'.
          IF gi_list-bwart ='' AND NOT gi_list-ebeln IS INITIAL.
            gi_list-zhong = '预付购买固定资产款'.
          ELSEIF gi_list-bwart = '103' AND NOT gi_list-ebeln IS INITIAL.
            gi_list-zhong = '固定资产已到,需安装,测试,未转入固定资产'.
          ELSEIF gi_list-bwart = '105(101)' AND NOT gi_list-ebeln IS INITIAL.
            gi_list-zhong = '固定资产已到, 需安裝,测验 , 已暂估转入固定资产'.
          ENDIF.

        ELSEIF NOT gi_list-ebeln IS INITIAL.
          gi_list-neirong = '材料'.
        ELSE.
          gi_list-neirong = '其它'.
        ENDIF.
        APPEND gi_list.
        CLEAR gi_list.
      ENDIF.
    ENDAT.
    CLEAR:gi_temp,gi_ekbet.
  ENDLOOP.

  SORT gi_list STABLE ASCENDING BY bukrs lifnr vertn ebeln.

ENDFORM.                    "frm_get_data
*&---------------------------------------------------------------------*
*&      Form  frm_fieldcat_build
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_fieldcat_build.

  FIELD-SYMBOLS:  ,
                   .

  CLEAR:i_fcat[].

  CLEAR w_fcat.
  w_fcat-fieldname = 'BUKRS'.
  w_fcat-coltext = '公司代码'.
  w_fcat-outputlen = 8.
  w_fcat-no_merging = 'X'.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'GSBER'.
  w_fcat-coltext = '业务范围'.
  w_fcat-outputlen = 8.
  w_fcat-no_merging = 'X'.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'LIFNR'.
  w_fcat-coltext = '供应商代码'.
  w_fcat-outputlen = 10.
  w_fcat-no_merging = 'X'.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'NAME1'.
  w_fcat-coltext = '供应商名称'.
  w_fcat-outputlen = 60.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'LAND1'.
  w_fcat-coltext = '供应商国家'.
  w_fcat-outputlen = 3.
  APPEND w_fcat TO i_fcat.


  CLEAR w_fcat.
  w_fcat-fieldname = 'VERTN'.
  w_fcat-coltext = '合同号'.
  w_fcat-outputlen = 13.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'EBELN'.
  w_fcat-coltext = '采购订单号'.
  w_fcat-outputlen = 10.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'BWART'.
  w_fcat-coltext = '采购订单状态'.
  w_fcat-outputlen = 10.
  APPEND w_fcat TO i_fcat.


  CLEAR w_fcat.
  w_fcat-fieldname = 'ZHONG'.
  w_fcat-coltext = '预付帐款种类'.
  w_fcat-outputlen = 60.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'NEIRONG'.
  w_fcat-coltext = '主要内容'.
  w_fcat-outputlen = 8.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBTR_G'.
  w_fcat-coltext = '暂估数'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBTR_P'.
  w_fcat-coltext = '预付'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'WAERS'.
  w_fcat-coltext = '币别'.
  w_fcat-outputlen = 4.
  APPEND w_fcat TO i_fcat.

*  CLEAR w_fcat.
*  w_fcat-fieldname = 'WRBTR'.
*  w_fcat-coltext = '外币金额'.
*  w_fcat-outputlen = 20.
*  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBT1'.
  w_fcat-coltext = '1~90天'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBT2'.
  w_fcat-coltext = '90~180天'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBT3'.
  w_fcat-coltext = '180~360天'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBT4'.
  w_fcat-coltext = '1~2年'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBT5'.
  w_fcat-coltext = '2~3年'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBT6'.
  w_fcat-coltext = '3~4年'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBT7'.
  w_fcat-coltext = '4~5年'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.

  CLEAR w_fcat.
  w_fcat-fieldname = 'DMBT8'.
  w_fcat-coltext = '5年以上'.
  w_fcat-outputlen = 20.
  APPEND w_fcat TO i_fcat.



  LOOP AT gi_list.
    gi_waers-waers = gi_list-waers.
    COLLECT gi_waers.

  ENDLOOP.
  SORT gi_waers BY waers.
  DELETE ADJACENT DUPLICATES FROM gi_waers COMPARING ALL FIELDS.


  LOOP AT gi_waers.
    SELECT SINGLE ktext FROM tcurt
      INTO gi_waers-ktext
      WHERE spras = '1' AND waers = gi_waers-waers.

    MODIFY gi_waers.

    CLEAR w_fcat.
    w_fcat-fieldname = gi_waers-waers.
    w_fcat-coltext = gi_waers-ktext.
*    w_fcat-inttype = 'N'.
    w_fcat-outputlen = 20.
*    w_fcat-no_zero = 'X'.
    APPEND w_fcat TO i_fcat.
  ENDLOOP.



  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = i_fcat
    IMPORTING
      ep_table        = gp_table.

  ASSIGN gp_table->* TO .

  ASSIGN LOCAL COPY OF INITIAL LINE OF  TO .


  DATA: gv_factor TYPE p DECIMALS 3.

  LOOP AT gi_list.

    MOVE-CORRESPONDING gi_list TO .

    ASSIGN COMPONENT  gi_list-waers OF STRUCTURE  TO .
    IF gi_list-wrbtr <> 0 AND gi_list-waers <> 'RMB'.

      CLEAR gv_factor.

      CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
        EXPORTING
          currency          = gi_list-waers
        IMPORTING
          factor            = gv_factor
        EXCEPTIONS
          too_many_decimals = 1
          OTHERS            = 2.
       = gi_list-wrbtr * gv_factor.

    ELSEIF gi_list-waers = 'RMB'.
       = gi_list-dmbtr_p.
    ENDIF.
    APPEND  TO .
    CLEAR .
  ENDLOOP.




ENDFORM.                    "frm_fieldcat_build
*&---------------------------------------------------------------------*
*&      Form  frm_alv_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_alv_list.

  CLEAR w_layo.

  w_layo-zebra = 'X'.
  w_layo-cwidth_opt = 'X'.



  gv_title = '注:报表以30天为1个自然月进行计算'.

  CLEAR:gt_sort[].

  CLEAR gs_sort.
  gs_sort-spos = 1.
  gs_sort-fieldname = 'BUKRS'.
  gs_sort-up = 'X'.
  APPEND gs_sort TO gt_sort.

  CLEAR gs_sort.
  gs_sort-spos = 2.
  gs_sort-fieldname = 'GSBER'.
  gs_sort-up = 'X'.
  APPEND gs_sort TO gt_sort.

  CLEAR gs_sort.
  gs_sort-spos = 3.
  gs_sort-fieldname = 'LIFNR'.
  gs_sort-up = 'X'.
  APPEND gs_sort TO gt_sort.

  CLEAR gs_sort.
  gs_sort-spos = 4.
  gs_sort-fieldname = 'VERTN'.
  gs_sort-up = 'X'.
  APPEND gs_sort TO gt_sort.

  CLEAR gs_sort.
  gs_sort-spos = 5.
  gs_sort-fieldname = 'EBELN'.
  gs_sort-up = 'X'.
  APPEND gs_sort TO gt_sort.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = lwk_repid
      is_layout_lvc      = w_layo
      it_fieldcat_lvc    = i_fcat
      i_bypassing_buffer = 'X'
      i_default          = 'X'
      i_save             = 'U'
      i_grid_title       = gv_title
      it_sort_lvc        = gt_sort[]
    TABLES
      t_outtab           = 
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

ENDFORM.                    "frm_alv_list

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23495244/viewspace-692319/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-03-11

  • 博文量
    196
  • 访问量
    168036