Você está na página 1de 13

Introduo

Quase todos ns estamos bem cientes de ALVs com uma coluna editvel . Se
perguntado sobre uma linha editvel , podemos ver caras perplexas. Embora o
conceito tenha sido discutido em diferentes fruns muitas vezes antes, nenhum
cdigo inteiro foi encontrado para implementar isso em movimento . A discusso a
seguir explicar dentro e fora da criao de um ALV com linhas
editveis . Alm disso, encontre todo o cdigo de trabalho no final, que pode ser
baixado e reutilizado.

Requerimento

Vamos assumir que o requisito exibir as ordens de compra fornecidas como


entrada na tela de seleo. As ordens de compra sero exibidas com todos os
nmeros de itens e nmeros de material. Na nossa tela de sada, queremos o
nmero da ordem de compra, planta, armazenamento, cdigo da empresa,
tipo de documento, nmero de item e material. Alm disso, devemos ter
um campo de ativao de ponto de acesso no nmero da ordem de compra
clicando em qual sistema deve navegar para a tela ME21N. Quando clicado na
parte de trs da transao 'ME21N' todas as linhas desse pedido de compra
especfico devem se tornar editveis .

Programa de Construo

1. Declarao de Tipos e Estruturas


2. reas de trabalho e mesas internas
3. Declarar classe local para manipulao de eventos
4. Implementao de classe
5. Design de tela de seleo
6. Incio da seleo
7. Tela de chamada
8. PBO
9. Mdulo DISPLAY_ALV
10. PAI

Voc sabia? Voc pode verificar a consistncia de


um relatrio ALV pressionando SHIFT + clique direito duplo.

1. Tipos e declaraes de estrutura


Nota - Alm dos tipos exigidos, em nossa estrutura de tipos finais, usamos
' fstyl ' do tipo lvc_t_stylpara controlar as configuraes editveis. Isso
desempenha o papel real para tornar as linhas de tabela final de sada ALV
editveis ou exibir apenas.

2. reas de trabalho e tabelas

internas Nota -
LS_STYLEROW e LT_STYLEROW so usados para manter as informaes de
estilo que vamos criar mais tarde neste artigo.

3. Declare Local Class for Event Handling


Para o evento hotspot, criamos este mtodo de classe .

4. Implementao da classe

Esta seo tratar as principais tarefas necessrias em nosso programa. Antes


de tudo, precisamos ter a funcionalidade de navegao do ponto de
acesso . Isso foi alcanado com a instruo 'Call Transaction' depois de ler o
row_id e o nmero de pedido correspondente para isso. Observe tambm,
para esse nmero de PO especfico, que colecionamos todos os itens de linha
na tabela GT_FINAL, que faremos editvel.

Agora, devemos cuidar da lgica de edio de linhas .

Anote o uso desta seo (cl_gui_alv_grid => mc_style_enabled). Isso


realmente faz com que um campo particular do seu ALV seja editvel. Para
este requisito, usei todos os campos. Alternativamente, se voc tiver um requisito
para tornar editveis 2 campos de uma determinada linha, voc simplesmente pode
passar apenas esses dois nomes de campo e voc encontrar aqueles editveis .

No s voc tem que tornar os campos editveis, mas tambm ter que cuidar
de desabilitar se a condio de edio no for atendida.
Agora voc deve ser bom com a funcionalidade de linha editvel . Vamos para
o corpo bsico do nosso programa.

Leia tambm: Alternativa para 'REUSE_ALV_GRID_DISPLAY' .

5. Design de tela de seleo

1
2 *&-------------------------------------------------------------------*
3 *& S E L E C T I O N S C R E E N
4 *&-------------------------------------------------------------------*
5 selection-screen: begin of block B1 with frame title text-001.
6 select-options: s_ebeln for ekko-ebeln.
7 selection-screen: end of block B1.

6. Incio da seleo

1
2 *&-------------------------------------------------------------------*
3 *& S T A R T O F S E L E C T I O N
4 *&-------------------------------------------------------------------*
5 start-of-selection.
6 perform fetch_data.
7 call screen 0100.

Crie uma sub-rotina para obter os dados bsicos para a exibio da grade. A
lgica de fluxo para a tela personalizada criada parecer abaixo.

