Vous êtes sur la page 1sur 7

REPORT ztest_select.

* Tables ***************************************************************
TABLES: bkpf, bseg,
covp, csks,
glpca,
bsis, bsas, bsid, bsad, bsik, bsak,
ekbe, aufk, vbfa, vbak,
vapma, fmifiit, payr.
* Global Data **********************************************************
TYPES: BEGIN OF doc,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
buzei TYPE bseg-buzei,
END OF doc.
DATA: doc_int TYPE TABLE OF doc,
doc_wa TYPE doc,
w_repid TYPE sy-repid VALUE sy-repid,
no_lines TYPE sy-tabix.
* Selection Screen *****************************************************
PARAMETERS: p_gjahr TYPE covp-refgj OBLIGATORY. S
ELECTION-SCREEN SKIP. PARAMETERS: p_kokrs TYPE csks-kokrs OBLIGATORY,
p_kostl TYPE csks-kostl,
p_prctr TYPE glpca-rprctr,
p_aufnr TYPE aufk-aufnr.
SELECTION-SCREEN SKIP.
PARAMETERS: p_bukrs TYPE bsis-bukrs OBLIGATORY,
p_budat TYPE bkpf-budat,
p_ebeln TYPE ekko-ebeln,
p_hkont TYPE bsis-hkont,
p_lifnr TYPE bsik-lifnr,
p_kunnr TYPE bsid-kunnr.
SELECTION-SCREEN SKIP.
PARAMETERS: p_vbeln TYPE vbak-vbeln.
SELECTION-SCREEN SKIP.
PARAMETERS: p_matnr TYPE vapma-matnr.
SELECTION-SCREEN SKIP.
PARAMETERS: p_fikrs TYPE fmifiit-fikrs,
p_fistl TYPE fmifiit-fistl,
p_fonds TYPE fmifiit-fonds.
SELECTION-SCREEN ULINE.
PARAMETERS: p_hbkid TYPE payr-hbkid,
p_hktid TYPE payr-hktid,
p_rzawe TYPE payr-rzawe,
p_chect TYPE payr-chect.
START-OF-SELECTION.
* Retrieve document numbers based on different requirements
* Posting Date
PERFORM posting_date_actuals USING p_bukrs p_budat.
* Cost Center
PERFORM cost_center_actuals USING p_kokrs p_kostl p_gjahr.
* GL Account
PERFORM gl_actuals USING p_bukrs p_hkont p_gjahr.
* Vendor
PERFORM vendor_actuals USING p_bukrs p_lifnr p_gjahr.
* Customer
PERFORM customer_actuals USING p_bukrs p_kunnr p_gjahr.
* Purchase Order
PERFORM po_actuals USING p_ebeln.
* Sales Order

PERFORM so_actuals USING p_vbeln.


* Order
PERFORM order_actuals USING p_aufnr p_gjahr.
* Fund/Fund Center
PERFORM fm_actuals USING p_fikrs p_gjahr p_fistl p_fonds.
* Profit Center
PERFORM profit_center_actuals USING p_kokrs p_prctr p_gjahr.
* Material PERFORM material_actuals USING p_matnr p_gjahr.
* Cheque number PERFORM cheque_actuals USING p_hbkid p_hktid p_ch
*&---------------------------------------------------------------------*
*& Form posting_date_actuals
*&---------------------------------------------------------------------*
* Use one of the secondary indices of BKPF to retrieve the
* document number
*----------------------------------------------------------------------*
FORM posting_date_actuals USING bukrs budat.
DATA: disp_date(10).
CHECK NOT budat IS INITIAL.
* Uses index BKPF~2 (4.7)
SELECT bukrs belnr gjahr
INTO TABLE doc_int
UP TO 100 ROWS
FROM bkpf
WHERE bukrs = bukrs AND
* Normally, you would probably only want normal documents, that is
* documents with BSTAT = ' '. So you would change the next line.
* On the other hand, you might want documents for all values of BSTAT,
* but not want to hardcode the values. In that case, you can retrieve
* values from the domain of BSTAT and put them in a range table and
* use the range table in the next line.
bstat IN (' ', 'A', 'B', 'D', 'M', 'S', 'V', 'W', 'Z') AND
budat = budat.
CHECK sy-subrc = 0.
WRITE budat TO disp_date.
PERFORM display_documents TABLES doc_int USING 'Posting date' disp_date
ENDFORM. " posting_date_actuals
*&---------------------------------------------------------------------*
*& Form cost_center_actuals
*&---------------------------------------------------------------------*
* Retrieve documents for a cost center
*----------------------------------------------------------------------*
FORM cost_center_actuals USING kokrs kostl gjahr.
DATA: covp_int TYPE TABLE OF covp,
disp_cc(10).
CHECK NOT kostl IS INITIAL.
* Uses primary index (4.7)
SELECT SINGLE objnr FROM csks
INTO csks-objnr
WHERE kokrs = kokrs
AND kostl = kostl.
CHECK sy-subrc = 0.
* COVP is a view. This uses index COEP~1 (4.7)
SELECT refbk refbn refgj refbz
FROM covp
INTO TABLE doc_int
UP TO 100 ROWS
WHERE lednr = '00'
AND objnr = csks-objnr
AND gjahr = gjahr
AND wrttp IN ('04', '11')

