TABLES:mseg,knvv.TYPES:BEGIN OF ty_itab,
konda TYPE zyyzb035-konda,
year(4) TYPE c,
month(2) TYPE 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 i 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 I ,
G_Rows TYPE I,
g_dc(5) TYPE C,
g_count TYPE I,
G_sta_col(2) TYPE N.
DATA:aa TYPE i.
DATA:bb(4) TYPE c.
DATA:cc(2) TYPE 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(2) TYPE n,
wa_flname(10) TYPE 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(2) + 1.
ELSE.
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.
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>.
DATA: wa_cat LIKE LINE OF fs_fldcat,
L_TXT(20) TYPE 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 .
DATA: fieldname(20) TYPE c.
DATA: fieldvalue(10) TYPE c.
DATA: index(3) TYPE c.
DATA: L_WK(2) TYPE C.
DATA: L_Period(6) TYPE 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(4) - s_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.
CLEAR: aa,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