matinal:write report

2023-10-13 16:57:00 浏览数 (1)

代码语言:javascript复制
*&---------------------------------------------------------------------*
*& Report  ZBC_RE_01
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZBC_RE_01 MESSAGE-ID ZBC
                 NO STANDARD PAGE HEADING
                 LINE-SIZE 90
                 LINE-COUNT 20.

INCLUDE ZBC_RE_01TOP.
INCLUDE ZBC_RE_01FROM.
*&---------------------------------------------------------------------*
*& INITIALIZATION EVENT
*&---------------------------------------------------------------------*
INITIALIZATION.
    GV_NAME = 'checking'.
    GV_BUTTON = 'DOWNLOAD'.
    button1 = 'tab1'.
    button2 = 'tab2'.
    mytab-prog = SY-REPID.
    mytab-dynnr = 100.
    mytab-activetab = 'TAB1'.

*&---------------------------------------------------------------------*
*& EVENT SELECTION SCREEN EVENT.
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT . "screen PBO
  PERFORM modify_screen.


AT SELECTION-SCREEN . " SCREEN PAI
*  PERFORM selection_screen_pai.
  CASE SY-DYNNR .
    WHEN 1000.
      PERFORM selection_screen_pai.
        case sy-ucomm.
          when 'push1'.
            mytab-dynnr = 100.
            mytab-activetab = 'button1'.
           when 'push2'.
            mytab-dynnr = 200.
            mytab-activetab = 'button2'.
        ENDCASE.
    WHEN 100.
      MESSAGE S888(sapapdemos) WITH text-040 sy-dynnr.
    WHEN 200.
      MESSAGE S888(sapapdemos) WITH text-040 sy-dynnr.
   ENDCASE.
*&---------------------------------------------------------------------*
*& EVent start of selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM get_data.
*&---------------------------------------------------------------------*
*& Event end of selection
*&---------------------------------------------------------------------*
END-OF-SELECTION.
  GT_STATUS  ='DOWNLOAD'.
  APPEND GT_STATUS.
  SET PF-STATUS 'STATUS' EXCLUDING GT_STATUS .
  SET TITLEBAR 'TUTLE' with 'SUDENT'.
IF GT_TOTAL IS NOT INITIAL.
  PERFORM disaplay_data.
ELSE.
  MESSAGE S001(ZBC) WITH 'student' DISPLAY LIKE 'E'.
ENDIF.
*&---------------------------------------------------------------------*
*& EVent TOP OF PAGE
*&---------------------------------------------------------------------*
TOP-OF-PAGE .
  PERFORM top_of_page.
*&---------------------------------------------------------------------*
*& EVENT LINE-SELECTION
*&---------------------------------------------------------------------*
AT LINE-SELECTION.
  PERFORM line_select.
*&---------------------------------------------------------------------*
*& EVENT USER COMMAND
*&---------------------------------------------------------------------*
AT USER-COMMAND .
  PERFORM user_command .
*&---------------------------------------------------------------------*
*& TOP OF PAGE OF LINE SELECTION
*&---------------------------------------------------------------------*
 TOP-OF-PAGE DURING LINE-SELECTION .
  PERFORM top_of_page_line_selection.
ZBC_RE_01TOP
*&---------------------------------------------------------------------*
*&  Include           ZBC_RE_01TOP
*&---------------------------------------------------------------------*
TABLES: ZSTU,
        ZSCHOOL.
TYPES: BEGIN of GTY_TOTAL,
  ZCODE TYPE ZSTU-ZCODE,
  ZNAME TYPE ZSTU-ZNAME,
  SEX  TYPE ZSTU-SEX,
  ZSCHOOL TYPE ZSTU-ZSCHOOL,
  ZSNAME TYPE ZSCHOOL_HQ_03-ZSNAME,
  END OF GTY_TOTAL.

DATA GT_TOTAL TYPE TABLE OF GTY_TOTAL.
DATA GS_TOTAL TYPE GTY_TOTAL.

DATA GT_SCHOOL TYPE TABLE OF ZSCHOOL_HQ_03.
DATA GS_SCHOOL TYPE ZSCHOOL_HQ_03.
DATA WA_SCHOOL TYPE ZSCHOOL_HQ_03.

DATA GT_STU TYPE TABLE OF ZSTU .
DATA GS_STU TYPE ZSTU .

DATA GV_BUTTON TYPE C.

DATA GT_STATUS LIKE TABLE OF SY-UCOMM WITH HEADER LINE.

