REPORT zpp000110
LINE-SIZE 230
LINE-COUNT 50
MESSAGE-ID zpp
NO STANDARD PAGE HEADING.
*Author : whs
*Date : 2004.04.27
*Description : 維護客戶預留數
*說明 : 計算oa复期時,設定每個客戶每周預留的數据
CONTROLS: fab TYPE TABLEVIEW USING SCREEN 100.
TABLES: sscrfields , zperdest , kna1.
DATA : w_mod(8) TYPE c ,
w_moddesc(10) TYPE c.
DATA: BEGIN OF it OCCURS 10.
DATA: sel TYPE c.
INCLUDE STRUCTURE zperdest.
DATA: END OF it.
TYPES: BEGIN OF tab_type,
fcode LIKE rsmpe-func,
END OF tab_type.
DATA: tab TYPE STANDARD TABLE OF tab_type WITH
NON-UNIQUE DEFAULT KEY INITIAL SIZE 10,
wa_tab TYPE tab_type.
DATA: wa LIKE LINE OF fab-cols .
DATA: BEGIN OF wk OCCURS 0,
week TYPE i,
startdate TYPE sy-datum,
enddate TYPE sy-datum,
END OF wk.
DATA t_lines TYPE i.
DATA t_stop TYPE c.
DATA ok_code(4) TYPE c.
DATA line_count TYPE i.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK aaa WITH FRAME. TITLE btxt3.
SELECT-OPTIONS : p_yymm FOR zperdest-yymm.
SELECT-OPTIONS : p_week FOR zperdest-week.
SELECT-OPTIONS : p_kunnr FOR zperdest-kunnr.
SELECT-OPTIONS : p_type FOR zperdest-jjlb.
SELECTION-SCREEN END OF BLOCK aaa.
INITIALIZATION.
btxt3 = '請輸入選擇資料'.
SET PF-STATUS 'START'.
AT USER-COMMAND.
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'ONLI'.
w_mod = 'NEW'.
w_moddesc = '新增'.
WHEN 'NEW1'.
w_mod = 'NEW'.
w_moddesc = '新增'.
sscrfields-ucomm = 'ONLI'.
WHEN 'DISP1'.
w_mod = 'QUERY'.
w_moddesc = '查詢'.
sscrfields-ucomm = 'ONLI'.
WHEN 'EDIT1'.
w_mod = 'EDIT'.
w_moddesc = '修改'.
sscrfields-ucomm = 'ONLI'.
ENDCASE.
START-OF-SELECTION.
CASE w_mod .
WHEN 'NEW'.
CLEAR it.
it-sel = 'X'.
APPEND it.
WHEN 'EDIT' OR 'QUERY'.
PERFORM. read_data.
ENDCASE.
END-OF-SELECTION.
CHECK t_stop = space.
CALL SCREEN 100.
*&---------------------------------------------------------------------
*& Module exit_command INPUT
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
MODULE exit_command INPUT.
CASE ok_code.
WHEN 'EXIT' OR 'BACK' OR 'CANC'.
CLEAR ok_code.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDMODULE. " exit_command INPUT
*&---------------------------------------------------------------------
*& Module init_0100 OUTPUT
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
MODULE init_0100 OUTPUT.
SET TITLEBAR '0100' WITH w_moddesc.
CASE w_mod .
WHEN 'NEW'.
CLEAR tab.
MOVE 'DELE' TO wa_tab-fcode.
APPEND wa_tab TO tab.
SET PF-STATUS 'GUI18' EXCLUDING tab.
WHEN 'EDIT'.
CLEAR tab.
MOVE 'ADDL' TO wa_tab-fcode.
APPEND wa_tab TO tab.
SET PF-STATUS 'GUI18' EXCLUDING tab.
LOOP AT fab-cols INTO wa .
IF wa-screen-name = 'IT-YYMM'
OR wa-screen-name = 'IT-WEEK'
OR wa-screen-name = 'IT-KUNNR'
OR wa-screen-name = 'IT-JJLB'.
wa-screen-input = '0'.
MODIFY fab-cols FROM wa .
ENDIF .
ENDLOOP.
WHEN 'QUERY'.
CLEAR tab.
MOVE 'SAVE' TO wa_tab-fcode.
APPEND wa_tab TO tab.
MOVE 'DELE' TO wa_tab-fcode.
APPEND wa_tab TO tab.
MOVE 'ADDL' TO wa_tab-fcode.
APPEND wa_tab TO tab.
SET PF-STATUS 'GUI18' EXCLUDING tab.
LOOP AT fab-cols INTO wa .
IF wa-screen-name = 'IT-YYMM'
OR wa-screen-name = 'IT-JJLB'
OR wa-screen-name = 'IT-WEEK'
OR wa-screen-name = 'IT-KUNNR'
OR wa-screen-name = 'IT-MENGE'.
wa-screen-input = '0'.
MODIFY fab-cols FROM wa .
ENDIF .
ENDLOOP.
ENDCASE.
ENDMODULE. " init_0100 OUTPUT
*&---------------------------------------------------------------------
*& Module set_line_count INPUT
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
MODULE set_line_count INPUT.
line_count = sy-loopc.
ENDMODULE. " set_line_count INPUT
*&---------------------------------------------------------------------
*& Module modify_tab300 INPUT
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
MODULE modify_tab300 INPUT.
MODIFY it INDEX fab-current_line.
ENDMODULE. " modify_tab300 INPUT
*&---------------------------------------------------------------------
*& Module user_command_0100 INPUT
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'ADDL'.
CLEAR it.
it-sel = 'X'.
APPEND it.
DESCRIBE TABLE it LINES t_lines .
fab-lines = t_lines.
fab-top_line = fab-lines - 5.
CLEAR ok_code.
WHEN 'SAVE'.
READ TABLE it WITH KEY sel = 'X' .
IF sy-subrc NE 0 .
MESSAGE s063 .
STOP.
CLEAR ok_code .
ENDIF .
IF w_mod = 'NEW'.
PERFORM. add_data.
ELSEIF w_mod = 'EDIT'.
PERFORM. modify_data.
ENDIF.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'SELA' .
it-sel = 'X'.
MODIFY it TRANSPORTING sel WHERE sel <> 'X' .
CLEAR ok_code .
WHEN 'CANA' .
it-sel = space .
MODIFY it TRANSPORTING sel WHERE sel NE space .
CLEAR ok_code .
WHEN 'P--'.
CLEAR ok_code.
PERFORM. paging USING 'P--'.
WHEN 'P-'.
CLEAR ok_code.
PERFORM. paging USING 'P-'.
WHEN 'P+'.
CLEAR ok_code.
PERFORM. paging USING 'P+'.
WHEN 'P++'.
CLEAR ok_code.
PERFORM. paging USING 'P++'.
WHEN 'DELE'.
CLEAR ok_code.
PERFORM. delete_data.
ENDCASE.
ENDMODULE. " user_command_0100 INPUT
*&---------------------------------------------------------------------
*& Module set_cursor_pos300 OUTPUT
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
MODULE set_cursor_pos300 OUTPUT.
SET CURSOR FIELD 'IT-YYMM' LINE 1.
ENDMODULE. " set_cursor_pos300 OUTPUT
*&---------------------------------------------------------------------
*& Form paging
*&---------------------------------------------------------------------
FORM. paging USING code.
DATA: i TYPE i,
j TYPE i.
CASE code.
WHEN 'P--'. fab-top_line = 1.
WHEN 'P-'.
fab-top_line = fab-top_line - line_count.
IF fab-top_line < 1.
fab-top_line = 1.
ENDIF.
WHEN 'P+'.
i = fab-top_line + line_count.
j = fab-lines - line_count + 1.
IF j LE 0. j = 1. ENDIF.
IF i LE j.
fab-top_line = i.
ELSE.
fab-top_line = j.
ENDIF.
WHEN 'P++'.
fab-top_line = fab-lines - line_count + 1.
IF fab-top_line < 1.
fab-top_line = 1.
ENDIF.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------
*& Module check_state INPUT
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
MODULE check_state INPUT.
DATA: p_len TYPE i.
DATA: p_year TYPE i.
IF it-yymm NE space AND it-week NE space.
p_len = strlen( it-yymm ).
p_year = it-yymm+0(4).
IF p_len <> 6 OR p_year < 1000.
CLEAR ok_code.
MESSAGE e077 WITH '請輸入正确的月份 !'.
ENDIF.
IF it-yymm+4(2) > 12 OR it-yymm+4(2) = 0.
CLEAR ok_code.
MESSAGE e077 WITH '請輸入正确的月份 !'.
ENDIF.
IF it-week >= 1 AND it-week <= 6 .
ELSE.
CLEAR ok_code.
MESSAGE e077 WITH '請輸入正確的星期 !'.
ENDIF.
PERFORM. compute_date USING it-yymm it-week
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9333231/viewspace-277756/ ,如需转载,请注明出处,否则将追究法律责任。