Para la creación de fuente de datos desde R3/BW , accedemos a la TX. RSO2. Se puede realizar por VISTA / FUNCIÓN . A continuación un ejempo por función :
Codigo ABAP para levantar datos una tabla (BSIS) :
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR
*" REFERENCE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL
*" REFERENCE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL
*" REFERENCE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL
*" REFERENCE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL
*" REFERENCE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT
*" SBIWA_C_FLAG_OFF
*" TABLES
*" E_T_DATA TYPE ZBWT004 OPTIONAL
*" I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
*"----------------------------------------------------------------------
*==================================================================
* DATA
*------------------------------------------------------------------
TABLES : bsis.
DATA : lt_bsid TYPE STANDARD TABLE OF zbwe002.
* Auxiliary Selection criteria structure
DATA: le_select LIKE LINE OF i_t_select .
DATA: le_zfit074 TYPE zfit074.
DATA: lv_format TYPE c.
DATA lv_string(60) TYPE c.
DATA lv_delta TYPE c.
* Maximum number of lines for DB table
STATICS: le_if TYPE srsc_s_if_simple,
* counter
lv_counter_datapakid TYPE sy-tabix,
* cursor
lv_cursor TYPE cursor,
lv_year TYPE gjahr.
RANGES : lr_belnr FOR bsis-belnr,
lr_budat FOR bsis-budat,
lr_gjahr FOR bsis-gjahr,
lr_hkont FOR bsis-hkont,
lr_bukrs FOR bsis-bukrs.
*==================================================================
* Constantes
*------------------------------------------------------------------
CONSTANTS : lc_belnr(5) TYPE c VALUE 'BELNR',
lc_format(6) TYPE c VALUE 'FORMAT',
lc_budat(5) TYPE c VALUE 'BUDAT',
lc_hkont(5) TYPE c VALUE 'HKONT',
lc_gjahr(5) TYPE c VALUE 'GJAHR',
lc_bukrs(5) TYPE c VALUE 'BUKRS',
lc_fuente1(10) TYPE c VALUE 'ZFU_BW_001',
lc_fuente2(10) TYPE c VALUE 'ZFU_BW_005',
lc_bhsa(4) TYPE c VALUE 'BHSA'.
*==================================================================
* S T A R T - O F - S E L E C T I O N
*==================================================================
DATA : lv_gjahr(4) TYPE n.
*TESTING
*LOG BUDAT (Para Verificacion)
LOOP AT i_t_select INTO le_select.
CONCATENATE le_select-fieldnm '-' le_select-option '-' le_select-low '-' le_select-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
CLEAR lv_string.
ENDLOOP.
*FIN TESTING
*Ver DELTA
IF i_dsource EQ lc_fuente2.
lv_delta = 'X'.
ENDIF.
*BELNR
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_belnr.
MOVE-CORRESPONDING le_select TO lr_belnr.
APPEND lr_belnr.
ENDLOOP.
*GJAHR
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_gjahr.
MOVE-CORRESPONDING le_select TO lr_gjahr.
lv_year = le_select-low.
APPEND lr_gjahr.
ENDLOOP.
*BUDAT
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_budat.
MOVE-CORRESPONDING le_select TO lr_budat.
*---CORRECCION FECHA DELTA
IF lv_delta EQ 'X'.
IF lr_budat-low LT lr_budat-high.
lr_budat-low = lr_budat-low + 1.
ENDIF.
ENDIF.
APPEND lr_budat.
ENDLOOP.
*HKONT
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_hkont.
MOVE-CORRESPONDING le_select TO lr_hkont.
APPEND lr_hkont.
ENDLOOP.
*BUKRS
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_bukrs.
MOVE-CORRESPONDING le_select TO lr_bukrs.
APPEND lr_bukrs.
ENDLOOP.
*Sociedad
IF lr_bukrs[] IS INITIAL.
lr_bukrs-sign = 'I'.
lr_bukrs-option = 'EQ'.
lr_bukrs-low = lc_bhsa.
APPEND lr_bukrs.
ENDIF.
*Cuenta por default
IF lr_hkont[] IS INITIAL.
SELECT SINGLE * FROM zfit074
INTO le_zfit074
WHERE sociedad IN lr_bukrs AND
programa EQ sy-repid AND
campo EQ lc_hkont.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING le_zfit074 TO lr_hkont.
lr_hkont-option = le_zfit074-c_option.
ENDIF.
APPEND lr_hkont.
ENDIF.
*LOG BUDAT (Para Verificacion)
CONCATENATE lr_budat-sign '-' lr_budat-option '-' lr_budat-low '-' lr_budat-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
CLEAR lv_string.
*---------------------------------------
*Asignar Ejercicio si no esta completo
IF lr_gjahr[] IS INITIAL.
READ TABLE lr_budat INDEX 1.
IF sy-subrc EQ 0. "GDP 13.01.2016
lv_gjahr = lr_budat-low(4).
lr_gjahr-sign = 'I'.
lr_gjahr-option = 'BT'.
lr_gjahr-high = lv_gjahr .
lv_gjahr = lv_gjahr - 1.
lr_gjahr-low = lv_gjahr.
APPEND lr_gjahr.
ENDIF."GDP 13.01.2016
ENDIF.
*---LOG PARAMETROS ENTRADA
*LOG BUDAT (Para Verificacion)
READ TABLE lr_budat INDEX 1.
IF sy-subrc EQ 0.
CONCATENATE lr_budat-sign '-' lr_budat-option '-' lr_budat-low '-' lr_budat-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
ENDIF.
*LOG GJAHR (Para Verificacion)
READ TABLE lr_gjahr INDEX 1.
IF sy-subrc EQ 0.
CONCATENATE lr_gjahr-sign '-' lr_gjahr-option '-' lr_gjahr-low '-' lr_gjahr-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
ENDIF.
*LOG BUKRS (Para Verificacion)
READ TABLE lr_bukrs INDEX 1.
IF sy-subrc EQ 0.
CONCATENATE lr_bukrs-sign '-' lr_bukrs-option '-' lr_bukrs-low '-' lr_bukrs-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
ENDIF.
* Initialization mode (first call by SAPI) or data transfer mode
* (following calls) ?
IF i_initflag = sbiwa_c_flag_on.
CASE i_dsource.
WHEN lc_fuente1.
WHEN lc_fuente2.
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 le_if-t_select.
* Fill parameter buffer for data extraction calls
le_if-requnr = i_requnr.
le_if-dsource = i_dsource.
le_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 le_if-t_fields.
ELSE. "Initialization mode or data extraction ?
* First data package -> OPEN CURSOR
* IF lv_delta IS INITIAL. "FULL
* IF lv_counter_datapakid = 0.
*
* OPEN CURSOR WITH HOLD lv_cursor FOR
*
**BSIS
**--->Carga FULL
*
* SELECT bukrs augdt
* augbl zuonr gjahr belnr buzei
* budat bldat waers xblnr
* shkzg gsber mwskz dmbtr
* wrbtr hkont kostl fipos
* fistl fkber aufnr
* FROM bsis
* WHERE belnr IN lr_belnr AND
* budat IN lr_budat AND
* hkont IN lr_hkont AND
* gjahr IN lr_gjahr AND
* bukrs IN lr_bukrs.
*
* ENDIF.
*
*
* FETCH NEXT CURSOR lv_cursor
* APPENDING CORRESPONDING FIELDS
* OF TABLE e_t_data
* PACKAGE SIZE le_if-maxsize.
*
* ELSE.
*--->Carga DELTA
IF lv_counter_datapakid = 0.
OPEN CURSOR WITH HOLD lv_cursor FOR
*BSIS
SELECT bsis~bukrs bsis~augdt
bsis~augbl bsis~zuonr bsis~gjahr bsis~belnr bsis~buzei
bsis~budat bsis~bldat bsis~waers bsis~xblnr
bsis~shkzg bsis~gsber bsis~mwskz bsis~dmbtr
bsis~wrbtr bsis~hkont bsis~kostl bsis~fipos
bsis~fistl bsis~fkber bsis~aufnr
FROM bkpf INNER JOIN bsis
ON bkpf~bukrs = bsis~bukrs AND
bkpf~belnr = bsis~belnr AND
bkpf~gjahr = bsis~gjahr
WHERE bkpf~belnr IN lr_belnr AND
* budat IN lr_budat AND
bkpf~cpudt IN lr_budat AND
bsis~hkont IN lr_hkont AND
bkpf~gjahr IN lr_gjahr AND
bkpf~bukrs IN lr_bukrs.
*---
ENDIF.
FETCH NEXT CURSOR lv_cursor
APPENDING CORRESPONDING FIELDS
OF TABLE e_t_data
PACKAGE SIZE le_if-maxsize.
* ENDIF."DELTA
IF sy-subrc <> 0.
CLOSE CURSOR lv_cursor.
RAISE no_more_data.
ENDIF.
lv_counter_datapakid = lv_counter_datapakid + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.
Codigo ABAP para levantar datos una tabla (BSIS) :
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR
*" REFERENCE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL
*" REFERENCE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL
*" REFERENCE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL
*" REFERENCE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL
*" REFERENCE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT
*" SBIWA_C_FLAG_OFF
*" TABLES
*" E_T_DATA TYPE ZBWT004 OPTIONAL
*" I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
*"----------------------------------------------------------------------
*==================================================================
* DATA
*------------------------------------------------------------------
TABLES : bsis.
DATA : lt_bsid TYPE STANDARD TABLE OF zbwe002.
* Auxiliary Selection criteria structure
DATA: le_select LIKE LINE OF i_t_select .
DATA: le_zfit074 TYPE zfit074.
DATA: lv_format TYPE c.
DATA lv_string(60) TYPE c.
DATA lv_delta TYPE c.
* Maximum number of lines for DB table
STATICS: le_if TYPE srsc_s_if_simple,
* counter
lv_counter_datapakid TYPE sy-tabix,
* cursor
lv_cursor TYPE cursor,
lv_year TYPE gjahr.
RANGES : lr_belnr FOR bsis-belnr,
lr_budat FOR bsis-budat,
lr_gjahr FOR bsis-gjahr,
lr_hkont FOR bsis-hkont,
lr_bukrs FOR bsis-bukrs.
*==================================================================
* Constantes
*------------------------------------------------------------------
CONSTANTS : lc_belnr(5) TYPE c VALUE 'BELNR',
lc_format(6) TYPE c VALUE 'FORMAT',
lc_budat(5) TYPE c VALUE 'BUDAT',
lc_hkont(5) TYPE c VALUE 'HKONT',
lc_gjahr(5) TYPE c VALUE 'GJAHR',
lc_bukrs(5) TYPE c VALUE 'BUKRS',
lc_fuente1(10) TYPE c VALUE 'ZFU_BW_001',
lc_fuente2(10) TYPE c VALUE 'ZFU_BW_005',
lc_bhsa(4) TYPE c VALUE 'BHSA'.
*==================================================================
* S T A R T - O F - S E L E C T I O N
*==================================================================
DATA : lv_gjahr(4) TYPE n.
*TESTING
*LOG BUDAT (Para Verificacion)
LOOP AT i_t_select INTO le_select.
CONCATENATE le_select-fieldnm '-' le_select-option '-' le_select-low '-' le_select-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
CLEAR lv_string.
ENDLOOP.
*FIN TESTING
*Ver DELTA
IF i_dsource EQ lc_fuente2.
lv_delta = 'X'.
ENDIF.
*BELNR
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_belnr.
MOVE-CORRESPONDING le_select TO lr_belnr.
APPEND lr_belnr.
ENDLOOP.
*GJAHR
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_gjahr.
MOVE-CORRESPONDING le_select TO lr_gjahr.
lv_year = le_select-low.
APPEND lr_gjahr.
ENDLOOP.
*BUDAT
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_budat.
MOVE-CORRESPONDING le_select TO lr_budat.
*---CORRECCION FECHA DELTA
IF lv_delta EQ 'X'.
IF lr_budat-low LT lr_budat-high.
lr_budat-low = lr_budat-low + 1.
ENDIF.
ENDIF.
APPEND lr_budat.
ENDLOOP.
*HKONT
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_hkont.
MOVE-CORRESPONDING le_select TO lr_hkont.
APPEND lr_hkont.
ENDLOOP.
*BUKRS
LOOP AT i_t_select INTO le_select WHERE fieldnm = lc_bukrs.
MOVE-CORRESPONDING le_select TO lr_bukrs.
APPEND lr_bukrs.
ENDLOOP.
*Sociedad
IF lr_bukrs[] IS INITIAL.
lr_bukrs-sign = 'I'.
lr_bukrs-option = 'EQ'.
lr_bukrs-low = lc_bhsa.
APPEND lr_bukrs.
ENDIF.
*Cuenta por default
IF lr_hkont[] IS INITIAL.
SELECT SINGLE * FROM zfit074
INTO le_zfit074
WHERE sociedad IN lr_bukrs AND
programa EQ sy-repid AND
campo EQ lc_hkont.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING le_zfit074 TO lr_hkont.
lr_hkont-option = le_zfit074-c_option.
ENDIF.
APPEND lr_hkont.
ENDIF.
*LOG BUDAT (Para Verificacion)
CONCATENATE lr_budat-sign '-' lr_budat-option '-' lr_budat-low '-' lr_budat-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
CLEAR lv_string.
*---------------------------------------
*Asignar Ejercicio si no esta completo
IF lr_gjahr[] IS INITIAL.
READ TABLE lr_budat INDEX 1.
IF sy-subrc EQ 0. "GDP 13.01.2016
lv_gjahr = lr_budat-low(4).
lr_gjahr-sign = 'I'.
lr_gjahr-option = 'BT'.
lr_gjahr-high = lv_gjahr .
lv_gjahr = lv_gjahr - 1.
lr_gjahr-low = lv_gjahr.
APPEND lr_gjahr.
ENDIF."GDP 13.01.2016
ENDIF.
*---LOG PARAMETROS ENTRADA
*LOG BUDAT (Para Verificacion)
READ TABLE lr_budat INDEX 1.
IF sy-subrc EQ 0.
CONCATENATE lr_budat-sign '-' lr_budat-option '-' lr_budat-low '-' lr_budat-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
ENDIF.
*LOG GJAHR (Para Verificacion)
READ TABLE lr_gjahr INDEX 1.
IF sy-subrc EQ 0.
CONCATENATE lr_gjahr-sign '-' lr_gjahr-option '-' lr_gjahr-low '-' lr_gjahr-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
ENDIF.
*LOG BUKRS (Para Verificacion)
READ TABLE lr_bukrs INDEX 1.
IF sy-subrc EQ 0.
CONCATENATE lr_bukrs-sign '-' lr_bukrs-option '-' lr_bukrs-low '-' lr_bukrs-high INTO lv_string.
CONDENSE lv_string.
MESSAGE s002(zbw01) WITH lv_string.
ENDIF.
* Initialization mode (first call by SAPI) or data transfer mode
* (following calls) ?
IF i_initflag = sbiwa_c_flag_on.
CASE i_dsource.
WHEN lc_fuente1.
WHEN lc_fuente2.
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 le_if-t_select.
* Fill parameter buffer for data extraction calls
le_if-requnr = i_requnr.
le_if-dsource = i_dsource.
le_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 le_if-t_fields.
ELSE. "Initialization mode or data extraction ?
* First data package -> OPEN CURSOR
* IF lv_delta IS INITIAL. "FULL
* IF lv_counter_datapakid = 0.
*
* OPEN CURSOR WITH HOLD lv_cursor FOR
*
**BSIS
**--->Carga FULL
*
* SELECT bukrs augdt
* augbl zuonr gjahr belnr buzei
* budat bldat waers xblnr
* shkzg gsber mwskz dmbtr
* wrbtr hkont kostl fipos
* fistl fkber aufnr
* FROM bsis
* WHERE belnr IN lr_belnr AND
* budat IN lr_budat AND
* hkont IN lr_hkont AND
* gjahr IN lr_gjahr AND
* bukrs IN lr_bukrs.
*
* ENDIF.
*
*
* FETCH NEXT CURSOR lv_cursor
* APPENDING CORRESPONDING FIELDS
* OF TABLE e_t_data
* PACKAGE SIZE le_if-maxsize.
*
* ELSE.
*--->Carga DELTA
IF lv_counter_datapakid = 0.
OPEN CURSOR WITH HOLD lv_cursor FOR
*BSIS
SELECT bsis~bukrs bsis~augdt
bsis~augbl bsis~zuonr bsis~gjahr bsis~belnr bsis~buzei
bsis~budat bsis~bldat bsis~waers bsis~xblnr
bsis~shkzg bsis~gsber bsis~mwskz bsis~dmbtr
bsis~wrbtr bsis~hkont bsis~kostl bsis~fipos
bsis~fistl bsis~fkber bsis~aufnr
FROM bkpf INNER JOIN bsis
ON bkpf~bukrs = bsis~bukrs AND
bkpf~belnr = bsis~belnr AND
bkpf~gjahr = bsis~gjahr
WHERE bkpf~belnr IN lr_belnr AND
* budat IN lr_budat AND
bkpf~cpudt IN lr_budat AND
bsis~hkont IN lr_hkont AND
bkpf~gjahr IN lr_gjahr AND
bkpf~bukrs IN lr_bukrs.
*---
ENDIF.
FETCH NEXT CURSOR lv_cursor
APPENDING CORRESPONDING FIELDS
OF TABLE e_t_data
PACKAGE SIZE le_if-maxsize.
* ENDIF."DELTA
IF sy-subrc <> 0.
CLOSE CURSOR lv_cursor.
RAISE no_more_data.
ENDIF.
lv_counter_datapakid = lv_counter_datapakid + 1.
ENDIF. "Initialization mode or data extraction ?
ENDFUNCTION.

No hay comentarios:
Publicar un comentario