16
Examen Basico de Abap Solucionario *&-------------------------------------------------------------------- -* *& Report ZEXA_PROGRAMA *& ---------------------------------------------------------------------* *& ------------------------------ Z_BSIK_00_PROGRAAM *& ZALVREPORTE DYNPRO *& 369 LEERLO *& 350 EMPESAR DE AHI *& 1 Creamos el objeto CUSTOM_CONTAINER apuntando a nuestro CUSTOM_CONTROL *& (Cuyo nombre está almacenado en la variable MYCONTAINER). REPORT ZEXA_PROGRAMA MESSAGE-ID CU. TABLES: T001, BSIK, T005T. TYPES: BEGIN OF TY_T001, BUKRS TYPE T001-BUKRS, BUTXT TYPE T001-BUTXT, ADRNR TYPE T001-ADRNR, ORT01 TYPE T001-ORT01, LANDX TYPE T005T-LANDX, END OF TY_T001. DATA: T_T001 TYPE STANDARD TABLE OF TY_T001. * T_ZT001 TYPE STANDARD TABLE OF T001 WITH HEADER LINE. DATA: SOC TYPE T001-BUKRS, PAIS TYPE C. START-OF-SELECTION. CALL SCREEN '100'. FORM OBTENER_DATOS. SOC = T001-BUKRS. * SELECT BUKRS BUTXT ADRNR ORT01 LANDX SELECT SINGLE BUKRS BUTXT ADRNR ORT01 LAND1 1 RFJB

ExamenBasicoABAPSolucionado

Embed Size (px)

Citation preview

Page 1: ExamenBasicoABAPSolucionado

Examen Basico de Abap Solucionario *&---------------------------------------------------------------------**& Report ZEXA_PROGRAMA*& ---------------------------------------------------------------------**& ------------------------------ Z_BSIK_00_PROGRAAM*& ZALVREPORTE DYNPRO *& 369 LEERLO *& 350 EMPESAR DE AHI

*& 1 Creamos el objeto CUSTOM_CONTAINER apuntando a nuestro CUSTOM_CONTROL *& (Cuyo nombre está almacenado en la variable MYCONTAINER).

REPORT ZEXA_PROGRAMA MESSAGE-ID CU.

TABLES: T001, BSIK, T005T.

TYPES: BEGIN OF TY_T001, BUKRS TYPE T001-BUKRS, BUTXT TYPE T001-BUTXT, ADRNR TYPE T001-ADRNR, ORT01 TYPE T001-ORT01, LANDX TYPE T005T-LANDX, END OF TY_T001.

DATA: T_T001 TYPE STANDARD TABLE OF TY_T001.* T_ZT001 TYPE STANDARD TABLE OF T001 WITH HEADER LINE.DATA: SOC TYPE T001-BUKRS, PAIS TYPE C.

START-OF-SELECTION.CALL SCREEN '100'.

FORM OBTENER_DATOS.

SOC = T001-BUKRS.

* SELECT BUKRS BUTXT ADRNR ORT01 LANDX SELECT SINGLE BUKRS BUTXT ADRNR ORT01 LAND1 INTO (T001-BUKRS,T001-BUTXT,T001-ADRNR, T001-ORT01,T001-LAND1)* INTO TABLE T_T001FROM T001*FROM T001 INNER JOIN T005T* ON T005T~LAND1 = T001~LAND1 WHERE T001~BUKRS EQ SOC. IF SY-SUBRC <> 0. MESSAGE E654 WITH SOC. ENDIF. SET PARAMETER ID 'BUK' FIELD SOC.

1 RFJB

Page 2: ExamenBasicoABAPSolucionado

ENDFORM.

*&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE STATUS_0100 OUTPUT. SET PF-STATUS '100'. SET TITLEBAR '100'.

ENDMODULE. " STATUS_0100 OUTPUT*&---------------------------------------------------------------------**& Module USER_COMMAND_0100 INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE USER_COMMAND_0100 INPUT. DATA: OK_CODE TYPE SY-UCOMM. OK_CODE = SY-UCOMM.

CLEAR SY-UCOMM. CASE OK_CODE. WHEN 'DETALLE'. SUBMIT Z_BSIK_OO_PROGRAM AND RETURN.* SUBMIT Z_BSIK_PROGRAM AND RETURN. WHEN 'BACK'. SET SCREEN 0. LEAVE SCREEN. CLEAR SY-UCOMM. WHEN 'EXIT'. SET SCREEN 0. LEAVE SCREEN. CLEAR SY-UCOMM. WHEN 'CANCEL'. LEAVE PROGRAM. WHEN ''. PERFORM OBTENER_DATOS. ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

