*&---------------------------------------------------------------------* *& Report ZANMA_ALV2 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT zanma_alv2. **comienzo de definicion de variables globales y locales TYPE-POOLS: slis. DATA it_datos TYPE TABLE OF zdb_contacto. DATA gw_datos LIKE LINE OF it_datos. DATA gv_id_emp TYPE z_id_empresa. DATA gv_depart TYPE zdel_depart. *DATA it_datos TYPE TABLE OF zdb_contacto WITH HEADER LINE. **comienzo del bloque de la pantalla de seleccion SELECTION-SCREEN BEGIN OF BLOCK b_bloque_datos WITH FRAME TITLE text-000. SELECT-OPTIONS s_id_emp FOR gv_id_emp OBLIGATORY NO INTERVALS. SELECT-OPTIONS s_depart FOR gv_depart NO INTERVALS. SELECTION-SCREEN END OF BLOCK b_bloque_datos. *comienzo del programa con el evento start of seleccion START-OF-SELECTION. **Comienzo de la llamadas a los form que contienen los codigos PERFORM busqueda TABLES it_datos. "busca los datos en las tablas correspondientes IF it_datos[] IS INITIAL. MESSAGE e008(zanma_msg). * ERROR!! No se han encontrados datos segun su seleccion ELSE. PERFORM comprueba TABLES s_depart. "comprueba que datos se han introducido en el inicio PERFORM imprimir TABLES it_datos. "imprime los datos encontrados con alv ENDIF. **COMIENZO DE LA DEFINCION DE LOS CODIGOS EN LOS CORRESPONDIENTES FORMS *&---------------------------------------------------------------------* *& Form comprueba *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->LV_VUELO text *----------------------------------------------------------------------* ***COMPRUEBA LOS DATOS QUE SE INTRODUJERON EN LA PANTALLA DE SELECCION FORM comprueba TABLES lv_depart STRUCTURE s_depart. IF lv_depart IS INITIAL. MESSAGE i009(zanma_msg). * Se buscaran todos los contactos de todas la empresas ELSE. MESSAGE i010(zanma_msg) WITH lv_depart-low. * Se buscaran los contactos del departamento &1 de la empresa seleccionada. ENDIF. ENDFORM. "comprueba *&---------------------------------------------------------------------* *& Form busqueda *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->LV_DATOS text *----------------------------------------------------------------------* ***BUSCA LOS DATOS EN LAS TABLAS CORRESPONDIENTES FORM busqueda TABLES it_datos. SELECT * FROM zdb_contacto INTO CORRESPONDING FIELDS OF gw_datos WHERE id_empresa IN s_id_emp AND departamento IN s_depart. APPEND gw_datos TO it_datos. ENDSELECT. ENDFORM. "busqueda *&---------------------------------------------------------------------* *& Form imprimir *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->LV_IMPRIME text *----------------------------------------------------------------------* ***IMPRIME LOS DATOS CON ALV QUE SELECCIONAMOS ANTERIORMENTE FORM imprimir TABLES it_datos. **definicion de variables locales del form DATA tfielcat TYPE slis_t_fieldcat_alv. DATA tfielcat2 TYPE slis_fieldcat_alv. * DATA lv_wa LIKE LINE OF tfielcat. * funcion que importa la estructura identica de la tabla interna a una tabla que * se usa luego en la siguiente funcion CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING * I_PROGRAM_NAME = * I_INTERNAL_TABNAME = i_structure_name = 'ZDB_CONTACTO' * I_CLIENT_NEVER_DISPLAY = 'X' * I_INCLNAME = * I_BYPASSING_BUFFER = * I_BUFFER_ACTIVE = CHANGING ct_fieldcat = tfielcat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. **pone para editar todos los campos menos las claves LOOP AT tfielcat INTO tfielcat2. IF tfielcat2-key <> 'X'. tfielcat2-edit = 'X'. ENDIF. MODIFY tfielcat FROM tfielcat2. ENDLOOP. * esta funcion muestra la tabla hay que pasarle la tabla que se creo antes y nuestra * tabla interna con todos los datos CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' i_callback_program = 'ZANMA_ALV2' i_callback_pf_status_set = 'SET_STATUS' i_callback_user_command = 'USER_COMMAND' * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' * i_structure_name = 'ZDB_CONTACTO' * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * i_grid_settings = i_lvc_s_glay * IS_LAYOUT = gs_layout it_fieldcat = tfielcat * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = 'X' * I_SAVE = ' ' * IS_VARIANT = * it_events = tab_events[] * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES t_outtab = it_datos EXCEPTIONS program_error = 1 OTHERS = 2 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. **actualiza la tabla real * UPDATE zdb_contacto FROM TABLE it_datos. ENDFORM. "imprimir *&---------------------------------------------------------------------* *& Form set_status *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM set_status USING rt_extab TYPE slis_t_extab . "#EC * SET PF-STATUS 'STANDARD'. ENDFORM. "SET_STATUS *&---------------------------------------------------------------------* *& Form user_command *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->R_UCOMM text * -->RS_SELFIELD text *----------------------------------------------------------------------* FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. "#EC * CASE r_ucomm. WHEN 'CREAR'. APPEND INITIAL LINE TO it_datos. rs_selfield-refresh = 'X'. WHEN '&DATA_SAVE'. UPDATE zdb_contacto FROM TABLE it_datos. WHEN '&F03'. LEAVE PROGRAM. ENDCASE. ENDFORM. "User_command