hi all,
I am extracting data using FM
from PAYR and REGUH.
I need:
Payr
doc1 ven01.........filds.a b c.
doc2 ven02.........filds..
doc3 ven02.........filds..
doc4 ven03.........filds..
My Fm is working fine.
I need from REGUH:
doc1 ven01.........filds p q r..
doc2 ven02.........filds..
doc3 ven02.........filds..
doc4 ven03.........filds..
doc5 ven05.........filds..
doc6 ven06.........filds..
doc5 and Doc6 not there in Payr table. finally i need 6 records with a, b,c, p, q, r
I wrote code:
========
error : It returns dump..
saying : INDEX problem..?
Modify e_t_data index sy-tabix.
-
FUNCTION z_biw_payr_get_data .
*"----
""Local interface:
*" IMPORTING
*" VALUE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR
*" VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL
*" VALUE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL
*" VALUE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL
*" VALUE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL
*" REFERENCE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT
*" SBIWA_C_FLAG_OFF
*" TABLES
*" I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*" E_T_DATA STRUCTURE ZBIW_AP_PAYR OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
*"----
Example: DataSource for table SFLIGHT
TABLES: payr.
Auxiliary Selection criteria structure
DATA: l_s_select TYPE srsc_s_select.
Maximum number of lines for DB table
STATICS: s_s_if TYPE srsc_s_if_simple,
counter
s_counter_datapakid LIKE sy-tabix,
cursor
s_cursor TYPE cursor.
*internal tables:
I_payr like payr occurs 0 with header line.
I_reguh like reguh occurs 0 with header line.
Select ranges
RANGES: l_r_gjahr FOR zap_payr-gjahr,
l_r_vblnr FOR zap_payr-vblnr,
l_r_zbukr FOR zap_payr-zbukr.
Initialization mode (first call by SAPI) or data transfer mode
(following calls) ?
IF i_initflag = sbiwa_c_flag_on.
************************************************************************
Initialization: check input parameters
buffer input parameters
prepare data selection
************************************************************************
please Check DataSource validity
CASE i_dsource.
WHEN 'ZAP_PAYR'.
WHEN OTHERS.
IF 1 = 2. MESSAGE e009(r3). ENDIF.
this is a typical log call. Please write every error message like this
log_write 'E' "message type
'R3' "message class
'009' "message number
i_dsource "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDCASE.
APPEND LINES OF i_t_select TO s_s_if-t_select.
Fill parameter buffer for data extraction calls
s_s_if-requnr = i_requnr.
s_s_if-dsource = i_dsource.
s_s_if-maxsize = i_maxsize.
Fill field list table for an optimized select statement
(in case that there is no 1:1 relation between InfoSource fields
and database table fields this may be far from beeing trivial)
APPEND LINES OF i_t_fields TO s_s_if-t_fields.
ELSE. "Initialization mode or data extraction ?
************************************************************************
Data transfer: First Call OPEN CURSOR + FETCH
Following Calls FETCH only
************************************************************************
First data package -> OPEN CURSOR
IF s_counter_datapakid = 0.
Fill range tables BW will only pass down simple selection criteria
of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'GJAHR'.
MOVE-CORRESPONDING l_s_select TO l_r_gjahr.
APPEND l_r_gjahr.
ENDLOOP.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'VBLNR'.
MOVE-CORRESPONDING l_s_select TO l_r_vblnr.
APPEND l_r_vblnr.
ENDLOOP.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZBUKR'.
MOVE-CORRESPONDING l_s_select TO l_r_zbukr.
APPEND l_r_zbukr.
ENDLOOP.
Determine number of database records to be read per FETCH statement
from input parameter I_MAXSIZE. If there is a one to one relation
between DataSource table lines and database entries, this is trivial.
In other cases, it may be impossible and some estimated value has to
be determined.
Extracts from Tableu2026..1
OPEN CURSOR WITH HOLD s_cursor FOR
SELECT mandt zbukr hbkid hktid rzawe chect checf laufd laufi lifnr
kunnr empfg ubhkt vblnr gjahr zaldt waers rwbtr strgb pridt
priti prius xmanu xbanc bancd extrd extrt xbukr zanre znme1
znme2 znme3 znme4 zpstl zort1 zstra zpfac zland zregi zbnks
zbnkn zbnkl zbkon voidr voidd voidu checv hbkiv hktiv zpst2
xragl pernr seqnr btznr rec_belnr rec_gjahr zpfor uzawe ichec
irefe rwskt
FROM payr
WHERE zbukr IN l_r_zbukr
AND vblnr IN l_r_vblnr
AND gjahr IN l_r_gjahr.
AND rzawe EQ 'C'.
ENDIF. "First data package ?
Fetch records into interface table.
named E_T_'Name of extract structure'.
FETCH NEXT CURSOR s_cursor
APPENDING CORRESPONDING FIELDS
OF TABLE e_t_data
PACKAGE SIZE s_s_if-maxsize.
IF sy-subrc <> 0.
CLOSE CURSOR s_cursor.
RAISE no_more_data.
ENDIF.
**get all u2018Du2019 and 2 series VBLNR records from REGUH
_** --- CHECK the codes for WITH CASE 1 OR CASE 2._
Case 1 :
*Select * from reguh*
Into corresponding fields of table i_reguh
For all entries in e_t_data
Where lifnr = e_t_data-lifnr
And rzawe = u2018Du2019
and Vblnr like u20182%u2019.
Or u2026u2026 Or u2026u2026 Or u2026u2026
Case2 :
*Select * from reguh*
Into corresponding fields of table i_reguh
Where rzawe = u2018Du2019
and Vblnr like u20182%u2019.
Loop at e_t_data.
Read table i_reguh with key lifnr = e_t_data-lifnr
If sy-subrc = 0.
E_t_data-laufi like reguh- laufi.
E_t_data-Zbukr like reguh-zbukr.
E_t_data-lifnr like reguh- lifnr .
E_t_data-empfg like reguh- empfg.
E_t_data-vblnr like reguh-vblnr
E_t_data-waers like reguh-waers
E_t_data-srtgb like reguh-srtgb.
E_t_data-znme1 like reguh- znme1.
E_t_data-znme2 like reguh- znme2.
E_t_data-znme3 like reguh- znme3.
E_t_data-znme4 like reguh- znme4.
E_t_data-zpstl like reguh-zpstl.
E_t_data-zort1 like reguh-zortl.
E_t_data-zstra like reguh-zstra.
E_t_data-zpfac like reguh-zpfac.
E_t_data-zland like reguh-zland.
E_t_data-zregi like reguh-zregi.
E_t_data-zbnkl like reguh-zbnkl.
E_t_data-rzawe like reguh-rzawe.
E_t_data-hktid like reguh-hktid.
E_t_data-hbkid like reguh-hbkid.
E_t_data-zpst2 like reguh-zpst2.
E_t_data-uzawe like reguh-uzawe.
E_t_data-pernr like reguh-pernr.
E_t_data-btznr like reguh-btanr.
E_t_data-laufd like reguh-laufd.
E_t_data-zaldt like reguh-zaldt.
E_t_data-rwbtr like reguh-rwbtr.
E_t_data-rwskt like reguh-rwskt.
Modify e_t_data index sy-tabix.
Else.
E_t_data-laufi like reguh- laufi.
E_t_data-Zbukr like reguh-zbukr.
E_t_data-lifnr like reguh- lifnr .
E_t_data-empfg like reguh- empfg.
E_t_data-vblnr like reguh-vblnr
E_t_data-waers like reguh-waers
E_t_data-srtgb like reguh-srtgb.
E_t_data-znme1 like reguh- znme1.
E_t_data-znme2 like reguh- znme2.
E_t_data-znme3 like reguh- znme3.
E_t_data-znme4 like reguh- znme4.
E_t_data-zpstl like reguh-zpstl.
E_t_data-zort1 like reguh-zortl.
E_t_data-zstra like reguh-zstra.
E_t_data-zpfac like reguh-zpfac.
E_t_data-zland like reguh-zland.
E_t_data-zregi like reguh-zregi.
E_t_data-zbnkl like reguh-zbnkl.
E_t_data-rzawe like reguh-rzawe.
E_t_data-hktid like reguh-hktid.
E_t_data-hbkid like reguh-hbkid.
E_t_data-zpst2 like reguh-zpst2.
E_t_data-uzawe like reguh-uzawe.
E_t_data-pernr like reguh-pernr.
E_t_data-btznr like reguh-btanr.
E_t_data-laufd like reguh-laufd.
E_t_data-zaldt like reguh-zaldt.
E_t_data-rwbtr like reguh-rwbtr.
E_t_data-rwskt like reguh-rwskt.
Modify e_t_data index sy-tabix.
Endif.
Endloop.
Logic for eliminating voided Checks Begin
itab[] = e_t_data[].
SORT itab BY chect.
LOOP AT itab WHERE ( voidu NE space ) AND ( voidd NE space ).
wa_idx = sy-tabix.
wa_chect = itab-chect. CLEAR wa_found.
wa_zbukr = itab-zbukr.
wa_hbkid = itab-hbkid.
wa_hktid = itab-hktid.
wa_rzawe = itab-rzawe.
DO.
SELECT SINGLE * FROM payr WHERE
zbukr = wa_zbukr AND
hbkid = wa_hbkid AND
hktid = wa_hktid AND
rzawe = wa_rzawe AND
chect = wa_chect.
IF sy-subrc NE 0.
Not transferring this record to BW
message 'Invalid Check No.' type 'I'.
DELETE itab.
wa_found = 'Y'. EXIT.
ENDIF.
IF ( payr-voidu NE space ) AND ( payr-voidd NE space ).
wa_chect = payr-checv.
wa_zbukr = payr-zbukr.
wa_hbkid = payr-hbkid.
wa_hktid = payr-hktid.
wa_rzawe = payr-rzawe.
If the Replacement Check # points to Original Check No., this record
will be skipped.
IF itab-chect = payr-checv.
DELETE itab INDEX wa_idx.
EXIT.
ENDIF.
ELSE.
MOVE-CORRESPONDING payr TO itab.
APPEND itab. wa_found = 'Y'.
MOVE-CORRESPONDING itab TO itab1.
APPEND itab1.
EXIT.
ENDIF.
IF wa_found = 'Y'.
EXIT.
ENDIF.
ENDDO.
ENDLOOP.
SORT itab by zbukr hbkid hktid rzawe chect.
DELETE ADJACENT DUPLICATES FROM itab COMPARING zbukr hbkid hktid
rzawe chect.
LOOP AT itab1.
READ TABLE itab WITH KEY
zbukr = itab1-zbukr
hbkid = itab1-hbkid
hktid = itab1-hktid
rzawe = itab1-rzawe
chect = itab1-chect BINARY SEARCH.
IF ( itab-voidu IS NOT INITIAL ).
DELETE TABLE itab FROM itab1.
ENDIF.
ENDLOOP.
04/13/08 commented to satisfy 4th condition
*
Do not extract the Original record of the replaced Check
LOOP AT itab.
IF ( itab-voidu IS NOT INITIAL ) AND
( itab-voidd IS NOT INITIAL ).
DELETE itab.
ENDIF.
*
ENDLOOP.
04/13/08 commented to satisfy 4th condition
Logic for eliminating voided Checks End
***The below process can be used for Delta Extraction using Time Stamp
loop at itab.
concatenate itab-pridt itab-priti into wa_timstmp.
move wa_timstmp to itab-timstmp.
move-corresponding itab to e_t_data.
append e_t_data.
endloop.
e_t_data[] = itab[].
s_counter_datapakid = s_counter_datapakid + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.
=========
Please advise me and where will i correct the code.
Thanks in advance,
Siri.
Edited by: SIRI SIRI on Jun 3, 2008 3:26 PM