Siguiente parte es el ALVOO*&---------------------------------------------------------------------**& Report Z_BSIK_OO_PROGRAM*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*

Page 3: ExamenBasicoABAPSolucionado

REPORT Z_BSIK_OO_PROGRAM.

*INCLUDE ZDOWN_TEXTO_INCLUDE.

DATA: E_UCOMM TYPE SY-UCOMM.

CLASS LCL_EVENT_HANDLER DEFINITION DEFERRED.

*----------------------------------------------------------------------** CLASS LCL_EVENT_HANDLER DEFINITION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS LCL_EVENT_HANDLER DEFINITION. PUBLIC SECTION. METHODS:

* PARA IMPLEMENTAR USER_COMMANDS HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM,

* HOTSPOT CLICK CONTROL handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id es_row_no.

*--Double-click control*handle_double_click*FOR EVENT double_click OF cl_gui_alv_grid*IMPORTING e_row e_column,

*--To be triggered before user commands*handle_before_user_command*FOR EVENT before_user_command OF cl_gui_alv_grid*IMPORTING e_ucomm ,

*--To be triggered after user commands*handle_after_user_command*FOR EVENT context_menu_request OF cl_gui_alv_grid*IMPORTING e_object.

*--To control button clicks*handle_button_click*FOR EVENT button_click OF cl_gui_alv_grid*IMPORTING e_oject e_ucomm .

ENDCLASS. "LCL_EVENT_HANDLER DEFINITION

*----------------------------------------------------------------------** CLASS LCL_EVENT_HANDLER IMPLEMENTATION*----------------------------------------------------------------------*

Page 4: ExamenBasicoABAPSolucionado

**----------------------------------------------------------------------*CLASS LCL_EVENT_HANDLER IMPLEMENTATION.

*--Handle User Command METHOD handle_user_command . PERFORM handle_user_command USING e_ucomm . ENDMETHOD. "handle_user_command

*--Handle Hotspot Click METHOD handle_hotspot_click . PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no . ENDMETHOD . "handle_hotspot_click

*--Handle Double Click*METHOD handle_double_click .*PERFORM handle_double_click USING e_row e_column es_row_no .*ENDMETHOD.

*--Handle Before User Command*METHOD handle_before_user_command .*PERFORM handle_before_user_command USING e_ucomm .*ENDMETHOD.

*--Handle After User Command*METHOD handle_context_menu_request .*PERFORM handle_context_menu_request USING e_object .*ENDMETHOD.

*--Handle Button Click*METHOD handle_button_click .*PERFORM handle_button_click USING e_object e_ucomm .*ENDMETHOD.

ENDCLASS. "LCL_EVENT_HANDLER IMPLEMENTATION

*DECLARACION DE TABLASTABLES: BSIK.

*DECLARACION DE TYPES-POOLSTYPE-POOLS: SLIS, truxs.

*DECLRACION DE LA ESTRUCTURATYPES: BEGIN OF TY_BSIK, BUKRS TYPE BSIK-BUKRS, LIFNR TYPE BSIK-LIFNR, GJAHR TYPE BSIK-GJAHR, MONAT TYPE BSIK-MONAT, BELNR TYPE BSIK-BELNR, BUDAT TYPE BSIK-BUDAT, WAERS TYPE BSIK-WAERS,

Page 5: ExamenBasicoABAPSolucionado

DMBTR TYPE BSIK-DMBTR, WRBTR TYPE BSIK-WRBTR, END OF TY_BSIK.

* DECLARACION DE TABLAS INTERNASDATA: T_BSIK TYPE STANDARD TABLE OF TY_BSIK, GS_LAYOUT TYPE LVC_S_LAYO, GT_FIELDCAT TYPE LVC_T_FCAT, GS_VARIANT TYPE DISVARIANT,* gt_salida type bsik, gt_salida2 type truxs_t_text_data.

* DECLARACION DE VARIABLESDATA: MYCONTAINER TYPE SCRFNAME VALUE 'CUSTOM_ALV', CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, GRID1 TYPE REF TO CL_GUI_ALV_GRID, X_SAVE.

DATA: GR_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER.

