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.

martes, 23 de septiembre de 2008

Smartforms Formatting_Error 323

Cuando la condicion de direccion esta vacia tira este error. Por ende es necesario validar que no sea initial.

Primero seleccionamos:




Vamos a la solapa de Condicion y validamos este:

lunes, 8 de septiembre de 2008

DELETE ADJACENT DUPLICATES

Para borrar registros duplicados en una tabla interna se utiliza la sentencia "DELETE ADJACENT DUPLICATES" . Se utiliza casi siempre antes de hacer un for all entries. Se recomienda hacer el filtro por los mismos que se van a acceder (filtrar) luego en el for all entriens, como tambien el sort.

Ejemplo(esta tabla me provino de una función):

SORT ti_fkkcl "Ordeno tabla por campos de acceso
BY opbel
opupw
opupk
opupz.

*Se copia la tabla para no eliminar datos de posible utilizacion luego.
ti_fkkcl_aux[] = ti_fkkcl[].

*Delete duplicates
DELETE ADJACENT DUPLICATES FROM ti_fkkcl_aux
COMPARING opbel "Se elimina por acceso
opupw
opupk
opupz.

*FKKMAZE - Histórico de reclamação - itens do documento
SELECT laufd
laufi
gpart
vkont
mazae
opbel
opupw
opupk
opupz
mahns
xmsto
xinfo
mahnv
FROM fkkmaze
INTO TABLE ti_fkkmaze
FOR ALL ENTRIES IN ti_fkkcl_aux
WHERE opbel EQ ti_fkkcl_aux-opbel
AND opupw EQ ti_fkkcl_aux-opupw
AND opupk EQ ti_fkkcl_aux-opupk
AND opupz EQ ti_fkkcl_aux-opupz
AND xinfo EQ space
AND xmsto EQ space.

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