Error_passed_to_mess_handler
Hi all,
I meet a problem in extracting the master data from a CRM system. The following message appears for each of them : "error_passed_to_mess_handler". Nothing is connected with IS-U.
Thanks for your help.
Geo
Hai Geoffroy,
From the limited information you gave, it seems some of the following could be reasons for your hanging. First of all check in RSA3 if you are getting any data for the extraction. Then check the following.
1. Check the RFC connections
2. It may so happen that the extraction was run more than once the same time and the system hangs up making a lock to prevent errors. You have to run a program for this. See note:0486120
3. See also notes:0486120, 874155
Hope this helps.
Similar Messages
-
What is the best way, while creating Function Module based extractor
Hi Friends,
I am Sreekanth.
I have created a Functio Module based Extractor,
To fetch data from COPA tables.
In this extracton 3 tables are getting involved.
1) CE3OP01 2) CE4OP01 and 3) CE1OP01.
Logic required is as follow:
1) get data from CE3OP01 and for all entries of this data set,
get data from CE4OP01 and CE1OP01 and finally send the data set to BW after few manupulations.
I have implemented the whole logic and its working fine in DEVELOPMENT box where data volume is less.
But the same code is timing out in Quality Box, due to huge volues of data.
Below I am copying the code that i am using . Any body can suggest me how to proceed further so that my code works with huge volumes of data.
Now I am getting the time out error while selection data from CE3IOP01 table itself.
FUNCTION /ds1/c_bw_zds_copa_recon.
""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
*" 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 /DS1/FI_COPA_RECN OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
PROGRAM INFORMATION *
RIEF ID.......: N/A *
PROGRAM.......: /DS1/C_BW_ZDS_COPA_RECON
PROGRAM FUNCTION: This Function Module Extracts Cost Center, Company *
Code, and all Amount fields form CE3OP01 table and sectaktbo "
* Current profitability segment (CO-PA) *
paobjnr " Profitability Segment Number (CO-PA) *
pasubnr " Profitability segment changes (CO-PA) *
bukrs " Company Code
kndnr " Customer from CE4Op01 table. *
Segrigate one record from CE3Op01 into 93 based on Value fields. *
PROGRAM TYPE..Function Module *
DEV. CLASS..../DS1/MI_01 *
LOGICAL DB.... N/A *
Conventions used in the Program *
* global variables --> g_* *
* local variables --> l_* *
* constants --> c_* *
* internal tables --> t_* *
* structures --> x_* *
* parameters --> p_* *
* select-options --> s_* *
* ranges --> r_* *
* workarea --> w_* *
* field symbol --> fs_* *
Declaration for Interface: Selection criteria
STATICS: s_s_if TYPE srsc_s_if_simple,
Maximum number of lines for DB table
ls_s_if TYPE srsc_s_if_simple, "Static Structure
counter
ls_counter_datapakid LIKE sy-tabix,"Static Counter
cursor
ls_cursor TYPE cursor,"Static Cursor.
ls_cursor1 TYPE cursor."Static Cursor.
*CONSTANTS
CONSTANTS: lc_datasource TYPE char14 VALUE 'ZDS_COPA_RECON',
" Data Source Name
lc_msgtype TYPE char1 VALUE 'E', "message type
lc_msgcls TYPE char2 VALUE 'R3', "message class
lc_msgnum TYPE char3 VALUE '009',"Message Number.
lc_001 TYPE char3 VALUE '001',
lc_b0 TYPE char2 VALUE 'B0',
lc_10 TYPE char2 VALUE '10',
lc_01 TYPE char2 VALUE '01',
lc_02 TYPE char2 VALUE '02',
lc_1 TYPE sy-tabix VALUE 1.
*Data Declaration.
DATA: lt_ce3op01 TYPE STANDARD TABLE OF x_ce3op01,
" Internal table for ce3op01
lt_ce3op02 TYPE STANDARD TABLE OF x_ce3op01,
lt_ce4op01 TYPE STANDARD TABLE OF x_ce4op01,
" Internal table for ce4op01
lw_ce3op01 TYPE x_ce3op01,
" Work area for ce3op01
lw_ce3op02 TYPE x_ce3op01, "MOD-002
lw_ce4op01 TYPE x_ce4op01,
" Work area for ce4op01
lw_e_t_data TYPE /ds1/fi_copa_recn,
" Work area for /ds1/fi_copa_recn.
*CE1op01
lt_ce1op01 TYPE STANDARD TABLE OF x_ce1op01,"Internaltable
lw_ce1op01 TYPE x_ce1op01,"Work area for CE1op01.
**CE1op01
lt_fldlist TYPE STANDARD TABLE OF lx_fldlist, "fields list
lw_fldlist TYPE lx_fldlist," FIELDS list work area
lt_flnmval TYPE STANDARD TABLE OF lx_flnmval,"table for splitting
lw_flnmval TYPE lx_flnmval,"work area for spilitting
l_index TYPE i VALUE 1, "to keep track of index.
l_len TYPE i,
l_s_no_recs TYPE sy-tabix VALUE 99,
l_s_loop_from TYPE sy-tabix, "from "MOD-002
l_s_loop_to TYPE sy-tabix, "to"MOD-002
l_norecs TYPE sy-tabix, "MOD-002
l_count TYPE sy-tabix. "MOD-002
*Field Symbols.
FIELD-SYMBOLS:
<fs_flnmval> TYPE lx_flnmval."Field symbol for fild values
Selection Ranges
RANGES: lr_bukrs FOR ce4op01-bukrs, " Range for company code
lr_versi FOR ce3op01-versi," Range for version
lr_paledger FOR ce3op01-paledger,"Range for paledger
lr_vrgar FOR ce3op01-vrgar,"Range for vrgar
lr_gjahr FOR ce3op01-gjahr,"Range for Fiscal year
lr_perbl FOR ce3op01-perbl."Range for perbl
Initialization mode (first call by SAPI) or data transfer mode
IF i_initflag = sbiwa_c_flag_on.
Initialization: check input parameters
buffer input parameters
prepare data selection
Check DataSource validity
IF ls_counter_datapakid = 0.
CASE i_dsource.
WHEN lc_datasource.
WHEN OTHERS.
IF 1 = 2. MESSAGE e009(r3). ENDIF. "#EC *
this is a typical log call. Please write every error message like this
log_write lc_msgtype "'E' "message type
lc_msgcls "'R3' "message class
lc_msgnum "'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.
APPEND LINES OF i_t_fields TO s_s_if-t_fields.
Fill parameter buffer for data extraction calls
ls_s_if-requnr = i_requnr.
ls_s_if-dsource = i_dsource.
ls_s_if-maxsize = i_maxsize.
ls_s_if-initflag = i_initflag.
Company Code
LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_bukrs.
MOVE: i_t_select-sign TO lr_bukrs-sign,
i_t_select-option TO lr_bukrs-option,
i_t_select-low TO lr_bukrs-low,
i_t_select-high TO lr_bukrs-high.
APPEND lr_bukrs.
ENDLOOP.
*Version (0)
*SRSC_S_IF_SIMPLE-T_SELECT
LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_versi.
LOOP AT i_t_select INTO s_s_if-t_select WHERE fieldnm = c_versi.
MOVE: i_t_select-sign TO lr_versi-sign,
i_t_select-option TO lr_versi-option,
i_t_select-low TO lr_versi-low,
i_t_select-high TO lr_versi-high.
APPEND lr_versi.
ENDLOOP.
*Currency Type (company code only)
LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_paledger.
MOVE: i_t_select-sign TO lr_paledger-sign,
i_t_select-option TO lr_paledger-option.
IF i_t_select-low = lc_b0.
MOVE lc_01 TO lr_paledger-low.
ELSEIF i_t_select-low = lc_10.
MOVE lc_02 TO lr_paledger-low.
ENDIF.
APPEND lr_paledger.
ENDLOOP.
*Record Type
LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_vrgar.
MOVE: i_t_select-sign TO lr_vrgar-sign,
i_t_select-option TO lr_vrgar-option,
i_t_select-low TO lr_vrgar-low,
i_t_select-high TO lr_vrgar-high.
APPEND lr_vrgar.
ENDLOOP.
*Fiscal Year
LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_gjahr.
MOVE: i_t_select-sign TO lr_gjahr-sign,
i_t_select-option TO lr_gjahr-option,
i_t_select-low TO lr_gjahr-low,
i_t_select-high TO lr_gjahr-high.
APPEND lr_gjahr.
ENDLOOP.
*Period Block/Year
LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_perbl.
MOVE: i_t_select-sign TO lr_perbl-sign,
i_t_select-option TO lr_perbl-option,
i_t_select-low TO lr_perbl-low,
i_t_select-high TO lr_perbl-high.
APPEND lr_perbl.
ENDLOOP.
*Value Field Name.
LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_fldnm.
MOVE:
i_t_select-sign TO gr_zfldnm-sign,
i_t_select-option TO gr_zfldnm-option,
i_t_select-low TO gr_zfldnm-low,
i_t_select-high TO gr_zfldnm-high.
APPEND gr_zfldnm.
ENDLOOP.
First data package -> OPEN CURSOR
IF ls_counter_datapakid = 0.
*Create 93 Field names in an internal table.
MOVE 'VV010' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV011' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV012' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV013' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV014' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV015' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV016' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV020' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV021' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV030' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV031' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV032' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV033' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV034' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV035' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV200' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV201' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV202' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV203' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV036' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV037' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV038' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV039' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV040' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV041' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV042' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV043' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV204' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV205' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV211' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV212' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV213' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV222' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV223' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV230' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV232' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV233' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV500' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV501' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV502' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV503' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV504' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV505' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV506' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV507' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV508' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV509' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV510' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV511' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV512' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV513' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV514' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV515' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV516' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV517' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV518' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV519' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV520' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV236' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV206' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV051' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV052' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV053' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV054' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV055' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV056' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV057' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV058' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV059' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV060' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV241' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV242' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV243' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV244' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV245' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV246' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV247' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV248' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV249' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV250' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV521' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV522' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV523' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV524' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV525' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV526' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV527' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV528' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV529' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV530' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV227' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV226' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
MOVE 'VV224' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
OPEN CURSOR WITH HOLD ls_cursor FOR
SELECT
paobjnr " Profitability Segment Number (CO-PA)
paledger " Currency type for an operating concern
vrgar " Record Type
versi " Plan version (CO-PA)
gjahr " Fiscal Year
perbl " Fiscal year/period block
pasubnr
vv010001 " List Price
vv011001 " Formula Price
vv012001 " Customer Price
vv013001 " Manual Price
vv014001 " Retail Pump Price
vv015001 " Markup
vv016001 " Net Proceeds Other
vv020001 " Excise Duty Offset
vv021001 " Duties & Government
vv030001 " Sales Discounts
vv031001 " Sales Surcharges
vv032001 " Sales Rebates
vv033001 " Agents Comm Paid
vv034001 " RBA CR Royalties
vv035001 " Other Revenues
vv200001 " Transfer PriceSupply
vv201001 " Prim Tran Tariff Sup
vv202001 " S&Handling TariffDis
vv203001 " Sec Trans Tariff Dis
vv036001 " Proceeds from Servic
vv037001 " Exchanges
vv038001 " Throughput fees
vv039001 " Output Tax Offset
vv040001 " CR comm & Oth Oil Pr
vv041001 " Supplier fees
vv042001 " RBA Fairshare Adjust
vv043001 " Contr Comm Paid IG
vv204001 " Sec Tran Tariff Supp
vv205001 " Comp Stock Obligatio
vv211001 " Prim Tran Tar Transf
vv212001 " S&Handling Tar Trans
vv213001 " Sec Trans TariffTran
vv222001 " DIS:S&Handl Tar OvUn
vv223001 " DIS:Sec Tr TarifOvUn
vv230001 " Transfer Price LSC
vv232001 " S&Handling Tar LSC
vv233001 " Sec Trans Tariff LSC
vv500001 " 3rd Party Purchases
vv501001 " Transf from Oth Sect
vv502001 " Purchases IG
vv503001 " Inter-Seg Transf Pur
vv504001 " Import Freight
vv505001 " Stock Variations
vv506001 " Other Product Cost
vv507001 " Pipeline Operat Exp
vv508001 " Primary Transp Expen
vv509001 " Manufacturing Expens
vv510001 " Supply /Process Exp
vv511001 " MK Processing Plants
vv512001 " S&Handling Expenses
vv513001 " Sec Transp Expenses
vv514001 " Point of Sale Expens
vv515001 " Contr Comm Rec IG
vv516001 " Assoc Inc Dividend
vv517001 " Marketing & Sell Exp
vv518001 " Other Rev from Dist
vv519001 " Other Rev Transferrd
vv520001 " Stock Write-Off
vv236001 " Oth cost Tar LSC SMP
vv206001 " Prim Trp tariff Dist
vv051001 " CR Net Turnover
vv052001 " Dummy Price 2
vv053001 " Dummy Price 3
vv054001 " Dummy Price 4
vv055001 " Dummy Price 5
vv056001 " Dummy Price 6
vv057001 " Dummy Price 7
vv058001 " Dummy Price 8
vv059001 " Dummy Price 9
vv060001 " Dummy Price10
vv241001 " DummyTariff 1
vv242001 " DummyTariff 2
vv243001 " DummyTariff 3
vv244001 " DummyTariff 4
vv245001 " DummyTariff 5
vv246001 " DummyTariff 6
vv247001 " DummyTariff 7
vv248001 " DummyTariff 8
vv249001 " DummyTariff 9
vv250001 " DummyTariff10
vv521001 " SD&A Rebates
vv522001 " Dummy Cost 2
vv523001 " Dummy Cost 3
vv524001 " Dummy Cost 4
vv525001 " Dummy Cost 5
vv526001 " Dummy Cost 6
vv527001 " Dummy Cost 7
vv528001 " Dummy Cost 8
vv529001 " Dummy Cost 9
vv530001 " Dummy Cost 10
vv227001 " Sec Tr TarifOvUn LSC
vv226001 " S&Handl Tar OvUn LSC
vv224001 " Pr Tra TariffOvU DIS
FROM ce3op01
WHERE paledger = lc_02 AND
vrgar IN lr_vrgar AND
versi IN lr_versi AND
perbl IN lr_perbl AND
gjahr IN lr_gjahr.
ENDIF.
For all other cursors.
FETCH NEXT CURSOR ls_cursor
APPENDING TABLE lt_ce3op02
PACKAGE SIZE ls_s_if-maxsize.
IF sy-subrc <> 0.
EXIT.
ENDIF.
SORT lt_ce3op02 BY paobjnr pasubnr paledger vrgar versi gjahr
perbl.
DELETE ADJACENT DUPLICATES FROM lt_ce3op02 COMPARING paobjnr.
*Begin of MODE-002
DESCRIBE TABLE lt_ce3op02 LINES l_norecs.
l_s_loop_from = lc_1.
DO.
l_s_loop_to = l_s_loop_from + l_s_no_recs.
LOOP AT lt_ce3op02 INTO lw_ce3op02
FROM l_s_loop_from TO l_s_loop_to .
APPEND lw_ce3op02 TO lt_ce3op01.
ENDLOOP.
SORT lt_ce3op01 BY paobjnr.
*End of MOS-002
SELECT
aktbo " Current profitability segment (CO-PA)
paobjnr " Profitability Segment Number (CO-PA)
pasubnr " Profitability segment changes (CO-PA)
kndnr " Customer
artnr
bukrs " Company Code
prctr
kokrs
FROM ce4op01
INTO TABLE lt_ce4op01
FOR ALL ENTRIES IN lt_ce3op01
WHERE paobjnr = lt_ce3op01-paobjnr AND
pasubnr = lt_ce3op01-pasubnr AND
bukrs IN lr_bukrs.
*CE1op01
SELECT
paledger
vrgar
versi
perio
paobjnr
pasubnr
belnr
posnr
rbeln
rposn
FROM ce1op01
INTO TABLE lt_ce1op01
FOR ALL ENTRIES IN lt_ce3op01
WHERE paledger = lt_ce3op01-paledger AND
vrgar = lt_ce3op01-vrgar AND
versi = lt_ce3op01-versi AND
perio = lt_ce3op01-perbl AND
paobjnr = lt_ce3op01-paobjnr AND
pasubnr = lt_ce3op01-pasubnr.
**CE1op01
LOOP AT lt_ce3op01 INTO lw_ce3op01.
MOVE:
lw_ce3op01-paobjnr TO lw_flnmval-paobjnr,
lw_ce3op01-paledger TO lw_flnmval-paledger,
lw_ce3op01-vrgar TO lw_flnmval-vrgar,
lw_ce3op01-versi TO lw_flnmval-versi,
lw_ce3op01-gjahr TO lw_flnmval-gjahr,
lw_ce3op01-perbl TO lw_flnmval-perbl.
*appending all 93 fields as records
MOVE lw_ce3op01-vv010001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv011001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv012001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv013001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv014001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv015001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv016001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv020001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv021001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv030001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv031001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv032001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv033001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv034001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv035001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv200001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv201001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv202001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv203001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv036001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv037001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv038001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv039001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv040001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv041001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv042001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv043001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv204001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv205001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv211001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv212001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv213001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv222001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv223001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv230001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv232001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv233001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv500001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv501001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv502001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv503001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv504001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv505001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv506001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv507001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv508001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv509001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv510001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv511001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv512001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv513001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv514001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv515001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv516001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv517001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv518001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv519001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv520001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv236001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv206001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv051001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv052001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv053001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv054001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv055001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv056001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv057001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv058001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv059001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv060001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv241001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv242001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv243001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv244001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv245001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv246001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv247001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv248001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv249001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv250001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv521001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv522001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv523001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv524001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv525001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv526001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv527001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv528001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv529001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv530001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv227001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv226001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
MOVE lw_ce3op01-vv224001 TO lw_flnmval-zamunt.
APPEND lw_flnmval TO lt_flnmval.
*Segrigating all one record into 102 records is complete
ENDLOOP.
LOOP AT lt_flnmval ASSIGNING <fs_flnmval>.
IF l_index > 93.
l_index = 1.
ENDIF.
READ TABLE lt_fldlist INTO lw_fldlist INDEX l_index.
IF sy-subrc = 0.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lw_fldlist-fldnam
IMPORTING
output = <fs_flnmval>-fldnam.
ENDIF.
l_index = l_index + 1.
ENDLOOP.
SORT lt_ce4op01 BY paobjnr.
SORT lt_ce1op01 BY paobjnr paledger vrgar versi.
SORT gr_zfldnm BY low.
DELETE lt_flnmval WHERE fldnam NOT IN gr_zfldnm.
LOOP AT lt_flnmval INTO lw_flnmval.
READ TABLE lt_ce4op01 INTO lw_ce4op01 WITH KEY
paobjnr = lw_flnmval-paobjnr BINARY SEARCH.
IF sy-subrc = 0.
MOVE : lw_flnmval-paledger TO lw_e_t_data-paledger,
lw_flnmval-vrgar TO lw_e_t_data-vrgar,
lw_flnmval-versi TO lw_e_t_data-versi ,
lw_flnmval-gjahr TO lw_e_t_data-gjahr,
lw_flnmval-perbl TO lw_e_t_data-perbl,
lw_ce4op01-bukrs TO lw_e_t_data-bukrs,
lw_ce4op01-kndnr TO lw_e_t_data-kndnr,
lw_ce4op01-artnr TO lw_e_t_data-artnr,
lw_ce4op01-prctr TO lw_e_t_data-prctr,
lw_ce4op01-kokrs TO lw_e_t_data-kokrs,
lw_flnmval-fldnam TO lw_e_t_data-zfldnm,
lw_flnmval-zamunt TO lw_e_t_data-zamount.
CE1op01
READ TABLE lt_ce1op01 INTO lw_ce1op01 WITH KEY
paobjnr = lw_flnmval-paobjnr
paledger = lw_flnmval-paledger
vrgar = lw_flnmval-vrgar
versi = lw_flnmval-versi BINARY SEARCH.
IF sy-subrc = 0.
MOVE: lw_ce1op01-rbeln TO lw_e_t_data-rbeln,
lw_ce1op01-rposn TO lw_e_t_data-rposn.
ENDIF.
CE1op01
APPEND lw_e_t_data TO gt_out_data.
ENDIF.
ENDLOOP.
*Begin of MOD-002
FREE lt_flnmval.
REFRESH :lt_ce3op01,lt_ce4op01,lt_ce1op01.
e_t_data[] = gt_out_data[].
DELETE e_t_data WHERE zfldnm NOT IN gr_zfldnm.
l_s_loop_from = l_s_loop_to + lc_1.
l_count = l_count + 20.
IF l_count GE l_norecs.
EXIT.
ENDIF.
ENDDO.
*End of MOD-002
ls_counter_datapakid = ls_counter_datapakid + 1.
ENDIF. "IF S_COUNTER_DATAPAKID = 0
ELSE.
IF i_maxsize IS INITIAL.
RAISE error_passed_to_mess_handler.
ENDIF.
IF g_start IS INITIAL.
g_start = 1.
ELSE.
g_start = g_end + 1.
ENDIF.
g_end = g_start + i_maxsize - 1.
Population of E_T_DATA based on Data records size
APPEND LINES OF gt_out_data FROM g_start TO g_end TO e_t_data.
DELETE e_t_data WHERE zfldnm NOT IN gr_zfldnm.
IF e_t_data[] IS INITIAL.
RAISE no_more_data.
ENDIF.
ls_counter_datapakid = ls_counter_datapakid + 1.
ENDIF.
ENDFUNCTION.
Thanks & regards,
Sreekanth
+91 9740091981Hello Sreekanth,
See this blog [Generic Extraction via Function Module|/people/siegfried.szameitat/blog/2005/09/29/generic-extraction-via-function-module]
Also see this
[Line Item Level Data Extraction for Financial Accounting and Controlling|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/a7f2f294-0501-0010-11bb-80e0d67c3e4a]
Thanks
Chandran -
Not getting the data for delta for 0ASSET_ATTR_TEXT in RSA3
Hi All
In RSA3, I am not able to extract the delta for the datasource ASSET_ATTR_TEXT. But when it is on full update then i am gettign the records, when i changed to "D" it is giving me the error 'Errors occurred during the extraction' and the error messege says
"Errors occurred during the extraction
Message no. RJ012
Diagnosis
During the extraction phase an error occurred for the extractor. An exception, 'error_passed_to_mess_handler' was triggered.
System Response
A more precise description of the error can be found in the log.
Procedure
Check the function module or the call from the extractor check program
Kindly provide some inputs on the same
Regards
Abhihi Siggi,
I have checked Datasource in the ROOSOURCE Table for this datasource the DELTA IS - AIE. And do did the Init from the BW i got 8210 recods.Then i executed the Delta Pack. there was an error happend.
But When i loaded Delta i got the error as :
Diagnosis
Not all the initialization requests have been completed yet for this
DataSource, or there may be an incorrect initialization request.
System response
No delta requests can be processed whilst there is an initialization
request that has not been completed.
Procedure Wait until the initialization request has finished, or delete the entry
for the incorrect initialization request from the corresponding display
in the Scheduler.
Regards
Abhi -
Unable to get delta observation,
i am trying get delta records from ztable based on time stamp with 900sec lower timestamp,,,,,,,,,,
please correct my code,
Example: DataSource for table SFLIGHT
TABLES: zsales_order1.
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.
Select ranges
RANGES: l_r_zvbeln FOR zsales_order1-zvbeln,
l_r_zerdat FOR zsales_order1-zerdat,
l_r_zerzet FOR zsales_order1-zerzet,
l_r_ztimestamp FOR zsales_order1-ztimestamp.
DATA : startdate TYPE sy-datum,
starttime TYPE sy-uzeit,
enddate TYPE sy-datum,
endtime TYPE sy-uzeit,
timestamp TYPE tzonref-tstamps.
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
Check DataSource validity
CASE i_dsource.
WHEN 'ZSALES_ORDER_FUN1'.
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 = 'ZVBELN'.
MOVE-CORRESPONDING l_s_select TO l_r_zvbeln.
APPEND l_r_zvbeln.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZERDAT'.
MOVE-CORRESPONDING l_s_select TO l_r_zerdat.
APPEND l_r_zerdat.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZERZET'.
MOVE-CORRESPONDING l_s_select TO l_r_zerzet.
APPEND l_r_zerzet.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZTIMESTAMP'.
timestamp = l_s_select-low.
CONVERT TIME STAMP timestamp
TIME ZONE sy-zonlo INTO DATE startdate TIME starttime.
timestamp = l_s_select-high.
CONVERT TIME STAMP timestamp
TIME ZONE sy-zonlo INTO DATE enddate TIME endtime.
l_r_zerdat-low = startdate.
l_r_zerdat-sign = l_s_select-sign.
l_r_zerdat-option = l_s_select-option.
l_r_zerdat-high = enddate.
APPEND l_r_zerdat.
l_r_zerzet-low = starttime.
l_r_zerzet-sign = l_s_select-sign.
l_r_zerzet-option = l_s_select-option.
l_r_zerzet-high = endtime.
APPEND l_r_zerzet.
ENDLOOP.
ENDLOOP.
ENDLOOP.
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.
OPEN CURSOR WITH HOLD s_cursor FOR
SELECT zvbeln
zerdat
zerzet
zland1
zkunnr
zlgort
zposnv
zmatnr
znetpr
waerk
zkpein
zkmein
zarktx
zstadat
zaedat
zaezet
ztimestamp FROM zsales_order1 WHERE zvbeln IN l_r_zvbeln
AND zerdat IN l_r_zerdat
AND zerzet IN l_r_zerzet
AND (
( zerdat >= startdate AND ( zerzet >= starttime OR
( zerdat <= enddate AND zerzet <= endtime ) ) ) OR
( zaedat >= startdate AND ( zaezet >= starttime OR
( zaedat <= enddate AND zaezet <= endtime ) ) )
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.
s_counter_datapakid = s_counter_datapakid + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.
thanks in advanceAs per the description of this forum at the top of the page I do not think this is posted correctly:
This forum is dedicated to all other development-related questions which are not directly addressed by other forums. This includes Business Objects SDKs, products, or technologies which do not fall under BusinessObjects Enterprise, BusinessObjects Edge, Crystal Reports Server, or Crystal Reports (for example Desktop Intelligence SDK, Universe Designer SDK, Portal Integration Kits, Java User Function Libraries, and other third party technologies or development languages).
- Ludek -
GDE - function module.. code .. problem
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 PMHi,
use the following:
define a index variable.
data: l_index type sy-tabix.
in your loop at e_t_data.
loop at e_t_data.
new statement
l_index = sy-tabix.
changed statement
modify e_t_data index l_index.
endloop.
The other read operations on internal tables will reset sy-tabix so that it will point to a invalid record.
regards
Siggi -
I_UPDMODE has no value in my Function Module when using Delta Extraction
Help me please.
My system is BW 3.52
Please see the source code below and tell me why I_UPDMODE has not been passed value. I have ever used "I_SOURCE" but the value pass to I_DSOURCE. Can anyone tell me where is the upload mode pass to?
FUNCTION ZBWFN_TEST_DELTA.
""Local Interface:
*" IMPORTING
*" VALUE(I_REQUNR) TYPE SBIWA_S_INTERFACE-REQUNR
*" VALUE(I_DSOURCE) TYPE SBIWA_S_INTERFACE-ISOURCE OPTIONAL
*" VALUE(I_MAXSIZE) TYPE SBIWA_S_INTERFACE-MAXSIZE OPTIONAL
*" VALUE(I_INITFLAG) TYPE SBIWA_S_INTERFACE-INITFLAG OPTIONAL
*" VALUE(I_UPDMODE) TYPE SBIWA_S_INTERFACE-UPDMODE OPTIONAL
*" VALUE(I_DATAPAKID) TYPE SBIWA_S_INTERFACE-DATAPAKID OPTIONAL
*" VALUE(I_RLOGSYS) TYPE SRSC_S_INTERFACE-RLOGSYS OPTIONAL
*" VALUE(I_READ_ONLY) TYPE SRSC_S_INTERFACE-READONLY OPTIONAL
*" TABLES
*" I_T_SELECT TYPE SBIWA_T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SBIWA_T_FIELDS OPTIONAL
*" E_T_DATA STRUCTURE ZISU_ERCHC OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
This extractor is part of a delta scenario based on a timestamp
included in the fields of table ROVERCUBE1. The interesting part
takes place in form get_time_interval, where the date range is
calculated update modespecifically.
The pointer for the date up to which delta was extracted during
the last delta update is held in table ROBWQTSTAT.
TABLES: ZISU_TP_ERCHC, ERCH, ERCHC.
Auxiliary Selection criteria structure
DATA: L_S_SELECT TYPE SBIWA_S_SELECT.
DATA: L_ERCHC LIKE ZISU_TP_ERCHC OCCURS 0 WITH HEADER LINE.
DATA: L_DATE LIKE SY-DATUM,
L_ACTUAL_DATE LIKE SY-DATUM,
L_LAST_DATE LIKE SY-DATUM.
Maximum number of lines for DB table
STATICS: L_MAXSIZE TYPE SBIWA_S_INTERFACE-MAXSIZE,
BEGIN OF S_S_INTERFACE.
INCLUDE TYPE SBIWA_S_INTERFACE.
INCLUDE TYPE SRSC_S_INTERFACE.
STATICS: END OF S_S_INTERFACE.
STATICS: BEGIN OF S_R_TSTMP OCCURS 1,
SIGN(1),
OPTION(2),
LOW LIKE ROVERCUBE1-TSTMP,
HIGH LIKE ROVERCUBE1-TSTMP,
END OF S_R_TSTMP.
Initialization mode (first call by SAPI) or data transfer mode
(following calls) ?
IF I_INITFLAG = SBIWA_C_FLAG_ON.
Invalid second initialization call -> error exit
IF NOT G_FLAG_INTERFACE_INITIALIZED IS INITIAL.
IF 1 = 2. MESSAGE E008(R3). ENDIF.
LOG_WRITE 'E' "message type
'R3' "message class
'008' "message number
' ' "message variable 1
' '. "message variable 2
RAISE ERROR_PASSED_TO_MESS_HANDLER.
ENDIF.
Check DataSource validity
CASE I_DSOURCE.
WHEN 'ZOVER_TRANS'.
WHEN 'TEST_ROVERCUBE'.
WHEN 'DO_DATASOURCE'.
WHEN '0VER_DELTA_WITH_LONG_NAME'.
WHEN '0VER_CUBE_OLD_LIS'.
WHEN '0VER_TYPE_ATTR'.
WHEN OTHERS.
IF 1 = 2. MESSAGE E009(R3). ENDIF.
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.
Check for supported update mode
CASE I_UPDMODE.
WHEN 'F'.
WHEN 'D'.
WHEN 'C'.
WHEN 'R'.
WHEN 'S'.
WHEN OTHERS.
IF 1 = 2. MESSAGE E011(R3). ENDIF.
LOG_WRITE 'E' "message type
'R3' "message class
'011' "message number
I_UPDMODE "message variable 1
' '. "message variable 2
RAISE ERROR_PASSED_TO_MESS_HANDLER.
ENDCASE.
APPEND LINES OF I_T_SELECT TO G_T_SELECT.
Fill parameter buffer for data extraction calls
S_S_INTERFACE-REQUNR = I_REQUNR.
S_S_INTERFACE-ISOURCE = I_DSOURCE.
S_S_INTERFACE-MAXSIZE = I_MAXSIZE.
S_S_INTERFACE-INITFLAG = I_INITFLAG.
S_S_INTERFACE-UPDMODE = I_UPDMODE.
S_S_INTERFACE-RLOGSYS = I_RLOGSYS.
S_S_INTERFACE-READONLY = I_READ_ONLY.
G_FLAG_INTERFACE_INITIALIZED = SBIWA_C_FLAG_ON.
APPEND LINES OF I_T_FIELDS TO G_T_FIELDS.
here the timerange for update modes concerning delta is calculated
and the status table is updated
PERFORM GET_CAL_INTERVAL TABLES G_R_DELTA_DATE[]
USING S_S_INTERFACE-ISOURCE
S_S_INTERFACE-UPDMODE
S_S_INTERFACE-RLOGSYS.
ELSE. "Initialization mode or data extraction ?
Data transfer: First Call calcualte range tables for key fields
calculate date range due to update mode
OPEN CURSOR + FETCH
Following Calls FETCH only
First data package -> OPEN CURSOR
G_COUNTER_DATAPAKID = G_COUNTER_DATAPAKID + 1.
IF G_COUNTER_DATAPAKID = 1.
Fill range tables.
LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'COUNTRY'.
MOVE-CORRESPONDING L_S_SELECT TO L_R_COUNTRY.
APPEND L_R_COUNTRY.
ENDLOOP.
LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'REGION'.
MOVE-CORRESPONDING L_S_SELECT TO L_R_REGION.
APPEND L_R_REGION.
ENDLOOP.
LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'KUNNR'.
MOVE-CORRESPONDING L_S_SELECT TO L_R_KUNNR.
APPEND L_R_KUNNR.
ENDLOOP.
LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'TYPE'.
MOVE-CORRESPONDING L_S_SELECT TO L_R_TYPE.
APPEND L_R_TYPE.
ENDLOOP.
LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'GJAHR'.
MOVE-CORRESPONDING L_S_SELECT TO L_R_GJAHR.
APPEND L_R_GJAHR.
ENDLOOP.
no data must be selected in Init simulation mode
CHECK S_S_INTERFACE-UPDMODE NE SRSC_C_UPDMODE_INITSIMU.
Determine number of database records to be read per FETCH statement
from input parameter I_MAXSIZE.
L_MAXSIZE = G_S_INTERFACE-MAXSIZE.
REFRESH: L_ERCHC.
SELECT * FROM ERCH WHERE ERDAT IN G_R_DELTA_DATE
OR AEDAT IN G_R_DELTA_DATE.
SELECT SINGLE * FROM ERCHC WHERE BELNR = ERCH-BELNR.
IF SY-SUBRC = 0.
CLEAR: L_ERCHC.
L_ERCHC-BUKRS = ERCH-BUKRS.
L_ERCHC-ABRVORG = ERCH-ABRVORG.
L_ERCHC-PORTION = ERCH-PORTION.
L_ERCHC-GPARTNER = ERCH-GPARTNER.
IF ERCHC-CPUDT IN G_R_DELTA_DATE.
L_ERCHC-DELDT = ERCHC-CPUDT.
L_ERCHC-DOCDT = ERCHC-BUDAT.
L_ERCHC-RELNO = 1.
COLLECT L_ERCHC.
ENDIF.
IF ERCHC-INTCPUDT IN G_R_DELTA_DATE AND
ERCHC-INTCPUDT IS NOT INITIAL.
L_ERCHC-DELDT = ERCHC-INTCPUDT.
L_ERCHC-DOCDT = ERCHC-INTBUDAT.
L_ERCHC-REVNO = 1.
COLLECT L_ERCHC.
ENDIF.
ENDIF.
ENDSELECT.
DELETE FROM ZISU_TP_ERCHC.
LOOP AT L_ERCHC.
MOVE-CORRESPONDING L_ERCHC TO ZISU_TP_ERCHC.
INSERT ZISU_TP_ERCHC.
ENDLOOP.
OPEN CURSOR WITH HOLD G_CURSOR FOR
SELECT * FROM ZISU_TP_ERCHC.
ENDIF. "First data package ?
IF S_S_INTERFACE-UPDMODE = SRSC_C_UPDMODE_INITSIMU.
RAISE NO_MORE_DATA.
ENDIF.
Fetch records into interface table.
FETCH NEXT CURSOR G_CURSOR
APPENDING CORRESPONDING FIELDS OF TABLE E_T_DATA
PACKAGE SIZE S_S_INTERFACE-MAXSIZE.
IF SY-SUBRC <> 0.
RAISE NO_MORE_DATA.
ENDIF.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.Dave,
1. You can fire SELECTS in an RFC as well, but in your case the data exists in SYSTEM A and the RFC is in System B, so you can't do that. You can fire SELECTS on tables in the same system.
2. Quick example of two table loops - EKKO (HEADER) EKPO (ITEM).
LOOP AT EKKO.
LOOP AT EKPO WHERE EBELN = EKKO-EBELN.
ENDLOOP.
ENDLOOP.
I hope this is clear now.
Regards,
Ravi -
Hi ,
Iam trying to write an extractor for open and closed items ie form BSAD and BSID .
So i have written the logic .when i tryed to modularise the code .the function module is not acteping the perform statment
Ie when i tryed to put the logic in to a perfoem its giving a syntax error like
"Field "E_T_DATA" is unknown. It is neither in one of the specified
tables nor defined by a "DATA" statement . . . . . . . . . . "
can you please provide me a solution for this .
Thanks ,
Sriram.Hi ,
As you have asked for below i have attached the code .
PERFORM FETCH_BSID .
*PERFORM FETCH_BSAD TABLES E_T_DATA.
this are the two perform iam trying to create just to moduralize the code .it it showing an error like .E_T_DATA is not defined which is the final extract structure .
""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
*" VALUE(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 TYPE ZBIAR_EXTRACTOR_AR1 OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
*& Function Module : Z01_FBIWI_AR_EXTRACTOR *
*& Title : Extractor Industrial - AR *
*& Programmer : TSHANKAR *
*& Date : 16/11/2007 *
*& Transaction : *
*& Description : This extractor fetches data fetches data from *
tables BSID ,BSAD, KNVP,Z02TOTC_AR_DOC_H for closed *
and open item and populate into final extract *
structure FOR CLOSED *
Modification Log: *
Date Author Corr. # Description *
mm/dd/yy SAPLOGONNAM xxxxxxxxxx Initial program development *
TSHANKAR Changes made to the application *
path *
**DATA DECLERATION
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,
S_CURSOR1 TYPE CURSOR.
DATA : FLAG_BSID TYPE I VALUE 0.
Initialization mode (first call by SAPI) or data transfer mode
(following calls) ?
IF I_INITFLAG = SBIWA_C_FLAG_ON.
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 = 'BUKRS'.
MOVE-CORRESPONDING L_S_SELECT TO R_BUKRS.
APPEND R_BUKRS.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'KUNNR'.
MOVE-CORRESPONDING L_S_SELECT TO R_KUNNR.
APPEND R_KUNNR.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'GJAHR'.
MOVE-CORRESPONDING L_S_SELECT TO R_GJAHR.
APPEND R_GJAHR.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CPUDT'.
MOVE-CORRESPONDING L_S_SELECT TO R_CPUDT.
APPEND R_CPUDT.
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.
OPEN CURSOR WITH HOLD S_CURSOR FOR
SELECT MANDT KUNNR WRBTR XREF3 BUKRS BELNR GJAHR BUZEI WAERS BLDAT
BUDAT BLART XBLNR SHKZG DMBTR GSBER ZFBDT ZLSCH ZUONR ZTERM
KIDNO XREF1 XREF2 SGTXT MABER HKONT PRCTR KOSTL AUFNR PROJK
VBUND
FROM BSID WHERE BUKRS IN R_BUKRS AND KUNNR IN R_KUNNR AND
GJAHR IN R_GJAHR AND
CPUDT IN R_CPUDT .
OPEN CURSOR WITH HOLD S_CURSOR1 FOR
SELECT MANDT KUNNR WRBTR XREF3 BUKRS BELNR GJAHR BUZEI WAERS BLDAT
BUDAT BLART XBLNR SHKZG DMBTR GSBER ZFBDT ZLSCH ZUONR ZTERM
KIDNO XREF1 XREF2 SGTXT MABER HKONT PRCTR KOSTL AUFNR PROJK
VBUND
FROM BSAD WHERE BUKRS IN R_BUKRS AND KUNNR IN R_KUNNR AND
GJAHR IN R_GJAHR AND
CPUDT IN R_CPUDT .
ENDIF. "First data package ?
Fetch records into interface table.
FETCH NEXT CURSOR S_CURSOR
APPENDING CORRESPONDING FIELDS
OF TABLE IT_BSID
PACKAGE SIZE S_S_IF-MAXSIZE.
FETCH NEXT CURSOR S_CURSOR1
APPENDING CORRESPONDING FIELDS
OF TABLE IT_BSAD
PACKAGE SIZE S_S_IF-MAXSIZE.
IF SY-SUBRC <> 0.
CLOSE CURSOR S_CURSOR.
RAISE NO_MORE_DATA.
ENDIF.
S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
ENDIF. "Initialization mode or data extraction ?
PERFORM FETCH_BSID .
*PERFORM FETCH_BSAD TABLES E_T_DATA.
*FORM FETCH_BSID TABLES P_E_T_DATA type ZBIAR_EXTRACTOR_AR2.
SORT IT_BSID BY KUNNR BUKRS GJAHR .
CHECK NOT IT_BSID[] IS INITIAL .
PERFORM FILL_Z02TOTC_AR_DOC_H.
PERFORM FILL_KNVP.
LOOP AT IT_BSID .
READ TABLE IT_Z02TOTC_AR_DOC_H WITH KEY BELNR = IT_BSID-BELNR
BUKRS = IT_BSID-BUKRS
GJAHR = IT_BSID-GJAHR
BUZEI = IT_BSID-BUZEI.
LOOP AT IT_Z02TOTC_AR_DOC_H FROM SY-TABIX.
IF SY-SUBRC IS INITIAL .
IF IT_Z02TOTC_AR_DOC_H-BELNR <> IT_BSID-BELNR
OR IT_Z02TOTC_AR_DOC_H-BUKRS <> IT_BSID-BUKRS
OR IT_Z02TOTC_AR_DOC_H-GJAHR <> IT_BSID-GJAHR.
OR IT_Z02TOTC_AR_DOC_H-BUZEI <> IT_BSID-BUZEI.
EXIT .
ENDIF .
READ TABLE IT_KNVP WITH KEY KUNNR = IT_BSID-KUNNR
VKORG = IT_BSID-BUKRS.
IF SY-SUBRC IS INITIAL.
MOVE-CORRESPONDING IT_KNVP TO E_T_DATA.
MOVE-CORRESPONDING IT_Z02TOTC_AR_DOC_H TO E_T_DATA.
MOVE-CORRESPONDING IT_BSID TO E_T_DATA.
APPEND E_T_DATA.
ENDIF .
ENDIF.
ENDLOOP .
ENDLOOP .
*FREE : IT_BSID ,IT_Z02TOTC_AR_DOC_H ,IT_KNVP.
*ENDFORM.
ENDFUNCTION. " End of Function Z01_FBIWI_AR_EXTRACTOR
**form for fetching cleared entries
*FORM FETCH_BSAD using P_E_T_DATA LIKE ZBIAR_EXTRACTOR_AR2
changing e_t_data type p_e_t_data.
SORT IT_BSAD BY KUNNR BUKRS GJAHR .
CHECK NOT IT_BSAD[] IS INITIAL .
PERFORM FILL_Z02TOTC_AR_DOC_H_BSAD.
PERFORM FILL_KNVP_BSAD.
LOOP AT IT_BSAD .
READ TABLE IT_Z02TOTC_AR_DOC_H_BSAD WITH KEY BELNR = IT_BSAD-BELNR
BUKRS = IT_BSAD-BUKRS
GJAHR = IT_BSAD-GJAHR
BUZEI = IT_BSAD-BUZEI.
LOOP AT IT_Z02TOTC_AR_DOC_H_BSAD FROM SY-TABIX.
IF SY-SUBRC IS INITIAL .
IF IT_Z02TOTC_AR_DOC_H_BSAD-BELNR <> IT_BSAD-BELNR
OR IT_Z02TOTC_AR_DOC_H_BSAD-BUKRS <> IT_BSAD-BUKRS
OR IT_Z02TOTC_AR_DOC_H_BSAD-GJAHR <> IT_BSAD-GJAHR.
OR IT_Z02TOTC_AR_DOC_H-BUZEI <> IT_BSID-BUZEI.
EXIT .
ENDIF .
READ TABLE IT_KNVP_BSAD WITH KEY KUNNR = IT_BSAD-KUNNR
VKORG = IT_BSAD-BUKRS.
IF SY-SUBRC IS INITIAL.
MOVE-CORRESPONDING IT_KNVP_BSAD TO P_E_T_DATA.
MOVE-CORRESPONDING IT_Z02TOTC_AR_DOC_H_BSAD TO P_E_T_DATA.
MOVE-CORRESPONDING IT_BSAD TO P_E_T_DATA.
APPEND P_E_T_DATA.
ENDIF .
ENDIF.
ENDLOOP .
ENDLOOP .
*FREE : IT_BSAD ,IT_Z02TOTC_AR_DOC_H ,IT_KNVP. -
Generic extractor FM : taking 5-6 hours time for 3 months to BW urgent:
Dear experts,
I have designed a FM for generic extraction , which is taking 5-6 hoours time for 3 months data i.e 24 lakhs records to BW up to PSA .
i have given the coding below plz provide any modifications to improve the performance.....
FUNCTION zhr_att_analysis.
""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_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF
*" TABLES
*" I_T_SELECT TYPE SBIWA_T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SBIWA_T_FIELDS OPTIONAL
*" E_T_DATA STRUCTURE ZHR_ATT_MAIN OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
Auxiliary Selection criteria structure
DATA: l_s_select TYPE sbiwa_s_select.
Maximum number of lines for DB table
STATICS: l_maxsize TYPE sbiwa_s_interface-maxsize.
Select ranges
RANGES: l_r_pernr FOR pa9004-pernr,
l_r_bukrs FOR pa0001-bukrs,
l_r_persg FOR pa0001-persg,
l_r_begda FOR pa9004-begda,
l_r_persk FOR pa0001-persk.
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.
*"Declaration of store data
TYPES : BEGIN OF ty_9004,
pernr TYPE persno,
endda TYPE endda,
begda TYPE begda,
zrs TYPE zrs,
zstorecode TYPE zstorecode,
END OF ty_9004.
*"Declaration of employee data
TYPES : BEGIN OF ty_0001,
pernr TYPE pernr_d,
endda TYPE endda,
begda TYPE begda,
AEDTM TYPE AEDAT,
bukrs TYPE bukrs,
persg TYPE persg,
persk TYPE persk,
END OF ty_0001.
*"Declaration of expected mandays
TYPES : BEGIN OF ty_0000,
pernr TYPE persno,
endda TYPE endda,
begda TYPE begda,
aedtm TYPE aedat,
stat2 TYPE stat2,
massn TYPE massn,
END OF ty_0000.
*"Declaration of man days swiped
TYPES : BEGIN OF ty_teven,
pernr TYPE pernr_d,
ldate TYPE ldate,
satza TYPE retyp,
aedtm TYPE aedat,
counter_swiped TYPE i,
END OF ty_teven.
*"Declaration of Man days regularized
TYPES : BEGIN OF ty_2002,
pernr TYPE pernr_d,
subty TYPE subty,
endda TYPE endda,
begda TYPE begda,
aedtm TYPE aedat,
END OF ty_2002.
*"Declaration of Man days lostdue to leave
TYPES : BEGIN OF ty_2001,
pernr TYPE pernr_d,
subty TYPE subty,
endda TYPE endda,
begda TYPE begda,
aedtm TYPE aedat,
END OF ty_2001.
*****Declaration of weekly off
TYPES : BEGIN OF ty_2003,
pernr TYPE pernr_d,
subty TYPE subty,
endda TYPE endda,
begda TYPE begda,
aedtm TYPE aedat,
tprog TYPE tprog,
END OF ty_2003.
Auxiliary Selection criteria structure
DATA :
it_0001 TYPE TABLE OF ty_0001,
wa_0001 TYPE ty_0001,
it_0000 TYPE TABLE OF ty_0000,
wa_0000 TYPE ty_0000,
it_teven TYPE TABLE OF ty_teven,
wa_teven TYPE ty_teven,
it_2002 TYPE TABLE OF ty_2002 ,
wa_2002 TYPE ty_2002,
it_2001 TYPE TABLE OF ty_2001,
wa_2001 TYPE ty_2001,
it_2003 TYPE TABLE OF ty_2003,
wa_2003 TYPE ty_2003,
wa_target TYPE zhr_att_main.
DATA : date TYPE dats,
doj TYPE dats,
dol TYPE dats,
date1 TYPE dats,
date2 TYPE dats,
counter(9) TYPE n.
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
Check DataSource validity
CASE i_dsource.
WHEN 'ZHR_ATT_ANALYSIS'.
WHEN OTHERS.
IF 1 = 2. MESSAGE e009(r3). ENDIF.
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.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'PERNR'.
MOVE-CORRESPONDING l_s_select TO l_r_pernr.
APPEND l_r_pernr.
ENDLOOP.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'BUKRS'.
MOVE-CORRESPONDING l_s_select TO l_r_bukrs.
APPEND l_r_bukrs.
ENDLOOP.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'PERSG'.
MOVE-CORRESPONDING l_s_select TO l_r_persg.
APPEND l_r_persg.
ENDLOOP.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'BEGDA'.
MOVE-CORRESPONDING l_s_select TO l_r_begda.
APPEND l_r_begda.
ENDLOOP.
LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'PERSK'.
MOVE-CORRESPONDING l_s_select TO l_r_persk.
APPEND l_r_persk.
ENDLOOP.
OPEN CURSOR WITH HOLD s_cursor FOR
populate only store code employess does not have empty store codes
SELECT apernr bpernr bendda bbegda bbukrs bpersg b~persk FROM pa9004 AS a INNER JOIN pa0001 AS b
ON apernr = bpernr
WHERE a~pernr IN l_r_pernr AND
a~zstorecode <> '' AND
bukrs IN l_r_bukrs AND
persg IN l_r_persg AND
persk IN l_r_persk.
ENDIF.
Fetch records into interface table.
named E_T_'Name of extract structure'.
FETCH NEXT CURSOR s_cursor
APPENDING CORRESPONDING FIELDS
OF TABLE it_0001
PACKAGE SIZE s_s_if-maxsize.
IF sy-subrc <> 0.
CLOSE CURSOR s_cursor.
RAISE no_more_data.
ELSE.
break-point.
IF l_r_begda-high = '00000000' AND l_r_begda-low = '00000000'.
date1 = sy-datum - 1.
date2 = sy-datum - 1.
ELSE.
date1 = l_r_begda-low .
date2 = l_r_begda-high.
ENDIF.
SORT it_0001 BY pernr persg begda endda bukrs.
DELETE it_0001 WHERE persg NE 'T' AND
persg NE 'K' AND
persg NE 'P' AND
persg NE 'W'.
DELETE ADJACENT DUPLICATES FROM it_0001 COMPARING pernr begda endda bukrs.
populate all the employees that are active in pa9004.
IF NOT it_0001[] IS INITIAL.
SELECT pernr endda begda aedtm massn FROM pa0000
INTO CORRESPONDING FIELDS OF TABLE it_0000
FOR ALL ENTRIES IN it_0001
WHERE pernr = it_0001-pernr
AND ( massn = 'A1' OR massn = '00' OR massn = 'A6' OR massn = 'A3' ).
SORT it_0000 BY pernr begda DESCENDING.
ENDIF.
populate SWIPED MAN DAYS data
IF NOT it_0001[] IS INITIAL.
SELECT pernr ldate satza aedtm FROM teven
INTO CORRESPONDING FIELDS OF TABLE it_teven
FOR ALL ENTRIES IN it_0001
WHERE pernr = it_0001-pernr AND
satza = 'P01'
AND ldate IN l_r_begda.
SORT it_teven BY pernr ldate.
ENDIF.
**populate REGULARIZATION DAYS data
IF NOT it_0001[] IS INITIAL.
SELECT pernr subty endda begda aedtm FROM pa2002
INTO CORRESPONDING FIELDS OF TABLE it_2002
FOR ALL ENTRIES IN it_0001
WHERE pernr = it_0001-pernr
AND begda >= date1
AND endda <= date2 .
SORT it_2002 BY pernr begda endda.
ENDIF.
**populate LEAVE DAYS data
IF NOT it_0001[] IS INITIAL.
SELECT pernr subty endda begda aedtm FROM pa2001
INTO CORRESPONDING FIELDS OF TABLE it_2001
FOR ALL ENTRIES IN it_0001
WHERE pernr = it_0001-pernr
AND begda >= date1
AND endda <= date2 .
SORT it_2001 BY pernr begda endda .
ENDIF.
**populate WEEKLY OFF data
IF NOT it_0001[] IS INITIAL.
SELECT pernr subty endda begda aedtm tprog FROM pa2003
INTO CORRESPONDING FIELDS OF TABLE it_2003
FOR ALL ENTRIES IN it_0001
WHERE pernr = it_0001-pernr AND
tprog = 'OFF'
AND begda >= date1
AND endda <= date2 .
SORT it_2003 BY pernr begda endda.
ENDIF.
date = sy-datum.
********added changes on 06.04.2008**************action type & date dependent extaction****
loop over it_0001 table
BREAK-POINT.
LOOP AT it_0001 INTO wa_0001.
if sy-tabix = 1.
counter = 0.
for expected mandays
LOOP AT it_0000 INTO wa_0000 WHERE pernr = wa_0001-pernr .
IF wa_0000-massn = 'A1' OR wa_0000-massn = '00' OR wa_0000-massn = 'A3'.
doj = wa_0000-begda.
if wa_0000-endda = '99991231'.
date2 = sy-datum.
else.
dol = date2.
endif.
ELSEIF wa_0000-massn = 'A6'.
dol = wa_0000-begda.
ENDIF.
ENDLOOP.
IF date1 <= wa_0001-begda AND date2 <= wa_0001-endda AND date2 >= wa_0001-begda AND date1 <= wa_0001-endda.
counter = date2 - wa_0001-begda .
counter = counter + 1.
date = wa_0001-begda - 1.
ELSEIF date1 >= wa_0001-begda AND date2 >= wa_0001-endda AND date2 >= wa_0001-begda AND date1 <= wa_0001-endda.
counter = wa_0001-endda - date1.
counter = counter + 1.
date = date1 - 1.
ELSEIF date1 >= wa_0001-begda AND date2 <= wa_0001-endda AND date2 >= wa_0001-begda AND date1 <= wa_0001-endda.
counter = date2 - date1.
counter = counter + 1.
date = date1 - 1.
ELSEIF date1 <= wa_0001-begda AND date2 >= wa_0001-endda AND date2 >= wa_0001-begda AND date1 <= wa_0001-endda.
counter = wa_0001-endda - wa_0001-begda.
counter = counter + 1.
date = wa_0001-begda - 1.
ELSE.
CONTINUE.
ENDIF.
********completed changes on 06.04.2008**************action type & date dependent extaction**
split records from date of joining to till date
DO counter TIMES.
CLEAR : wa_teven , wa_target.
date = date + 1.
wa_target-date1 = date.
wa_target-pernr = wa_0001-pernr.
wa_target-bukrs = wa_0001-bukrs.
wa_target-persg = wa_0001-persg.
wa_target-persk = wa_0001-persk.
for expected mandays count
IF wa_target-date1 >= doj AND wa_target-date1 <= dol.
wa_target-expectedmandays = 1.
wa_target-aedtm = wa_0000-aedtm.
for swiped mandays
READ TABLE it_teven INTO wa_teven WITH KEY pernr = wa_target-pernr
ldate = wa_target-date1 BINARY SEARCH.
IF sy-subrc = 0.
wa_target-swiped_days = 1.
wa_target-aedtm = wa_teven-aedtm.
ENDIF.
for regularized days
LOOP AT it_2002 INTO wa_2002 WHERE pernr = wa_target-pernr
AND ( endda GE wa_target-date1 AND begda LE wa_target-date1 ).
wa_target-reg_days = 1.
wa_target-subty2 = wa_2002-subty.
wa_target-aedtm = wa_2002-aedtm.
ENDLOOP.
for leave days
LOOP AT it_2001 INTO wa_2001 WHERE pernr = wa_target-pernr
AND ( endda GE wa_target-date1 AND begda LE wa_target-date1 ).
wa_target-leave_days = 1.
wa_target-subty1 = wa_2001-subty.
wa_target-aedtm = wa_2001-aedtm.
ENDLOOP.
for weekly off days
LOOP AT it_2003 INTO wa_2003 WHERE pernr = wa_target-pernr
AND ( endda GE wa_target-date1 AND begda LE wa_target-date1 ).
wa_target-off_days = 1.
wa_target-aedtm = wa_2003-aedtm.
ENDLOOP.
append work area to e_t_data
APPEND wa_target TO e_t_data.
ENDIF.
ENDDO.
ENDLOOP.
clear internal tables
CLEAR : it_0000 , it_0001 , it_2001 , it_2002 , it_2003 , it_teven.
ENDIF.
s_counter_datapakid = s_counter_datapakid + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.Hi Guys
I can have both your cases looked into for you.
Please send me an email using the contact us form in my profile. The address for this form in the section 'about me'.
Thanks
Stuart
BTCare Community Mod
If we have asked you to email us with your details, please make sure you are logged in to the forum, otherwise you will not be able to see our ‘Contact Us’ link within our profiles.
We are sorry that we are unable to deal with service/account queries via the private message(PM) function so please don't PM your account info, we need to deal with this via our email account :-) -
Regarding: Loading data from R/3 To BI for a Generic Data source
Hi Every,
Need Help Urgent
I had created a Generic data source with function Module as the data source, in Rsa3 it is working fine.
1-> I had replicated the data source to Bi then i had created a info package and then I executed the same. when it is getting the data and it is show in the request monitor (Number of records ) but the status is not changing from Yellow to Green.
Status in Step by step analysis is every step is green Except "Data selection successfully finished ?" (RED)
2-> Then I had seen the Back ground job in Source system which is executing still. I waited for it for a long time but nearly 30 min.
(I had done Steps one and 2 number of time by activating replicating the data source and so on, but still their is no change in it)
3-> Then I had canceled that back ground job with the help of BASIS (as i feel that it is something going wrong).
4-> I feel that their is some thing wrong in the Code of Extractor.
Please Help...............
""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
*" VALUE(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 ZBI_MATGRIR OPTIONAL
*Need to get the data only for two Gl account which are fro material purchase while MIGO
*G/L Account Numbers: 0010502001 0010502002
data: E_T_DATA1 type table of ZBI_MATGRIR.
RANGES: R_BUKRS FOR BSIS-BUKRS,
R_BUDAT FOR BSIS-BUDAT,
R_GJAHR FOR BSIS-GJAHR,
R_HKONT FOR BSIS-HKONT.
DATA: L_S_SELECT TYPE SRSC_S_SELECT.
STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,
S_COUNTER_DATAPAKID LIKE SY-TABIX,
S_CURSOR TYPE CURSOR.
*Declare
TYPES: BEGIN OF TY_FAGL,
RBURS TYPE FAGLFLEXA-RBUKRS,
RYEAR TYPE FAGLFLEXA-RYEAR,
DOCNR TYPE FAGLFLEXA-DOCNR,
BUZEI TYPE FAGLFLEXA-BUZEI,
DOCLN TYPE FAGLFLEXA-DOCLN,
PRCTR TYPE FAGLFLEXA-PRCTR,
SEGMENT TYPE FAGLFLEXA-SEGMENT,
END OF TY_FAGL.
DATA: GT_FAGL TYPE TABLE OF TY_FAGL,
GS_FAGL TYPE TY_FAGL.
IF I_INITFLAG = SBIWA_C_FLAG_ON.
CASE I_DSOURCE.
WHEN 'ZFI_GL_M4'.
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.
APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS.
ELSE.
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 = 'BUKRS'.
MOVE-CORRESPONDING L_S_SELECT TO R_BUKRS.
APPEND R_BUKRS.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'GJAHR'.
MOVE-CORRESPONDING L_S_SELECT TO R_GJAHR.
APPEND R_GJAHR.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BUDAT'.
MOVE-CORRESPONDING L_S_SELECT TO R_BUDAT.
APPEND R_BUDAT.
ENDLOOP.
*GRIR Inventory (RM/Stores/Spares/FG) 10502001
*GRIR Services & Others Payable 10502002
R_HKONT-SIGN = 'I'. "i_t_select-sign.
R_HKONT-OPTION = 'BT'." i_t_select-option.
R_HKONT-LOW = '0010502001'.
R_HKONT-HIGH = '0010502002'. "i_t_select-high.
APPEND R_HKONT.
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.
OPEN CURSOR WITH HOLD S_CURSOR FOR
SELECT BUKRS
AUGBL
ZUONR
BELNR
GJAHR
BUZEI
BUDAT
HKONT
BLART
MONAT
BSCHL
SHKZG
DMBTR
WAERS
FROM BSIS
INTO TABLE E_T_DATA
WHERE BUKRS IN R_BUKRS
AND GJAHR IN R_GJAHR
AND BUDAT IN R_BUDAT
AND HKONT IN R_HKONT.
Fetch records into interface table.
named E_T_'Name of extract structure'.
FETCH NEXT CURSOR S_CURSOR
APPENDING CORRESPONDING FIELDS
OF TABLE E_T_DATA1
PACKAGE SIZE S_S_IF-MAXSIZE.
IF SY-SUBRC <> 0.
CLOSE CURSOR S_CURSOR.
RAISE NO_MORE_DATA.
ENDIF.
DELETE E_T_DATA WHERE BLART NE 'WE'.
SELECT BUKRS
AUGBL
ZUONR
BELNR
GJAHR
BUZEI
BUDAT
HKONT
BLART
MONAT
BSCHL
SHKZG
DMBTR
WAERS
FROM BSAS
into table E_T_DATA
WHERE BUKRS IN R_BUKRS
AND GJAHR IN R_GJAHR
AND BUDAT IN R_BUDAT
AND HKONT IN R_HKONT.
FETCH NEXT CURSOR S_CURSOR
APPENDING CORRESPONDING FIELDS
OF TABLE E_T_DATA
PACKAGE SIZE S_S_IF-MAXSIZE.
append LINES OF e_t_data1 TO E_T_DATA.
DELETE E_T_DATA WHERE BLART NE 'WE'.
ENDIF. "First data package ?
DATA: F_YEAR TYPE BKPF-GJAHR.
DATA: F_PERI TYPE BAPI0002_4-FISCAL_PERIOD.
IF E_T_DATA[] IS NOT INITIAL.
SELECT RBUKRS
RYEAR
DOCNR
BUZEI
DOCLN
PRCTR
SEGMENT
FROM FAGLFLEXA
INTO TABLE GT_FAGL
FOR ALL ENTRIES IN E_T_DATA
WHERE RYEAR = E_T_DATA-GJAHR
AND DOCNR = E_T_DATA-BELNR
AND RLDNR = '0L'
AND RBUKRS = E_T_DATA-BUKRS
AND BUZEI = E_T_DATA-BUZEI.
WHERE RYEAR = E_T_DATA-GJAHR
AND DOCNR = E_T_DATA-BELNR
AND RBUKRS = E_T_DATA-BUKRS.
AND DOCLN = E_T_DATA-BUZEI.
ENDIF.
LOOP AT E_T_DATA.
IF E_T_DATA-SHKZG = 'H'.
E_T_DATA-DMBTR = E_T_DATA-DMBTR * -1.
ENDIF.
CLEAR: F_YEAR.
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
COMPANYCODEID = E_T_DATA-BUKRS
POSTING_DATE = E_T_DATA-BUDAT
IMPORTING
FISCAL_YEAR = F_YEAR
FISCAL_PERIOD = F_PERI.
DATA: V_DOC(6) TYPE C .
CLEAR: V_DOC.
V_DOC = E_T_DATA-BUZEI.
IF V_DOC IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = V_DOC
IMPORTING
OUTPUT = V_DOC.
ENDIF.
aS PROFIT center is not updated in all the lines in Bsis
READ TABLE GT_FAGL INTO GS_FAGL WITH KEY RYEAR = E_T_DATA-GJAHR
DOCNR = E_T_DATA-BELNR
RBURS = E_T_DATA-BUKRS
BUZEI = E_T_DATA-BUZEI.
IF SY-SUBRC = 0.
E_T_DATA-PRCTR = GS_FAGL-PRCTR.
E_T_DATA-SEGMENT = GS_FAGL-SEGMENT.
ENDIF.
*As we are using the amount DMBTR in which the amount
*will be in company code currency that is Local currency
*group currency always in the main company code currency.
CONCATENATE F_YEAR '0' F_PERI INTO E_T_DATA-FISCPER.
MODIFY E_T_DATA. " from gs_bsis transporting dmbtr fiscper.
CLEAR: E_T_DATA.
ENDLOOP.
S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
ENDIF.Hi,
Please check the log of same jobs for last week and check is today its taking more time,also check with basis is their any backup initited at same time.
Moreover until the background job failed automatically its difficult to imagine what is the exact issue.
Thanks, -
Hi Guru's
I've created a generic ds using fm for direct access.creating virtual cube and mapped accordingluy with ds.
Now when I do test extract on ds per a single posting day then it takes few secords to pull through the data and the no. of records are 45 on dev box.But I do data display on remote cub and it takes long and throughing a timed out error.
I dont have any routines on transformaions.
What could be the problem?
Nagesh.HI
here's the code in FM
Example: DataSource for table SFLIGHT
TABLES: BKPF,BSEG.
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,
Starting point for each data package
READ_NEXT LIKE SY-TABIX,
Total Number of Extracted Records
NO_RECS LIKE SY-TABIX,
Number read so far
TEMP_CNTR(9) TYPE N.
cursor
S_CURSOR TYPE CURSOR.
Select ranges
RANGES: R_BLDAT FOR BKPF-BLDAT,
R_BUDAT FOR BKPF-BUDAT,
R_CPUDT FOR BKPF-CPUDT,
R_BUKRS FOR BKPF-BUKRS,
R_GJAHR FOR BKPF-GJAHR,
R_BELNR FOR BKPF-BELNR.
DATA: GT_T_DATA LIKE ZFI_GL_4 OCCURS 0 WITH HEADER LINE.
DATA: GT_BKPF TYPE TABLE OF BKPF,
GS_BKPF TYPE BKPF.
DATA: COUNTER(9) TYPE N.
DATA: LV_MONAT(3).
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
Check DataSource validity
CASE I_DSOURCE.
WHEN 'ZFI_GL_4'.
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 = 'BLDAT'.
MOVE-CORRESPONDING L_S_SELECT TO r_bldat.
APPEND R_BLDAT.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BUDAT'.
MOVE-CORRESPONDING L_S_SELECT TO R_BUDAT.
APPEND R_BUDAT.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CPUDT'.
MOVE-CORRESPONDING L_S_SELECT TO R_CPUDT.
APPEND R_CPUDT.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BUKRS'.
MOVE-CORRESPONDING L_S_SELECT TO R_BUKRS.
APPEND R_BUKRS.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'GJAHR'.
MOVE-CORRESPONDING L_S_SELECT TO R_GJAHR.
APPEND R_GJAHR.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BELNR'.
MOVE-CORRESPONDING L_S_SELECT TO R_BELNR.
APPEND R_BELNR.
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.
SELECT * FROM BKPF INTO TABLE GT_BKPF WHERE BLDAT IN R_BLDAT
AND BUDAT IN R_BUDAT
AND CPUDT IN R_CPUDT
AND BUKRS IN R_BUKRS
AND GJAHR IN R_GJAHR
AND BELNR IN R_BELNR.
LOOP AT GT_BKPF INTO GS_BKPF.
SELECT * FROM BSEG WHERE BELNR = GS_BKPF-BELNR
AND BUKRS = GS_BKPF-BUKRS
AND GJAHR = GS_BKPF-GJAHR.
MOVE-CORRESPONDING GS_BKPF TO GT_T_DATA.
MOVE-CORRESPONDING BSEG TO GT_T_DATA.
CLEAR LV_MONAT.
CONCATENATE '0' GT_T_DATA-MONAT INTO LV_MONAT.
CONCATENATE GT_T_DATA-GJAHR LV_MONAT INTO GT_T_DATA-FISCPER.
CALL FUNCTION 'BWFIU_GET_DOCUMENT_ORIGIN'
EXPORTING
I_AWTYP = GT_T_DATA-AWTYP
I_AWKEY = GT_T_DATA-AWKEY
IMPORTING
E_REFBELNR = GT_T_DATA-AWREF
E_REFGJAHR = GT_T_DATA-AWGJA
E_REFBUKRS = GT_T_DATA-AWBUK
E_REFKOKRS = GT_T_DATA-AWKOK.
Lcal currency calculations.
IF GT_T_DATA-SHKZG EQ 'S'.
GT_T_DATA-DMSOL = GT_T_DATA-DMBTR.
GT_T_DATA-DMSHB = GT_T_DATA-DMBTR.
GT_T_DATA-DMHAB = 0.
ELSEIF GT_T_DATA-SHKZG EQ 'H'.
GT_T_DATA-DMHAB = GT_T_DATA-DMBTR.
GT_T_DATA-DMSHB = GT_T_DATA-DMBTR * -1.
GT_T_DATA-DMSOL = 0.
ENDIF.
Foriegn Currency calculations.
IF GT_T_DATA-SHKZG EQ 'S'.
GT_T_DATA-WRSOL = GT_T_DATA-DMBTR.
GT_T_DATA-WRSHB = GT_T_DATA-DMBTR.
GT_T_DATA-WRHAB = 0.
ELSEIF GT_T_DATA-SHKZG EQ 'H'.
GT_T_DATA-WRHAB = GT_T_DATA-DMBTR.
GT_T_DATA-WRSHB = GT_T_DATA-DMBTR * -1.
GT_T_DATA-WRSOL = 0.
ENDIF.
APPEND GT_T_DATA.
ENDSELECT.
ENDLOOP.
DESCRIBE TABLE GT_T_DATA LINES NO_RECS.
READ_NEXT = 0.
TEMP_CNTR = 0.
ENDIF. "First data package ?
Fetch records into interface table.
IF ( READ_NEXT GT NO_RECS ) OR ( NO_RECS EQ 0 ).
REFRESH GT_T_DATA.
CLEAR:S_COUNTER_DATAPAKID, COUNTER, READ_NEXT, S_S_IF, NO_RECS.
RAISE NO_MORE_DATA.
ENDIF.
COUNTER = 0.
LOOP AT GT_T_DATA FROM READ_NEXT.
COUNTER = COUNTER + 1.
IF COUNTER GT S_S_IF-MAXSIZE.
IF TEMP_CNTR EQ NO_RECS.
CLEAR: S_COUNTER_DATAPAKID,COUNTER,READ_NEXT,S_S_IF,NO_RECS.
RAISE NO_MORE_DATA.
ELSE.
READ_NEXT = READ_NEXT + COUNTER.
ENDIF.
EXIT.
ENDIF.
MOVE-CORRESPONDING GT_T_DATA TO E_T_DATA.
APPEND E_T_DATA.
TEMP_CNTR = TEMP_CNTR + 1.
iF TEMP_CNTR GT NO_RECS.
CLEAR GT_T_DATA.
CLEAR: S_COUNTER_DATAPAKID, COUNTER,READ_NEXT, S_S_IF,NO_RECS.
RAISE NO_MORE_DATA.
EXIT.
ENDIF.
ENDLOOP.
S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.
If it's a code then why it's quick on rsa3?
Nagesh. -
Delta fo Generic extractor using function module
Hi,
I am using the following function module for generic extractor but its always showing me extraction error.Could anyone please suggest to resolve the issue.
Thanks in advance fo rsuggestion.
FUNCTION Z_BW_SALESDATA_EXTRACT_CHNG2.
""Local interface:
*" IMPORTING
*" VALUE(I_REQUNR) TYPE SBIWA_S_INTERFACE-REQUNR
*" VALUE(I_ISOURCE) TYPE SBIWA_S_INTERFACE-ISOURCE OPTIONAL
*" VALUE(I_MAXSIZE) TYPE SBIWA_S_INTERFACE-MAXSIZE OPTIONAL
*" VALUE(I_INITFLAG) TYPE SBIWA_S_INTERFACE-INITFLAG OPTIONAL
*" VALUE(I_UPDMODE) TYPE SBIWA_S_INTERFACE-UPDMODE OPTIONAL
*" VALUE(I_DATAPAKID) TYPE SBIWA_S_INTERFACE-DATAPAKID OPTIONAL
*" VALUE(I_PRIVATE_MODE) OPTIONAL
*" VALUE(I_CALLMODE) LIKE ROARCHD200-CALLMODE OPTIONAL
*" VALUE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF
*" TABLES
*" I_T_SELECT TYPE SBIWA_T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SBIWA_T_FIELDS OPTIONAL
*" E_T_DATA OPTIONAL
*" E_T_SOURCE_STRUCTURE_NAME OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
The input parameter I_DATAPAKID is not supported yet !
Example: InfoSource containing TADIR objects
TABLES: VBFA,VBRK,tadir.
Auxiliary Selection criteria structure
DATA: l_s_select TYPE sbiwa_s_select.
Maximum number of lines for DB table
STATICS: l_maxsize TYPE sbiwa_s_interface-maxsize.
user defined variables.
DATA : X_UPDMODE(1) Type c, " Update Type
X_LastUpdate Like Sy-Datum. " Last Update Date
X_LastUpdate TYPE RODELTAID. " Last Update Date "TCS_KAP
Select ranges
RANGES: L_R_VBELN FOR VBAK-VBELN,
L_R_AUDAT FOR VBAK-AUDAT.
Parameter I_PRIVATE_MODE:
Some applications might want to use this function module for other
purposes as well (e.g. data supply for OLTP reporting tools). If the
processing logic has to be different in this case, use the optional
parameter I_PRIVATE_MODE (not supplied by BIW !) to distinguish
between BIW calls (I_PRIVATE_MODE = SPACE) and other calls
(I_PRIVATE_MODE = X).
If the message handling has to be different as well, define Your own
messaging macro which interprets parameter I_PRIVATE_MODE. When
called by BIW, it should use the LOG_WRITE macro, otherwise do what
You want.
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
The input parameter I_DATAPAKID is not supported yet !
Invalid second initialization call -> error exit
IF NOT g_flag_interface_initialized IS INITIAL.
IF 1 = 2. MESSAGE e008(r3). ENDIF.
log_write 'E' "message type
'R3' "message class
'008' "message number
' ' "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDIF.
Check InfoSource validity
CASE i_isource.
WHEN 'Z_BW_SDDATA_CREATEON'.
WHEN 'Y'.
WHEN 'Z'.
WHEN OTHERS.
IF 1 = 2. MESSAGE e009(r3). ENDIF.
log_write 'E' "message type
'R3' "message class
'009' "message number
i_isource "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDCASE.
Check for supported update mode
CASE i_updmode.
WHEN 'F'.
WHEN OTHERS.
IF 1 = 2. MESSAGE e011(r3). ENDIF.
log_write 'E' "message type
'R3' "message class
'011' "message number
i_updmode "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDCASE.
Check for obligatory selection criteria
READ TABLE i_t_select INTO l_s_select WITH KEY fieldnm = 'VBELN'.
IF sy-subrc <> 0.
IF 1 = 2. MESSAGE e010(r3). ENDIF.
log_write 'E' "message type
'R3' "message class
'010' "message number
'PGMID' "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDIF.
APPEND LINES OF i_t_select TO g_t_select.
Fill parameter buffer for data extraction calls
g_s_interface-requnr = i_requnr.
g_s_interface-isource = i_isource.
g_s_interface-maxsize = i_maxsize.
g_s_interface-initflag = i_initflag.
g_s_interface-updmode = i_updmode.
g_s_interface-datapakid = i_datapakid.
g_flag_interface_initialized = sbiwa_c_flag_on.
Store Update mode in static variable...
X_UPDMODE = I_UPDMODE.
Select Single DELTAID
Into X_LastUpdate
From ROOSGENDLM
Where OLTPSOURCE = 'Z_BW_SDDATA_CREATEON'.
If X_LastUpdate Is Initial.
X_LastUpdate = '19800101'. " The oldest..., this should not happen
Endif.
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 g_t_segfields.
ELSE. "Initialization mode or data extraction ?
Data transfer: First Call OPEN CURSOR + FETCH
Following Calls FETCH only
X_UPDMODE = I_UPDMODE.
First data package -> OPEN CURSOR
IF g_counter_datapakid = 0.
Fill range tables for fixed InfoSources. In the case of generated
InfoSources, the usage of a dynamical SELECT statement might be
more reasonable. BIW will only pass down simple selection criteria
of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
LOOP AT g_t_select INTO l_s_select WHERE fieldnm = 'VBELN'.
MOVE-CORRESPONDING l_s_select TO L_R_VBELN.
APPEND L_R_VBELN.
ENDLOOP.
LOOP AT g_t_select INTO l_s_select WHERE fieldnm = 'AUDAT'.
MOVE-CORRESPONDING l_s_select TO L_R_AUDAT.
APPEND L_R_AUDAT.
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 InfoSource table lines and database entries, this is trivial.
In other cases, it may be impossible and some estimated value has to
be determined.
*added by Yogesh
DELETE FROM ZBWSALEDATA.
*ended by Yogesh
l_maxsize = g_s_interface-maxsize.
Check for supported update mode
CASE X_UPDMODE.
WHEN 'F' Or 'I'. " Full or Init
**get sales orders
SELECT *
INTO CORRESPONDING FIELDS OF TABLE I_SALESDATA
FROM VBAK AS K
INNER JOIN VBAP AS P
ON PVBELN = KVBELN
WHERE K~VBELN IN L_R_VBELN
AND K~AUDAT IN L_R_AUDAT
AND K~VBTYP = 'C'.
IF I_SALESDATA[] IS NOT INITIAL.
PERFORM F_GET_DATA. "get data
PERFORM F_DEL_VATCOND. "delete vat conditions
PERFORM F_GET_TAR_COSTUNIT. "get tariff cost unit
PERFORM F_GET_NETVAL TABLES IT_VBDPA1. "get net val of the item
PERFORM F_GET_SALESDATA.
*write perform with name F_INSERT_DB_ZBWSALEDATA.
PERFORM F_INSERT_DB_ZBWSALEDATA. "insert into table ZBWSALESDATA
LOOP AT I_SALESDATA WHERE NETPR = 0.
MOVE-CORRESPONDING I_SALESDATA TO I_SALESDATA_FIN.
APPEND I_SALESDATA_FIN.
ENDLOOP.
SORT I_SALESDATA_FIN BY VBELN POSNR KSCHL.
DELETE ADJACENT DUPLICATES FROM I_SALESDATA_FIN
COMPARING VBELN POSNR
KSCHL.
INSERT ZBWSALEDATA FROM TABLE I_SALESDATA_FIN.
ENDIF.
WHEN 'D'. " Delta
SELECT *
INTO CORRESPONDING FIELDS OF TABLE I_SALESDATA
FROM VBAK AS K
INNER JOIN VBAP AS P
ON PVBELN = KVBELN
WHERE K~ERDAT >= X_LastUpdate
WHERE K~ERDAT >= X_LastUpdate+0(8) "TCS_KAP
AND K~VBTYP = 'C'.
IF I_SALESDATA[] IS NOT INITIAL.
PERFORM F_GET_DATA. "get data
PERFORM F_DEL_VATCOND. "delete vat conditions
PERFORM F_GET_TAR_COSTUNIT. "get tariff cost unit
PERFORM F_GET_NETVAL TABLES IT_VBDPA1. "get net val of the item
PERFORM F_GET_SALESDATA.
*write perform with name F_INSERT_DB_ZBWSALEDATA.
PERFORM F_INSERT_DB_ZBWSALEDATA. "insert into table ZBWSALESDATA
LOOP AT I_SALESDATA WHERE NETPR = 0.
MOVE-CORRESPONDING I_SALESDATA TO I_SALESDATA_FIN.
APPEND I_SALESDATA_FIN.
ENDLOOP.
SORT I_SALESDATA_FIN BY VBELN POSNR KSCHL.
DELETE ADJACENT DUPLICATES FROM I_SALESDATA_FIN
COMPARING VBELN POSNR
KSCHL.
INSERT ZBWSALEDATA FROM TABLE I_SALESDATA_FIN.
ENDIF.
WHEN OTHERS.
IF 1 = 2. MESSAGE E011(R3). ENDIF.
LOG_WRITE 'E' "message type
'R3' "message class
'011' "message number
I_UPDMODE "message variable 1
' '. "message variable 2
RAISE ERROR_PASSED_TO_MESS_HANDLER.
ENDCASE.
**end get sales orders
OPEN CURSOR WITH HOLD g_cursor FOR
SELECT (g_t_fields) FROM ZBWSALEDATA.
WHERE pgmid IN l_r_pgmid AND
object IN l_r_object.
ENDIF. "First data package ?
Fetch records into interface table. There are two different options:
- fixed interface table structure for fixed InfoSources have to be
named E_T_'Name of assigned source structure in table ROIS'.
- for generating applications like LIS and CO-PA, the generic table
E_T_DATA has to be used.
Only one of these interface types should be implemented in one API !
FETCH NEXT CURSOR g_cursor
APPENDING CORRESPONDING FIELDS
OF TABLE E_T_DATA
PACKAGE SIZE l_maxsize.
IF sy-subrc <> 0.
CLOSE CURSOR g_cursor.
RAISE no_more_data.
ENDIF.
g_counter_datapakid = g_counter_datapakid + 1.
ENDIF. "Initialization mode or data extraction ?
Best regards,
YogeshDear Yogesh,
Try to debug the code by putting a break point at select statement...is the FM Syntactically correct ??
Check the Select statements..if all fields are not required avoid using Select * , and use always for all entries rather than JOINS..
Note : For Joins you have to specify the Fields in the Select...Dont use Select * ....
Hope it helps..
Thanks,
Krish -
Runtime Error:Invalid interruption of a database selection
Hi,
I have the above mentioned runtime error (short text of runtime error) while executuing FM with the runtime error DBIF_RSQL_INVALID_CURSOR and exception CX_SY_OPEN_SQL_DB.
the source code for the cause of the error is as follows:
{ PERFORM fill_spras USING g_r_werks[]
CHANGING g_r_spras[].
IF g_r_spras[] IS INITIAL.
Please specify a value for Language.
MESSAGE e003(yy_master_data).
RAISE error_passed_to_mess_handler.
ENDIF.
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.
OPEN CURSOR s_marc FOR SELECT *
FROM marc
WHERE werks IN g_r_werks AND
matnr IN g_r_matnr.
ENDIF. "First data package
Fetch records into interface table.
named E_T_'Name of extract structure'.
FETCH NEXT CURSOR s_marc INTO TABLE gt_marc PACKAGE SIZE s_s_if-maxsize.
IF sy-subrc = 0.
DELETE ADJACENT DUPLICATES FROM gt_marc COMPARING matnr}
the pointer shown in the runtime analysis is at if sy-subrc EQ 0.
while debugging also it gives run time error when curson reaches the statement FETCH Next Cursor.
Any ideas?Hi Simran,
if for whatever reason the process is interrupted between SELECT and ENDSELECT (or, in other words, after OPEN CURSOR between subsequent FETCHes), you will get this error: The Database is exspected to run within one logical unit of work.
If any screen is displayed waiting for user input (this also applies for debug screen), an implicit commit is is done that finishes the current LUW. The database will not like it....
That's why you should do only minor things between SELECT and ENDSELECT (OPEN/CLOSE CURSOR).
The E Message will also cause the end of the LUW.
Regards,
Clemens -
Hi Guru's
I'm coding the FM to exctract data from GLPCA table for my RDA load and am calculating timestamp field using cpudt and cputm but it's throughing error.
The error message says
"GT_T_DATA-TIMESTAMP" must be a character-type data object (data type C, N, D, T or STRING). field string).
I've TIMESTAMP field on the structure.
What is the problem.
the code is
FUNCTION ZBW_GET_ECPCA_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
*" VALUE(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 ZBWEC_PCA_1 OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
Example: DataSource for table SFLIGHT
TABLES: GLPCA,T001.
RANGES: R_BLDAT FOR GLPCA-BLDAT,
R_BUDAT FOR GLPCA-BUDAT,
R_CPUDT FOR GLPCA-CPUDT.
DATA: GT_T_DATA LIKE ZBWEC_PCA_1 OCCURS 0 WITH HEADER LINE.
DATA: GT_GLPCA TYPE TABLE OF GLPCA,
GS_GLPCA TYPE GLPCA.
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,
Starting point for each data package
READ_NEXT LIKE SY-TABIX,
Total Number of Extracted Records
NO_RECS LIKE SY-TABIX,
Number read so far
TEMP_CNTR(9) TYPE N.
DATA: COUNTER(9) TYPE N.
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
Check DataSource validity
CASE I_DSOURCE.
WHEN 'ZEC_PCA_1'.
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 = 'BLDAT'.
MOVE-CORRESPONDING L_S_SELECT TO R_BLDAT.
APPEND R_BLDAT.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BUDAT'.
MOVE-CORRESPONDING L_S_SELECT TO R_BUDAT.
APPEND R_BUDAT.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CPUDT'.
MOVE-CORRESPONDING L_S_SELECT TO R_CPUDT.
APPEND R_CPUDT.
ENDLOOP.
SELECT * FROM GLPCA INTO TABLE GT_GLPCA WHERE BLDAT IN R_BLDAT AND
BUDAT IN R_BUDAT AND
CPUDT IN R_CPUDT.
LOOP AT GT_GLPCA INTO GS_GLPCA.
SELECT * FROM T001 WHERE BUKRS = GS_GLPCA-RBUKRS.
MOVE-CORRESPONDING GS_GLPCA TO GT_T_DATA.
MOVE-CORRESPONDING T001 TO GT_T_DATA.
CONCATENATE GT_T_DATA-CPUDT GT_T_DATA-CPUTM INTO GT_T_DATA-TIMESTAMP.
APPEND GT_T_DATA.
ENDSELECT.
ENDLOOP.
DESCRIBE TABLE GT_T_DATA LINES NO_RECS.
READ_NEXT = 0.
TEMP_CNTR = 0.
ENDIF. "First data package ?
IF ( READ_NEXT GT NO_RECS ) OR ( NO_RECS EQ 0 ).
REFRESH GT_T_DATA.
CLEAR: S_COUNTER_DATAPAKID, COUNTER, READ_NEXT, S_S_IF, NO_RECS.
RAISE NO_MORE_DATA.
ENDIF.
COUNTER = 0.
LOOP AT GT_T_DATA FROM READ_NEXT.
COUNTER = COUNTER + 1.
IF COUNTER GT S_S_IF-MAXSIZE.
IF TEMP_CNTR EQ NO_RECS.
CLEAR: S_COUNTER_DATAPAKID, COUNTER,
READ_NEXT, S_S_IF, NO_RECS.
RAISE NO_MORE_DATA.
ELSE.
READ_NEXT = READ_NEXT + COUNTER.
ENDIF.
EXIT.
ENDIF.
MOVE-CORRESPONDING GT_T_DATA TO E_T_DATA.
APPEND E_T_DATA.
TEMP_CNTR = TEMP_CNTR + 1.
IF TEMP_CNTR GT NO_RECS.
REFRESH GT_T_DATA.
CLEAR: S_COUNTER_DATAPAKID, COUNTER,
READ_NEXT, S_S_IF, NO_RECS.
RAISE NO_MORE_DATA.
EXIT.
ENDIF.
ENDLOOP.
S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.
Ramana.Hi,
Then proble is with Data types only, so check
CONCATENATE GT_T_DATA-CPUDT GT_T_DATA-CPUTM INTO GT_T_DATA-TIMESTAMP.
You are trying to add CPUDT and CPUTM to TIMESTAMP, so check there three data types.
See the Data types:
CPUDT = 8 - DATS
CPUTM = 6 - TIMS
TIMESTAMP = 15 -DEC
all these three are three different data types but you are trying to put into DEC data type
Thanks
Reddy
Edited by: Surendra Reddy on Jan 28, 2009 10:37 AM -
Delta error in GE-Function Module
Hi ,
my GE-delta is based on UDATE ( chenged date) from CDHDR table.
i created datasource in RS02 and i defined delta based in UDATE with upper limit 1 day and lower limit is '0'..
i created FM based on RSAX_BIW_GEDATA_SIMPLE.
for full load it working fine.
i put some extra code for delta.
it is not take any records...
i dont know much ABAP.
plz tell me where is wrong in my code for delta..
code ...
FUNCTION ZXBWMM_INV_POT_ID.
""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
*" VALUE(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 ZVSAIPID OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
Example: DataSource for table SFLIGHT
TABLES: SFLIGHT.
TABLES: EBAN , CDPOS , CDHDR , ZVSAPR.
TYPES : BEGIN OF TY_OBJDATE ,
OBJECTID TYPE CDHDR-OBJECTID,
VALUE_NEW TYPE CDPOS-VALUE_NEW,
VALUE_OLD TYPE CDPOS-VALUE_OLD,
UDATE TYPE CDHDR-UDATE,
MINBE TYPE MARC-MINBE,
BSTMA TYPE MARC-BSTMA,
WERKS TYPE MARC-WERKS,
VERPR TYPE MBEW-VERPR,
STPRS TYPE MBEW-STPRS,
LBKUM TYPE MBEW-LBKUM,
BUDAT TYPE MKPF-BUDAT,
MBLNR TYPE MSEG-MBLNR,
MENGE TYPE MSEG-MENGE,
DMBTR TYPE MSEG-DMBTR,
END OF TY_OBJDATE.
data : int_cdhdr type table of cdhdr with header line,
int_cdpos type table of cdpos with HEADER LINE,
INT_OBJDATE TYPE TABLE OF TY_OBJDATE WITH HEADER LINE.
int_marc type table of marc with header line.
*DATA: int_pr1 TYPE TABLE OF ZVSAIPID WITH HEADER LINE.
DATA : BEGIN OF INT_MATNR OCCURS 10,
MAtnr like mara-matnr,
end of int_matnr.
DATA : BEGIN OF INT_MARC OCCURS 10,
matnr like marc-matnr,
MINBE like marC-mINBE,
BSTMA LIKE Marc-bstma,
WERKS LIKE MARC-WERKS,
end of int_marc.
DATA : BEGIN OF INT_MBEW OCCURS 10,
MATNR LIKE MBEW-MATNR,
VERPR LIKE MBEW-VERPR,
STPRS LIKE MBEW-STPRS,
LBKUM LIKE MBEW-LBKUM,
end of int_MBEW.
DATA : BEGIN OF INT_MKPF OCCURS 10,
MBLNR LIKE MKPF-MBLNR,
BUDAT LIKE MKPF-BUDAT,
END OF INT_MKPF.
DATA : BEGIN OF INT_MSEG OCCURS 10,
MATNR LIKE MSEG-MATNR,
MBLNR LIKE MSEG-MBLNR,
MENGE LIKE MSEG-MENGE,
DMBTR LIKE MSEG-DMBTR,
END OF INT_MSEG.
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.
Select ranges
RANGES: L_R_CARRID FOR SFLIGHT-CARRID,
L_R_CONNID FOR SFLIGHT-CONNID.
RANGES : ra_OBJECTID FOR E_T_DATA-OBJECTID.
RA_UDATE FOR E_T_DATA-UDATE.
Initialization mode (first call by SAPI) or data transfer mode
(following calls) ?
IF I_INITFLAG = SBIWA_C_FLAG_ON.
IF NOT G_FLAG_INTERFACE_INITIALIZED IS INITIAL.
IF 1 = 2. MESSAGE E008(R3). ENDIF.
LOG_WRITE 'E' "message type
'R3' "message class
'008' "message number
' ' "message variable 1
' '. "message variable 2
RAISE ERROR_PASSED_TO_MESS_HANDLER.
ENDIF.
Initialization: check input parameters
buffer input parameters
prepare data selection
Check DataSource validity
CASE I_DSOURCE.
WHEN 'ZOI_MM_INVENTORY_IPID'.
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.
Check for supported update mode
CASE I_UPDMODE.
WHEN 'F'.
WHEN 'D'.
WHEN 'R'.
WHEN OTHERS.
IF 1 = 2. MESSAGE E011(R3). ENDIF.
LOG_WRITE 'E' "message type
'R3' "message class
'011' "message number
I_UPDMODE "message variable 1
' '. "message variable 2
RAISE ERROR_PASSED_TO_MESS_HANDLER.
ENDCASE.
READ TABLE I_T_SELECT INTO L_S_SELECT
WITH KEY FIELDNM = 'UDATE'.
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.
G_S_INTERFACE-INITFLAG = I_INITFLAG.
G_S_INTERFACE-UPDMODE = I_UPDMODE.
G_S_INTERFACE-DATAPAKID = I_DATAPAKID.
G_FLAG_INTERFACE_INITIALIZED = SBIWA_C_FLAG_ON.
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
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT
WHERE FIELDNM = 'UDATE'.
ENDLOOP
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 = 'CARRID'.
MOVE-CORRESPONDING L_S_SELECT TO L_R_CARRID.
APPEND L_R_CARRID.
ENDLOOP.
LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CONNID'.
MOVE-CORRESPONDING L_S_SELECT TO L_R_CONNID.
APPEND L_R_CONNID.
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.
OPEN CURSOR WITH HOLD S_CURSOR FOR
SELECT (S_S_IF-T_FIELDS) FROM SFLIGHT
WHERE CARRID IN L_R_CARRID AND
CONNID IN L_R_CONNID.
IF L_S_SELECT-LOW = '' AND L_S_SELECT-HIGH = ''. "FULL or INIT
OPEN CURSOR WITH HOLD S_CURSOR FOR
select * from cdhdr where OBJECTCLAS = 'MATERIAL' AND TCODE = 'MM02'.
ELSE. "DELTA
OPEN CURSOR WITH HOLD G_CURSOR FOR
select * from cdhdr where OBJECTCLAS = 'MATERIAL'
AND TCODE = 'MM02'
AND UDATE >= L_S_SELECT-LOW
AND UDATE <= L_S_SELECT-HIGH.
ENDIF.
ENDIF.
ENDIF.
"First data package ?
FETCH NEXT CURSOR S_CURSOR
APPENDING TABLE int_cdhdr
PACKAGE SIZE S_S_IF-MAXSIZE.
into table int_cdhdr
IF SY-SUBRC <> 0.
CLOSE CURSOR S_CURSOR.
RAISE NO_MORE_DATA.
ENDIF.
SELECT * FROM CDPOS INTO TABLE INT_CDPOS
FOR ALL ENTRIES IN INT_CDHDR
WHERE OBJECTID = INT_CDHDR-OBJECTID
AND TABNAME = 'MARC'
AND ( FNAME = 'BSTMA' OR FNAME = 'MINBE' ).
LOOP AT int_cdpos.
int_matnr-matnr = int_cdpos-objectid.
APPEND int_matnr.
ENDLOOP.
SELECT matnr MINBE BSTMA WERKS FROM MARC INTO TABLE INT_marc
FOR ALL ENTRIES IN int_matnr
WHERE MATNR = INT_matnr-matnr.
SELECT matnr VERPR STPRS LBKUM FROM MBEW INTO TABLE INT_MBEW
FOR ALL ENTRIES IN int_matnr
WHERE MATNR = INT_matnr-matnr.
SELECT matnr MBLNR MENGE DMBTR FROM MSEG INTO TABLE INT_MSEG
FOR ALL ENTRIES IN int_matnr
WHERE MATNR = INT_matnr-matnr.
LOOP AT int_MSEG.
int_MKPF-MBLNR = int_MSEG-MBLNR.
APPEND int_MKPF.
ENDLOOP.
SELECT MBLNR BUDAT FROM MKPF INTO TABLE INT_MKPF
FOR ALL ENTRIES IN int_MKPF
WHERE MBLNR = INT_MKPF-MBLNR.
*BREAK-POINT.
LOOP AT INT_CDPOS.
READ TABLE INT_CDHDR WITH KEY OBJECTID = INT_CDPOS-OBJECTID .
IF SY-SUBRC = 0.
INT_OBJDATE-OBJECTID = INT_CDPOS-OBJECTID.
INT_OBJDATE-VALUE_NEW = INT_CDPOS-VALUE_NEW.
INT_OBJDATE-VALUE_OLD = INT_CDPOS-VALUE_OLD.
INT_OBJDATE-UDATE = INT_CDHDR-UDATE.
READ TABLE INT_MARC WITH KEY MATNR = INT_CDPOS-OBJECTID .
IF SY-SUBRC = 0.
INT_OBJDATE-MINBE = INT_MARC-MINBE.
INT_OBJDATE-BSTMA = INT_MARC-BSTMA.
INT_OBJDATE-WERKS = INT_MARC-WERKS.
ENDIF.
READ TABLE INT_MBEW WITH KEY MATNR = INT_CDPOS-OBJECTID .
IF SY-SUBRC = 0.
INT_OBJDATE-VERPR = INT_MBEW-VERPR.
INT_OBJDATE-STPRS = INT_MBEW-STPRS.
INT_OBJDATE-LBKUM = INT_MBEW-LBKUM.
ENDIF.
READ TABLE INT_MSEG WITH KEY MATNR = INT_CDPOS-OBJECTID .
IF SY-SUBRC = 0.
INT_OBJDATE-MBLNR = INT_MSEG-MBLNR.
INT_OBJDATE-MENGE = INT_MSEG-MENGE.
INT_OBJDATE-DMBTR = INT_MSEG-DMBTR.
ENDIF.
READ TABLE INT_MKPF WITH KEY MBLNR = INT_MSEG-MBLNR .
IF SY-SUBRC = 0.
INT_OBJDATE-MBLNR = INT_MKPF-MBLNR.
INT_OBJDATE-BUDAT = INT_MKPF-BUDAT.
ENDIF.
APPEND INT_OBJDATE.
ENDIF.
ENDLOOP.
*SELECT * FROM EBAN
INTO CORRESPONDING FIELDS OF TABLE INT_PR1
FOR ALL ENTRIES IN INT_OBJDATE
WHERE BAnfn = int_objdate-objectid.
*ZZPRREL
LOOP AT INT_OBJDATE.
E_T_DATA-OBJECTID = INT_OBJDATE-OBJECTID.
E_T_DATA-UDATE = INT_OBJDATE-UDATE.
E_T_DATA-VALUE_NEW = INT_OBJDATE-VALUE_NEW.
E_T_DATA-VALUE_OLD = INT_OBJDATE-VALUE_OLD.
E_T_DATA-MINBE = INT_OBJDATE-MINBE.
E_T_DATA-BSTMA = INT_OBJDATE-BSTMA.
E_T_DATA-WERKS = INT_OBJDATE-WERKS.
E_T_DATA-VERPR = INT_OBJDATE-VERPR.
E_T_DATA-STPRS = INT_OBJDATE-STPRS.
E_T_DATA-LBKUM = INT_OBJDATE-LBKUM.
E_T_DATA-MBLNR = INT_OBJDATE-MBLNR.
E_T_DATA-MENGE = INT_OBJDATE-MENGE.
E_T_DATA-DMBTR = INT_OBJDATE-DMBTR.
E_T_DATA-BUDAT = INT_OBJDATE-BUDAT.
APPEND E_T_DATA.
CLEAR E_T_DATA.
ENDLOOP.
Fetch records into interface table.
named E_T_'Name of extract structure'.
S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.
i assign points....
Regards,
PSR.Hi ,
i am not find any sollution for this..
any body help me for this problum...
i assign points..
Regards,
PSR -
Error when Fetching CATs Data to BI
Hi,
I have created data source in R/3 System (Source System) for CATS data and extracting data Using function Module. Using transaction RSA3 it is fetching all the desired records in R/3 System.
In BI System extracting Full Data and when monitoring it is throwing Error.
Error 7 when sending an IDoc
Error when opening an RFC connection 2
Error when opening an RFC connection
Errors in source system
Function Module for fetching CATS Data
FUNCTION ZLBTIME_GET_CATSREC.
*"*"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
*" VALUE(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 ZLSCATS OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
* Example: DataSource for table SFLIGHT
* TABLES: SFLIGHT.
* 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.
* Select ranges
** RANGES: L_R_CARRID FOR SFLIGHT-CARRID,
** L_R_CONNID FOR SFLIGHT-CONNID.
* 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
* Check DataSource validity
CASE I_DSOURCE.
WHEN 'ZLTIME_DS_3'.
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 = 'CARRID'.
** MOVE-CORRESPONDING L_S_SELECT TO L_R_CARRID.
** APPEND L_R_CARRID.
** ENDLOOP.
** LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CONNID'.
** MOVE-CORRESPONDING L_S_SELECT TO L_R_CONNID.
** APPEND L_R_CONNID.
** 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.
** OPEN CURSOR WITH HOLD S_CURSOR FOR
** SELECT (S_S_IF-T_FIELDS) FROM SFLIGHT
** WHERE CARRID IN L_R_CARRID AND
** CONNID IN L_R_CONNID.
OPEN CURSOR WITH HOLD s_cursor FOR
* SELECT * FROM zlvctmbw.
SELECT a~counter a~pernr a~workdate a~skostl a~lstar a~rproj a~awart a~kokrs a~meinh a~tcurr a~price
a~unit a~bukrs a~ersda a~erstm a~ernam a~laeda a~laetm a~status a~refcounter a~reason a~belnr
a~catshours a~act1 a~act2 a~task a~lang1 a~narr1 a~lang2 a~narr2 a~cmnt a~clst a~plchl
b~ltxa1 b~transfer b~hrkostl b~hrlstar b~hrcostasg b~statkeyfig b~catsquantity b~bemot
c~pspnr c~pspid
d~kunnr
FROM catsdb AS a
LEFT OUTER JOIN catsco AS b ON a~counter = b~counter
JOIN prps AS p ON p~pspnr = a~rproj
JOIN proj AS c ON c~pspnr = p~psphi
JOIN zltproj AS d ON d~pspnr = c~pspnr.
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.
S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.
When fetching data using VIEW in source system it works fine.
When testing for fetching data of SFLIGHT using function module ZRSAX_BIW_GET_DATA_SIMPLE
made a copy of RSAX_BIW_GET_DATA_SIMPLE, it is working fine.
Pls suggest the cause of error.
Regards
VishalHello Praveen,
Connection is fine as I tried fetching data of SFLIGHT using standard template function module which works fine and in transaction sm58 I do not any data.
Regards
Vishal
Maybe you are looking for
-
I am running windows XP professional X64 Edition and it is necessary for me to instll Adobe reader 9
I am running windows XP profession X64 edition and it is necessary for me to install and use Adobe reader 9. Please advise procedure(s)
-
HT201401 how do I disable my phone so that people can text message me on a new non-iphone
I have followed the steps recommended by you you guys in the troubleshooting, but I am still not able to received texts from certain people that are using iphones
-
Disabling user in FND_USER
We want to disable 100+ users, can we simply update end_date in fnd_user. Or we need to update wf_user_roles etc.
-
Adobe forms: Displaying work area data in different windows
Hi, I have a requirement of showing work area data in different windows i.e work area which has sent from program needs to come in different windows of the form. I have created a smartform which will perfectly doing the above logic. The above work ar
-
Smart guides and snap to point not working in Adobe Illustrator CC 2014
Hello, I am having a lot of issues with Illustrator CC 2014 and the Smart Guides. Every time I try and snap one object to another or snap an object to a guide, the object snaps either above or below the guide/object but never snaps correctly. This al