FIELD-SYMBOLS: <FS_BSIK> LIKE LINE OF T_BSIK.* STAR-OF-SELECTIONSTART-OF-SELECTION. PERFORM CARGAR_DATOS. PERFORM FILL_LAYOUT. PERFORM FILL_CATALOG. PERFORM LLAMAR_ALV.

CALL SCREEN 0100.

*&---------------------------------------------------------------------**& Form handle_hotspot_click*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->I_ROW_ID text* -->I_COLUMN_ID text* -->IS_ROW_NO text*----------------------------------------------------------------------*FORM handle_hotspot_click USING i_row_id TYPE lvc_s_row i_column_id TYPE lvc_s_col is_row_no TYPE lvc_s_roid.

DATA: GT_LIST TYPE TY_BSIK. READ TABLE T_BSIK INTO GT_LIST INDEX IS_ROW_NO-ROW_ID.

IF SY-SUBRC = 0 AND I_COLUMN_ID-FIELDNAME = 'BUKRS' .* CASE i_column_id.* WHEN 'BUKRS'. SET PARAMETER ID 'BLN' FIELD GT_LIST-BELNR. SET PARAMETER ID 'BUK' FIELD GT_LIST-BUKRS.

Page 6: ExamenBasicoABAPSolucionado

SET PARAMETER ID 'GJR' FIELD GT_LIST-GJAHR. CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.* ENDCASE. ENDIF .ENDFORM . "handle_hotspot_click

*&---------------------------------------------------------------------**& Form HANDLE_USER_COMMAND*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM HANDLE_USER_COMMAND USING I_UCOMM TYPE SY-UCOMM.

DATA: LT_SELECTED_ROWS TYPE LVC_T_ROID, LS_SELECTED_ROW TYPE LVC_S_ROID, GT_LIST TYPE TY_BSIK.

CALL METHOD GRID1->GET_SELECTED_ROWS IMPORTING ET_ROW_NO = LT_SELECTED_ROWS.

READ TABLE LT_SELECTED_ROWS INTO LS_SELECTED_ROW INDEX 1.

IF SY-SUBRC NE 0. MESSAGE S000(SU) WITH 'SELECCIONE UNA FILA!'(203). ELSE. READ TABLE T_BSIK INTO GT_LIST INDEX LS_SELECTED_ROW-ROW_ID. IF SY-SUBRC = 0. SET PARAMETER ID 'BLN' FIELD GT_LIST-BELNR. SET PARAMETER ID 'BUK' FIELD GT_LIST-BUKRS. SET PARAMETER ID 'GJR' FIELD GT_LIST-GJAHR. CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN. ENDIF. ENDIF.

ENDFORM. "HANDLE_USER_COMMAND

* FORM CARGAR_DATOSFORM CARGAR_DATOS.

DATA: VALOR(4) TYPE C.

GET PARAMETER ID 'BUK' FIELD VALOR.

SELECT BUKRS LIFNR GJAHR MONAT BELNR BUDAT WAERS DMBTR WRBTR INTO TABLE T_BSIK FROM BSIK WHERE BUKRS EQ VALOR.* WHERE BUKRS IN S_BUKRS.

ENDFORM. "CARGAR_DATOS

Page 7: ExamenBasicoABAPSolucionado

*&---------------------------------------------------------------------**& Form bajar_a_texto*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*form bajar_a_texto. CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT' EXPORTING I_FIELD_SEPERATOR = '|'* I_LINE_HEADER =* I_FILENAME =* I_APPL_KEEP = ' ' TABLES I_TAB_SAP_DATA = T_BSIK CHANGING I_TAB_CONVERTED_DATA = gt_salida2 EXCEPTIONS CONVERSION_FAILED = 1 OTHERS = 2 . IF SY-SUBRC <> 0. WRITE: / 'FALLÓ LA CONVERSION DE DATOS'.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ELSE.* CALL FUNCTION 'GUI_DOWNLOAD'* EXPORTING** BIN_FILESIZE =* FILENAME ='E:\download.txt'* FILETYPE = 'ASC'** APPEND = ' '* WRITE_FIELD_SEPARATOR = '|'** HEADER = '00'* TRUNC_TRAILING_BLANKS = '|'** WRITE_LF = 'X'** COL_SELECT = ' '** COL_SELECT_MASK = ' '** DAT_MODE = ' '** CONFIRM_OVERWRITE = ' '** NO_AUTH_CHECK = ' '** CODEPAGE = ' '** IGNORE_CERR = ABAP_TRUE** REPLACEMENT = '#'** WRITE_BOM = ' '** TRUNC_TRAILING_BLANKS_EOL = 'X'** WK1_N_FORMAT = ' '** WK1_N_SIZE = ' '** WK1_T_FORMAT = ' '** WK1_T_SIZE = ' '** IMPORTING

