Sie sind auf Seite 1von 10

step 1 : In selection screen S_BNAME is internal table based on S_BNAME .

SELECT

user_id
wi_id
INTO TABLE lt_wi_ids1
FROM swwuserwi
WHERE user_id = s_bname
AND no_sel NE 'X'
AND no_execute NE 'X'

Now data in internal table

lt_wi_ids1. Fields are

user_id

step 2:
SELECT wi_id
wi_rh_task
FROM swwwihead
INTO TABLE lt_wi_ids
FOR ALL ENTRIES IN lt_wi_ids1
WHERE wi_id = lt_wi_ids1-wi_id
AND ( wi_stat = c_ready
OR wi_stat
= c_started
OR wi_stat
= c_selected
OR wi_stat
= c_committed ).
step 3:

* Get the object keys for the work items in users inbox
SELECT wi_id
element
objkey
FROM sww_contob
INTO TABLE lt_objkey
FOR ALL ENTRIES IN lt_wi_ids
WHERE wi_id = lt_wi_ids-wi_id
AND ( element = c_invoice
OR element = c__wi_object_id
OR element = c__adhoc_objects
OR element = c_fippid ).

Now data lt_objkey internal table


from data base table : sww_contob

wi_id

step 4:
in step 2 data in internal
like this.

table lt_wi_ids based that one capture the below

Select wi_id wi_chckwi


from swwwihead
into TABLE it_lv_wi_id
FOR ALL ENTRIES IN LT_WI_IDS
where wi_id = lt_wi_ids-wi_id.
step 5:
Now data in it_lv_wi_id

internal table

Select wi_id wi_chckwi


from SWWWIHEAD
INTO TABLE IT_LV_WI_ID1
FOR ALL ENTRIES IN IT_LV_WI_ID
WHERE wi_id = it_lv_wi_id-wi_id
AND WI_RH_tASK = C_WS90200049.

now data in IT_LV_WI_ID1

internal table.

step 6:
LOOP AT lt_wi_ids INTO ls_wi_ids1
WHERE wi_task IN lr_task_sel.

READ TABLE it_lv_wi_id into wa_lv_wi_id with key wi_id = ls_wi_ids1-wi_id BINARY
SEARCH.
IF SY-SUBRC Eq 0.
READ TABLE IT_LV_WI_ID1 INTO WA_LV_WI_ID1 WITH KEY wi_id = ls_wi_ids1-wi_id BINA
RY SEARCH.
Endif.
IF sy-subrc = 0.
WA_LV_WI_ID-wi_chckwi = WA_LV_WI_ID1-wi_chckwi.
ENDIF.
CALL FUNCTION 'SAP_WAPI_READ_CONTAINER'
EXPORTING
workitem_id = WA_lv_wi_id-wi_chckwi
TABLES
simple_container = lt_container.

IF sy-subrc = 0.
IF ls_wi_ids1-wi_task = c_ts90200307.
READ TABLE lt_container INTO lw_container
WITH KEY element = c_fippid.
IF sy-subrc IS INITIAL.
lt_objkey1-objkey = lw_container-value+20(18).
ENDIF.
ELSE.
READ TABLE lt_container INTO lw_container
WITH KEY element = c_invoice.
IF sy-subrc IS INITIAL.
lt_objkey1-objkey = lw_container-value+20(14).
ENDIF.
ENDIF.
lt_objkey1-wi_id = ls_wi_ids1-wi_id.
lt_objkey1-element = c_invoice.
APPEND lt_objkey1.
REFRESH: lt_container.
ENDIF.
ENDLOOP.
APPEND LINES OF lt_objkey1 TO lt_objkey.
* Collect data for FI invoices, if "Include FI invoices" is selected.
IF s_fiinv = 'X'.
* Collect the invoice number,companycode and fiscal year details comparing with
the fiscal year and companycode input data provided.
LOOP AT lt_objkey INTO ls_objkey
WHERE objkey+0(4) IN s_bukrs
AND objkey+14(4) IN s_gjahr.
IF numofchar( ls_objkey-objkey ) = 18. "FI invoice
ls_fiinv-belnr
ls_fiinv-gjahr
ls_fiinv-bukrs
ls_fiinv-wi_id

=
=
=
=

ls_objkey-objkey+4(10).
ls_objkey-objkey+14(4).
ls_objkey-objkey+0(4).
ls_objkey-wi_id.

APPEND ls_fiinv TO lt_fiinv.


ENDIF.

