Checkbox en ALV - REUSE_ALV_GRID_DISPLAY

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • maria22_
    Junior Member
    • oct
    • 16

    #1

    Checkbox en ALV - REUSE_ALV_GRID_DISPLAY

    Buenos días,

    Tengo una tabla con un campo checkbox en el ALV, a veces aparece ya marcado y otras desmarcado por una validación.

    Me piden que ese campo dependiendo del registro (valor que traiga ese campo) sea editable o no editable.

    Uso la forma clásica para generar ALV. (REUSE_ALV_GRID_DISPLAY) y sé que la forma de hacerlo para toda la tabla es con wa_fieldcat-edit = ''- así sale no editable, ¿pero como puedo hacerlo registro a registro siendo esa una propiedad del catalogo? ¿es posible hacerlo sin ser abap orientado a objetos?

    Gracias,
    Saludos.
  • omegaotaku
    Member
    • nov
    • 43

    #2
    Originalmente publicado por maria22_
    Buenos días,

    Tengo una tabla con un campo checkbox en el ALV, a veces aparece ya marcado y otras desmarcado por una validación.

    Me piden que ese campo dependiendo del registro (valor que traiga ese campo) sea editable o no editable.

    Uso la forma clásica para generar ALV. (REUSE_ALV_GRID_DISPLAY) y sé que la forma de hacerlo para toda la tabla es con wa_fieldcat-edit = ''- así sale no editable, ¿pero como puedo hacerlo registro a registro siendo esa una propiedad del catalogo? ¿es posible hacerlo sin ser abap orientado a objetos?

    Gracias,
    Saludos.
    Buenas tardes. Podrías armar una macro del fieldcatalog en donde la llamarías dentro de un LOOP de tu tabla de salida y le indicarías cuando hay que hacer cierto campo editable.
    Por ej así:

    DEFINE m_fieldcatalog.

    ADD 1 TO fieldcatalog-col_pos.
    fieldcatalog-tabname = 'IT_ALV'.
    fieldcatalog-fieldname = &1.
    fieldcatalog-edit = &2.
    APPEND fieldcatalog.
    CLEAR fieldcatalog.

    END-OF-DEFINITION.

    LOOP AT it_alv INTO wa_alv.

    IF esedit eq abap_true.

    m_fieldcatalog: 'COL1' 'X'.

    ENDIF.

    ENDLOOP.

    Saludos.

    Comentario

    • maria22_
      Junior Member
      • oct
      • 16

      #3
      Originalmente publicado por omegaotaku
      Buenas tardes. Podrías armar una macro del fieldcatalog en donde la llamarías dentro de un LOOP de tu tabla de salida y le indicarías cuando hay que hacer cierto campo editable.
      Por ej así:

      DEFINE m_fieldcatalog.

      ADD 1 TO fieldcatalog-col_pos.
      fieldcatalog-tabname = 'IT_ALV'.
      fieldcatalog-fieldname = &1.
      fieldcatalog-edit = &2.
      APPEND fieldcatalog.
      CLEAR fieldcatalog.

      END-OF-DEFINITION.

      LOOP AT it_alv INTO wa_alv.

      IF esedit eq abap_true.

      m_fieldcatalog: 'COL1' 'X'.

      ENDIF.

      ENDLOOP.

      Saludos.
      Hola, muchas gracias por el aporte!! pero aún no me sale bien...

      Este es mi código dentro de la rutina donde creo el catalogo de campos para el ALV.

      * Macro para campo editable
      DEFINE m_fieldcatalog.

      clear wa_fieldcat.
      wa_fieldcat-tabname = 'T_ALV'.
      wa_fieldcat-fieldname = 'CONTROL'.
      wa_fieldcat-seltext_l = 'Control'.
      wa_fieldcat-just = 'L'.
      wa_fieldcat-col_pos = 11.
      wa_fieldcat-edit = &1.
      wa_fieldcat-checkbox = 'X'.
      append wa_fieldcat to t_fieldcat.
      clear wa_fieldcat.

      END-OF-DEFINITION.

      * Tabla donde tengo los datos, el campo SEL es igual a 'X' en unos registros
      * en otros está vacio (debe poderse marcar, si está a X -> no editar).
      LOOP AT t_alv INTO w_alv.
      IF w_alv-sel = 'X'.
      l_edit1 = ' '. "no editable
      m_fieldcatalog: l_edit1.
      ELSE.
      l_edit1 = 'X'. "editable
      m_fieldcatalog: l_edit1.
      ENDIF.
      ENDLOOP.
      -----------------------------------------------------------------
      De esta forma si hay 10 registros me salen 10 columnas, en vez de aplicar la caracteristica registro a registro... No se donde puede estar el fallo...

      Si me puedes/podéis ayudar a solucionarlo...Gracias!!!

      Comentario

      • omegaotaku
        Member
        • nov
        • 43

        #4
        Originalmente publicado por maria22_
        Hola, muchas gracias por el aporte!! pero aún no me sale bien...

        Este es mi código dentro de la rutina donde creo el catalogo de campos para el ALV.

        * Macro para campo editable
        DEFINE m_fieldcatalog.

        clear wa_fieldcat.
        wa_fieldcat-tabname = 'T_ALV'.
        wa_fieldcat-fieldname = 'CONTROL'.
        wa_fieldcat-seltext_l = 'Control'.
        wa_fieldcat-just = 'L'.
        wa_fieldcat-col_pos = 11.
        wa_fieldcat-edit = &1.
        wa_fieldcat-checkbox = 'X'.
        append wa_fieldcat to t_fieldcat.
        clear wa_fieldcat.

        END-OF-DEFINITION.

        * Tabla donde tengo los datos, el campo SEL es igual a 'X' en unos registros
        * en otros está vacio (debe poderse marcar, si está a X -> no editar).
        LOOP AT t_alv INTO w_alv.
        IF w_alv-sel = 'X'.
        l_edit1 = ' '. "no editable
        m_fieldcatalog: l_edit1.
        ELSE.
        l_edit1 = 'X'. "editable
        m_fieldcatalog: l_edit1.
        ENDIF.
        ENDLOOP.
        -----------------------------------------------------------------
        De esta forma si hay 10 registros me salen 10 columnas, en vez de aplicar la caracteristica registro a registro... No se donde puede estar el fallo...

        Si me puedes/podéis ayudar a solucionarlo...Gracias!!!
        DEFINE m_fieldcatalog.

        clear wa_fieldcat.
        wa_fieldcat-tabname = 'T_ALV'.
        wa_fieldcat-fieldname = 1&.
        wa_fieldcat-seltext_l = 2&.
        wa_fieldcat-col_pos = &3.
        wa_fieldcat-edit = &4.
        wa_fieldcat-checkbox = 'X'.
        wa_fieldcat-just = 'L'.
        append wa_fieldcat to t_fieldcat.
        clear wa_fieldcat.

        END-OF-DEFINITION.

        LOOP AT t_alv INTO w_alv.

        IF w_alv-sel = 'X'.

        m_fieldcatalog: 'CONTROL' 'Control' '01' ' '.

        ELSE.

        m_fieldcatalog: 'CONTROL' 'Control' '01' 'X'.

        ENDIF.

        ENDLOOP.

        Comentario

        Trabajando...