Page 8: ExamenBasicoABAPSolucionado

** FILELENGTH =* TABLES* DATA_TAB = T_BSIK** FIELDNAMES =* EXCEPTIONS* FILE_WRITE_ERROR = 1* NO_BATCH = 2* GUI_REFUSE_FILETRANSFER = 3* INVALID_TYPE = 4* NO_AUTHORITY = 5* UNKNOWN_ERROR = 6* HEADER_NOT_ALLOWED = 7* SEPARATOR_NOT_ALLOWED = 8* FILESIZE_NOT_ALLOWED = 9* HEADER_TOO_LONG = 10* DP_ERROR_CREATE = 11* DP_ERROR_SEND = 12* DP_ERROR_WRITE = 13* UNKNOWN_DP_ERROR = 14* ACCESS_DENIED = 15* DP_OUT_OF_MEMORY = 16* DISK_FULL = 17* DP_TIMEOUT = 18* FILE_NOT_FOUND = 19* DATAPROVIDER_EXCEPTION = 20* CONTROL_FLUSH_ERROR = 21* OTHERS = 22* .* IF SY-SUBRC <> 0.** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.* WRITE:/ 'Programa falló al descargar datos'.* ENDIF. CALL FUNCTION 'DOWNLOAD' TABLES data_tab = t_bsik EXCEPTIONS OTHERS = 8. IF sy-subrc <> 0. WRITE: / 'Program failed to download data.'. ENDIF.

ENDIF.

ENDFORM. "bajar_a_texto

*&---------------------------------------------------------------------**& Form FILL_LAYOUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*

Page 9: ExamenBasicoABAPSolucionado

FORM FILL_LAYOUT.

GS_LAYOUT-SEL_MODE = 'A'.

ENDFORM. "FILL_LAYOUT

*&---------------------------------------------------------------------**& Form FILL_CATALOG*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM FILL_CATALOG.

DATA: GS_FIELDCAT TYPE LVC_S_FCAT.

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. "NOM TABLA CON ESTRUCTURA DE ALV. GS_FIELDCAT-FIELDNAME = 'BUKRS'. " NOM DEL CAMPO A MOSTRAR. GS_FIELDCAT-KEY = 'X'. GS_FIELDCAT-HOTSPOT = 'X'. GS_FIELDCAT-REPTEXT = 'Sociedad'."TEXTO QUE MOSTRARA EL CAMPO

GS_FIELDCAT-COL_POS = 1. " POS. QUE TENDRA EL CAMPO EN EL ALV. GS_FIELDCAT-OUTPUTLEN = 15. " ES LA CANTIDAD DE CARACTERES DE SALIDA. APPEND GS_FIELDCAT TO GT_FIELDCAT.

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. "NOM TABLA CON ESTRUCTURA DE ALV. GS_FIELDCAT-FIELDNAME = 'LIFNR'. " NOM DEL CAMPO A MOSTRAR. GS_FIELDCAT-REPTEXT = 'Número Cuenta'."TEXTO QUE MOSTRARA EL CAMPO GS_FIELDCAT-COL_POS = 1. " POS. QUE TENDRA EL CAMPO EN EL ALV. GS_FIELDCAT-OUTPUTLEN = 15. " ES LA CANTIDAD DE CARACTERES DE SALIDA. APPEND GS_FIELDCAT TO GT_FIELDCAT.

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. GS_FIELDCAT-FIELDNAME = 'GJAHR'. GS_FIELDCAT-REPTEXT = 'Ejercicio'. GS_FIELDCAT-COL_POS = 2. GS_FIELDCAT-OUTPUTLEN = 11. APPEND GS_FIELDCAT TO GT_FIELDCAT.

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. GS_FIELDCAT-FIELDNAME = 'MONAT'. GS_FIELDCAT-REPTEXT = 'Mes Contable'. GS_FIELDCAT-COL_POS = 3. GS_FIELDCAT-OUTPUTLEN = 14. APPEND GS_FIELDCAT TO GT_FIELDCAT.