**screen
*PARAMETERS P_CODE like GS_STU-ZCODE OBLIGATORY.
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-T01 .
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) TEXT-T06 for FIELD S_ZCODE.
SELECTION-SCREEN POSITION 30.
SELECT-OPTIONS S_ZCODE FOR GS_STU-ZCODE NO-EXTENSION
                                        NO INTERVALS .
SELECTION-SCREEN POSITION 50.
SELECTION-SCREEN COMMENT (20) GV_NAME.
SELECTION-SCREEN END OF LINE.

SELECT-OPTIONS S_ZNAME FOR GS_STU-ZNAME .
SELECT-OPTIONS S_ZSCH FOR GS_SCHOOL-ZSCHOOL .
SELECTION-SCREEN END OF BLOCK BK1 .


PARAMETERS SEX_CHK AS CHECKBOX USER-COMMAND SEHI.
SELECTION-SCREEN BEGIN OF BLOCK BK2 WITH FRAME TITLE TEXT-T02 .
SELECTION-SCREEN BEGIN OF LINE .
PARAMETERS  R_MALE RADIOBUTTON GROUP GP1 MODIF ID SEX .
SELECTION-SCREEN COMMENT (10) TEXT-T03 FOR FIELD R_MALE .
PARAMETERS  R_FEMALE RADIOBUTTON GROUP GP1 MODIF ID SEX .
SELECTION-SCREEN POSITION 15 .
SELECTION-SCREEN COMMENT (10) TEXT-T04 FOR FIELD R_FEMALE .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN END OF BLOCK BK2 .

SELECTION-SCREEN SKIP 3.
SELECTION-SCREEN ULINE.
PARAMETERS P_CHECK AS CHECKBOX .
SELECTION-SCREEN BEGIN OF BLOCK BK3 WITH FRAME TITLE TEXT-T05.
PARAMETERS P_SALES RADIOBUTTON GROUP GP2 MODIF ID DEP .
PARAMETERS P_EDU RADIOBUTTON GROUP GP2 MODIF ID DEP .
PARAMETERS P_ACC RADIOBUTTON GROUP GP2 MODIF ID DEP .
PARAMETERS P_HR RADIOBUTTON GROUP GP2 MODIF ID DEP .
SELECTION-SCREEN END OF BLOCK BK3.

SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS: P1(10) TYPE C,
            P2(10) TYPE C,
            P3(10) TYPE C.
SELECTION-SCREEN END OF BLOCK B1 .
SELECTION-SCREEN END OF SCREEN 100.

SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
PARAMETERS: Q1(10) TYPE C,
            Q2(10) TYPE C,
            Q3(10) TYPE C.
SELECTION-SCREEN END OF BLOCK B2 .
SELECTION-SCREEN END OF SCREEN 200.

SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 10 LINES,
                  TAB (20) button1 USER-COMMAND push1,
                  TAB (20) button2 USER-COMMAND push2,
                  END OF BLOCK mytab.
ZBC_RE_01FROM
*&---------------------------------------------------------------------*
*&  Include           ZBC_RE_01FROM
*&---------------------------------------------------------------------*



*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .
  RANGES R_SEX FOR GS_STU-SEX .

  CLEAR: R_SEX, R_SEX[] .
  IF SEX_CHK = 'X' .
      IF R_MALE = 'X' .
        R_SEX-SIGN = 'I' .
        R_SEX-OPTION = 'EQ' .
        R_SEX-LOW    = 'M' .
        APPEND R_SEX .
      ELSE .
        R_SEX-SIGN = 'I' .
        R_SEX-OPTION = 'EQ' .
        R_SEX-LOW    = 'F' .
        APPEND R_SEX .
       ENDIF.
    ENDIF.


*&      inner join
*    SELECT A~ZCODE A~ZNAME A~SEX A~ZSCHOOL B~ZSNAME
*    FROM ZSTU AS A INNER JOIN ZSCHOOL_HQ_03 AS B
*      ON A~ZSCHOOL = B~ZSCHOOL
*    INTO CORRESPONDING FIELDS OF TABLE GT_TOTAL
*    WHERE A~ZSCHOOL IN S_ZSCH
*        AND A~ZCODE IN S_ZCODE
*        AND A~ZNAME IN S_ZNAME.

