¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Dicas para manter a integridade da tabela interna em um ALV Grid editável

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 2 Vistas
0
Cargando...

Olá a todos

Atualmente estou trabalhando em um ALV Grid editável que ouve o controlador on data changed e atribui valores padrão às novas linhas inseridas.

Até aqui tudo bem, mas por alguma razão a tabela interna do ALV é modificada após o evento "on data changed". Você poderia me dar algum conselho sobre isso?

Aqui está a seção de código relevante no evento on_data_changed:

W_JOBSTEP

Nota: GW_JOBSTEP / GT_JOBSTEP são a tabela interna / área de trabalho para o ALV grid.

<fs> é um fieldsymbol para p_data_changed -> mp_mod_row. p_data_changed -> mp_mod_rows -> * p_data_changed -> mp_mod_rows -> * <fs> p_data_changed -> mp_mod_rows -> *


*  V-----------------set default Value for new row---------------------------V*
   "   Loop at the inserted rows table and assign default values
     LOOP AT p_data_changed->mt_inserted_rows INTO dl_ins_row.

       ASSIGN p_data_changed->mp_mod_rows->* TO <fs>.

       READ TABLE <fs> INTO GW_JOBSTEP INDEX sy-tabix.

       "set default values
       GW_JOBSTEP-MANDT  = sy-mandt.
       GW_JOBSTEP-JOBNAME  = ZBC_JOB-JOBNAME.
       GW_JOBSTEP-STEPCOUNT  = sy-tabix.
       GW    
            
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá a todos

Depois de uma noite de sono, encontrei uma solução para o meu problema. Descobri uma maneira de não modificar diretamente o itab, mas sim a linha recém-inserida no alv. Dessa forma, o protocolo de mudanças do alv não afeta mais minhas alterações de dados.

Aqui está o código de referência:


* V-----------------set default Value for new row---------------------------V*

   " ler a tabela de linhas inseridas e atribuir valores padrão
     READ TABLE p_data_changed->mt_inserted_rows INTO dl_ins_row INDEX 1.

     " Encontrar o índice da linha para a tabela GW_JOBSTEP de acordo com a tabela correspondente
     READ TABLE p_data_changed->MT_ROID_FRONT  WITH KEY ROW_ID = DL_INS_ROW-ROW_ID TRANSPORTING NO FIELDS.
      "(sy-tabix contém o ID da linha de MT_ROID_FRONT com a linha correspondente.)
     IF sy-subrc EQ 0.
       DATA: idx TYPE sy-tabix.
       idx = sy-tabix.
     ENDIF.

     " Definir valores padrão para a nova linha
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'MANDT'     sy-mandt          CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'JOBNAME'   ZBC_JOB-JOBNAME   CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'STEPCOUNT' idx               CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'XPGFLAG'   K_DEFAULT_XPGFLAG CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'PRNEW'     'X'               CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'PDEST'     K_DEFAULT_PRINTER CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'LANGUAGE'  sy-LANGU          CHANGING p_data_changed.

     " Desabilitar certos campos para edição (na nova linha)
     PERFORM ALV_DISABLE_FIELDS USING K_DEFAULT_XPGFLAG CHANGING it_style.
     LOOP AT it_style INTO wa_style.
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Meu máximo.

Obrigado pela resposta rápida.

Como você só pode inserir uma linha de cada vez, utilize esta linha para atribuir os valores da primeira linha de <fs> à minha área de trabalho. (sy-tabix sempre foi 1)

Uma vez que <fs> (a nova linha) está sempre vazia, alterei a linha para um simples CLEAR GW_JOBSTEP, que tem o mesmo efeito.

No entanto, isso não resolveu meu problema.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá

minha primeira pergunta é por que você está usando SY-TABIX para ler a tabela <FS>? (linha 85);

LEER TABLA <fs> EN GW_JOBSTEP ÍNDICE sy-tabix.


Máximo

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá a todos

Depois de uma noite de sono, encontrei uma solução para o meu problema. Descobri uma maneira de não modificar diretamente o itab, mas a linha recém-inserida no alv. Dessa forma, o protocolo de alterações do alv não interfere mais nas minhas alterações de dados.

Aqui está o código de referência:


* V-----------------set default Value for new row---------------------------V*

   " ler a tabela de linhas inseridas e atribuir valores padrão
     READ TABLE p_data_changed->mt_inserted_rows INTO dl_ins_row INDEX 1.

     "Encontrar o índice da linha para a tabela GW_JOBSTEP de acordo com a tabela correspondente
     READ TABLE p_data_changed->MT_ROID_FRONT  WITH KEY ROW_ID = DL_INS_ROW-ROW_ID TRANSPORTING NO FIELDS.
      "(sy-tabix contém o ID da linha de MT_ROID_FRONT com a linha correspondente.)
     IF sy-subrc EQ 0.
       DATA: idx TYPE sy-tabix.
       idx = sy-tabix.
     ENDIF.

     "Definir valores padrão para a nova linha
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'MANDT'     sy-mandt          CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'JOBNAME'   ZBC_JOB-JOBNAME   CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'STEPCOUNT' idx               CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'XPGFLAG'   K_DEFAULT_XPGFLAG CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'PRNEW'     'X'               CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'PDEST'     K_DEFAULT_PRINTER CHANGING p_data_changed.
     PERFORM modify_alv_cell USING dl_ins_row-row_id 'LANGUAGE'  sy-LANGU          CHANGING p_data_changed.

     "Desabilitar certos campos para edição (na nova linha)
     PERFORM ALV_DISABLE_FIELDS USING K_DEFAULT_XPGFLAG CHANGING it_style.
     LOOP AT it_style INTO wa_style
            
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?