AND versn = '000'.


CHECK sy-subrc = 0.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING input = kostl
IMPORTING output = disp_cc.
PERFORM display_documents TABLES doc_int USING 'Cost Center' disp_cc
ENDFORM. " cost_center_actuals
*&---------------------------------------------------------------------*
*& Form gl_actuals
*&---------------------------------------------------------------------*
* BKPF and BSEG have a number of secondary index tables. These are
* tables that are indexed by GL customer or vendor number and have
* data that is in both BKPF and BSEG. These secondary index tables
* that have an 'i' in the third character of the name contain open
* items. Those with an 'a' contain cleared items. In practice, you
* may only one or the other. In this program I am retrieving both.
* * Here we get documents related to a GL.
*----------------------------------------------------------------------*
FORM gl_actuals USING bukrs hkont gjahr.
DATA: disp_gl(10). CHECK NOT hkont IS INITIAL.
* Uses primary index (4.7)
SELECT bukrs belnr gjahr buzei
FROM bsis
INTO TABLE doc_int
UP TO 100 ROWS
WHERE bukrs = bukrs
AND hkont = hkont
AND gjahr = gjahr.
* Uses primary index (4.7)
SELECT bukrs belnr gjahr buzei
FROM bsas
APPENDING TABLE doc_int
UP TO 100 ROWS
WHERE bukrs = bukrs
AND hkont = hkont
AND gjahr = gjahr.
DESCRIBE TABLE doc_int LINES no_lines.
CHECK no_lines > 0.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING input = hkont
IMPORTING output = disp_gl.
PERFORM display_documents TABLES doc_int USING 'GL Account' disp_gl
ENDFORM. " gl_actuals
*&---------------------------------------------------------------------*
*& Form vendor_actuals
*&---------------------------------------------------------------------*
* Here we get documents related to a vendor.
*----------------------------------------------------------------------*
FORM vendor_actuals USING bukrs lifnr gjahr.
DATA: disp_vendor(10).
CHECK NOT lifnr IS INITIAL.
* Uses primary index (4.7)
SELECT bukrs belnr gjahr buzei
FROM bsik
INTO TABLE doc_int
UP TO 100 ROWS
WHERE bukrs = bukrs
AND lifnr = lifnr
AND gjahr = gjahr.
* Uses primary index (4.7)

SELECT bukrs belnr gjahr buzei


