Datos personales

Mi foto
Soy programador/analista. Mis fuertes es el mundo de sap(como abaper), programador php con gran experiencia en el mundo Wordpress y Joomla.
Mostrando entradas con la etiqueta Lectura Binaria Binary Search Read Sort. Mostrar todas las entradas
Mostrando entradas con la etiqueta Lectura Binaria Binary Search Read Sort. Mostrar todas las entradas

viernes, 5 de septiembre de 2008

Lectura Binaria (Binary Search)

Para realizar una lectura binaria, es necesario si o si realizar un ordenamiento previo por los campos de acceso (osea realizar un sort previo de esa tabla interna a leer).

*&---------------------------------------------------------------------*
*& Report ZCPRUEBA_DSIERRA
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zcprueba_dsierra.

* -------------------------------------------------------------------- *
* Tables *
* -------------------------------------------------------------------- *
tables: equi,
egerh.

* -------------------------------------------------------------------- *
* Types *
* -------------------------------------------------------------------- *

TYPES: BEGIN OF type_equi,
equnr TYPE equi-equnr,
matnr TYPE equi-matnr,
herst TYPE equi-herst,
typbz TYPE equi-typbz,
objnr TYPE equi-objnr,
werk TYPE equi-werk,
sernr TYPE equi-sernr,
lager TYPE equi-lager,
charge TYPE equi-charge,
END OF type_equi.

TYPES: BEGIN OF type_egerh,
equnr TYPE egerh-equnr,
END OF type_egerh.
* -------------------------------------------------------------------- *
* Internal Tables *
* -------------------------------------------------------------------- *
DATA: ti_equi TYPE STANDARD TABLE OF type_equi.
DATA: ti_egerh TYPE STANDARD TABLE OF type_egerh.

* -------------------------------------------------------------------- *
* FIELD-SYMBOLS *
* -------------------------------------------------------------------- *
FIELD-SYMBOLS: LIKE LINE OF ti_equi. "Work area
FIELD-SYMBOLS: LIKE LINE OF ti_egerh. "Work area

* -------------------------------------------------------------------- *
* SELECT-OPTIONS and PARAMETERS *
* -------------------------------------------------------------------- *
selection-screen begin of block b1 with frame title text-001.
SELECT-OPTIONS: sc_matnr FOR equi-matnr. "Stuff
SELECT-OPTIONS: sc_sern FOR equi-sernr. "No. of series
SELECT-OPTIONS: sc_werk FOR equi-werk. "Centre
SELECT-OPTIONS: sc_lager FOR equi-lager. "Filing
SELECT-OPTIONS: sc_char FOR equi-charge. "Lot of Inventories
SELECT-OPTIONS: sd_datum FOR sy-datum OBLIGATORY DEFAULT sy-datum. "Period
SELECTION-SCREEN END OF BLOCK b1.

REFRESH ti_equi. "Limpieza de tabla
REFRESH ti_egerh. "Limpieza de tabla

*--Equipamento dados mestres
SELECT equnr
matnr
herst
typbz
objnr
sernr
werk
lager
charge
FROM equi
INTO TABLE ti_equi
WHERE matnr IN sc_matnr
AND sernr IN sc_sern
AND werk IN sc_werk
AND lager IN sc_lager
AND charge IN sc_char
AND erdat IN sd_datum.



IF NOT ti_equi[] IS INITIAL.


SORT ti_equi
BY equnr.

*Delete Duplicates
DELETE ADJACENT DUPLICATES FROM ti_equi.


SELECT equnr
FROM egerh
INTO TABLE ti_egerh
FOR ALL ENTRIES IN ti_equi
WHERE equnr = ti_equi-equnr
AND bis = '9999'
AND ( ( kombinat = 'Z' )
OR ( kombinat = 'W' )
OR ( kombinat = 'S' ) ).

IF sy-subrc EQ 0.
SORT ti_egerh "Necesario ordenar la tabla para hacer read con binary search
BY equnr.

ENDIF.

LOOP AT ti_equi
ASSIGNING .

READ TABLE ti_egerh
ASSIGNING
WITH KEY
equnr =
BINARY SEARCH. "Lectura binaria

IF sy-subrc EQ 0.
*proceso o guardo algo.
ENDIF.
ENDLOOP.
ENDIF.
 
Free counter and web stats