分类:
2009-07-10 17:29:59
*-----------------------------------------------------------------------
REPORT z_interactive_report NO STANDARD PAGE HEADING.
*-----------------------------------------------------------------------
* T Y P E S
*-----------------------------------------------------------------------
*-> TYPES
TYPES:
*-> Types of SO head data
BEGIN OF typ_h_tbl_vbak,
vbeln TYPE vbak-vbeln, "Sales Document
vkorg TYPE vbak-vkorg, "Sales Organization
vtweg TYPE vbak-vtweg, "Distribution Channel
vkgrp TYPE vbak-vkgrp, "Sales Group
kunnr TYPE vbak-kunnr, "Sold-to party
END OF typ_h_tbl_vbak.
*-> Table Type of SO head data
TYPES: typ_tbl_vbak TYPE STANDARD TABLE OF typ_h_tbl_vbak.
*-> Range type
TYPES: typ_rng_vbeln TYPE RANGE OF vbak-vbeln.
*-----------------------------------------------------------------------
* D A T A
*-----------------------------------------------------------------------
*-> Internal Table of SO head data
DATA: tbl_vbak TYPE typ_tbl_vbak,
h_tbl_vbak TYPE typ_h_tbl_vbak.
*-> Global Data
DATA: wk_vbeln TYPE vbak-vbeln, "SO Number
check TYPE c. "Check flag
*-----------------------------------------------------------------------
* C O N S T A N T S
*-----------------------------------------------------------------------
CONSTANTS:
cns_head TYPE sypfkey VALUE 'Y001', "Head list menu
cns_detl TYPE sypfkey VALUE 'Y002', "Detail list menu
cns_on TYPE c VALUE 'X', "Check On
cns_msg_typ_e TYPE c VALUE 'E', "Message type E
cns_selall TYPE sy-ucomm VALUE 'SELALL', "F-Code
cns_relall TYPE sy-ucomm VALUE 'RELALL', "F-Code
cns_run TYPE sy-ucomm VALUE 'RUN'. "F-Code
*-----------------------------------------------------------------------
* P A R A M E T E R S & S E L E C T - O P T I O N S
*-----------------------------------------------------------------------
*-> SO Number
SELECT-OPTIONS s_vbeln FOR wk_vbeln OBLIGATORY.
*-----------------------------------------------------------------------
* S T A R T - O F - S E L E C T I O N
*-----------------------------------------------------------------------
START-OF-SELECTION.
*-> Get data
PERFORM get_data
USING s_vbeln[]
CHANGING tbl_vbak.
*-----------------------------------------------------------------------
* E N D - O F - S E L E C T I O N
*-----------------------------------------------------------------------
END-OF-SELECTION.
*-> Output Report data
PERFORM output_report_data
USING tbl_vbak.
*-----------------------------------------------------------------------
* A T U S E R - C O M M A N D
*-----------------------------------------------------------------------
AT USER-COMMAND.
*-> Print detail information
PERFORM do_detail.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Get SO data
*----------------------------------------------------------------------*
* -->fu_rng_vbeln SO number
* <--fc_tbl_vbak Data of DO
*----------------------------------------------------------------------*
FORM get_data
USING fu_rng_vbeln TYPE typ_rng_vbeln
CHANGING fc_tbl_vbak TYPE typ_tbl_vbak.
*-> Get SO head data
SELECT vbeln
vkorg
vtweg
vkgrp
kunnr
INTO TABLE fc_tbl_vbak
FROM vbak
WHERE vbeln IN fu_rng_vbeln.
IF sy-subrc <> 0.
MESSAGE s000(yabnan) DISPLAY LIKE cns_msg_typ_e.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form output_report_data
*&---------------------------------------------------------------------*
* Report
*----------------------------------------------------------------------*
* -->FU_TBL_VBAK SO data
*----------------------------------------------------------------------*
FORM output_report_data
USING fu_tbl_vbak TYPE typ_tbl_vbak.
*-> Set status
SET PF-STATUS cns_head.
*-> Write title
WRITE:/5(10) text-r01.
ULINE AT /1(20).
*-> Display data
LOOP AT fu_tbl_vbak INTO h_tbl_vbak.
WRITE:/2 check AS CHECKBOX,
5 h_tbl_vbak-vbeln.
HIDE: check,
h_tbl_vbak.
ENDLOOP.
ENDFORM. " output_report_data
*&---------------------------------------------------------------------*
*& Form do_detail
*&---------------------------------------------------------------------*
* DO detail process
*----------------------------------------------------------------------*
FORM do_detail.
*-> Local data
DATA: l_h_tbl_vbak TYPE typ_h_tbl_vbak,
l_tbl_vbak_t TYPE typ_tbl_vbak.
CASE sy-ucomm.
*-> Select all
WHEN cns_selall.
DO .
READ LINE sy-index FIELD VALUE check.
IF sy-subrc = 0.
check = cns_on.
MODIFY LINE sy-index FIELD VALUE check.
ELSE.
EXIT.
ENDIF.
ENDDO.
*-> Reselect all
WHEN cns_relall.
DO .
READ LINE sy-index FIELD VALUE check.
IF sy-subrc = 0.
CLEAR check.
MODIFY LINE sy-index FIELD VALUE check.
ELSE.
EXIT.
ENDIF.
ENDDO.
*-> Get selected data line
WHEN cns_run.
DO .
CLEAR check.
READ LINE sy-index FIELD VALUE check h_tbl_vbak.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF check <> space.
APPEND h_tbl_vbak TO l_tbl_vbak_t.
ENDIF.
ENDDO.
*-> No line selected
IF l_tbl_vbak_t IS INITIAL.
MESSAGE s001(yabnan).
RETURN.
ELSE.
*-> Set status
SET PF-STATUS cns_detl.
*-> Write title
WRITE:/2 sy-vline,
3(6) text-r02,
10 sy-vline,
11(10) text-r03,
22 sy-vline,
23(20) text-r04,
44 sy-vline,
45(11) text-r05,
57 sy-vline,
58 text-r06,
72 sy-vline.
ULINE AT /1(72).
*-> Display data
LOOP AT l_tbl_vbak_t INTO l_h_tbl_vbak.
WRITE:/2 sy-vline,
3 l_h_tbl_vbak-vbeln,
10 sy-vline,
11 l_h_tbl_vbak-vkorg,
22 sy-vline,
23 l_h_tbl_vbak-vtweg,
44 sy-vline,
45 l_h_tbl_vbak-vkgrp,
57 sy-vline,
58 l_h_tbl_vbak-kunnr,
72 sy-vline.
ENDLOOP.
ULINE AT /1(72).
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM. " do_detail
*PF-STATUS请根据程序提示自行设计。