FROM bsak
APPENDING TABLE doc_int
UP TO 100 ROWS
WHERE bukrs = bukrs
AND lifnr = lifnr
AND gjahr = gjahr.
DESCRIBE TABLE doc_int LINES no_lines.
CHECK no_lines > 0.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING input = lifnr
IMPORTING output = disp_vendor.
PERFORM display_documents
TABLES doc_int USING 'Vendor' disp_vendor space space.
ENDFORM. " vendor_actuals
*&---------------------------------------------------------------------*
*& Form customer_actuals
*&---------------------------------------------------------------------*
* Here we get documents related to a customer.
*----------------------------------------------------------------------*
FORM customer_actuals USING bukrs kunnr gjahr.
DATA: disp_customer(10). CHECK NOT kunnr IS INITIAL.
* Uses primary index (4.7)
SELECT bukrs belnr gjahr buzei FROM bsid INTO TABLE doc_int
UP TO 100 ROWS
WHERE bukrs = bukrs
AND kunnr = kunnr
AND gjahr = gjahr.
* Uses primary index (4.7)
SELECT bukrs belnr gjahr buzei
FROM bsad
APPENDING TABLE doc_int
UP TO 100 ROWS
WHERE bukrs = bukrs
AND kunnr = kunnr
AND gjahr = gjahr.
DESCRIBE TABLE doc_int LINES no_lines.
CHECK no_lines > 0.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING input = kunnr
IMPORTING output = disp_customer.
PERFORM display_documents TABLES doc_int USING 'Customer' disp_customer
ENDFORM. " customer_actuals
*&---------------------------------------------------------------------*
*& Form po_actuals
*&---------------------------------------------------------------------*
* Table BKPF has a useful index on AWTYP and AWKEY. Here, we use
* this to retrieve documents for purchase orders.
*----------------------------------------------------------------------*
FORM po_actuals USING ebeln.
TYPES: BEGIN OF ekbe_type,
belnr TYPE ekbe-belnr,
gjahr TYPE ekbe-gjahr,
vgabe TYPE ekbe-vgabe,
END OF ekbe_type.
DATA: ekbe_int TYPE TABLE OF ekbe_type,
ekbe_wa TYPE ekbe_type.
DATA: v_reference TYPE bkpf-awtyp, "Reference procedure
v_objectkey TYPE bkpf-awkey. "Object key
DATA:disp_po(10). CHECK NOT ebeln IS INITIAL.

* Uses primary index (4.7)


SELECT belnr gjahr FROM ekbe
INTO TABLE ekbe_int
UP TO 100 ROWS
WHERE ebeln = ebeln AND vgabe IN ('1', '2'). "1 - GR, 2 - IR
CHECK sy-subrc = 0.
SORT ekbe_int.
DELETE ADJACENT DUPLICATES FROM ekbe_int.
LOOP AT ekbe_int INTO ekbe_wa.
v_objectkey+00(10) = ekbe_wa-belnr.
v_objectkey+10(10) = ekbe_wa-gjahr. "BELNR+YEAR
IF ekbe_wa-vgabe = '1'.
v_reference = 'MKPF'.
ELSE.
v_reference = 'RMRP'.
ENDIF.
* Uses index BKPF~4 (4.7)
SELECT SINGLE bukrs belnr gjahr "Accounting Doc Header
FROM bkpf INTO doc_wa
WHERE awtyp = v_reference
AND awkey = v_objectkey.
IF sy-subrc = 0.
APPEND doc_wa TO doc_int.
ENDIF.
ENDLOOP.
CHECK no_lines > 0.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING input = ebeln
IMPORTING output = disp_po.
PERFORM display_documents
TABLES doc_int USING 'Purchase Order' disp_po space space
ENDFORM. " po_actuals
*&---------------------------------------------------------------------*
*& Form so_actuals
*&---------------------------------------------------------------------*
* Use AWTYP and AWKEY to retrieve documents related to sales
*----------------------------------------------------------------------*
FORM so_actuals USING vbeln.
TYPES: BEGIN OF vbfa_type,
vbeln TYPE vbfa-vbeln,
END OF vbfa_type.
DATA: vbfa_int TYPE TABLE OF vbfa_type,
vbfa_wa TYPE vbfa_type.
DATA: v_reference TYPE bkpf-awtyp, "Reference procedure
v_objectkey TYPE bkpf-awkey. "Object key
DATA:disp_so(10).
CHECK NOT vbeln IS INITIAL.
* Uses primary index (4.7)
SELECT vbeln FROM vbfa
INTO TABLE vbfa_int UP TO 100 ROWS
WHERE vbelv = vbeln AND vbtyp_n = 'P'. "Debit memo
CHECK sy-subrc = 0. SORT vbfa_int. DELETE ADJACENT DUPLICATES FROM vbfa_int. LOOP A
a_int INTO vbfa_wa. v_objectkey+00(10) = vbfa_wa-vbeln. "BELNR v_referenc
4.7) SELECT SINGLE bukrs belnr gjahr "Accounting Doc Header FROM bk
ctkey. IF sy-subrc = 0. APPEND doc_wa TO doc_int. ENDIF. ENDLOOP. DESCRI
ines. CHECK no_lines > 0. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING
TING output = disp_so. PERFORM display_documents TABLES doc_int USING 'Sal
-----------------------------------------------------* *& Form order_actuals *&-------------------------------------------------------------------* * Retrieve documents
elated to an order *------------------------------------------------------------

