动态内表


TABLES:mseg,knvv.


TYPES:BEGIN OF ty_itab,
  konda TYPE zyyzb035-konda,
  year(4TYPE c,
  month(2TYPE c,
  budat_mkpf TYPE zyyzb035-budat_mkpf,
  kdgrp TYPE zyyzb035-kdgrp,
  dmbtr1 TYPE zyyzb035-dmbtr1,"销售金额
  END OF ty_itab.

DATA:gt_itab TYPE TABLE OF ty_itab,
      gs_itab TYPE ty_itab.

DATA:lt_itab TYPE TABLE OF ty_itab.
DATA:lt_itab1 TYPE TABLE OF ty_itab.
DATA:ls_itab TYPE ty_itab.
DATA:ls_itab1 TYPE ty_itab.

DATA:ws_fieldcat        TYPE slis_t_fieldcat_alv WITH HEADER LINE,
     ws_fieldgroups_tab TYPE slis_t_sp_group_alv,
     ws_layout          TYPE slis_layout_alv,
     ws_sortfields_tab  TYPE slis_t_sortinfo_alv WITH HEADER LINE,
     ws_events          TYPE slis_t_event,
     l_user_command     TYPE slis_formname.

DATA:nn TYPE VALUE 0.

FIELD-SYMBOLS:<t_dyntable> TYPE STANDARD TABLE ,
               <t_dyntable1> TYPE STANDARD TABLE,
               <t_dyntable2> TYPE STANDARD TABLE,
               <fs_dyntable> type any ,
               <fs_dyntable1> type any,
               <fs_dyntable2> type any,
               <fs_fldval> type any,
               <l_field> type any.


DATA:        G_cols TYPE ,
             G_Rows TYPE I,
             g_dc(5TYPE C,
             g_count TYPE I,
             G_sta_col(2TYPE N.

DATA:aa TYPE i.
DATA:bb(4TYPE c.
DATA:cc(2TYPE c.

DATA:   t_newtable TYPE REF TO data,
        t_newtable1 TYPE REF TO data,
        t_newline  TYPE REF TO data,
        t_newline1  TYPE REF TO data,
        MY_TABLEREF type ref to DATA ,
        MY_WAREF type ref to DATA ,
        fs_fldcat   TYPE slis_t_fieldcat_alv,
        l_fldcat   TYPE lvc_t_fcat,
        wa_it_fldcat TYPE lvc_s_fcat,
        wa_colno(2TYPE n,
        wa_flname(10TYPE c.
FIELD-SYMBOLS:<fs> TYPE ty_itab.


SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.

SELECT-OPTIONS:
               s_audat FOR mseg-budat_mkpf,"过账日期
               s_konda FOR knvv-konda,"省份
               s_kdgrp FOR knvv-kdgrp"客户类型

SELECTION-SCREEN END OF BLOCK a1.

INITIALIZATION.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM Dny_field_Creation.
  PERFORM Dny_Table_Creation.
  PERFORM Dny_field_value_update.
  PERFORM Add_alv_fields.
  PERFORM Show_Alv.


*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  SELECT konda budat_mkpf kdgrp dmbtr1
   FROM zyyzb035
   INTO CORRESPONDING FIELDS OF TABLE lt_itab
   WHERE BUDAT_MKPF IN s_audat
     AND konda IN s_konda
     AND kdgrp IN ('01','02','08','09').

  LOOP AT lt_itab ASSIGNING <fs>.
    <fs>-year <fs>-budat_mkpf+0(4).
    <fs>-month <fs>-budat_mkpf+4(2).
    <fs>-budat_mkpf ''.
    IF <fs>-kdgrp '02'.
      <fs>-kdgrp '01'.
    ELSEIF <fs>-kdgrp '09'.
      <fs>-kdgrp '08'.
    ENDIF.
  ENDLOOP.


  sort lt_itab by konda year month budat_mkpf.

  LOOP AT lt_itab INTO ls_itab.
    IF ls_itab1 IS NOT INITIAL.
      IF ls_itab1-konda ls_itab-konda
        AND ls_itab1-year ls_itab-year
        AND ls_itab1-month ls_itab-month
        AND ls_itab1-kdgrp ls_itab-kdgrp.
        ls_itab1-dmbtr1 ls_itab-dmbtr1 + ls_itab1-dmbtr1.
      ELSE.
        APPEND ls_itab1 to lt_itab1.
        CLEAR ls_itab1.
        MOVE ls_itab to ls_itab1.
      ENDIF.

    ELSE.
      MOVE ls_itab to ls_itab1.
    ENDIF.

    AT LAST.
      APPEND ls_itab1 to lt_itab1.
    ENDAT.
  ENDLOOP.


ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  DNY_FIELD_CREATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DNY_FIELD_CREATION .
* Create fields .
  wa_it_fldcat-fieldname 'KONDA'.
  wa_it_fldcat-datatype 'CHAR'.
  wa_it_fldcat-intlen 5.
  APPEND wa_it_fldcat TO l_fldcat.


  IF s_audat-high+0(4> s_audat-low+0(4).
    G_sta_col 12 s_audat-low+4(2+ s_audat-high+4(21.
  ELSE.
    IF s_audat-high IS INITIAL.
      g_sta_col 1.
    ELSE.
      g_sta_col s_audat-high+4(2s_audat-low+4(21.
    ENDIF.
  ENDIF.

  aa s_audat-low+4(2).
  bb s_audat-low+0(4).
  DO g_sta_col TIMES.
    CLEAR wa_it_fldcat.
*    move sy-index to wa_colno.
    move aa to wa_colno.
    IF aa > 12 AND aa mod 12 1.
      bb bb + 1.
    ENDIF.


    concatenate 'AB' bb wa_colno into wa_flname."
    wa_it_fldcat-fieldname wa_flname.
    wa_it_fldcat-datatype 'CURR'.
    wa_it_fldcat-intlen 10.
    wa_it_fldcat-no_zero 'X'.
    APPEND wa_it_fldcat TO l_fldcat.

    CONCATENATE 'CD' bb wa_colno into wa_flname."
    wa_it_fldcat-fieldname wa_flname.
    wa_it_fldcat-datatype 'CURR'.
    wa_it_fldcat-intlen 10.
    APPEND wa_it_fldcat TO l_fldcat.

    aa aa + 1.

  ENDDO.


ENDFORM.                    " DNY_FIELD_CREATION
*&---------------------------------------------------------------------*
*&      Form  DNY_TABLE_CREATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DNY_TABLE_CREATION .
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog l_fldcat
    IMPORTING
      ep_table        t_newtable.

  ASSIGN t_newtable->TO <t_dyntable>.
* Create dynamic work area and assign to FS
  CREATE DATA t_newline LIKE LINE OF <t_dyntable>.
  ASSIGN t_newline->TO <fs_dyntable>.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog l_fldcat
    IMPORTING
      ep_table        t_newtable1.



  ASSIGN t_newtable1->TO <t_dyntable1>.
* Create dynamic work area and assign to FS
  CREATE DATA t_newline1 LIKE LINE OF <t_dyntable1>.
  ASSIGN t_newline1->TO <fs_dyntable>.

ENDFORM.                    " DNY_TABLE_CREATION
*&---------------------------------------------------------------------*
*&      Form  ADD_ALV_FIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ADD_ALV_FIELDS .
* Append fields to the dynamic internal table
  CLEAR:aa,bb.

*  APPEND <fs_dyntable> TO <t_dyntable>.

  DATAwa_cat LIKE LINE OF fs_fldcat,
        L_TXT(20TYPE C.


  "Added Special Field into ALV FCAT.

  wa_cat-fieldname 'KONDA'.
  wa_cat-seltext_s '省份'.
  wa_cat-outputlen '4'.
  APPEND wa_cat TO fs_fldcat.


*  IF s_audat-high IS INITIAL.
*    g_sta_col = 1.
*  ELSE.
*    g_sta_col = s_audat-high+4(2) - s_audat-low+4(2) + 1.
*  ENDIF.
*
  aa s_audat-low+4(2).
  bb s_audat-low+0(4).

  DO g_sta_col TIMES.

    CLEAR wa_cat.



    IF aa > 12.
      cc aa 12.
*      bb = bb + 1.
    ELSE.
      cc aa.
    ENDIF.
    MOVE aa TO wa_colno.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  cc
      IMPORTING
        output cc.

    concatenate  'AB' bb wa_colno  into wa_flname.
    CONCATENATE  '' bb cc '月'  into L_TXT.
    wa_cat-fieldname wa_flname.
    wa_cat-seltext_s L_TXT.
    wa_cat-outputlen '10'.
    wa_cat-no_zero 'X'.
    APPEND wa_cat TO fs_fldcat.
    CLEAR wa_cat.
    concatenate  'CD' bb wa_colno  into wa_flname.
    CONCATENATE  '' bb cc '月'  into L_TXT.
    wa_cat-fieldname wa_flname.
    wa_cat-seltext_s L_TXT.
    wa_cat-outputlen '10'.
    wa_cat-no_zero 'X'.
    APPEND wa_cat TO fs_fldcat.
    CLEAR wa_cat.

    aa aa + 1.
    IF aa > 12 AND aa mod 12 1.
*      cc = aa - 12.
      bb bb + 1.
    ENDIF.

  ENDDO.



ENDFORM.                    " ADD_ALV_FIELDS
*&---------------------------------------------------------------------*
*&      Form  SHOW_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SHOW_ALV .
  ws_layout-colwidth_optimize 'X'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      is_layout   ws_layout
      it_fieldcat fs_fldcat
    TABLES
      t_outtab    <t_dyntable>.

ENDFORM.                    " SHOW_ALV
*&---------------------------------------------------------------------*
*&      Form  DNY_FIELD_VALUE_UPDATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DNY_FIELD_VALUE_UPDATE .

  DATAfieldname(20TYPE c.
  DATAfieldvalue(10TYPE c.
  DATAindex(3TYPE c.
  DATAL_WK(2TYPE C.
  DATAL_Period(6TYPE C.

  "Setup the field value

  ASSIGN t_newtable->TO <t_dyntable>.
* Create dynamic work area and assign to FS
  CREATE DATA t_newline LIKE LINE OF <t_dyntable>.
  ASSIGN t_newline->TO <l_field>.

  ASSIGN t_newtable1->TO <t_dyntable1>.
* Create dynamic work area and assign to FS
  CREATE DATA t_newline1 LIKE LINE OF <t_dyntable1>.
  ASSIGN t_newline1->TO <l_field>.

  CLEAR aa.
  cc s_audat-high+0(4s_audat-low+0(4).

  Loop at lt_itab1 INTO ls_itab1.
    aa s_audat-low+4(2).
    bb s_audat-low+0(4)..

    ASSIGN COMPONENT  'KONDA'
          OF STRUCTURE <fs_dyntable> TO <fs_fldval>.
    <fs_fldval> =  ls_itab1-konda.

    DO g_sta_col TIMES.
      clear fieldvalue.

*      CONCATENATE s_audat-low+0(4) s_audat-low+4(2) into l_period.
      MOVE aa TO wa_colno.
*      CONCATENATE G_DC wa_colno INTO wa_flname.
      concatenate 'AB' bb  wa_colno into wa_flname.
* Set up fieldvalue


      IF aa > 12.
        cc aa 12.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  cc
          IMPORTING
            output cc.
        IF cc ls_itab1-month AND bb ls_itab1-year.
          IF ls_itab1-kdgrp '01'.
            fieldvalue ls_itab1-dmbtr1.
          ELSE.
            fieldvalue ''.
          ENDIF.
        ELSE.
          fieldvalue ''.
        ENDIF.

      ELSE.
        IF aa ls_itab1-month AND bb ls_itab1-year.
          IF ls_itab1-kdgrp '01'.
            fieldvalue ls_itab1-dmbtr1.
          ELSE.
            fieldvalue ''.
          ENDIF.
        ELSE.
          fieldvalue ''.
        ENDIF.
      ENDIF.



      ASSIGN COMPONENT  wa_flname
        OF STRUCTURE <fs_dyntable> TO <fs_fldval>.
      <fs_fldval> =  fieldvalue.

      concatenate 'CD' bb wa_colno into wa_flname.
* Set up fieldvalue
      IF aa > 12.
        cc aa 12.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  cc
          IMPORTING
            output cc.
        IF cc ls_itab1-month AND bb ls_itab1-year.
          IF ls_itab1-kdgrp '08'.
            fieldvalue ls_itab1-dmbtr1.
          ELSE.
            fieldvalue ''.
          ENDIF.
        ELSE.
          fieldvalue ''.
        ENDIF.

      ELSE.
        IF aa ls_itab1-month AND bb ls_itab1-year.
          IF ls_itab1-kdgrp '08'.
            fieldvalue ls_itab1-dmbtr1.
          ELSE.
            fieldvalue ''.
          ENDIF.
        ELSE.
          fieldvalue ''.
        ENDIF.
      ENDIF.


*      IF ls_itab1-kdgrp = '08' OR ls_itab1-kdgrp = '09'.
*        fieldvalue = ls_itab1-dmbtr1.
*      ELSE.
*        fieldvalue = ''.
*      ENDIF.

      ASSIGN COMPONENT  wa_flname
        OF STRUCTURE <fs_dyntable> TO <fs_fldval>.
      <fs_fldval> =  fieldvalue.

      aa aa + 1.
      IF aa > 12 AND aa mod 12 1.
        bb bb + 1.
      ENDIF.
    ENDDO.
    CLEARaa,bb,cc.

    append <fs_dyntable> to <t_dyntable>.
    append <fs_dyntable> to <t_dyntable1>.
    clear <fs_dyntable> .

    CLEAR ls_itab1.

  endloop.

  CLEAR <t_dyntable>.


  LOOP AT <t_dyntable1> INTO <fs_dyntable> .
    COLLECT <fs_dyntable> INTO <t_dyntable>.
  ENDLOOP.


ENDFORM.                    " DNY_FIELD_VALUE_UPDATE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值