Autor Tema: Ayuda con Creacion de Reporte.  (Leído 6208 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado rnavarrete

  • Novato
  • *
  • Mensajes: 1
    • Ver Perfil
Ayuda con Creacion de Reporte.
« en: 09 de Julio de 2010, 05:26:41 pm »
Hola, soy nuevo en el mundo SAP y estoy tratando de crear un Reporte(SE38).

la idea del Reporte es sacar el minimo, maximo y promedio de la tabla OICQP agrupada por fecha y teniendo una sumatoria final.

lo que tengo de codigo es:
TABLES OICQP.

SELECT * FROM OICQP.
  WRITE: / OICQP-QUOSRC, OICQP-QUOTYP, OICQP-QUOTNO, OICQP-QUOTDATE, OICQP-PRICE, OICQP-DEFCURR, OICQP-DEFUOM.
ENDSELECT.

la idea del Reporte es:

Mes             /   Minimo  /   Maximo  /  Media
Enero-10             7.2           7.8           7.4
Febrero-10           6.2           6.3          6.25
Marzo-10             4.5           4.8          4.6
etc...
------------------------------------------------
Total                 17.9          18.9          18.25

Muchas gracias de antemano. :)

Saludos,
Rodrigo
rodrigo.maltez@gmail.com

Desconectado fjcarrillo

  • Novato
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Ayuda con Creacion de Reporte.
« Respuesta #1 en: 24 de Noviembre de 2010, 06:52:43 pm »
Saludos,

En este caso, entiendo que te falta sacar el total etc. Lo único que deberías hacer, sería acumular en unas variables los datos de suma. Te pongo un código que he realizado y que hace lo que pides.. en este caso se sacan las medias de los precios... si fuese otro campo, tendrías que adaptarlo... Ten cuidado con el tamaño de línea del report y si ves que sale descuadrado, dale más longitud para que se vea bien..

Código: [Seleccionar]
REPORT  z_fjcm2 LINE-SIZE 71.

TYPES: BEGIN OF t_datos_aux,
  quotdate TYPE oicqp-quotdate ,
  price    TYPE oicqp-price.
TYPES: END OF t_datos_aux.

TYPES: BEGIN OF t_datos,
  quotdate TYPE oicqp-quotdate ,
  min      TYPE oicqp-price,
  media    TYPE oicqp-price,
  max      TYPE oicqp-price.

TYPES: END OF t_datos.

DATA: li_tabla    TYPE STANDARD TABLE OF t_datos,
      li_data_aux TYPE STANDARD TABLE OF t_datos_aux.

DATA: l_fecha_ini   TYPE sy-datum,
      l_fecha_fin   TYPE sy-datum,
      l_max_total   TYPE oicqp-price,
      l_min_total   TYPE oicqp-price,
      l_media_total TYPE oicqp-price,
      l_max_aux     TYPE oicqp-price,
      l_min_aux     TYPE oicqp-price,
      l_media_aux   TYPE oicqp-price,
      l_mes         TYPE char10,
      l_es_primero  TYPE boolean.

DATA: ls_tabla    TYPE t_datos,
      ls_data_aux TYPE t_datos_aux.


START-OF-SELECTION.


  REFRESH li_tabla.

  DO 12 TIMES.


    CLEAR: l_fecha_ini,
           l_fecha_fin.

* Obtenemos la fecha del mes
    PERFORM f_obtener_fecha USING    sy-index
                            CHANGING l_fecha_ini
                                     l_fecha_fin.

    REFRESH li_data_aux.
    SELECT quotdate price
      FROM oicqp
      INTO TABLE li_data_aux
      WHERE quotdate GE l_fecha_ini AND
            quotdate LE l_fecha_fin.

    IF sy-subrc NE 0.

*   Mostramos error si es necesario.

    ELSE.
      CLEAR: l_max_aux,
             l_media_aux,
             l_min_aux.
      l_es_primero = 'X'.

      LOOP AT li_data_aux INTO ls_data_aux.

        IF l_es_primero IS NOT INITIAL.
          l_max_aux = ls_data_aux-price.
          l_min_aux = ls_data_aux-price.
          CLEAR l_es_primero.
        ENDIF.
        IF ls_data_aux-price GT l_max_aux.
          l_max_aux = ls_data_aux-price.
        ENDIF.

        IF ls_data_aux-price LT l_min_aux.
          l_min_aux = ls_data_aux-price.

        ENDIF.

      ENDLOOP.

      l_media_aux = ( l_min_aux + l_max_aux ) / 2.

      CLEAR ls_tabla.
      ls_tabla-quotdate = l_fecha_fin.
      ls_tabla-min      = l_min_aux.
      ls_tabla-media    = l_media_aux.
      ls_tabla-max      = l_max_aux.
      APPEND ls_tabla TO li_tabla.

    ENDIF.



  ENDDO.