----------* FORM order_actuals USING aufnr gjahr. DATA: disp_order(10).


ses primary index (4.7) SELECT SINGLE objnr FROM aufk INTO aufk-objnr WHERE a
sy-subrc = 0. * COVP is a view. This uses index COEP~1 (4.7) SELECT refbk refbn ref
gj refbz FROM covp INTO TABLE doc_int UP TO 100 ROWS WHERE lednr = '00'
jahr AND wrttp IN ('04', '11') AND versn = '000'. CHECK sy-subrc = 0. CAL
IT_ALPHA_OUTPUT' EXPORTING input = aufnr IMPORTING output = disp_order
_int USING 'Order' disp_order space space. ENDFORM.
----* *& Form FM_actuals *&-------------------------------------------------------------------* * Not many institutions use Funds Management, but if you do, this *
late funds management documents to FI documents. *---------------------------------------------------------------------* FORM fm_actuals USING fikrs gjahr
T fikrs IS INITIAL AND NOT fistl IS INITIAL. * Uses index FMIFIIT~3 (4.7) SELECT
lnr kngjahr knbuzei FROM fmifiit INTO TABLE doc_int UP TO 100 ROWS WH
= 0. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = fistl
NOT fonds IS INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING
p_fund. ENDIF. PERFORM display_documents TABLES doc_int USING 'Fund Center'
----------------------------------------------------* *& Form profit_center_actuals *
---------------------------------------------------------------------* * Retrieve doc
ments related to a profit center *---------------------------------------------------------------------* FORM profit_center_actuals USING kokrs prctr
IS INITIAL. * This uses index GLPCA~1 (4.7) SELECT rbukrs refdocnr refryear refdocl
n FROM glpca INTO TABLE doc_int UP TO 100 ROWS WHERE kokrs = kokrs A
BKPF'. CHECK sy-subrc = 0. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING
TING output = disp_pc. PERFORM display_documents TABLES doc_int USING 'Pro
---------------------------------------------------------------* *& Form material_act
als *&---------------------------------------------------------------------* * Get FI
documents for a material. * For purchase orders get: * goods receipts *
get: * debit memos *----------------------------------------------------------------* FORM material_actuals USING matnr gjahr. TYPES: BEGIN OF ekpo_type,
pe. TYPES: BEGIN OF ekbe_type, belnr TYPE ekbe-belnr, gjahr TYPE e
OF vapma_type, vbeln TYPE vapma-vbeln, posnr TYPE vapma-posnr,
beln, posnv TYPE vbfa-posnv, END OF vbfa_type. DATA: ekpo_int TYPE
TYPE TABLE OF ekbe_type, ekbe_wa TYPE ekbe_type. DATA: vapma_int TYPE
v_reference TYPE bkpf-awtyp, "Reference procedure v_objectkey TYPE
OF vbfa_type, vbfa_wa TYPE vbfa_type. DATA: disp_mat(10). CHECK NO
hase orders for the material * This uses index EKPO~1 (4.7) SELECT ebeln ebelp FROM e
po INTO TABLE ekpo_int UP TO 100 ROWS WHERE matnr = matnr. * Now get the FI do
as above * Uses primary index (4.7) SELECT belnr gjahr vgabe FROM ekbe INTO TABLE
TO 100 ROWS FOR ALL ENTRIES IN ekpo_int WHERE ebeln = ekpo_int-ebeln AND ebel
p AND vgabe IN ('1', '2'). "1 - GR, 2 - IR CHECK sy-subrc = 0
int. LOOP AT ekbe_int INTO ekbe_wa. v_objectkey+00(10) = ekbe_wa-belnr. v_object
= ekbe_wa-gjahr. "BELNR+YEAR IF ekbe_wa-vgabe = '1'. v_reference = 'MK
index BKPF~4 (4.7) SELECT SINGLE bukrs belnr gjahr "Accounting Doc Heade
rence AND awkey = v_objectkey. IF sy-subrc = 0. APPEND doc_wa TO doc_int
ales orders for the material * Note - I am using an artificial date range here be
cause of archiving * in our system. Feel free to remove it. SELECT vbeln posnr FROM v
pma INTO TABLE vapma_int UP TO 100 ROWS WHERE matnr = matnr AND audat BET
1231'. * Uses primary index (4.7) SELECT vbeln posnv FROM vbfa INTO TABLE vbfa_i
IES IN vapma_int WHERE vbelv = vapma_int-vbeln AND posnv = vapma_int-posnr
vbfa_int. DELETE ADJACENT DUPLICATES FROM vbfa_int. LOOP AT vbfa_int INTO vbfa_wa.
v_objectkey, v_reference. v_objectkey+00(10) = vbfa_wa-vbeln. "BE
ECT SINGLE bukrs belnr gjahr "Accounting Doc Header FROM bkpf INT
y. IF sy-subrc = 0. APPEND doc_wa TO doc_int. ENDIF. ENDLOOP. DESCRIBE T
. CHECK no_lines > 0. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING
t = disp_mat. PERFORM display_documents TABLES doc_int USING 'Material'
---------------------------------------------------* *& Form cheque_actuals *&-------------------------------------------------------------------* * Retrieve FI document
for a cheque. We are assuming Accounts * Payable related. *--------------------------------------------------------------------* FORM cheque_actuals USING hbkid
ayr-vblnr, gjahr TYPE payr-gjahr, lifnr TYPE payr-lifnr, laufd TYPE

