Skip to Content
0
Former Member
Jun 03, 2008 at 01:17 PM

GDE - function module.. code .. problem

316 Views

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