*&     left outer join
*  SELECT A~ZCODE A~ZNAME A~SEX A~ZSCHOOL B~ZSNAME
*    FROM ZSTU AS A LEFT OUTER JOIN ZSCHOOL_HQ_03 AS B
*      ON A~ZSCHOOL = B~ZSCHOOL
*    INTO CORRESPONDING FIELDS OF TABLE GT_TOTAL
*    WHERE A~ZSCHOOL IN S_ZSCH
*        AND A~ZCODE IN S_ZCODE
*        AND A~ZNAME IN S_ZNAME.

*&     mutli table select
    SELECT ZCODE ZNAME SEX ZSCHOOL
      FROM ZSTU
      INTO CORRESPONDING FIELDS OF TABLE GT_STU
      WHERE ZCODE IN S_ZCODE
        AND ZNAME IN S_ZNAME
        AND ZSCHOOL IN S_ZSCH
        AND SEX in R_SEX .

    IF GT_STU IS NOT INITIAL.
      SELECT ZSCHOOL ZSNAME
        FROM ZSCHOOL_HQ_03
        INTO CORRESPONDING FIELDS OF TABLE GT_SCHOOL
        FOR ALL ENTRIES IN GT_STU
        WHERE ZSCHOOL = GT_STU-ZSCHOOL .
       SORT GT_SCHOOL BY ZSCHOOL .
    ENDIF .

     LOOP AT GT_STU INTO GS_STU.
       CLEAR GS_TOTAL .
       MOVE-CORRESPONDING GS_STU to GS_TOTAL.
       READ TABLE GT_SCHOOL INTO GS_SCHOOL
                            WITH KEY ZSCHOOL = GS_TOTAL-ZSCHOOL
                            BINARY SEARCH.
       IF SY-SUBRC = 0 .
         GS_TOTAL-ZSNAME = GS_SCHOOL-ZSNAME .
*       ELSE . "read failuer
*         GS_TOTAL-ZSNAME = '' .
*         CONTINUE .     "stop loop anc continure next
       ENDIF .
       APPEND GS_TOTAL TO GT_TOTAL.
      ENDLOOP .

*  IF R_FEMALE = 'X' .
*    SELECT ZCODE ZNAME SEX ZSCHOOL WEIGH ZUNIT
*        FROM ZSTU
*        INTO CORRESPONDING FIELDS OF TABLE GT_STU
*        WHERE ZCODE IN S_ZCODE
*        AND   ZNAME IN S_ZNAME
*        AND   SEX ='F'.
*  ELSE.
*    SELECT ZCODE ZNAME SEX ZSCHOOL WEIGH ZUNIT
*        FROM ZSTU
*        INTO CORRESPONDING FIELDS OF TABLE GT_STU
*        WHERE ZCODE IN S_ZCODE
*        AND   ZNAME IN S_ZNAME
*        AND   SEX ='M'.
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DISAPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM disaplay_data .

*  WRITE:  / 'result:'.

  WRITE: /1(71) SY-ULINE.
  LOOP AT GT_TOTAL INTO GS_TOTAL.
    WRITE : /1 SY-VLINE NO-GAP,(10) GS_TOTAL-ZCODE NO-GAP LEFT-JUSTIFIED,
               SY-VLINE NO-GAP,(20) GS_TOTAL-ZNAME NO-GAP LEFT-JUSTIFIED,
               SY-VLINE NO-GAP,(5)  GS_TOTAL-SEX NO-GAP LEFT-JUSTIFIED,
               SY-VLINE NO-GAP,(10) GS_TOTAL-ZSCHOOL NO-GAP LEFT-JUSTIFIED ,
               SY-VLINE NO-GAP,(20) GS_TOTAL-ZSNAME NO-GAP LEFT-JUSTIFIED ,
               SY-VLINE.
  WRITE: /1(71) SY-ULINE.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  MODIFY_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM modify_screen .
  LOOP AT SCREEN.
    IF P_CHECK = 'X' .
        " DISPLAY
    ELSE.
      " Hide
      IF SCREEN-GROUP1 = 'DEP'.
         SCREEN-INVISIBLE = 1 . "1 True 0 False
         MODIFY SCREEN.
      ENDIF.
    ENDIF.

    IF SEX_CHK = 'X' .
        " DISPLAY
    ELSE.
      " Hide
      IF SCREEN-GROUP1 = 'SEX'.
         SCREEN-INVISIBLE = 1 . "1 True 0 False
         MODIFY SCREEN.
      ENDIF.
    ENDIF.
   ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SELECTION_SCREEN_PAI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM selection_screen_pai .
  clear GS_STU.
  if S_ZCODE IS NOT INITIAL.
      select SINGLE *
        FROM ZSTU
        INTO CORRESPONDING FIELDS OF GS_STU
        WHERE ZCODE IN S_ZCODE.
      IF SY-SUBRC = 0.
        GV_NAME = 'exist'.
        MESSAGE S000 WITH GS_STU-ZNAME 'exist'.
      ELSE.
        GV_NAME = 'not exist'.
        MESSAGE S000 WITH GS_STU-ZNAME 'not exist' DISPLAY LIKE 'E'.
      ENDIF.
   ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM top_of_page .
  FORMAT COLOR 3 ON.
  WRITE: /1(71) 'student basic information ' CENTERED.
  FORMAT COLOR 3 OFF.
  WRITE: /1(71) SY-ULINE.
  FORMAT COLOR 6 INVERSE ON .
  WRITE: /1 SY-VLINE NO-GAP,(10) 'STUDENCODE' NO-GAP CENTERED,
                SY-VLINE NO-GAP,(20) 'STUDENTNAME' NO-GAP CENTERED,
                SY-VLINE NO-GAP,(5) 'SEX' NO-GAP CENTERED,
                SY-VLINE NO-GAP,(10) 'SCHOOLCODE' NO-GAP CENTERED,
                SY-VLINE NO-GAP,(20) 'SCHOOLNAME' NO-GAP CENTERED,
                SY-VLINE.
  WRITE: /1(71) SY-ULINE.
  FORMAT COLOR 6 INVERSE OFF .
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  LINE_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM line_select .
DATA: GV_FIELD(30),
      GV_VALUE(30).