IS INITIAL. * Retrieve the cheque data using the primary key (4.7) * We are assum
ing a vendor payment here SELECT SINGLE vblnr gjahr lifnr laufd FROM payr INTO (
r, lifnr, laufd ) WHERE zbukr = p_bukrs AND hbkid = p_hbkid AND hktid
t. * Now get the accounting documents SELECT bukrs belnr gjahr FROM bsak INTO T
s = p_bukrs AND lifnr = lifnr AND umsks = ' ' AND um
_lines > 0. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = ch
_cheque. PERFORM display_documents TABLES doc_int USING 'Cheque number'
----------------------------------------------------* *& Form display_documents *&-------------------------------------------------------------------* * At this point, y
u have the company code, document number and * fiscal year in table DOC_INT. Here, I
ust use a standard SAP * function module and transaction to display documents and *
but you could use the same information to retrieve * document data from BKPF and/or
SEG. *----------------------------------------------------------------------* FO
RM display_documents TABLES doc_int STRUCTURE doc_wa USING doc_source_1
S: slis. DATA: sel TYPE slis_selfield. DATA: title TYPE string. CONCATENATE
doc_source_1 source_value_1 INTO title SEPARATED BY space. IF NOT source
ATE title doc_source_2 source_value_2 INTO title SEPARATED BY space. ENDI
POPUP_TO_SELECT' EXPORTING i_title = title i_selection
d IMPORTING es_selfield = sel TABLES t_outtab
UK' FIELD doc_int-bukrs. SET PARAMETER ID 'BLN' FIELD doc_int-belnr. SET PARAMETER
JR' FIELD doc_int-gjahr. CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN. ENDIF. ENDFO
s

Vous aimerez peut-être aussi