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, 30 de junio de 2009

Reporte ALV con objetos

Aca les doy ejemplo simple de un reporte alv con objetos. El mismo lo que hace es fijarse las peticiones de compra sin orden de compra. El G_CONTAINER es es el objeto container que en la dynpro tienen que dibujar (como module pool), ahi es donde se va a volcar todo.

Para bajar el ejemplo:

http://www.megaupload.com/?d=NSPSH47Q

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.

viernes, 15 de agosto de 2008

Operadores lógicos


En vez de usar los típicos operadores lógicos, abap permite ponerlos en forma de letras..y dicen..muchos...que es mejor ponerlos así...por prolijidad.

ALV-hierseq con fieldcat a mano:

El ALV jerarquico tiene la particularidad de mostrar cosas de 2 tablas distintas con un enlace llamado key-info que es una tabla.

TABLES: zmcabecera, zmdetalle, zmproveedor.

DATA: BEGIN OF ti_header OCCURS 0.
INCLUDE STRUCTURE zmcabecera.
DATA END OF ti_header.

DATA: BEGIN OF ti_prov OCCURS 0.
INCLUDE STRUCTURE zmproveedor.
DATA END OF ti_prov.

DATA: BEGIN OF ti_info OCCURS 0.
INCLUDE STRUCTURE zmdetalle.
DATA END OF ti_info.

* Type Pool donde vienen definidas todas las estructuras y tablas
TYPE-POOLS: slis.
* Catálogo de campos: contiene la descripción de los campos de salida
DATA: ti_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
* Especificaciones de la disposición de la lista: descripción de la
* estructura de salida
ti_layout TYPE slis_layout_alv,
* Relacion entre los datos de cabecera y posicion
ti_key TYPE slis_keyinfo_alv.

START-OF-SELECTION.

PERFORM cargotablas.
PERFORM armosalida.
PERFORM imprimo.


*&---------------------------------------------------------------------*
*& Form cargotablas
*&---------------------------------------------------------------------*
FORM cargotablas .

SELECT * FROM zmcabecera INTO TABLE ti_header.

SELECT * FROM zmproveedor INTO TABLE ti_prov.

SELECT * FROM zmdetalle
INTO TABLE ti_info
FOR ALL ENTRIES IN ti_header
WHERE idpedido = ti_header-idpedido.

ENDFORM. " cargotablas

*&---------------------------------------------------------------------*
*& Form armosalida
*&---------------------------------------------------------------------*
FORM armosalida .

ti_fieldcat-fieldname = 'IDPEDIDO'.
ti_fieldcat-tabname = 'TI_HEADER'.
ti_fieldcat-ref_tabname = 'ZMCABECERA'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'FECHA'.
ti_fieldcat-tabname = 'TI_HEADER'.
ti_fieldcat-ref_tabname = 'ZMCABECERA'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'IDPROVEEDOR'.
ti_fieldcat-tabname = 'TI_HEADER'.
ti_fieldcat-ref_tabname = 'ZMCABECERA'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'IMPORTETOTAL'.
ti_fieldcat-tabname = 'TI_HEADER'.
ti_fieldcat-ref_tabname = 'ZMCABECERA'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'IDPEDIDO'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'ITEM'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'CANTIDAD'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'DESCRIPCION'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'IMPORTE'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

* Relacion entre los campos de cabecera y los de posicion
ti_key-header01 = 'IDPEDIDO'.
ti_key-item01 = 'IDPEDIDO'.


ENDFORM. " armosalida


*&---------------------------------------------------------------------*
*& Form imprimo
*&---------------------------------------------------------------------*
FORM imprimo .
DATA: c_repid LIKE sy-repid.
c_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
i_callback_program = c_repid
* I_CALLBACK_PF_STATUS_SET = ' '
i_callback_user_command = 'USER_COMMAND'
* IS_LAYOUT =
it_fieldcat = ti_fieldcat[]
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IT_EVENT_EXIT =
i_tabname_header = 'TI_HEADER'
i_tabname_item = 'TI_INFO'
* I_STRUCTURE_NAME_HEADER =
* I_STRUCTURE_NAME_ITEM =
is_keyinfo = ti_key
* I_BUFFER_ACTIVE =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab_header = ti_header[]
t_outtab_item = ti_info[]
EXCEPTIONS
program_error = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE e162(00) WITH 'No se pudo abrir el archivo'(006).
ENDIF.

ENDFORM. " imprimo


*---------------------------------------------------------------------*
* FORM user_command
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
* --> R_UCOMM
* --> RS_SELFIELD
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
BREAK-POINT.
READ TABLE ti_prov WITH KEY idproveedor = rs_selfield-value.
IF sy-subrc EQ 0.
MESSAGE i398(00) WITH 'EL NOMBRE ES:'(007) ti_prov-nombre
'Y SU TEL. ES:'(008) ti_prov-telefono.
ENDIF.
ENDFORM. "user_command


martes, 12 de agosto de 2008

Reporte ALV-Grid con fieldcat por funcion

*-- Declaración de Tablas
TABLES: usr01," Maestro de usuarios (datos de tiempo de ejecución)
usr21.

*-- Declaración de Tablas Internas
DATA: BEGIN OF ti_salida OCCURS 0,
bname LIKE usr01-bname,
spld LIKE usr01-spld,
spdb LIKE usr01-spdb,
addrnumber LIKE usr21-addrnumber,
END OF ti_salida.

TYPE-POOLS: slis.

* Tablas internas para ALV
DATA: ti_fieldcat TYPE slis_t_fieldcat_alv.
DATA: wa_layout TYPE slis_layout_alv.
DATA: wa_fieldcat TYPE LINE OF slis_t_fieldcat_alv .

*--Parámetros de Seleción
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_bname LIKE usr01-bname.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
PERFORM busqueda_datos.
PERFORM preparar_salida.
PERFORM mostrar_datos.

*&---------------------------------------------------------------------*
*& Form busqueda_datos
*&---------------------------------------------------------------------*

FORM busqueda_datos .

SELECT a~bname a~spld a~spdb b~addrnumber
FROM usr01 AS a INNER JOIN usr21 AS b
ON a~bname EQ b~bname
INTO TABLE ti_salida
WHERE a~bname EQ p_bname.

ENDFORM. " busqueda_datos
*&---------------------------------------------------------------------*
*& Form Mostrar_pedidos
*&---------------------------------------------------------------------*

FORM mostrar_datos .

DATA c_repid LIKE sy-repid VALUE sy-repid.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* i_callback_program = c_repid
* i_callback_pf_status_set = 'PF_STATUS'
* i_callback_user_command = 'USER_COMMAND'
* i_structure_name = 'TI_ALV'
is_layout = wa_layout
it_fieldcat = ti_fieldcat[]
* i_save = 'A'
TABLES
t_outtab = ti_salida
EXCEPTIONS
program_error = 1
OTHERS = 2.

ENDFORM. " Mostrar_datos
*&---------------------------------------------------------------------*
*& Form preparar_salida
*&---------------------------------------------------------------------*

FORM preparar_salida .

DATA c_repid LIKE sy-repid VALUE sy-repid.


CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = c_repid
i_internal_tabname = 'TI_SALIDA'
* I_STRUCTURE_NAME = 'SIMLISTRUC'
* i_client_never_display = 'X'
i_inclname = c_repid
CHANGING
ct_fieldcat = ti_fieldcat.

wa_layout-zebra = 'X'.

ENDFORM. " preparar_salida
 
Free counter and web stats