ENDLOOP.
in step 2 fill the internal table lt_wi_ids based on that internal table
process some logic
fill the internal table lt_fiinv .

lt_fiinv

internal table contain fields BELNR GHAHR BUKRS

WI_ID.

STEP 7:
SELECT AUSBK BELNR GJAHR BUKRS BUZEI BSCHL SHKZG DMBTR WRBTR SGTXT LIFNR ZFBDT S
WAER BLART XBLNR XPRFG
FROM v_vbsegk
INTO TABLE lt_vbsegk
FOR ALL ENTRIES IN lt_fiinv
WHERE belnr = lt_fiinv-belnr
AND
gjahr = lt_fiinv-gjahr
AND
bukrs = lt_fiinv-bukrs.

Note: V_VBSEGK

is view combination of data base table VBKPF + VBSEGK

Now data in lt_vbsegk

internal table .

in step no 6 fill the lt_fiinv

internal table.

STEP 8:
SELECT BELNR GJAHR BUKRS BUZEI DMBTR ZFBDT BLART CPUDT XBLNR XPRFG
FROM v_vbsegs
INTO TABLE lt_vbsegs
FOR ALL ENTRIES IN lt_fiinv

WHERE belnr = lt_fiinv-belnr


AND gjahr = lt_fiinv-gjahr
AND bukrs = lt_fiinv-bukrs
AND buzei EQ '001'
AND ( blart NE 'KR'
OR blart NE 'KG'
OR blart NE 'Y1'
OR blart NE 'Y2' ).
data capture based on the document type KR KG Y1 Y2.
now data in lt_vbsegs internal table .
STEP 9:
SELECT bukrs gjahr xblnr awkey
FROM bkpf
INTO TABLE lt_awkey
FOR ALL ENTRIES IN lt_vbsegs
WHERE bukrs EQ lt_vbsegs-bukrs
AND
xblnr EQ lt_vbsegs-xblnr
AND
gjahr EQ lt_vbsegs-gjahr.
Now data in internal table lt_awkey.

step 10. LOOP AT lt_vbsegs INTO lw_vbsegs.


lw_vbsegs_1-bukrs = lw_vbsegs-bukrs.
lw_vbsegs_1-xblnr = lw_vbsegs-xblnr.
APPEND lw_vbsegs_1 TO lt_vbsegs_1.
CLEAR: lw_vbsegs_1, lw_vbsegs.
ENDLOOP.
above code execution data processed ( move )
table.
step 11:
SELECT bukrs belnr gjahr lifnr zfbdt
FROM bseg
INTO TABLE lt_bseg
FOR ALL ENTRIES IN lt_vbsegs_1
WHERE bukrs EQ lt_vbsegs_1-bukrs
AND
belnr EQ lt_vbsegs_1-xblnr.

to lt_vbsegs_1

internal

now data in it_bseg internal table.

LOOP AT lt_vbsegs INTO lw_vbsegs.


MOVE-CORRESPONDING lw_vbsegs TO lw_vbsegk.
READ TABLE lt_awkey
INTO lv_awkey_1
WITH KEY bukrs = lw_vbsegs-bukrs
xblnr = lw_vbsegs-xblnr
gjahr = lw_vbsegs-gjahr.
lv_awkey = lv_awkey_1-awkey.
IF sy-subrc IS INITIAL.
lv_gjahr = lv_awkey+14(4).
READ TABLE lt_bseg
INTO lv_bseg
WITH KEY belnr = lw_vbsegs-xblnr
gjahr = lv_gjahr
bukrs = lw_vbsegs-bukrs.
lw_vbsegk-lifnr = lv_bseg-lifnr.
lw_vbsegk-zfbdt = lv_bseg-zfbdt.
ELSE.
READ TABLE lt_bseg
INTO lv_bseg
WITH KEY bukrs = lw_vbsegs-bukrs
belnr = lw_vbsegs-xblnr
gjahr = lw_vbsegs-gjahr.
lw_vbsegk-lifnr = lv_bseg-lifnr.
lw_vbsegk-zfbdt = lv_bseg-zfbdt.
ENDIF.
IF sy-subrc = 0.
APPEND lw_vbsegk TO lt_vbsegk.
ELSE.
lw_vbsegs-gjahr = lw_vbsegs-gjahr - 1.
READ TABLE lt_bseg

INTO lv_bseg
WITH KEY bukrs = lw_vbsegs-bukrs
belnr = lw_vbsegs-xblnr
gjahr = lw_vbsegs-gjahr.
lw_vbsegk-lifnr = lv_bseg-lifnr.
lw_vbsegk-zfbdt = lv_bseg-zfbdt.
ENDIF.
APPEND lw_vbsegk TO lt_vbsegk.
ENDLOOP.