GET CURSOR FIELD GV_FIELD
           VALUE GV_VALUE.
CHECK GV_FIELD = 'GS_TOTAL-ZSCHOOL' .

  CLEAR WA_SCHOOL.
  SELECT SINGLE *
    FROM ZSCHOOL_HQ_03
    INTO CORRESPONDING FIELDS OF WA_SCHOOL
    WHERE ZSCHOOL = GV_VALUE .

  IF SY-SUBRC = 0 .
    WRITE: / 'SCHOOL BASIC INFORMATION'.

    WRITE: /1(50) SY-ULINE.
    WRITE: /1 SY-VLINE NO-GAP,'SCHOOLCODE:    ' NO-GAP, SY-VLINE ,(30) WA_SCHOOL-ZSCHOOL CENTERED,SY-VLINE .
    WRITE: /1(50) SY-ULINE.
    WRITE: /1 SY-VLINE NO-GAP,'SCHOOLNAME:    ' NO-GAP, SY-VLINE ,(30) WA_SCHOOL-ZSNAME  CENTERED,SY-VLINE .
    WRITE: /1(50) SY-ULINE.
    WRITE: /1 SY-VLINE NO-GAP,'SCHOOLADDRESS: ' NO-GAP, SY-VLINE ,(30) WA_SCHOOL-ZADD    CENTERED,SY-VLINE .
    WRITE: /1(50) SY-ULINE.
  ELSE .
    MESSAGE I000 WITH 'this school info not exist'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE_LINE_SELECTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM top_of_page_line_selection .
  CASE SY-UCOMM.
    WHEN 'SORTUP' OR 'SORTDOWN'.
      PERFORM top_of_page.
    when 'OTHERS'.
      WRITE :/ 'SCHOOL INFORMATION'.
  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM user_command .
  CASE SY-UCOMM .
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
    WHEN 'SORTUP'.
      SY-LSIND = SY-LSIND - 1 .
      PERFORM sort_list
              USING 'UP'.
    WHEN 'SORTDOWN'.
      SY-LSIND = SY-LSIND - 1 .
      PERFORM sort_list
              USING 'DOWN'.
    WHEN 'DOWNLOAD' .
      MESSAGE S000 WITH 'download successfully!'.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  SORT_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  P_FLAG char
*----------------------------------------------------------------------*

FORM sort_list USING P_FLAG.

  DATA: LV_FIELD(30) ,
       LV_FIELDNAME(30) .
  GET CURSOR FIELD LV_FIELD .
  SPLIT LV_FIELD AT '-' INTO LV_FIELD LV_FIELDNAME.
  CHECK  LV_FIELD = 'GS_TOTAL' .
  IF P_FLAG = 'UP'.
    SORT GT_TOTAL BY (LV_FIELDNAME) ASCENDING.
  ELSEIF P_FLAG = 'DOWN'.
    SORT GT_TOTAL BY (LV_FIELDNAME) DESCENDING.
  ENDIF.

  PERFORM disaplay_data.
ENDFORM.

0 人点赞