ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 动态内表

动态内表

原创 Linux操作系统 作者:hzq2010 时间:2011-04-27 15:13:08 0 删除 编辑
  SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style. italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; } TABLES:bkpf,tvkbt,vbak.
TYPE-POOLS:slis.
DATA:ift TYPE lvc_t_fcat ,
     ifts LIKE LINE OF ift,
     w_layo TYPE lvc_s_layo.
DATA i_grid_title TYPE  lvc_title.
DATA :new_table TYPE REF TO data,
      new_ifts TYPE REF TO data.

DATA:BEGIN OF gi_out OCCURS 0,
  bezei LIKE tvkbt-bezei,
  erdat LIKE vbak-erdat,
  cx(40),
  lfimg LIKE lips-lfimg,
  vbeln LIKE vbap-vbeln ,
  posnr LIKE vbap-posnr,
  vkbur LIKE  vbak-vkbur,
  vtweg LIKE vbak-vtweg,
  auart LIKE vbak-auart,
  END OF gi_out.
DATA :BEGIN OF gi_list OCCURS 0,
        bezei LIKE tvkbt-bezei,
       erdat LIKE vbak-erdat,
       cx(40),
      lfimg LIKE lips-lfimg,
  END OF gi_list.

DATA :BEGIN OF gi_vbak OCCURS 0,
     vbeln LIKE  vbak-vbeln,
     vkbur LIKE vbak-vkbur,
     erdat LIKE vbak-erdat,
 END OF gi_vbak.
DATA :BEGIN OF gi_vbap OCCURS 0,
      vbeln LIKE vbap-vbeln,
      posnr LIKE vbap-posnr,
      wbstk LIKE vbuk-wbstk,
      lfimg LIKE lips-lfimg,
      kwmeng LIKE vbap-kwmeng,
      kwmeng1 LIKE vbap-kwmeng,
  END OF gi_vbap.
DATA :BEGIN OF gi_lips OCCURS 0,
      vgbel LIKE lips-vgbel,
      vgpos LIKE lips-vgbel,
      vbeln LIKE lips-vbeln,
      posnr LIKE lips-posnr,
      lfimg LIKE lips-lfimg,
  END OF gi_lips.
DATA :BEGIN OF gi_lips1 OCCURS 0,
    vgbel LIKE lips-vgbel,
    vgpos LIKE lips-vgbel,
    lfimg LIKE lips-lfimg,
END OF gi_lips1.
RANGES s_month FOR vbak-erdat.
DATA:d1 LIKE sy-datum,
     d2 LIKE sy-datum.
DATA : BEGIN OF gi_s  OCCURS 0,
          bezei LIKE tvkbt-bezei,
          cx(40),
          lfimg LIKE lips-lfimg,
    END OF gi_s.
