Hello David,
The problem is with the DO statement.
If you remove it the datasource will work just fine.
data: i_cont type int4, i_venum type venum, i_matnr type matnr. |
data: wa_pallets TYPE zita_pallets. |
* 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 ZITA_PALLETS-CARRID, |
* L_R_CONNID FOR ZITA_PALLETS-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 'ZITA_PALLETS'. |
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. |
* 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 vepo~venum min( vepo~matnr ) |
from likp inner join vekp on ( likp~vbeln = vekp~vpobjkey ) |
inner join vepo on ( likp~vbeln = vepo~vbeln ) and |
( vekp~venum = vepo~venum ) |
where vepo~mandt = sy-mandt and likp~mandt = sy-mandt and vekp~mandt = sy-mandt and |
vekp~vstel = '1100' |
and vekp~erdat between '20130101' and '20130102' |
group by vepo~venum. |
ENDIF. "First data package ? |
i_cont = 1. |
*DO. |
FETCH NEXT CURSOR S_CURSOR INTO (i_venum, i_matnr). |
IF sy-subrc <> 0. |
CLOSE CURSOR S_CURSOR. |
RAISE NO_MORE_DATA. |
* EXIT. |
ENDIF. |
*Sacamos la familia |
select single extwg into wa_pallets-extwg |
from mara client specified |
where mandt = sy-mandt and matnr = i_matnr. |
*Entrega |
select single vbeln into wa_pallets-vbeln |
from vepo client specified |
where mandt = sy-mandt and venum = i_venum. |
*Destinatario de la mercancía |
select single kunnr into wa_pallets-kunnr |
from likp client specified |
where mandt = sy-mandt and vbeln = wa_pallets-vbeln. |
*Población |
select single ort01 into wa_pallets-ort01 |
from kna1 client specified |
where mandt = sy-mandt and kunnr = wa_pallets-kunnr. |
wa_pallets-mandt = sy-mandt. |
wa_pallets-cont = i_cont. |
select vstel vpobjkey exidv erdat vhilm vtweg vkorg |
from vekp client specified |
into (wa_pallets-vstel, wa_pallets-vpobjkey, wa_pallets-exidv, wa_pallets-erdat, wa_pallets-vhilm, wa_pallets-vtweg, wa_pallets-vkorg) |
where mandt = sy-mandt and venum = i_venum. |
endselect. |
append wa_pallets to E_T_DATA. |
i_cont = i_cont + 1. |
*ENDDO. |
** 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. |
READ TABLE e_t_data INDEX 1. |
IF e_t_data IS INITIAL. |
RAISE no_more_data. |
ENDIF. |
ENDIF. "Initialization mode or data extraction ? |
The BOLD in your code are the changes I made and it will work fine.
You just have to remove the DO condition
Please let me know if you face any issues with this.
Thanks
Amit