Escolar Documentos
Profissional Documentos
Cultura Documentos
id=1xX7h9u86kkcoklu7qhXtaKTQ8Y4NHqVaP-xItcuTZuo ]
SE16 Navegador da tabela (no conteúdo da tabela) usada para cadastrar elementos
padrão.
SM30 Deve ser gerado ao criar uma tabela, serve para dar manutenção a tabela.
Work area - É apenas a área de trabalho temporário, armazenando apenas uma linha da
tabela relacionada a ela. A wa deve estar declarada do mesmo tipo da tabela, e conter
todos os seus campos.
OK Codes
Todas as vezes que o programa é alterado se cria uma ‘request’ da nova versão. É
possível através destas fazer comparações entre as versões e verificar o que foi alterado.
Outros operadores:
GE ou >= - maior ou igual
GT ou > - maior
LE ou <= - menor ou igual
LT ou < - menor
EQ ou = - igual
NE ou <> - diferente
Os operadores AND e OR são usados em geral apenas dentro de IF.
ATIVAÇÃO DO PROGRAMA
REQUEST / PACOTE
Forma de agrupar vários argumentos do mesmo projeto. Cria-se então uma request
para o pacote. Assim, no momento de transportar para outro ambiente tranporta de uma só
vez todos os elementos.
Utilitarios > versões > administração de versões
Exibe as versões do programa.
É possível comparar versões do programa selecionando-as e clicando em comparar (F8).
TRANSPORTE
Para testar o que foi feito no ambiente DEV em outro ambiente da LANDSCAPE, é
preciso fazer o transporte dos seus objetos.
Tudo que criado é colocado em pacotes.
E toda a alteração deve ser guardada em uma request.
------------------------------------------------------------------------------------------------------------------------
ESTRUTURAÇÃO DO CÓDIGO
1 - Declaração de dados
2 - Tela de seleção
3 - Eventos
4 - Start-of-selection / end-of-selection
5 - Rotinas
* ------------------------------------------------- 1
* declaração global
DATA:
L_EMPRESA LIKE T001-BUKRS,
L_PAIS TYPE T001-LAND1.
*------------------------------------------------- 3
* Eventos associados a tela de seleção. Foi colhida uma informação no PARAMETER, no
* SELECTION-SCREEN estão as rotinas que verificam se os valores coletados são válidos
* antes de prossegui o programa.
AT SELECTION-SCREEN ON P_BUKRS.
PERFORM VALIDA_EMPRESA USING P_BUKRS.
*------------------------------------------------- 4
* Todas os processamentos e rotinas são chamados nesta parte do programa.
* USING = passando como parâmetro.
START-OF-SELECTION.
PERFORM BUSCAR_PAIS USING P_BUKRS.
END-OF-SELECTION.
*------------------------------------------------- 5
* Rotinas chamadas durante o programa.
FORM VALIDA_EMPRESA USING EMPRESA.
SELECT SINGLE BUKRS
FROM T001
INTO L_EMPRESA
WHERE BUKRS = EMPRESA
ENDFORM.
FORM BUSCAR_PAIS USING PAIS
...
ENDFORM.
*---------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
VARIÁVEIS DE SISTEMA
sy-datum
Armazena a data atual marcada no sistema.
sy-uzeit
Armazena a hora atual marcada no sistema.
sy-subrc
Serve para verificar se o último comando dado foi realizado corretamente. Em caso
positivo sy-subrc = 0. Para cada valor de sy-subrc diferente de zero existente representa um
erro específico.
sy-tabix
Armazena o último índice de tabela utilizado.
sy-uline
Quando impresso pelo comando WRITE mostra uma linha horizontal.
sy-langu
De idioma.
------------------------------------------------------------------------------------------------------------------------
DATA
CONSTANT
* A partir do momento que um valor é atribuído a ela, esta o terá para sempre.
*------------------------------------------------
TYPES
* -------------------------------------------
TYPES: begin of ty_campos,
MATNR TYPE mara-matnr,
ERSDA TYPE mara-ersda,
ERNAM TYPE mara-ernam,
end of ty_campos.
* -------------------------------------------
* Declarando uma tabela do tipo criado:
DATA: v_ontem TYPE sy-datum.
* -------------------------------------------
TOP-OF-PAGE
INITIALIZATION
* ------------------------------------------
INITIALIZATION.
VG_DATUM = sy-datum
VG_UZEIT = sy-uzeit
*------------------------------------------
PARAMETERS
PARAMETERS:
p_nome(20) type c OBLIGATORY , “ indica campo obrigatorio.
p_matner type mara-matnr, “seguindo ex de tabela
p_dia type sy-datum, “tipo data
p_numero type i, “tipo inteiro
p_valor TYPE p, “tipo float
p_valor2 TYPE p DECIMALS 2, “tipo float com restrição de casas decimais
p_seq(5) TYPE n, “tipo num que completa os campos vazios com 0.
p_cheq AS CHECKBOX, “cria uma caixinha para selecionar.
p_cheq AS CHECKBOX DEFAULT ‘X’, “Inicia checado
p_radio1 RADIOBUTTON GROUP r1, “Cria seleção que permite apenas 1.
p_radio2 RADIOBUTTON GROUP r1.
------------------------------------------------------------------------------------------------------------------------
BEGIN OF / END OF
SELECT-OPITION
*--------------------------------------------------------
TABLES: mara.
SELECT-OPTIONS: s_matnr FOR mara-matrn.
* a tabela de onde os dados serão coletados deve ser declarada anteriormente no TABLES.
*--------------------------------------------------------
* O SELECT dentro destes intervalo de dados será feito de forma diferente.
SELECT matnr
werks
pstat
FROM marc
INTO TABLE t_centros
WHERE matnr IN s_matnr.
*--------------------------------------------------------
CASE
IF / ELSE
IF p_cheq1 = 'X'.
WRITE p_nome COLOR 6 INVERSE. “quando verdade
ELSE.
WRITE p_nome. “quando falso
ENDIF.
* p_cheq1 neste caso é uma variável do tipo checkbox que foi comparada a ‘X’ para conferir
* se está ou não selecionada. No caso de estar selecionada a variável ‘p_nome’ será
* impressa colorida.
* A validação pode ser escrita das seguintes maneiras:
IF p_cheq1 = 'X'.
* ou
IF p_cheq1 eq ‘X’.
* ou
IF p_cheq1 is not initial.
* se a variável não está vazia
DO
IS INITIAL
LOOP
Cria uma estrutura de repetição que varrerá toda a tabela selecionada (a menos que
se use um breakpoint). Lidos sequencialmente.
*--------------------------------------------------------
* Loop para exibição dos dados contidos numa tabela interna.
DATA: wa_mestre TYPE ty_mestre.
* declaração da workarea que receberá os dados para exibição.
SORT
CLEAR
SELECT
O incremento ‘SINGLE’ indica que apenas um dado será selecionado . Só pode ser
usado quando o campo de referência é a chave da tabela.
*--------------------------------------------------------
SELECT SINGLE
MATNR "Material
ERSDA "data de criação
ERNAM "usuario que criou
FROM MARA "tabela
INTO wa_material "work area
WHERE matrn = p_matrn.
* Importante declarar os campos do select na mesma ordem da tabela.
IF sy-subrc IS INITIAL.
MESSAGE 'seleção OK' TYPE 'S'. "mensagem tipo 'S' igual a tipo sucesso.
ELSE.
MESSAGE 'seleção com erro' TYPE 'E'. "messagem tipo erro.
ENDIF.
* é importante após a execução do select, usar o subrc para validar o select.
*--------------------------------------------------------
*--------------------------------------------------------
SELECT matner
werks
pstat
FROM marc
INTO TABLE t_centros
WHERE matnr = p_matnr.
*--------------------------------------------------------
RANGE
...
*--------------------------------------------------------
SELECT matnr "material
ersda "data criação
ernam "usuário que criou
FROM mara "tabela
INTO TABLE wa_material "work-area
WHERE matnr IN s_matnr.
INNER JOIN
READ TABLE
Faz a leitura da tabela buscando um registro específico que será colocado na work
area. Difere do LOOP pois pode-se direcionar o ponto de leitura, através de uma chave
(critério de seleção).
APPEND
PERFORM
Chama uma das rotinas do programa. As rotinas devem ser descritas no final.
Uma maneira de rotular um trecho de programa de forma que ele possa ser
chamado várias vezes ao decorrer do programa.
* -----------------------------------------------------------------------
* no local da rotina no programa:
PERFORM F_CHAMA_POUP USING p_loucadora
CHANGING v_resposta
* using são os parâmetros enviados e changing os parâmetros retornados
* na linguagem ABAP é do tipo estruturada, ou seja, as operações são executadas na
ordem
* que são apresentadas.
* -------------
* dar um duplo clique > criar > marcar o programa em uso e dar OK.
* um trecho de código já é criado ao fim do programa para que seja inserida a lógica do
* perform. Toda variável criada dentro do performe é local dele.
* na área de rotinas:
FORM F_CHAMA_POUP USING p_loucadora TYPE char1
CHANGING v_resposta TYPE char1.
COISAS_A_SEREM_REALIZADAS.
ENDFORM.
* -----------------------------------------------------------------------
CALL FUNTION
Chama funções criadas previamente dentro do sistema SAP. Difere dos FORMS
pois qualquer programa pode chamar as funções, enquanto que os FORMS só podem ser
chamados nos programas onde foram criados.
*--------------------------------------------------
CALL FUNTION ‘NOME_DA_FUNCAO’
EXPORTING
text_question = ‘Salvar alteração’
text_button1 = ‘Sim’
text_button2 = ‘Não’
IMPORTING
answer = v_resposta
EXCEPTION
text_not_found =1
ERROR_MESSAGE = 2
OTHERS = 3.
RAISING
MESSAGE
Em geral no projeto existe uma classe de mensagens pra cada módulo. Através da
SE91, pode se chamar a classe da mensagem.
*-------------------------------------------------------
MESSAGE s002(z015) DISPLAY LIKE ‘E’.
* neste caso z015 é a classe da mensagem, e 002 é a indicação dentro da classe e S é o
* tipo. Aparecem numa janela ao rodapé.
*-------------------------------------------------------
MESSAGE 'Erro de seleção' TYPE 'S'
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
* Desta forma a mensagem de erro não trava o programa, mas mostrando o ícone de erro.
* Para que o programa não continue usa-se o comando seguinte.
*-----------------------------------------------------
SELECTION-SCREEN
START-OF-SELECTION / END-OF-SELECTION
WRITE
Imprime na tela.
WRITE TO
SKIP
Salta linhas.
*---------------------------------
SKIP 2.
* Salta duas linhas
*--------------------------------
EXIT
INSERT
*----------------------------------------
LOOP ti_taba INTO wa_taba.
INSERT INTO z_tabela VALUES wa_taba.
ENDLOOP.
*-------------------------------------
Todas as tabelas criadas pelo dev que não deverão ser alteradas pelas atualizações
do SAP, devem ser iniciadas com a letra z. A transferência de dados para tabelas standards
(as que já existem no SAP) só podem ser feitas através de transações específicas.
MODIFY
*---------------------------------------
MODIFY z_loucadora-preco FROM wa_zloucadora
FROM INDEX vg_index.
* A variavel ‘vg_index’ deve armezanar o ultimo index utilizado na tabela
COMMIT WORK.
*------------------------------------------
COMMIT WORK
UPDATE
EXCEPTIONS
Exceções.
INCLUDE STRUCTURE
Copia a estrutura de uma tabela, apenas para quando todos os campos forem ser
utilizados.
*-----------------------------------
DATA: BEGIN OF T_SAIDA OCCURS 0
INCLUDE STRUCTURE zxxxxx_loucadora
DATA: END OF T_SAIDA
*-----------------------------------
FORMATAÇÃO DE CAMPOS
CONCATENATE
Junta o conteúdo de uma variável com outra dentro de uma terceira.
*------------------------------------------------------------------------------
CONCATENATE V_VAR1 V_VAR2 INTO V_RECEBA.
SEPARATE BY SPACE.
* O comando SEPARATE serve para colocar o que separará as duas variáveis (ex: ponto e
* vírgula)
* O comando SPACE adiciona espaços.
* +++
*--------------------------------------------------------------------------------
SHIFT
Usado para tirar os espaços de uma variável.
Faz o tratamento do que o usuário informar.
*-----------------------------------------------------------------------
SHIFT V_VAR1 LEFT DELETING LEADING ‘ ‘.
* para retirar espaços a esquerda ou
SHIFT V_VAR1 RIGHT DELETING TRALIING ‘ ‘.
* empurra o conteudo da variavel para direita, ocupando os espaços (alinha o conteúdo a
* direita.)
* As aspas com conteudo vazio indicam o que será deletado, também pode ser usando o
* comando SPACE.
V_VAR1 = ‘ TESTE TESTE‘.
SHIFT V_VAR1 BY 1 PLACE.
* Retira uma posição do começo.
V_VAR1 = ‘ TESTE TESTE‘.
SHIFT V_VAR1 UP TO ‘S’.
* retira tudo que tiver após a letra S na varáivel (a esquerda).
V_VAR1 = ‘TREINAMENTO’
V_RECEBE = ‘V_VAR1(3).
*Receberá apenas os três primeiros caracteres da variável V_VAR1, no caso ‘TRE’
V_RECEBE2 = ‘V_VAR1+3(3).
*Receberá os três caracteres a partir da posição 3, no caso ‘INA’
TRANSLATE
* ---------------------------------------------------------------------
TRANSLATE V_VAR1 TO UPPER CASE.
* Tranforma para letras maíusculas.
TRANSLATE V_VAR1 TO LOWER CASE.
* Transforma para letras minúsculas.
CONDENSE
* ---------------------------------------------------------------------
DATA V_VAR1(20) TYPE C VALUE ‘ TESTE TESTE’.
CONDENSE V_VAR1 NO-GAPS.
* O ‘NO-GAPS’ retira todos os buracos. A variável passará a ser: ‘TESTETESTE’.
COLOR
Alterações de cor.
CRIAÇÃO DE TABELAS
INBOUND
*-----------------------------------------
PARAMETERS: p_arqv LIKE rlgrap-filename. "Caminho do Arquivo
PERFORM f_le_arquivo.
*-----------------------------------------
FORM f_le_arquivo .
REFRESH: ti_table.
IF p_arqv IS NOT INITIAL.
* Variavel local do tipo string para ser passada para a função
DATA vl_nome_arqv TYPE string.
* Armazena o caminho do arquivo em uma variável do tipo string
MOVE p_arqv TO vl_nome_arqv. “p_arqv é o arquivo que veio do sistema legado.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = vl_nome_arqv
has_field_separator = 'X'
* IMPORTING
TABLES
data_tab = ti_table
EXCEPTIONS
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDFORM.
*-----------------------------------------
LOOP AT ti_table INTO wa_table.
ENDLOOP.
* neste caso, o delimitador é o ponto e vírgula (;) o programa vai receber informações no
* formato ‘111;Carlos;Santos;112;João;São Paulo’ e a distribuirá pelos respectivos campos
* informados. As informações vindas do sistema legado estão contidas na tab interna
* ‘ti_table’ , após serem passadas por SPLIT para os respectivos campos, passam por
* APPEND para a tab interna ‘ti_dosbons’.
* O próximo procedimento é aplicar um INSERT passando as informações da tab interna
* para a tabela do bando de dados.
*-----------------------------------------
Transação: SHDB
É a transação responsável pelo mapeamento das telas que serão usadas no INPUT.
Faz a gravação dos movimentos a serem simulados via programa. Deve estar
presente em toda operação que envolve Batch Input.
Passos:
- Criar nova gravação e dar um nome a ela e um código de transação válido (por ex
va01).
- Gerar gravação.
- Realizar todos os passos que se pretende gravar.
- Até o fim da transação.
Assim o mapeamento está gerado. Gravado na tabela, com os seguintes campos:
Primeira coluna > Nome técnico do programa.
DYNPRO > Identificação da tela do programa.
DYNBEGIN > Começando tela.
FNAMY > Nome do campo.
FVAL > Valor do campo.
Para testar, processa e ocorrem as seguintes etapas:
- mostra parte por parte
- mostra se houver erro
- apenas executa sem mostrar nada.
O mapeamento é gravado na estrutua (tabela) ‘BDC DATA’.
Esse codigo de mapeamento será colocado no codigo dentro de um LOOP.
*-----------------------------------------------
form f_mapeamento .
DATA:
wa_options TYPE ctu_params,
t_msg TYPE STANDARD TABLE OF bdcmsgcoll.
* Estruturas obrigatórias.
wa_bdc-program = 'SAPMV45A'.
wa_bdc-dynpro = '0101'.
wa_bdc-dynbegin = 'X'.
APPEND wa_bdc TO t_bdc.
CLEAR wa_bdc.
* Indicação do inicio das ações na tela.
wa_bdc-fnam = 'BDC_OKCODE'.
wa_bdc-fval = '/00'.
APPEND wa_bdc TO t_bdc.
CLEAR wa_bdc.
* Cada uma das intruções na tela.
wa_bdc-fnam = 'VBAK-AUART'.
wa_bdc-fval = 'OR'.
APPEND wa_bdc TO t_bdc.
CLEAR wa_bdc.
wa_bdc-fnam = 'VBAK-VKORG'.
wa_bdc-fval = 'bp01'.
APPEND wa_bdc TO t_bdc.
CLEAR wa_bdc.
wa_bdc-fnam = 'VBAK-VTWEG'.
wa_bdc-fval = '01'.
APPEND wa_bdc TO t_bdc.
CLEAR wa_bdc.
wa_bdc-program = 'SAPMV45A'.
wa_bdc-dynpro = '4001'.
wa_bdc-dynbegin = 'X'.
APPEND wa_bdc TO t_bdc.
CLEAR wa_bdc.
* Iniciando ações em outra tela.
*----------------------------------------------
* no código, logo abaixo do END-OF-SELECTION criar um PERFORM para chamar a
* transação criada.
PERFORM: f_chamar_va01.
*----------------------------------------------
* E o form criando será:
form f_chamar_va01 .
DATA vl_mode(1) TYPE c.
vl_mode = 'A'.
DATA t_msg TYPE TABLE OF bdcmsgcoll.
Parametros de entrada:
Os que serão passados para a função, ex: titulo do pop up, texto do pop up, botões
padrão.
Parametros de exportação:
Aqueles que retornam da função, ex: botão de exibir pop up.
Parametros de modificação:
Os que entrem, sofrem modificação e são devolvidos para a função
Parametros de tabela
Para passar range de valores para a função
Parametros de exceção
Devolve mensagens de retorno das atividades ocorridas na função quando
necessário
Codigo-fonte
O código da função.
É possivel dentro do desenvolvedor SAP criar uma função seguindo um modelo pré-
pronto. Escolhando os parâmetros que serão utilizados.
GRID
Função para trabalhar com o relatório online (na tela). Relatório totalmente gráfico.
LIST
Função para trabalhar com relatório impresso.
LAYOUT
Trabalhar o layout do seu relatório.
*----------------
DATA:
v_nome(10) type c.
v_hoje type d.
v_nome = 'Cristina'.
v_hoje = sy-datum.
*** Cabeçalho
WRITE /20(20) 'Título'.
WRITE sy-uline.
*** Campos
WRITE: /10(20) v_nome,
25 '|',
30(20) v_hoje,
/10(20) 'Valor 02',
25 '|',
30(20) 'Valor 07',
/10(20) 'Valor 03',
25 '|',
30(20) 'Valor 08',
/10(20) 'Valor 04',
25 '|',
30(20) 'Valor 09',
/10(20) 'Valor 05',
25 '|',
30(20) 'Valor 10',
sy-uline.
SKIP 5.
WRITE 'rodapé'.
ELEMENTOS DE TEXTO
Usual para substituir textos e mensagens do programa, para que estas possam ser
facilmente traduzidas posteriormente.
WRITE text-001.
* Escreve o texto de código 001 inscrito nos elementos de texto.
* O valor ‘text-001’ também pode ser atribuído a uma variável.
* --------------------------------------
TYPE-POOLS: slis.
DATA: t_fieldcat TYPE slis_t_fieldcat_alv.
* Criar dentro do START-OF-SELECTION um PERFORM para montagem do relatório.
PERFORM: f_monta_lv.
* --------------------------------------
form f_monta_lv .
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'belnr'.
wa_fieldcat-ref_tabname = 'bkpf'.
APPEND wa_fieldcat TO t_fieldcat.
* Esta tabela tem duas colunas: BUKRS e BELNR.
* Clicar em: modelo > selecinoar CALL FUNCTION > Escrever
* REUSE_ALV_GRID_DISPLAY e será criado a estrutura abaixo (foram excluidos os
* parametros menos importantes.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = sy-repid “variável do sistema
IT_FIELDCAT = t_fieldcat “Nome da tabela interna
I_SAVE = 'A'
TABLES
t_outtab = t_tudao “Nome da tabela de saída
EXCEPTIONS
PROGRAM_ERROR =1
OTHERS = 2.
endform.
LIST
Relatórios simples.
SCREENS
Tela online, mais dinâmica. Podem ser colocados vários elementos. Totalmente
controlada pelo codigo feito. O programador define as telas que aperem, as que chamandas
e cada evento realizado.
SELECTION SCREEN
Usado só para reposts, uma seleção de parâmetros fixos, geralmente simples.
Criada a partir de codigos standards.
- PBO
Criar modolo de status (O01)
- barra de menu: ‘interface de usuorio, etc’
- barra de funçoes
- teclas de função: editar
*--------------------------------------------------------------------
module STATUS_1000 output.
SET PF-STATUS 'STATUS_1000'.
SET TITLEBAR 'TITLE_1000'.
endmodule.
*--------------------------------------------------------------------
- PAI
Criar modolo de status (I01)
*--------------------------------------------------------------------
MODULE user_command_1000 INPUT.
IF sy-ucomm = 'BT_BUSCAR'.
SELECT SINGLE maktx
FROM makt
INTO vg_descricao
WHERE matnr = vg_material
AND spras = sy-langu.
IF sy-subrc <> 0.
vg_descricao = 'Não encontrou!'.
ENDIF.
ENDIF.
ENDMODULE.
* modolo para tratar os botoes de saída.
module user_command_1000_exit input.
CASE okcode.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
LEAVE PROGRAM.
ENDCASE.
endmodule.
*--------------------------------------------------------------------
Exemplo de árvore:
TABLE CONTROL
*-----------------------------------------------------------------
* -------- PBO
PROCESS BEFORE OUTPUT.
MODULE STATUS_1000.
LOOP AT t_ebelp
CURSOR tc_control-current_line
WITH CONTROL tc_control.
ENDLOOP.
* --------- PAI
PROCESS AFTER INPUT.
LOOP AT t_ebelp
CURSOR tc_control-current_line
WITH CONTROL tc_control.
ENDLOOP.
MODULE USER_COMMAND_1000.
* Dois cliques no titulo do modolo permite editalo.
* somendo loops e modulos podem ser criados aqui dentro, os demais codigos ficam nas
* respectivas includes.
MODULE user_command_1000_exit AT EXIT-COMMAND.
*-----------------------------------------------------------------
Dentro dos codigos que serao executados quando o usuario solicitar (pelo botao executar)
colocar o SELECT necessario para preenchimento de tabela.
CHAIN
Comando utilizado em conjunto com ‘table control’ para que ele considere o
conteúdo digitado anteriormente durante a troca de linha.
* Dentro do PBO
*-----------------------------------------------------------------
CHAIN.
FIELD wa_saida-matnr.
MODULE trata ON CHAIN REQUEST.
* modulo que contem a lógica.
ENDCHAIN.
*-----------------------------------------------------------------
CALL SCREEN
Dentro das jenelas Online, esta função permite chamar uma nova tela.
*-----------------------------------------------------------------
CALL SCREEN 2000.
* Este comando inicia a tela 2000.
*-----------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
EXEMPLOS DE PROGRAMAS:
*-------------------------------------------------------------------------------------------------------------
* Comparar dados de 3 campos de duas tabelas (bkpf e bseg) buscando registros iguais.
* Ao final juntar os campos selecionados em uma só tabela e exibir.
*--------------------------------------------------------------------------------------------------------------
REPORT ZALUNO09_OUT2010_REPORT2_4.
TYPE-POOLS: slis.
DATA: t_fieldcat TYPE slis_t_fieldcat_alv.
TABLES: bkpf.
START-OF-SELECTION.
PERFORM: f_selecao1.
PERFORM: manipula_dados.
PERFORM: f_monta_lv.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form f_selecao1
*&---------------------------------------------------------------------*
form f_selecao1 .
SELECT
bukrs
belnr
gjahr
blart
budat
FROM bkpf
INTO TABLE t_bkpf
WHERE bukrs eq p_bukrs AND
belnr IN s_belnr AND
gjahr eq p_gjahr.
IF sy-subrc IS INITIAL.
SELECT
bukrs
belnr
gjahr
buzei
hkont
FROM bseg
INTO TABLE t_bseg
FOR ALL ENTRIES IN t_bkpf
WHERE bukrs eq t_bkpf-bukrs AND
belnr eq t_bkpf-belnr AND
gjahr eq t_bkpf-gjahr.
IF sy-subrc IS INITIAL.
MESSAGE 'selação ok!' TYPE 'S'.
ELSE.
MESSAGE 'erro de seleção' TYPE 'S'
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
endform. " f_selecao1
*&---------------------------------------------------------------------*
*& Form manipula_dados
*&---------------------------------------------------------------------*
form manipula_dados .
IF sy-subrc IS INITIAL.
ENDIF.
ENDLOOP.
CLEAR: wa_bkpf,
wa_bseg,
wa_tudao.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form f_monta_lv
*&---------------------------------------------------------------------*
form f_monta_lv .
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BUKRS'.
wa_fieldcat-ref_tabname = 'BKPF'.
APPEND wa_fieldcat TO t_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BELNR'.
wa_fieldcat-ref_tabname = 'BKPF'.
APPEND wa_fieldcat TO t_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'GJAHR'.
wa_fieldcat-ref_tabname = 'BKPF'.
APPEND wa_fieldcat TO t_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BLART'.
wa_fieldcat-ref_tabname = 'BKPF'.
APPEND wa_fieldcat TO t_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BUDAT'.
wa_fieldcat-ref_tabname = 'BKPF'.
APPEND wa_fieldcat TO t_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BUZEI'.
wa_fieldcat-ref_tabname = 'BSEG'.
APPEND wa_fieldcat TO t_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'HKONT'.
wa_fieldcat-ref_tabname = 'BSEG'.
APPEND wa_fieldcat TO t_fieldcat.
endform.
-----------------------------------------------------------------------------------------------------------------------
PRINCIPAIS ATALHOS
Ctrl S Salvar
F8 Executar
Ctrl > Passa para ‘comentário’ o bloco selecionado