|
#1
|
|||
|
|||
Hola compañero, comparte el código y le echo un vistazo. Y me dices que dudas tienes.
Salu2. |
#2
|
|||
|
|||
Buenas compañero, voy a intentar poner el código lo más claro posible, quiero que me digas si está hecho correctamente, y si es posible, que me expliques las cosas que pongo en rojo. Muchísimas gracias de antemano!! Aclaro que utilizamos una plantilla para hacer el ejercicio. REPORT LINE-SIZE 176 LINE-COUNT 65 NO STANDARD PAGE HEADING MESSAGE-ID zmalaga. ************************************************************************ * PROGRAM ...... * * DESCRIPTION .. Programa en el que pretendemos mostrar un listado de * * materiales por planta y almacén * * FUNCTION ..... * * Ascendant ref. * * AUTHOR ....... * * DATE WRITTEN . * * R/3 RELEASE .. * *======================================================================* * COPIED FROM .. * * TITLE ORIGINAL * *----------------------------------------------------------------------* * PROGRAM TYPE . Executable * * DEV. CLASS ... ZFRP * * LOGICAL DB ... * *======================================================================* * MODIFICATION HISTORY * * Date BY Chg Note # SDS Description * * Vers * * ---------- --- ---------------------------------------------------- * * dd/MM/YYYY 1.0 Initial Version * * DD/MM/YYYY 2.0 * ************************************************************************ * * Data Includes * * * INCLUDE: *----------------------------------------------------------------------- * Tables * *----------------------------------------------------------------------- TABLES: mard. * TYPE-POOLS: SLIS. TYPES: BEGIN OF t_mard, werks TYPE werks_d, matnr TYPE matnr, lgort TYPE lgort_d, END OF t_mard. TYPES: BEGIN OF t_salida, werks TYPE werks, matnr TYPE matnr, lgort TYPE lgort_d, maktx TYPE maktx, lgobe TYPE lgobe, name1 TYPE name1, END OF t_salida. *----------------------------------------------------------------------- * Data *----------------------------------------------------------------------- * DATA - WORK-AREAS * Data - Internal Tables DATA: wa_mard TYPE t_mard, it_mard TYPE STANDARD TABLE OF t_mard. DATA: wa_salida TYPE t_salida, it_salida TYPE STANDARD TABLE OF t_salida. * Internal table for customer data and accounting data * * Data - Structures * * * Data - Constants * * CONSTANTS: * Data - Variables and flags * *DATA: *----------------------------------------------------------------------- * Ranges *----------------------------------------------------------------------- * RANGES: *----------------------------------------------------------------------- * Field Symbols *----------------------------------------------------------------------- *----------------------------------------------------------------------- * Field Groups *----------------------------------------------------------------------- *----------------------------------------------------------------------- * Select options / Parameters *----------------------------------------------------------------------- SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-b01. PARAMETERS p_werks TYPE werks. SELECT-OPTIONS: s_matnr FOR mard-matnr, "Material s_lgort FOR mard-lgort. "Storage Location SELECTION-SCREEN END OF BLOCK b1. *----------------------------------------------------------------------- * Define classes * *----------------------------------------------------------------------- * CLASS ????? DEFINITION. *----------------------------------------------------------------------- * Initialisation *----------------------------------------------------------------------- INITIALIZATION. * initialize global data. PERFORM f_initialize. *----------------------------------------------------------------------- * Selection Screen *----------------------------------------------------------------------- *AT SELECTION-SCREEN. AT SELECTION-SCREEN ON p_werks. SELECT COUNT(*) FROM t001w WHERE werks = p_werks. * AT SELECTION-SCREEN ON ..... IF sy-dbcnt EQ 0. MESSAGE e065(zmalaga). ENDIF. AT SELECTION-SCREEN ON s_matnr. SELECT COUNT(*) FROM mara WHERE matnr IN s_matnr. IF sy-dbcnt EQ 0. MESSAGE e066(zmalaga). ENDIF. AT SELECTION-SCREEN ON s_lgort. SELECT COUNT(*) FROM t001l WHERE lgort IN s_lgort. IF sy-dbcnt EQ 0. MESSAGE e067(zmalaga). ENDIF. *----------------------------------------------------------------------- * Selection *----------------------------------------------------------------------- * start of selection * START-OF-SELECTION. PERFORM f_process. * End of selection. * END-OF-SELECTION. *----------------------------------------------------------------------- * End of Program *----------------------------------------------------------------------- * Standard end of program is written in F_END_OF_LIST * free internal tables PERFORM f_free_tables. *----------------------------------------------------------------------- * Top of page *----------------------------------------------------------------------- TOP-OF-PAGE. *----------------------------------------------------------------------- * User commands *----------------------------------------------------------------------- AT USER-COMMAND. *----------------------------------------------------------------------- * Processing routines - Forms *----------------------------------------------------------------------- *&---------------------------------------------------------------------* *& Form f_initialize *&---------------------------------------------------------------------* * initialize global data. *----------------------------------------------------------------------* FORM f_initialize. ENDFORM. " f_initialize *&---------------------------------------------------------------------* *& Form f_process *&---------------------------------------------------------------------* * program process. *----------------------------------------------------------------------* FORM f_process. PERFORM f_select_matnr. PERFORM f_retrieve_data. PERFORM f_write_report. ENDFORM. " f_process *&---------------------------------------------------------------------* *& Form f_free_tables *&---------------------------------------------------------------------* * liberar las tablas. *----------------------------------------------------------------------* FORM f_free_tables. ENDFORM. " f_free_tables *&---------------------------------------------------------------------* *& Form F_SELECT_MATNR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM f_select_matnr . SELECT werks matnr lgort FROM mard INTO TABLE it_mard WHERE werks = p_werks AND matnr IN s_matnr AND lgort IN s_lgort. IF sy-subrc NE 0. MESSAGE e005(zmalaga). ENDIF. ENDFORM. " F_SELECT_MATNR *&---------------------------------------------------------------------* *& Form F_RETRIEVE_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM f_retrieve_data . LOOP AT it_mard INTO wa_mard. wa_salida = wa_mard. "HEMOS METIDO LOS TRES CAMPOS DE MARD EN SALIDA SELECT SINGLE name1 FROM t001w "TABLA DE LA QUE PROVIENE INTO wa_salida-name1 "CAMPO DONDE QUEREMOS METERLO WHERE werks = wa_mard-werks. IF sy-dbcnt EQ 0. CLEAR wa_salida-name1. ENDIF. ******************************************** SELECT SINGLE lgobe FROM t001l INTO wa_salida-lgobe WHERE lgort = wa_mard-lgort. IF sy-dbcnt EQ 0. CLEAR wa_salida-lgobe. Por qué y para qué hace este clear? ENDIF. ******************************************** SELECT SINGLE maktx FROM makt INTO wa_salida-maktx WHERE matnr = wa_salida-matnr. IF sy-dbcnt EQ 0. ¿Para qué sirve esta sentencia? La utilizamos mucho CLEAR wa_salida-maktx. ENDIF. APPEND wa_salida TO it_salida. CLEAR wa_salida. ENDLOOP. ENDFORM. " F_RETRIEVE_DATA *&---------------------------------------------------------------------* *& Form F_WRITE_REPORT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM f_write_report . write:/'Título del report'. SORT it_mard BY werks lgort matnr. LOOP AT it_mard INTO wa_mard. AT NEW werks. skip. WRITE: /'Planta', wa_mard-werks INTENSIFIED on. READ TABLE it_salida INTO wa_salida WITH KEY werks = wa_mard-werks. IF sy-subrc EQ 0. WRITE: wa_salida-name1 . ENDIF. ENDAT. AT NEW lgort. WRITE: /'Almacen', wa_mard-lgort INTENSIFIED on. READ TABLE it_salida INTO wa_salida WITH KEY lgort = wa_mard-lgort. IF sy-subrc EQ 0. WRITE: wa_salida-lgobe . SKIP. WRITE sy-uline. skip. ENDIF. ENDAT. WRITE : / wa_mard-matnr intensified off. READ TABLE it_salida INTO wa_salida WITH KEY matnr = wa_mard-matnr. IF sy-subrc EQ 0. WRITE: wa_salida-maktx intensified off. ENDIF. ENDLOOP. ENDFORM. " F_WRITE_REPORT Úlima edición por torsku fecha: 13/08/13 a las 04:56:38. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|