END-OF-SELECTION.


  IF li_tabla[] IS NOT INITIAL.



    WRITE: sy-uline,
           sy-vline,
           'Mes       ',
           sy-vline,
           'Mínimo          ',
           sy-vline,
           'Máximo          ',
           sy-vline,
           'Media           ',
           sy-vline,
           sy-uline.

    LOOP AT li_tabla INTO ls_tabla.


      PERFORM f_calcular_mes USING    ls_tabla-quotdate
                             CHANGING l_mes.
      WRITE: sy-vline,
             l_mes,
             sy-vline,
             ls_tabla-min,
             sy-vline,
             ls_tabla-max,
             sy-vline,
             ls_tabla-media,
             sy-vline,
             sy-uline.

      l_min_total   = l_min_total   + ls_tabla-min.
      l_media_total = l_media_total + ls_tabla-max.
      l_max_total   = l_max_total   + ls_tabla-media.

    ENDLOOP.

    WRITE: sy-vline,
           'TOTAL     ',
           sy-vline,
           l_min_total,
           sy-vline,
           l_media_total,
           sy-vline,
           l_max_total,
           sy-vline,
           sy-uline.

  ELSE.

*   Mostramos el error de que no hay datos.

  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  F_OBTENER_FECHA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_SY_TABIX  text
*----------------------------------------------------------------------*
FORM f_obtener_fecha USING    p_indice TYPE sy-tabix
                     CHANGING p_fecha_ini TYPE sy-datum
                              p_fecha_fin TYPE sy-datum.

  DATA: l_mes TYPE char2.

  CASE p_indice.
    WHEN 1.

      l_mes = '01'.

    WHEN 2.

      l_mes = '02'.


    WHEN 3.

      l_mes = '03'.

    WHEN 4.

      l_mes = '04'.

    WHEN 5.

      l_mes = '05'.

    WHEN 6.

      l_mes = '06'.

    WHEN 7.

      l_mes = '07'.

    WHEN 8.

      l_mes = '08'.

    WHEN 9.

      l_mes = '09'.

    WHEN 10.

      l_mes = '10'.

    WHEN 11.

      l_mes = '11'.

    WHEN 12.

      l_mes = '12'.

    WHEN OTHERS.

  ENDCASE.



  CONCATENATE sy-datum(4) l_mes '01' INTO p_fecha_ini.

  IF p_fecha_ini IS NOT INITIAL.
    CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'
      EXPORTING
        day_in            = p_fecha_ini
      IMPORTING
        last_day_of_month = p_fecha_fin
      EXCEPTIONS
        day_in_not_valid  = 1
        OTHERS            = 2.

    IF sy-subrc NE 0.

      CLEAR p_fecha_ini.
      CLEAR p_fecha_fin.

    ENDIF.

  ENDIF.

ENDFORM.                    " F_OBTENER_FECHA

*&---------------------------------------------------------------------*
*&      Form  F_CALCULAR_MES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LS_TABLA_QUOTDATE  text
*      <--P_L_MES  text
*----------------------------------------------------------------------*
FORM f_calcular_mes  USING    p_fecha TYPE sy-datum
                     CHANGING p_mes TYPE char10.

  CASE p_fecha+4(2).
    WHEN '01'.

      CONCATENATE sy-datum(4) '-Ene' INTO p_mes.
    WHEN '02'.
      CONCATENATE sy-datum(4) '-Feb' INTO p_mes.
    WHEN '03'.
      CONCATENATE sy-datum(4) '-Mar' INTO p_mes.
    WHEN '04'.
      CONCATENATE sy-datum(4) '-Abr' INTO p_mes.
    WHEN '05'.
      CONCATENATE sy-datum(4) '-May' INTO p_mes.
    WHEN '06'.
      CONCATENATE sy-datum(4) '-Jun' INTO p_mes.
    WHEN '07'.
      CONCATENATE sy-datum(4) '-Jul' INTO p_mes.
    WHEN '08'.
      CONCATENATE sy-datum(4) '-Ago' INTO p_mes.
    WHEN '09'.
      CONCATENATE sy-datum(4) '-Sep' INTO p_mes.
    WHEN '10'.
      CONCATENATE sy-datum(4) '-Oct' INTO p_mes.
    WHEN '11'.
      CONCATENATE sy-datum(4) '-Nov' INTO p_mes.
    WHEN '12'.
      CONCATENATE sy-datum(4) '-Dic' INTO p_mes.

  ENDCASE.

ENDFORM.                    " F_CALCULAR_MES