segunda-feira, 26 de setembro de 2011
Module Pool - Table Control
" Hoje vou mostrar como alimentar um 'Table control' em um 'Module Pool'
" 'Table control' e uma estrutura que recebe os dados de uma tabela e
" mostra na tela, vou mostrar como popular um, depois eu vou mostrar como
" manipular os dados que estão no 'table control'.
" Primeiro criei seu 'Module pool'... Se não lembra acesse link abaixo:
" http://abapjuniores.blogspot.com/2011/04/module-pool-basico.html.
" Depois de criar a tela vá até o TOP do programa e declare igual abaixo.
*&---------------------------------------------------------------------*
*& Include MZSD0001TOP Module Pool SAPMZSD0001
*&
*&---------------------------------------------------------------------*
PROGRAM SAPMZSD0001.
" Criei uma tabela com os campos 'MANDT, MATNR e NAME1', e uma estrutura
" com os campos 'MATNR e NAME1.
TABLES : zmara,
zst_mara
.
" Declarações da tela 0100.
data : V_OKCODE TYPE sy-ucomm.
" Declaração das estruturas e tabelas internas
DATA : it_zmara TYPE TABLE OF zmara,
st_zmara TYPE zmara.
" Declaração do table control.
CONTROLS : ztab_ctrl TYPE TABLEVIEW USING SCREEN 0100.
*&---------------------------------------------------------------------*
" Após ter declarado isso vamos voltar a tela e clicar no botão 'Layout'.
" Isso irá mostrar o design da sua tela com todos os objetos dele, olhando
" no lado esquerdo você verá as ferramentas que podem ser usadas pra fazer
" sua tela conforme a necessidade do cliente ou do seu estudo.
" Hoje nós vamos usar o 'Table Control' conforme imagem abaixo, onde é só
" clicar no icone dele, ir para a tela que ainda não tem nada, clicar e
" Arrastar, dê o nome 'ZTAB_CTRL', conforme exemplo, como o Top já foi feito
" se você perceber ele já foi declarado para a tela 0100.
" Depois de criar, clique no botão 'Dicionário / Tabela de campos da tela'
" Conforme mostrado na imagem abaixo, coloque o nome da estrutura criada no
" SE11, e dê 'Enter', com isso irá aparecer todos os campos do mesmo,
" selecione os campos e dê 'OK', arraste o objeto para dentro do 'table Control'.
" Pronto, agora você tem um 'Table control' relacionado com uma estrutura.
" Depois de fazer tudo isso clique no botão 'Atributos' e selecione as
" opções conforme figura abaixo, isso é só para deixar um pouco mais bonito
" é organizado seu 'Table Control', lembre-se bem deste botão 'atributos'
" pois ele é muito importante mais tarde para a manipulação de dados.
" Agora veja os códigos comentados:
*&---------------------------------------------------------------------*
" fluxo lógico da tela 0100.
PROCESS BEFORE OUTPUT.
" Faz a alimentação da tabela Interna.
MODULE z_select_zmara.
" Joga o registro pra dentro do estrutura interna 'linkando' com
" o Table control da tela.
LOOP AT it_zmara INTO st_zmara WITH CONTROL ztab_ctrl.
MODULE : preenche_screen.
ENDLOOP.
" Module que 'seta' com um PF-Status com esta tela.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
" Loop na tabela interna com os dados que serão mostrados na
" table control, este loop no PAI, serve quando você quer fazer
" alguma ação com os dados mostrados ( Insert, Modify, Update ...)
" , você precida coloca para que o programa seja executado
" corretamente.
LOOP AT it_zmara.
ENDLOOP.
" Module contendo todas as ações de cada comando da tela.
MODULE USER_COMMAND_0100.
*&---------------------------------------------------------------------*
" PBO
*&---------------------------------------------------------------------*
*& Include MZSD0001O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
module status_0100 output.
set pf-status 'TELA'.
endmodule. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module z_select_zmara OUTPUT
*&---------------------------------------------------------------------*
module z_select_zmara output.
select matnr name1
from zmara
into corresponding fields of table it_zmara.
endmodule. " z_select_zmara OUTPUT
*&---------------------------------------------------------------------*
*& Module preenche_screen OUTPUT
*&---------------------------------------------------------------------*
module preenche_screen output.
" Verifica o espaço que tem dentro do Table Control e especifica os
" intervalo de registros que serão exibidos, Tipo quando seu table control
" cabe 20 registros e você tem 100 registros, os registros que serão
" Mostrados inicialmente serão os resgistros 1 ao 20 e só, mas quando vc
" colocar pra baixo irá aparecer do 2 ao 21.
if sy-stepl = 1.
ztab_ctrl-lines =
ztab_ctrl-top_line + sy-loopc - 1.
endif.
" Move os dados da estrutura interna pra dentro da estrutura que alimenta
" o Table control.
move-corresponding st_zmara to zst_mara.
endmodule. " preenche_screen OUTPUT
*&---------------------------------------------------------------------*
" PAI
*&---------------------------------------------------------------------*
*& Include MZSD0001I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module user_command_0100 input.
case v_okcode.
* WHEN 'SAVE'.
when 'BACK'.
set screen 0.
leave screen.
when 'EXIT'.
set screen 0.
leave screen.
when 'CANCEL'.
set screen 0.
leave screen.
when others.
endcase.
endmodule. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
" Espero ter ajudado, como sempre falo 'Debbugem' tudo isso e vejam os
" valores e suas propriedades durante o processo.
quinta-feira, 22 de setembro de 2011
Tops Apagadas pelas Views de tabelas
" Uma importante dica sobre Views de tabelas são que elas usam um grupo
" de funções conforme já foi comentado, mas toda vez que você fizer isso
" o 'Top' do Grupo de funções ( que é aonde fica todas as declarações do
" grupo ) será reecrita pela SAP e substituida, portanto caso esse grupo
" de funções esteja armazenando uma 'Function' e a mesma esteja usando
" uma variável declarada neste top, você terá que declarar novamente pq
" ela foi apagada rsrsrs.... muito cuidado com isso mas pra não dar esse
" problema com você e só vc criar um 2º Include TOP contendo todas as
" Declarações que vc quiser incluir.
" de funções conforme já foi comentado, mas toda vez que você fizer isso
" o 'Top' do Grupo de funções ( que é aonde fica todas as declarações do
" grupo ) será reecrita pela SAP e substituida, portanto caso esse grupo
" de funções esteja armazenando uma 'Function' e a mesma esteja usando
" uma variável declarada neste top, você terá que declarar novamente pq
" ela foi apagada rsrsrs.... muito cuidado com isso mas pra não dar esse
" problema com você e só vc criar um 2º Include TOP contendo todas as
" Declarações que vc quiser incluir.
segunda-feira, 19 de setembro de 2011
Dicionario - View de Manutenção de tabelas
report zmj_viewtable.
*&---------------------------------------------------------------------*
" Hoje conforme muitos emails me solicitando estarei falando sobre
" View de manutenção, ou atualizador de tabela, que serve para fazer
" inclusão na tabela de uma forma mais direta, eu fiz isso poucas vezes
" mas já da pra explicar como faze um rsrs.
" Primeiro de tudo vamos entrar na tabela que você quer criar a a View,
" entre no menu /Utilitários/gerador de atualização de tabela/ conforme
" imagem abaixo.
" Depois disso vc irá para um ambiente de diálogo para criação de desta
" atualização da tabela.
" Devemos preencher os campos: Nome da 'tabela/Visão', 'Grupo de
" autorização' que dá autorização para acesso e consequentimente imput
" dentro da tabela, bem.... vocês precisarão criar um grupo de funções
" (se80) para armazenar a View,... depois disso cliquem no botão
" 'Procurar nº(s) tela' e selecionar 'propor nº(s) tela' e depois aperte
" o botão para criar.Prontinho.... você acabou de criar a view, se quiser
" na transação 'sm30' você já consegue ver esta View , mas você não deixar
" sem ter uma transação então vamos para o próximo passo.
" Criar uma transação pra a view.
" Vamos na transação se93 que é para controle de transações e vamos criar
" uma conforme a imagem acima, preenchendo o 'código da transação', depois
" 'texto breve' e principalmente o objeto de execução como 'transação com
" parametros', dê OK.
" Preencham os dados conforme a imagem acima, onde o 'Viewname' é o
" nome da View da tabela ( rsrsrs seriu ?) e o 'Update' é a autorização
" de Imput dentro da tabela.
" Qualquer duvida é só continuar entrando em contato comigo nos emails de
" contatos que tem no blog.... T+ Galera..
*&---------------------------------------------------------------------*
" Hoje conforme muitos emails me solicitando estarei falando sobre
" View de manutenção, ou atualizador de tabela, que serve para fazer
" inclusão na tabela de uma forma mais direta, eu fiz isso poucas vezes
" mas já da pra explicar como faze um rsrs.
" Primeiro de tudo vamos entrar na tabela que você quer criar a a View,
" entre no menu /Utilitários/gerador de atualização de tabela/ conforme
" imagem abaixo.
" Depois disso vc irá para um ambiente de diálogo para criação de desta
" atualização da tabela.
" Devemos preencher os campos: Nome da 'tabela/Visão', 'Grupo de
" autorização' que dá autorização para acesso e consequentimente imput
" dentro da tabela, bem.... vocês precisarão criar um grupo de funções
" (se80) para armazenar a View,... depois disso cliquem no botão
" 'Procurar nº(s) tela' e selecionar 'propor nº(s) tela' e depois aperte
" o botão para criar.Prontinho.... você acabou de criar a view, se quiser
" na transação 'sm30' você já consegue ver esta View , mas você não deixar
" sem ter uma transação então vamos para o próximo passo.
" Criar uma transação pra a view.
" uma conforme a imagem acima, preenchendo o 'código da transação', depois
" 'texto breve' e principalmente o objeto de execução como 'transação com
" parametros', dê OK.
" Preencham os dados conforme a imagem acima, onde o 'Viewname' é o
" nome da View da tabela ( rsrsrs seriu ?) e o 'Update' é a autorização
" de Imput dentro da tabela.
" Qualquer duvida é só continuar entrando em contato comigo nos emails de
" contatos que tem no blog.... T+ Galera..
quinta-feira, 1 de setembro de 2011
ALV - Estrutura
REPORT z_struc_alv.
*&---------------------------------------------------------------------*
" Vou fala agora sobre Estrutura dentro do ALV, I_STRUCTURE_NAME servirá,
" como o jah falado, igual ao parametro 'IT_FIELDCAT' da função,
" a estrutura feita tem esta cara:
" Sabe criar estrutura ? acesse :
" http://abapjuniores.blogspot.com/2011/08/dicionario-estruturas.html
" o código eh muito simples olhem abaixo.
" Tabelas
TABLES :
mara
.
TYPE-POOLs : slis
.
" Tipos
TYPES BEGIN OF ty_outtab.
" Aki eu estou aproveitando a estrutura criada para cria o tipo identico
" para a tabela de saida.
INCLUDE TYPE zst_struc_001.
TYPES END OF ty_outtab.
TYPES :
BEGIN OF ty_mara,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
END OF ty_mara,
BEGIN OF ty_makt,
matnr TYPE makt-matnr,
maktx TYPE makt-maktx,
END OF ty_makt
.
" Tabelas Internas e Estruturas
DATA :
st_outtab TYPE ty_outtab,
it_outtab TYPE TABLE OF ty_outtab,
st_mara TYPE ty_mara,
it_mara TYPE TABLE OF ty_mara,
st_makt TYPE ty_makt,
it_makt TYPE TABLE OF ty_makt
.
" Constantes
data : c_x TYPE c VALUE 'X'.
" Tela de seleção.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS : so_matnr FOR mara-matnr
.
SELECTION-SCREEN END OF BLOCK 1.
" Inicio do programa.
START-OF-SELECTION.
PERFORM :
z_busca_dados,
z_feed_outtab,
z_cria_alv
.
*&---------------------------------------------------------------------*
*& Form Z_BUSCA_DADOS
*&---------------------------------------------------------------------*
" Leitura simples das tabelas para alimentar a tabela de saida.
FORM z_busca_dados .
SELECT matnr ersda
FROM mara
INTO TABLE it_mara
UP TO 100 ROWS
WHERE matnr IN so_matnr
.
SELECT matnr maktx
FROM makt
INTO TABLE it_makt
FOR ALL ENTRIES IN it_mara
WHERE matnr = it_mara-matnr
AND spras = 'PT'
.
ENDFORM. " Z_BUSCA_DADOS
*&---------------------------------------------------------------------*
*& Form Z_FEED_OUTTAB
*&---------------------------------------------------------------------*
" Alimentação da tabela de saida.
FORM z_feed_outtab .
LOOP AT it_mara INTO st_mara.
READ TABLE it_makt INTO st_makt
WITH KEY matnr = st_mara-matnr
.
st_outtab-check = ' '.
st_outtab-matnr = st_mara-matnr.
st_outtab-ersda = st_mara-ersda.
st_outtab-maktx = st_makt-maktx.
APPEND st_outtab TO it_outtab.
ENDLOOP.
ENDFORM. " Z_FEED_OUTTAB
*&---------------------------------------------------------------------*
*& Form Z_CRIA_ALV
*&---------------------------------------------------------------------*
" Cria o ALV.
form Z_CRIA_ALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
" Nome do programa.
I_CALLBACK_PROGRAM = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
" Inserção da estrutura para a substituição do Fieldcatolog
I_STRUCTURE_NAME = 'ZST_STRUC_001'
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
* IS_LAYOUT =
* IT_FIELDCAT =
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = c_x
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_outtab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform. " Z_CRIA_ALV
*&---------------------------------------------------------------------*
" Vou fala agora sobre Estrutura dentro do ALV, I_STRUCTURE_NAME servirá,
" como o jah falado, igual ao parametro 'IT_FIELDCAT' da função,
" a estrutura feita tem esta cara:
" Sabe criar estrutura ? acesse :
" http://abapjuniores.blogspot.com/2011/08/dicionario-estruturas.html
" o código eh muito simples olhem abaixo.
" Tabelas
TABLES :
mara
.
TYPE-POOLs : slis
.
" Tipos
TYPES BEGIN OF ty_outtab.
" Aki eu estou aproveitando a estrutura criada para cria o tipo identico
" para a tabela de saida.
INCLUDE TYPE zst_struc_001.
TYPES END OF ty_outtab.
TYPES :
BEGIN OF ty_mara,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
END OF ty_mara,
BEGIN OF ty_makt,
matnr TYPE makt-matnr,
maktx TYPE makt-maktx,
END OF ty_makt
.
" Tabelas Internas e Estruturas
DATA :
st_outtab TYPE ty_outtab,
it_outtab TYPE TABLE OF ty_outtab,
st_mara TYPE ty_mara,
it_mara TYPE TABLE OF ty_mara,
st_makt TYPE ty_makt,
it_makt TYPE TABLE OF ty_makt
.
" Constantes
data : c_x TYPE c VALUE 'X'.
" Tela de seleção.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS : so_matnr FOR mara-matnr
.
SELECTION-SCREEN END OF BLOCK 1.
" Inicio do programa.
START-OF-SELECTION.
PERFORM :
z_busca_dados,
z_feed_outtab,
z_cria_alv
.
*&---------------------------------------------------------------------*
*& Form Z_BUSCA_DADOS
*&---------------------------------------------------------------------*
" Leitura simples das tabelas para alimentar a tabela de saida.
FORM z_busca_dados .
SELECT matnr ersda
FROM mara
INTO TABLE it_mara
UP TO 100 ROWS
WHERE matnr IN so_matnr
.
SELECT matnr maktx
FROM makt
INTO TABLE it_makt
FOR ALL ENTRIES IN it_mara
WHERE matnr = it_mara-matnr
AND spras = 'PT'
.
ENDFORM. " Z_BUSCA_DADOS
*&---------------------------------------------------------------------*
*& Form Z_FEED_OUTTAB
*&---------------------------------------------------------------------*
" Alimentação da tabela de saida.
FORM z_feed_outtab .
LOOP AT it_mara INTO st_mara.
READ TABLE it_makt INTO st_makt
WITH KEY matnr = st_mara-matnr
.
st_outtab-check = ' '.
st_outtab-matnr = st_mara-matnr.
st_outtab-ersda = st_mara-ersda.
st_outtab-maktx = st_makt-maktx.
APPEND st_outtab TO it_outtab.
ENDLOOP.
ENDFORM. " Z_FEED_OUTTAB
*&---------------------------------------------------------------------*
*& Form Z_CRIA_ALV
*&---------------------------------------------------------------------*
" Cria o ALV.
form Z_CRIA_ALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
" Nome do programa.
I_CALLBACK_PROGRAM = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
" Inserção da estrutura para a substituição do Fieldcatolog
I_STRUCTURE_NAME = 'ZST_STRUC_001'
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
* IS_LAYOUT =
* IT_FIELDCAT =
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = c_x
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_outtab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform. " Z_CRIA_ALV
Assinar:
Postagens (Atom)