Page 10: ExamenBasicoABAPSolucionado

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. GS_FIELDCAT-FIELDNAME = 'BELNR'. GS_FIELDCAT-REPTEXT = 'Dumento Contable'. GS_FIELDCAT-COL_POS = 4. GS_FIELDCAT-OUTPUTLEN = 18. APPEND GS_FIELDCAT TO GT_FIELDCAT.

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. GS_FIELDCAT-FIELDNAME = 'BUDAT'. GS_FIELDCAT-REPTEXT = 'Contabilización'. GS_FIELDCAT-COL_POS = 5. GS_FIELDCAT-OUTPUTLEN = 17. APPEND GS_FIELDCAT TO GT_FIELDCAT.

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. GS_FIELDCAT-FIELDNAME = 'WAERS'. GS_FIELDCAT-REPTEXT = 'Moneda'. GS_FIELDCAT-COL_POS = 6. GS_FIELDCAT-OUTPUTLEN = 8. APPEND GS_FIELDCAT TO GT_FIELDCAT.

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. GS_FIELDCAT-FIELDNAME = 'DMBTR'. GS_FIELDCAT-REPTEXT = 'Importe Mon. Local'. GS_FIELDCAT-COL_POS = 7. GS_FIELDCAT-OUTPUTLEN = 20. APPEND GS_FIELDCAT TO GT_FIELDCAT.

CLEAR GS_FIELDCAT. GS_FIELDCAT-TABNAME = 'T_BSIK'. GS_FIELDCAT-FIELDNAME = 'WRBTR'. GS_FIELDCAT-REPTEXT = 'Importe Mon. Dmto'. GS_FIELDCAT-COL_POS = 8. GS_FIELDCAT-OUTPUTLEN = 20. APPEND GS_FIELDCAT TO GT_FIELDCAT.

ENDFORM. "FILL_CATALOG

*&---------------------------------------------------------------------**& Form LLAMAR_ALV*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM LLAMAR_ALV.

IF CUSTOM_CONTAINER IS INITIAL.

Page 11: ExamenBasicoABAPSolucionado

CREATE OBJECT CUSTOM_CONTAINER EXPORTING CONTAINER_NAME = MYCONTAINER EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5. ENDIF.

CREATE OBJECT GRID1 EXPORTING I_PARENT = CUSTOM_CONTAINER. CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING IS_VARIANT = GS_VARIANT I_SAVE = X_SAVE I_DEFAULT = 'X' IS_LAYOUT = GS_LAYOUT CHANGING IT_FIELDCATALOG = GT_FIELDCAT IT_OUTTAB = T_BSIK[]. CALL METHOD GRID1->SET_READY_FOR_INPUT EXPORTING I_READY_FOR_INPUT = 0.ENDFORM. "LLAMAR_ALV

*&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE STATUS_0100 OUTPUT.

SET PF-STATUS '100'. SET TITLEBAR 'TITLE001'.

* CREAMOS UNA INSTANCIA PARA EL EVENTO HANDLER Y* REGISTRAMOS LOS METODOS PARA MANEJAR LOS EVENTOS DEL ALV.

CREATE OBJECT GR_EVENT_HANDLER.*SET HANDLER gr_event_handler->handle_user_command FOR GRID1.*SET HANDLER gr_event_handler->handle_hotspot_click FOR GRID1.*SET HANDLER gr_event_handler->handle_double_click FOR GRID1.*SET HANDLER gr_event_handler->handle_before_user_command*FOR GRID1.*SET HANDLER gr_event_handler->handle_context_menu_request*FOR GRID1.*SET HANDLER gr_event_handler->handle_button_click FOR GRID1.

Page 12: ExamenBasicoABAPSolucionado

ENDMODULE. " STATUS_0100 OUTPUT

*&---------------------------------------------------------------------**& Module USER_COMMAND_0100 INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE USER_COMMAND_0100 INPUT.

DATA: OK_CODE TYPE SY-UCOMM.

OK_CODE = SY-UCOMM.

CASE OK_CODE. WHEN 'BACK' OR 'EXIT'. SET SCREEN 0. LEAVE SCREEN. CLEAR SY-UCOMM. WHEN 'CANCEL'. LEAVE PROGRAM. WHEN 'CALLFB03'.* PERFORM HANDLE_USER_COMMAND. when 'EXPORTAR'. include ZDOWN_TEXTO_INCLUDE.* perform bajar_a_texto. ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

Page 13: ExamenBasicoABAPSolucionado