|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > ABAP Source Code > YPRACTICE_203 |
*&---------------------------------------------------------------------*
*& Report YPRACTICE_202 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ypractice_202
NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* Tables
*----------------------------------------------------------------------*
TABLES : anla, anlz, t499s.
*----------------------------------------------------------------------*
*GLOBAL VARIABLE DECRALATION
*----------------------------------------------------------------------*
DEFINE macro_data_possition.
if &1 = 'HEADER'.
write : /'|' no-gap,(12) &2 no-gap centered,
'|' no-gap,(4) &3 no-gap centered,
'|' no-gap,(50) &4 no-gap centered,
'|' no-gap,(10) &5 no-gap centered,
'|' no-gap,(40) &6 no-gap centered,
'|' no-gap,(12) &7 no-gap centered,
'|' no-gap.
else.
write : /'|' no-gap,(12) &2 no-gap centered,
'|' no-gap,(4) &3 no-gap centered,
'|' no-gap,(50) &4 no-gap,
'|' no-gap,(10) &5 no-gap centered,
'|' no-gap,(40) &6 no-gap,
'|' no-gap,(12) &7 no-gap centered,
'|' no-gap.
endif.
END-OF-DEFINITION.
TYPES: BEGIN OF ty_header,
anln1 LIKE anla-anln1, " Main Asset Number
anln2 LIKE anla-anln2, " Asset Subnumber
txt50 LIKE anla-txt50, " Asset description
stort LIKE anlz-stort, " Asset location
ktext LIKE t499s-ktext, " Location description
aktiv LIKE anla-aktiv, " Asset capitalization date
END OF ty_header.
DATA: gi_header TYPE STANDARD TABLE OF ty_header WITH HEADER LINE,
gi_anla LIKE STANDARD TABLE OF anla WITH HEADER LINE,
gi_t499s LIKE STANDARD TABLE OF t499s WITH HEADER LINE.
DATA: gw_pri_params TYPE pri_params,
gv_valid TYPE c.
*----------------------------------------------------------------------*
*Input Screen/Selection
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK groupbox1 WITH FRAME TITLE text_101. "Declare Group Box 1
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(14) text_102 FOR FIELD so_stort.
SELECT-OPTIONS so_stort FOR anlz-stort.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(14) text_103 FOR FIELD so_anln1.
SELECT-OPTIONS so_anln1 FOR anla-anln1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(14) text_104 FOR FIELD so_anln2.
SELECT-OPTIONS so_anln2 FOR anla-anln2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK groupbox1. "End Group Box 1
SELECTION-SCREEN BEGIN OF BLOCK groupbox2 WITH FRAME TITLE text_201. "Declare Group Box 2
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_202 FOR FIELD p_mwidth.
PARAMETERS p_mwidth TYPE n DEFAULT 135 LENGTH 4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_203 FOR FIELD p_mline .
PARAMETERS p_mline TYPE n DEFAULT 65 LENGTH 4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK groupbox2. "End Group Box 2
SELECTION-SCREEN BEGIN OF BLOCK groupbox3 WITH FRAME TITLE text_301. "Declare Group Box 3 - Print Parameter
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_311.
PARAMETERS: p_pdest LIKE pri_params-pdest DEFAULT 'LOCL'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_312.
PARAMETERS p_paart LIKE pri_params-paart DEFAULT 'X_65_255'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_313.
PARAMETERS p_dialog TYPE c AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 23(25) text_314 FOR FIELD p_dialog.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_321.
PARAMETERS p_prv RADIOBUTTON GROUP rad1 VISIBLE LENGTH 20 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 23(8) text_322 FOR FIELD p_prv.
PARAMETERS p_prt RADIOBUTTON GROUP rad1.
SELECTION-SCREEN COMMENT 34(8) text_323 FOR FIELD p_prt.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK groupbox3. "End Group Box 3
*----------------------------------------------------------------------*
*EVENT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
text_101 = 'Selection Parameter'.
text_102 = 'Location ID'.
text_103 = 'Asset Number'.
text_104 = 'Sub Number'.
text_201 = 'Page Setup'.
text_202 = 'Max. Width'.
text_203 = 'Max. Line per Page'.
text_301 = 'Print Setup'.
text_311 = 'Output Device'.
text_312 = 'Printer Layout'.
text_313 = ' '.
text_314 = 'Show Printer Dialog'.
text_321 = 'Print Option'.
text_322 = 'Preview'.
text_323 = 'Print'.
*----------------------------------------------------------------------*
*INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
*======================================================================*
*MAIN PROGRAM
*Execute after Input Screen
*======================================================================*
START-OF-SELECTION.
FORMAT RESET.
NEW-PAGE LINE-SIZE p_mwidth.
NEW-PAGE LINE-COUNT p_mline.
PERFORM fm_collect_data.
PERFORM fm_process_data.
IF LINES( gi_header ) > 0.
IF p_prt = 'X'.
PERFORM fm_print_setup.
ENDIF.
PERFORM fm_display_data.
ELSE.
PERFORM fm_showmessage.
ENDIF.
END-OF-SELECTION.
*======================================================================*
*SUB PROGRAM / SUB ROUTINE
*======================================================================*
*&--------------------------------------------------------------------*
*& Form fm_collect_data
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fm_collect_data.
* Collect Master Asset
SELECT anln1 anln2 stort
INTO CORRESPONDING FIELDS OF TABLE gi_header
FROM anlz
WHERE
anln1 IN so_anln1 AND
anln2 IN so_anln2 AND
stort IN so_stort.
* "For SAP 4.6C
* DATA : lv_total_data type i.
* DESCRIBE TABLE gi_header LINES lv_total_data.
* IF lv_total_data > 0.
IF LINES( gi_header ) > 0." For SAP 4.7 above
* Collect Asset Decription
SELECT anln1 anln2 txt50 aktiv
INTO CORRESPONDING FIELDS OF TABLE gi_anla
FROM anla
FOR ALL ENTRIES IN gi_header
WHERE
anln1 = gi_header-anln1 AND
anln2 = gi_header-anln2.
* Collect Measurement Text
SELECT stand ktext
INTO CORRESPONDING FIELDS OF TABLE gi_t499s
FROM t499s
FOR ALL ENTRIES IN gi_header
WHERE
stand = gi_header-stort.
ENDIF.
* Notes :
* Avoid using inner join
ENDFORM. "FM_COLLECT_DATA
*&--------------------------------------------------------------------*
*& Form FM_PROCESS_DATA
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fm_process_data.
*Get other requirement information
LOOP AT gi_header.
* Get Asset Description
READ TABLE gi_anla WITH KEY anln1 = gi_header-anln1
anln2 = gi_header-anln2.
IF sy-subrc = 0.
gi_header-txt50 = gi_anla-txt50.
gi_header-aktiv = gi_anla-aktiv.
ENDIF.
* Get Measurement Text
READ TABLE gi_t499s WITH KEY stand = gi_header-stort.
IF sy-subrc = 0.
gi_header-ktext = gi_t499s-ktext.
ENDIF.
MODIFY gi_header.
ENDLOOP.
ENDFORM. "FM_PROCESS_DATA
*&--------------------------------------------------------------------*
*& Form fm_display_data
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fm_display_data.
FORMAT RESET.
DATA: lv_total_data TYPE i,
lv_header_line TYPE i,
lv_footer_line TYPE i,
lv_max_content TYPE i,
lv_max_data TYPE i,
lv_page_count TYPE i. " LENGTH 4.
* Calculate Page Count
lv_total_data = LINES( gi_header ).
* DESCRIBE TABLE gi_header LINES lv_total_data. " For SAP 4.6C
lv_header_line = 3. "Change the value if you add a new header line
lv_footer_line = 3.
lv_max_content = p_mline - lv_header_line - lv_footer_line.
lv_max_data = p_mline - lv_footer_line.
lv_page_count = ( lv_total_data DIV lv_max_content ) + 1.
lv_max_content = lv_max_content + ( lv_header_line - 2 ).
* Display Data to Screen
LOOP AT gi_header.
macro_data_possition : 'CONTENT'
gi_header-anln1
gi_header-anln2
gi_header-txt50
gi_header-stort
gi_header-ktext
gi_header-aktiv.
IF sy-linno = lv_max_data.
PERFORM fm_footer USING lv_page_count.
NEW-PAGE.
ENDIF.
ENDLOOP.
* Create Last Footer
IF ( sy-linno < lv_max_content ) or ( sy-linno > lv_footer_line ).
PERFORM fm_footer USING lv_page_count.
ENDIF.
ENDFORM. "fm_display_data
*&--------------------------------------------------------------------*
*& Form fm_footer
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->FV_PAGE_COUtext
*---------------------------------------------------------------------*
FORM fm_footer USING fv_page_count.
* Create Footer Text ( 3 Lines )
ULINE AT (p_mwidth). " Upper frame border
FORMAT COLOR COL_TOTAL INTENSIFIED. " Footer color
WRITE : /'|' NO-GAP, 'Page : ' NO-GAP, (4) sy-pagno NO-GAP, '/', (4) fv_page_count NO-GAP.
WRITE: AT p_mwidth sy-vline. " Right border
ULINE AT (p_mwidth). " Line below titles
FORMAT COLOR OFF.
ENDFORM. "fm_footer
*&--------------------------------------------------------------------*
*& Form fm_print_setup
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fm_print_setup.
DATA: lv_dialog TYPE c.
IF p_prt = 'X'.
IF p_dialog = 'X'.
lv_dialog = ' '.
ELSE.
lv_dialog = 'X'.
ENDIF.
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
destination = p_pdest
immediately = 'X'
draft = ' '
no_dialog = lv_dialog
release = 'X'
layout = p_paart
IMPORTING
out_parameters = gw_pri_params
valid = gv_valid
EXCEPTIONS
archive_info_not_found = 1
invalid_print_params = 2
invalid_archive_params = 3
OTHERS = 4.
* Dot Matrix Setting
* PRINT-CONTROL CPI 17. "CPI cpiLetters per inch
* PRINT-CONTROL LPI 6. "LPI lpiLines per inch
*__________________________________________________
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CHECK gv_valid = 'X'.
NEW-PAGE PRINT ON PARAMETERS gw_pri_params NO DIALOG.
ENDIF.
ENDFORM. "fm_print_setup
*&--------------------------------------------------------------------*
*& Form fm_showmessage
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fm_showmessage.
MESSAGE 'File not found.' TYPE 'I'.
ENDFORM. "fm_showmessage
*======================================================================*
*STANDARD EVENT
*======================================================================*
*----------------------------------------------------------------------*
*Page Header
*----------------------------------------------------------------------*
TOP-OF-PAGE.
* Create Header Text ( 5 Lines )
ULINE AT (p_mwidth). " Upper frame border
FORMAT COLOR COL_HEADING INTENSIFIED. " Title color
"Line 1
write : /'|' no-gap,(12) ' ' no-gap,
'|' no-gap,(4) ' ' no-gap,
'|' no-gap,(50) ' ' no-gap,
'|' no-gap,(51) 'Location' no-gap centered,
'|' no-gap,(12) ' ' no-gap,
'|' no-gap.
"Line 2
macro_data_possition : 'HEADER' 'Asset Number' 'Sub. No' 'Description' SY-ULINE SY-ULINE 'Cap. Date'.
"Line 1
macro_data_possition : 'HEADER' ' ' ' ' ' ' 'ID' 'Description' ' '.
ULINE AT (p_mwidth). " Line below titles
FORMAT COLOR OFF.