#1
|
|||
|
|||
Array Fetch
Amigos:
Miren tengo problemas con un Array Fetch, me piden seleccionar los registros de la tabla BKPF de una solas vez ( ARRAY FETCH ), luego procesar los datos en la tabla interna. La idea es que mejore la performance.El código es el siguiente: LOOP AT i_output . CONCATENATE i_output-belnr i_output-gjahr INTO clave . SELECT SINGLE bldat xblnr waers INTO (i_output-bldat, i_output-xblnr, i_output-waers_i) FROM bkpf WHERE awtyp = 'RMRP' AND bukrs = i_output-bukrs AND gjahr = i_output-gjahr AND awkey = clave . IF sy-subrc EQ 0 . MODIFY i_output. SELECT SINGLE wrbtr INTO i_output-importe FROM bseg WHERE bukrs = i_output-bukrs AND belnr = i_output-knbelnr AND gjahr = i_output-gjahr . IF sy-subrc EQ 0 . MODIFY i_output . ENDIF . SELECT SINGLE augbl INTO i_output-augbl FROM bsak WHERE belnr = i_output-knbelnr AND xblnr = i_output-xblnr AND bukrs = i_output-bukrs AND gjahr = i_output-gjahr AND lifnr = i_output-lifnr . IF sy-subrc EQ 0 . i_output-pagado = 'Pagado' . MODIFY i_output . CLEAR i_output-augbl . CLEAR i_output-pagado . ENDIF . CLEAR i_output-xblnr . CLEAR i_output-bldat . ENDIF . ENDLOOP . |
#2
|
|||
|
|||
Hay muchos mensajes referentes al performance en este foro, puedes buscar algun para ampliar un poco mas de informacion pero como norma general no se debe utilizar
LOOP Select single ... ENDLOOP es mejor utilizar Select.. FOR ALL ENTRIES .. o si la tabla del for all entries es muy grande puedes partirla en trozos que vas metiendo en rangos y acumulando los select, algo asi data: lv_conta type i. ranges: s_rango for... LOOP tabla add 1 to lv_conta if lv_conta = 500 select ... APPENDING TABLE... WHERE campo in S_RANGO clear lv_conta. else. s_rango-sign = 'I'. s_rango-option = 'EQ'. s_rango-low = tabla-valor append s_rango. clear s_rango. endif. ENDLOOP |
Herramientas | Buscar en Tema |
Desplegado | |
|
|