*&---------------------------------------------------------------------*
*& Report ZJFTCY_02
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zjftcy_02.
PARAMETERS input TYPE d OBLIGATORY.
DATA:BEGIN OF wa_yday ,
month TYPE char02,
datum TYPE sy-datum,
day TYPE i,
rq TYPE char02,
flg TYPE xfeld,
pos TYPE i,
* level TYPE i,
line TYPE i,
END OF wa_yday.
DATA: BEGIN OF date_a,
j(4),
m(2),
t(2),
END OF date_a.
DATA: gt_yday LIKE TABLE OF wa_yday,
date_b LIKE date_a,
days_input TYPE d,
days_output TYPE d,
dayssum_month TYPE i,
counter_month TYPE i VALUE 12,
p_wotnr TYPE p.
DATA counter1 TYPE i.
DATA counterline TYPE i VALUE 1.
DATA maxline TYPE i VALUE 1.
DATA initial TYPE i VALUE 7.
*DATA maxline2 TYPE i VALUE 1.
*DATA maxline3 TYPE i VALUE 1.
date_a-j = input+0(4).
date_a-t = input+6(2).
DO counter_month TIMES.
*一个月的天数
counter1 = sy-index.
IF counter1 <= 9.
date_a-m = 0 && counter1.
ELSE.
date_a-m = counter1.
ENDIF.
days_input = date_a.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = days_input
IMPORTING
last_day_of_month = days_output
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
dayssum_month = days_output+6(2).
*行初始化
IF counter1 = 4 OR counter1 = 7 OR counter1 = 10 .
counterline = maxline + 4.
initial = counterline.
ELSE.
counterline = initial.
ENDIF.
DO dayssum_month TIMES.
CLEAR wa_yday.
wa_yday-month = counter1.
wa_yday-day = sy-index.
date_b = days_input+0(6).
IF wa_yday-day <= 9.
date_b-t = 0 && wa_yday-day.
ELSE.
date_b-t = wa_yday-day.
ENDIF.
wa_yday-datum = date_b.
*周几
CALL FUNCTION 'DAY_IN_WEEK'
EXPORTING
datum = wa_yday-datum
IMPORTING
wotnr = p_wotnr.
wa_yday-rq = p_wotnr.
*行数 列的位置
IF wa_yday-rq = 7.
wa_yday-line = counterline.
counterline = counterline + 1.
IF counter1 = 3 OR counter1 = 6 OR counter1 = 9 OR counter1 = 12.
wa_yday-flg = 'X'.
ENDIF.
ELSEIF sy-index = dayssum_month.
IF counter1 = 3 OR counter1 = 6 OR counter1 = 9 OR counter1 = 12.
wa_yday-flg = 'X'.
ENDIF.
wa_yday-line = counterline.
counterline = counterline + 1.
ELSE.
wa_yday-line = counterline.
ENDIF.
IF maxline < counterline.
maxline = counterline.
ENDIF.
*位置 第几列
CASE counter1.
WHEN 1 OR 4 OR 7 OR 10.
wa_yday-pos = 10 * wa_yday-rq .
WHEN 2 OR 5 OR 8 OR 11.
wa_yday-pos = 72 + 10 * wa_yday-rq .
WHEN OTHERS.
wa_yday-pos = 144 + 10 * wa_yday-rq .
ENDCASE.
APPEND wa_yday TO gt_yday.
ENDDO.
ENDDO.
*输出
*基本布局
DEFINE format_monoutput.
WRITE AT: 10(63) &1 CENTERED COLOR COL_POSITIVE,
82(63) &2 CENTERED COLOR COL_POSITIVE,
154(63) &3 CENTERED COLOR COL_POSITIVE.
END-OF-DEFINITION.
DEFINE format_rqoutput.
WRITE AT:10 |{ '一' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
20 |{ '二' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
30 |{ '三' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
40 |{ '四' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
50 |{ '五' WIDTH = 6 ALIGN = LEFT }| COLOR COL_GROUP ,
56 |{ '六' WIDTH = 10 ALIGN = CENTER }| COLOR COL_TOTAL ,
66 |{ '日' WIDTH = 6 ALIGN = RIGHT }| COLOR COL_TOTAL .
*WRITE AT:82'一' ,92 '二' ,102'三', 112'四', 122'五', 132'六',142'日'.
WRITE AT:82 |{ '一' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
92 |{ '二' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
102 |{ '三' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
112 |{ '四' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
122 |{ '五' WIDTH = 6 ALIGN = LEFT }| COLOR COL_GROUP ,
128 |{ '六' WIDTH = 10 ALIGN = CENTER }| COLOR COL_TOTAL ,
138 |{ '日' WIDTH = 6 ALIGN = RIGHT }| COLOR COL_TOTAL .
*WRITE AT:154'一' ,164 '二' ,174'三', 184'四', 194'五', 204'六',214'日'.
WRITE AT:154 |{ '一' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
164 |{ '二' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
174 |{ '三' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
184 |{ '四' WIDTH = 10 ALIGN = LEFT }| COLOR COL_GROUP ,
194 |{ '五' WIDTH = 6 ALIGN = LEFT }| COLOR COL_GROUP ,
200 |{ '六' WIDTH = 10 ALIGN = CENTER }| COLOR COL_TOTAL,
210 |{ '日' WIDTH = 6 ALIGN = RIGHT }| COLOR COL_TOTAL.
END-OF-DEFINITION.
SKIP TO LINE 2.
WRITE AT: 112 '年历:' COLOR COL_NEGATIVE,117 date_a-j COLOR COL_NEGATIVE.
SKIP TO LINE 5.
*WRITE AT: 40 'JANUARY' COLOR COL_POSITIVE , 112 'FEBRUARY'COLOR COL_HEADING, 184 'MARCH'COLOR COL_HEADING .
*WRITE AT: 10 |{ 'JANUARY' WIDTH = 63 ALIGN = CENTER }| COLOR COL_POSITIVE ,
* 82 |{ 'FEBRUARY' WIDTH = 63 ALIGN = CENTER }| COLOR COL_POSITIVE ,
* 154 |{ 'MARCH' WIDTH = 63 ALIGN = CENTER }| COLOR COL_POSITIVE .
format_monoutput : 'JANUARY'
'FEBRUARY'
'MARCH'.
SKIP TO LINE 6.
format_rqoutput.
SKIP TO LINE 14.
format_monoutput : 'APRIL'
'MAY'
'JUNE'.
SKIP TO LINE 15.
format_rqoutput.
SKIP TO LINE 24.
format_monoutput : 'JULY'
'AUGUST'
'SEPTEMBER'.
SKIP TO LINE 25.
format_rqoutput.
SKIP TO LINE 33.
format_monoutput : 'OCTOBER'
'NOVEMBER'
'DECEMBER'.
SKIP TO LINE 34.
format_rqoutput.
*数字输出
LOOP AT gt_yday INTO wa_yday .
IF wa_yday-rq = 6 OR wa_yday-rq = 7.
SKIP TO LINE wa_yday-line .
WRITE AT wa_yday-pos(3) wa_yday-day COLOR COL_TOTAL.
ELSE.
SKIP TO LINE wa_yday-line .
WRITE AT wa_yday-pos(3) wa_yday-day.
ENDIF.
ENDLOOP.
abap 实现输入日期 显示全年日历功能
最新推荐文章于 2024-08-01 23:43:18 发布