6.a. Consulte o cdigo completo.

6.b. Consulte o cdigo completo.

6.c. Mdulo Display_ALV

Esta seo contm lgica para identificar se o programa foi executado em


primeiro plano / fundo . Dependendo disso, ele usa uma referncia de
classe especfica . Lembre-se, se voc criou um objeto de um continer
personalizado (ou seja, se voc usou CL_GUI_CUSTOM_CONTAINER ),
a execuo em segundo plano do relatrio falhar e o status do trabalho ser
cancelado. Sempre use a referncia do encanamento em tais
casos. Usamos CL_GUI_ALV_GRID_OFFLINE para identificar se o programa
executado em primeiro plano / fundo.
6.d. Consulte o cdigo completo.

Vamos ver como ele foi projetado corretamente.

Tela de seleo
Tela da lista
Clique em qualquer documento de compras na na tela da lista e volte para o
relatrio. Voc deve poder editar todas as linhas associadas do documento de
compras.
Tentei com outro nmero de servio e funcionou perfeitamente!

Execute o programa em segundo plano


O status do trabalho em segundo plano deve ser "concludo"

Voc tambm pode gostar: Apenas 4 verses do mesmo programa para


entender os OOPs ABAP .

Leitura adicional

Para uma funcionalidade semelhante e uma melhor compreenso, consulte o


programa BCALV_EDIT_02.

Baixe o cdigo completo daqui .

Atualizado: 31 de julho de 2017

Leitura adicional

Obviamente, o usurio ir querer alguma operao de edio com a


funcionalidade de salvar alteraes. Uma vez que as linhas esto no modo
editvel, o usurio ir alterar alguns dados e clicar no boto Salvar. Isso
acabar por desencadear a seo PAI da tela personalizada e para lidar com as
economias que precisamos usar o cdigo de funo "SPOS" . As alteraes podem
ser salvas nas respectivas tabelas padro / tabelas personalizadas
(dependendo do requisito). Para tornar nosso artigo simples, no introduzi
nenhuma operao de salvamento, mas exibi os dados alterados em outro
formato ALV usando o mtodo de fbrica.
O cdigo para a seo PAI est abaixo.

1
2 *&---------------------------------------------------------------------*
3 *& Module USER_COMMAND_0100 INPUT
4 *&---------------------------------------------------------------------*
5 * Process After Input and Back,Exit and Cancel logic
6 *----------------------------------------------------------------------*
7
8 MODULE USER_COMMAND_0100 INPUT.
9
10 if sy-ucomm = 'E'.
11
12 leave to screen 0.
13
14 elseif sy-ucomm = 'ENDE'.
15
16 leave to screen 0.
17
18 elseif sy-ucomm = 'ECAN'.
19
20 leave to screen 0.
21
22 elseif sy-ucomm = 'SPOS'.
23
24 * When save trigger this section
25 ref_ag->check_changed_data(
26
27 importing e_valid = c_valid ).
28
29 if c_valid eq abap_true.
30
31 *Check the data change
32
33 if lt_final_old[] NE lt_final[].
34
35 LOOP AT lt_final into ls_final.
36
37 read table lt_final_old into ls_final_old index sy-tabix.
38
39 if ls_final_old ne ls_final.
40
41 append ls_final to t_final.
42
43 endif.
44
45 ENDLOOP.
46
47 *Any table update should be handled here
48
49 *Create the ALV to show the final data updated
50
51 TRY.
52
53 CALL METHOD CL_SALV_TABLE=>FACTORY
54 IMPORTING
55 R_SALV_TABLE = ref_salv
56 CHANGING
57 T_TABLE = t_final.
58
59 CATCH CX_SALV_MSG .
60 ENDTRY.
61
62 *Display the final updated table
63 ref_salv->display( ).
64
65 leave to screen 0.
66
67 endif.
68
69 endif.
70
71 endif.
72
73 ENDMODULE. " USER_COMMAND_0100 INPUT

O resultado final depois de incorporar esta operao ser algo como abaixo.

O usurio ir editar algo na sada ALV (eu mudei o 'Material' como WL-test e
DG-test).

Aps a mudana, pressione o boto 'SAVE' e veja as tuplas alteradas no ALV


final.