in step 8 data in internal table

lt_vbsegs

based on that data

fill the

internal table lt_vbsegk.it contain fields like below .


BELNR GJAHR
BUKRS BUZEI
XBLNR
XPRFG .
step 11 : get item

DMBTR

ZFBDT

BLART

CPUDT

task text

in step no 6 fill the lt_fiinv internal table

SELECT

wi_id
FROM
INTO
FOR
WHERE

wi_rhtext
swwwihead
TABLE lt_witext
ALL ENTRIES IN lt_fiinv
wi_id = lt_fiinv-wi_id

above statement execution capture the


step 12. Get the
SELECT
FROM
INTO
FOR
WHERE

short text

wi_rhtext

vendor name
name1 lifnr
lfa1
TABLE lt_vendor
ALL ENTRIES IN lt_vbsegk
lifnr = lt_vbsegk-lifnr.

in step no data in lt_vbsegk based on that data capture vendor information .

step 13:

LOOP AT lt_vbsegk INTO lw_vbsegk.


MOVE-CORRESPONDING lw_vbsegk TO wa_lista.
*

Pass user details to output table


MOVE: lv_bname
TO wa_lista-bname,
lv_name_textc TO wa_lista-name_textc.

Pass work item id and text to output table


READ TABLE lt_fiinv INTO ls_fiinv
WITH KEY bukrs = lw_vbsegk-bukrs
belnr = lw_vbsegk-belnr
gjahr = lw_vbsegk-gjahr
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_witext INTO ls_witext
WITH KEY wi_id = ls_fiinv-wi_id
BINARY SEARCH.
IF sy-subrc = 0.
MOVE: ls_witext-wi_id
TO wa_lista-wi_id,
ls_witext-wi_text TO wa_lista-wi_rhtext.
ENDIF.
ENDIF.

Pass vendor name to output table


READ TABLE lt_vendor INTO ls_vendor
WITH KEY lifnr = lw_vbsegk-lifnr
BINARY SEARCH.
IF sy-subrc = 0.
MOVE ls_vendor-name1 TO wa_lista-name1.
ENDIF.

*Pass payment due date of the invoice to the list


MOVE lw_vbsegk-zfbdt TO wa_lista-zzfbdt.
* calculate payment due date
* Logic added to calculate the due payment date for FI invoices.
PERFORM paym_due_date USING wa_lista-zzfbdt

wa_lista-zbd1t
wa_lista-zbd2t
wa_lista-zbd3t
lv_fbdt.
wa_lista-zzfbdt = lv_fbdt.
APPEND wa_lista TO it_lista.
CLEAR wa_lista.
ENDLOOP.

note : above code execution prepare the final out .

step 14:

Collect data for MM invoices and relevant short text filed.

IF s_mminv = 'X'.
* Collect the invoice number and companycode details comparing with the fiscal y
ear input data provided.
LOOP AT lt_objkey INTO ls_objkey
WHERE objkey+10(4) IN lt_gjahr.
IF numofchar( ls_objkey-objkey ) = 14. "MM invoice
ls_mminv-belnr = ls_objkey-objkey+0(10).
ls_mminv-gjahr = ls_objkey-objkey+10(4).
ls_mminv-wi_id = ls_objkey-wi_id.
APPEND ls_mminv TO lt_mminv.

In selection screen s_mminv

filed . it is selected

in step no 6 data in lt_objkey


fill the lt_mminv internal table.

in internal table. based on the data

SELECT BELNR GJAHR BLART BLDAT BUDAT USNAM TCODE CPUDT CPUTM VGART XBLNR BUKRS L
IFNR WAERS KURSF RMWWR BEZNK MWSKZ1 ZTERM ZBD1T XRECH SAPRL LOGSYS IVTYP
RBSTAT ZFBDT NAME1
FROM rbkp
INTO TABLE lt_rbkp
FOR ALL ENTRIES IN lt_mminv
WHERE belnr = lt_mminv-belnr
AND gjahr = lt_mminv-gjahr.

Get work item text


SELECT wi_id wi_rhtext
FROM swwwihead
INTO TABLE lt_mmwitext
FOR ALL ENTRIES IN lt_mminv
WHERE wi_id = lt_mminv-wi_id.

above code get the short task text based on mm invoice.

Das könnte Ihnen auch gefallen