Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 2756

Ayuda en ALV Grid

$
0
0

Hola, buenas noches. Estoy haciendo un reporte ALV en el que entre otras cosas se muestra la diferencia de días desde cuando se crea, asigna (primera aprobación) y las diferentes aprobaciones que ha tenido una solicitud (rev-trac).

Cuando se hace el cálculo para una sola solicitud no hay problema alguno. La diferencia que se hace entre fecha de creación y primera aprobación está bien; así como entre fecha de aprobación conforme va ejecutándose el loop.

El problema se da cuando se tiene más de una solicitud ya que en vez de validarse fecha de creación y fecha de aprobación de la solicitud actual está tomando la fecha de aprobación anterior que corresponde a la solicitud anterior (imagen). Más sin embargo, la segunda posición de la solicitud actual (en el ejemplo sería la 379) hace el cálculo de días con la fecha anterior y así sucesivamente hasta que termina de forma correcta.

Este problema que menciono solo lo tengo cuando amplio el rango desde la desde la pantalla de selección así como para la primera posición de una segunda, tercera, ..., solicitud (rev-trac). Si solo hay una solicitud, no hay problema.

 

<<Destaco que mis datos ya están ordenados por lo cual sé que el orden presente es el correcto; mismo que lo hago en un FORM anterior.>>

 

Hasta ahora mi código y lo último agregado:

 

*---------------------------------------------------------------------*

FORM imprime_datos .

 

*  Declaración de variables locales.

  DATA: lv_date_last    TYPE sy-datum,  "Última fecha

        lv_date_current TYPE sy-datum,  "Fecha actual

        lv_index   TYPE i.       

 

*  Inicio modif. 06.05.2016.

  DATA: lv_rt_current TYPE zreq,

        lv_rt_last    TYPE zreq,

        lv_flag       TYPE i.

*  Fin modif. 06.05.2016.

 

  LOOP AT lt_app.

    lv_index = sy-tabix.   

    lv_flag  = sy-tabix.    "Add 06.05.2016

   

  CLEAR lv_diff.         

 

*   Lectura de datos por solicitud.

    READ TABLE lt_req WITH KEY request = lt_app-request.

 

    SELECT SINGLE texto

      FROM zstapp

      INTO lv_txtst

      WHERE status EQ lt_app-status.

 

    IF sy-subrc EQ 0.

      lt_out-txtst = lv_txtst.

    ENDIF.

 

    IF sy-subrc = 0.

*   Validación de la primera fecha.

      IF lv_index = 1.

        lv_date_last = lt_req-cdate.

      ENDIF.

      CLEAR lv_index.

 

* Inicio modif. 06.05.2016

      IF lv_flag = 1.

        lv_date_current = lv_date_last.

        CLEAR lv_flag.

      ENDIF.

* Fin modif. 06.05.2016.

    ENDIF.

 

    CLEAR: lv_date_current.

    lv_date_current = lt_app-mdate.

 

*  Diferencia de días entre status.

    CALL FUNCTION 'DAYS_BETWEEN_TWO_DATES'

      EXPORTING

        i_datum_bis = lv_date_current

        i_datum_von = lv_date_last    "Aprobación.

      IMPORTING

        e_tage      = lv_diff.

 

    IF sy-subrc EQ 0.

      lt_out-diasdif = lv_diff.

    ENDIF.

 

*  Inicio modif. 06.05.2016.

    lv_rt_current = lt_app-request.

    IF lv_rt_current NE lv_rt_last.

      lv_flag = 0.

    ENDIF.

 

    lv_rt_last = lt_app-request.

 

*  Fin modif. 06.05.2016.

 

*   Traspaso de registros en tablas.

    MOVE-CORRESPONDING lt_req TO lt_out.

    MOVE-CORRESPONDING lt_app TO lt_out.

 

*   Agregar registros.

    APPEND lt_out.

 

    lv_date_last = lv_date_current.

 

  ENDLOOP.

ENDFORM.                    " IMPRIME_DATOS

*---------------------------------------------------------------------*

 

Podrían orientarme de favor.

De antemano gracias.

 

 

Saludos.


Viewing all articles
Browse latest Browse all 2756

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>