DATA: gv_name(70TYPE c,
       gi_lines LIKE STANDARD TABLE OF tline INITIAL SIZE 10 WITH HEADER LINE.
 FIELD-SYMBOLS:  TYPE  table, TYPE  table,
                   TYPE ANY,
                  TYPE ANY.
*----------------------------------------------------------------------*
*         selection-screen                                                             *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-001.
SELECT-OPTIONS:s_bezei FOR tvkbt-bezei NO INTERVALS,
               s_erdat FOR vbak-erdat  NO-EXTENSION.

SELECTION-SCREEN END OF BLOCK b.
*----------------------------------------------------------------------*
*         INITIALIZATION.                                                              *
*----------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
*                                                                      *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.

  CONCATENATE s_erdat-low+0(6)  '01' INTO d1.
  CONCATENATE s_erdat-high  '01' INTO d2.
  CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
    EXPORTING
      i_date = d2
    IMPORTING
      e_date = d2.
  CLEAR s_month.
  s_month-low = d1.
  s_month-high = d2.
  s_month-sign = 'I'.
  s_month-option = 'BT'.
  APPEND s_month.
*----------------------------------------------------------------------*
*       start-of-selection                                                               *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_getdata.
  PERFORM frm_deal_data.
  PERFORM frm_alv_out.
*&---------------------------------------------------------------------*
*&      Form  FRM_GETDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_getdata .

  SELECT vbak~vbeln vbak~vkbur vbak~erdat
    FROM vbak
    INNER JOIN vbuk
    ON vbak~vbeln = vbuk~vbeln
    INTO CORRESPONDING FIELDS OF TABLE gi_vbak
    WHERE vbak~erdat IN s_month
    AND vbuk~lfgsk <> 'C'.
  IF  sy-subrc <> 0.
    MESSAGE i208(00WITH '没有数据'.
    STOP.

  ENDIF.
  SORT gi_vbak[] BY vbeln.
  SELECT vbap~vbeln vbap~posnr vbap~kwmeng lips~lfimg vbuk~wbstk
    FROM vbap
    INNER JOIN lips
    ON vbap~vbeln = lips~vgbel
    AND vbap~posnr = lips~vgpos
    INNER JOIN vbuk
     ON vbap~vbeln = vbuk~vbeln
    INTO CORRESPONDING FIELDS OF TABLE gi_vbap
    FOR ALL ENTRIES IN gi_vbak
    WHERE vbap~vbeln = gi_vbak-vbeln.
  SORT gi_vbap BY vbeln posnr.
  SELECT lips~vbeln lips~posnr lips~vgbel lips~vgpos lips~lfimg
    FROM lips
    INNER JOIN likp
    ON lips~vbeln = likp~vbeln
    INNER JOIN vbuk
    ON likp~vbeln = vbuk~vbeln
    INTO CORRESPONDING FIELDS OF TABLE gi_lips
   FOR ALL ENTRIES IN gi_vbak
   WHERE likp~vbeln = gi_vbak-vbeln
    AND vbuk~wbstk = 'C'.
  SORT gi_lips BY vgbel vgpos.
  LOOP AT gi_lips.
    MOVE-CORRESPONDING gi_lips TO gi_lips1.
    AT END OF vgbel.
      COLLECT gi_lips1.
    ENDAT.
    CLEAR:gi_lips,gi_lips1.
  ENDLOOP.
  DATA :gv_vtweg LIKE vbak-vtweg,
        gv_auart LIKE vbak-auart.
  LOOP AT  gi_vbap.
    MOVE:gi_vbap-vbeln TO gi_out-vbeln.
    READ TABLE gi_vbak WITH KEY vbeln = gi_vbap-vbeln.
    IF sy-subrc = 0.
      gi_out-erdat = gi_vbak-erdat+0(6).
    ENDIF.
    READ TABLE gi_lips1 WITH KEY vgbel = gi_vbap-vbeln.
    IF  sy-subrc = 0.
      gi_out-lfimg =  gi_vbap-kwmeng - gi_lips1-lfimg.
    ELSE.
      gi_out-lfimg = gi_vbap-kwmeng.
    ENDIF.
    SELECT SINGLE tvkbt~bezei vbak~vtweg vbak~auart
      FROM tvkbt
      INNER JOIN vbak
      ON vbak~vkbur = tvkbt~vkbur
      INTO (gi_out-bezei,gv_vtweg,gv_auart)
      WHERE vbak~vbeln = gi_vbap-vbeln.
    IF sy-subrc = 0.
      IF gv_vtweg = '01' OR ( gv_vtweg = '00' AND gv_auart = 'ZQX2' ) .
        CLEAR gi_out-bezei.
        gi_out-bezei = '公司销售'.
      ENDIF.
    ELSE.
      gi_out-bezei = '其它'.
    ENDIF.
    CONCATENATE gi_vbap-vbeln gi_vbap-posnr INTO gv_name.
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        client                  = sy-mandt
        id                      = '0006'
        language                = sy-langu
        name                    = gv_name
        object                  = 'VBBP'
      TABLES
        lines                   = gi_lines
      EXCEPTIONS
        id                      = 1
        language                = 2
        name                    = 3
        not_found               = 4
        object                  = 5
        reference_check         = 6
        wrong_access_to_archive = 7
        OTHERS                  = 8.
    IF sy-subrc = 0.
      READ TABLE gi_lines INDEX 2.
      IF sy-subrc = 0.

        gi_out-cx = gi_lines-tdline.
        TRANSLATE  gi_out-cx TO UPPER CASE.
        IF gi_out-cx  NOT IN  s_bezei.
*          DELETE GI_LIST.
          CONTINUE.

        ENDIF.

      ENDIF.
      READ TABLE gi_lines INDEX 3.
      IF sy-subrc = 0 .
        TRANSLATE  gi_lines-tdline TO UPPER CASE.
        CONCATENATE gi_out-cx gi_lines-tdline INTO gi_out-cx.

      ENDIF.
      READ TABLE gi_lines INDEX 4.
      IF sy-subrc = 0 .
        TRANSLATE  gi_lines-tdline TO UPPER CASE.
        CONCATENATE gi_out-cx gi_lines-tdline INTO gi_out-cx.

      ENDIF.
    ENDIF.
    IF gi_out-cx = ''.
      gi_out-cx = 'OTHER'.
    ENDIF.
    APPEND gi_out.
  ENDLOOP.

  IF gi_out[] IS  INITIAL.
    MESSAGE i208(00WITH '没有符合条件的数据!!'.
  ENDIF.
  SORT gi_out BY bezei erdat cx.

  LOOP AT gi_out.
    MOVE-CORRESPONDING gi_out TO gi_list.
    MOVE-CORRESPONDING gi_out TO gi_s.

    COLLECT gi_list.
    COLLECT gi_s.

  ENDLOOP.
ENDFORM.                    " FRM_GETDATA
*&---------------------------------------------------------------------*
*&      Form  FRM_DEAL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_deal_data .
  ifts-fieldname = 'BEZEI' .ifts-coltext = '战区'APPEND ifts TO ift.
  CLEAR IFTS.
  ifts-fieldname = 'ERDAT' .ifts-coltext = '月份'.APPEND ifts TO ift.
   CLEAR IFTS.
   ifts-fieldname = 'CBOX' .ifts-NO_OUT = 'X'APPEND ifts TO ift.
    CLEAR IFTS.
  LOOP AT gi_list.
    READ TABLE ift INTO ifts WITH KEY fieldname = gi_list-cx.
    IF sy-subrc <> 0.
      TRANSLATE gi_list-cx TO UPPER CASE.
      CONDENSE gi_list-cx NO-GAPS.
      ifts-fieldname = gi_list-cx .ifts-coltext = gi_list-cx.APPEND ifts TO ift. CLEAR IFTS.
    ENDIF.
    MODIFY gi_list.
  ENDLOOP.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = ift
    IMPORTING
      ep_table        = new_table.
  ASSIGN new_table->* TO .
  CREATE DATA new_ifts LIKE LINE OF .
  ASSIGN new_ifts->* TO .
  FIELD-SYMBOLS : TYPE ANY TABLE.
  ASSIGN LOCAL COPY OF INITIAL LINE OF  TO .
  LOOP AT gi_list.
    AT END OF erdat.

      LOOP AT ift INTO ifts .
        ASSIGN COMPONENT  ifts-fieldname OF STRUCTURE  TO .
        CASE  sy-tabix.
          WHEN  1. = gi_list-bezei.
          WHEN 2 .  = gi_list-erdat.
           WHEN 3 .  = ''.
          WHEN OTHERS.
            READ TABLE gi_list WITH KEY bezei = gi_list-bezei erdat = gi_list-erdat cx = ifts-fieldname.
            IF sy-subrc = 0.
               = gi_list-lfimg.
            ENDIF.

        ENDCASE.


      ENDLOOP .
      INSERT  INTO TABLE .
      CLEAR .
    ENDAT.
    AT END OF bezei.
      LOOP AT ift INTO ifts .
        ASSIGN COMPONENT  ifts-fieldname OF STRUCTURE  TO .

        CASE  sy-tabix.
          WHEN  1. = '汇总'.
          WHEN 2 .
          WHEN 3 .  = 'C310'.
          WHEN OTHERS.
            READ TABLE gi_s WITH KEY bezei = gi_list-bezei cx = ifts-fieldname.
            IF sy-subrc = 0.
               = gi_s-lfimg.
            ENDIF.

        ENDCASE.

      ENDLOOP .
      INSERT  INTO TABLE .
      CLEAR .
    ENDAT.
  ENDLOOP.
ENDFORM.                    " FRM_DEAL_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_OUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_alv_out .
  i_grid_title = '某车型各战区未发车总表'.
  w_layo-zebra = 'X'.
  w_layo-cwidth_opt = 'X'.
  w_layo-INFO_FNAME = 'CBOX'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
     EXPORTING
       i_callback_program = sy-repid
       is_layout_lvc      = w_layo
       it_fieldcat_lvc    = ift
       i_bypassing_buffer = 'X'
       i_default          = 'X'
       i_save             = 'U'
       i_grid_title       = i_grid_title
*     it_sort_lvc        = gt_sort[]
     TABLES
       t_outtab           = 
     EXCEPTIONS
       program_error      = 1
       OTHERS             = 2.
ENDFORM.                    " FRM_ALV_OUT

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

下一篇: bdc
请登录后发表评论 登录
全部评论

注册时间:2010-03-11

  • 博文量
    196
  • 访问量
    168105