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.