Você está na página 1de 35

[ https://docs.google.com/document/pub?

id=1xX7h9u86kkcoklu7qhXtaKTQ8Y4NHqVaP-xItcuTZuo ]

Desenvolvido por: Cris Ferreira.


29/10/2010.

O SAP é um tipo de ERP, ou seja, é um sistema utilizado para interligar TODOS os


setores de uma empresa.

O LANDSCAPE ou ambiente operacional SAP é dividio em instâncias:

Primeiramente os programas são desenvolvidos dentro da instância de


desenvolvimento (DEV), depois são passados pra instância de qualidade (QAS) e depois
pra de produção (PRD).

Dentro de cada instância se trabalha com determinados Clients.


- Client independent: o que for feito no client reflete nos outros (os usados pelos abapers)
- Client depent: não reflete nos outros clients (usados pelos funcionais)

Principais Transações SAP

SE09 Administração de Request.

SE11 ABAP Dictionary


Específica para criação de tabelas.

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.

SE37 Fazer pesquisa de funções.

SE38 ABAP Editor (editor abap)

SE71 Criação e manutenção de formulários SAPscripts

SE80 Repository browser (editor abap)

SE91 Visualizar mensagens.

SE93 Guia de transações (criar / alterar)

VA01 Cria ordem de vendas.

ewk1 Pesquisa comandos em outros programas.


Dica: Clicar sobre um comando e apertar F1 leva a um menu de ajuda com a descrição
detalhada do funcionamento do mesmo.

Tabelas Internas - Estão no espaço de memória do programa, utilizadas para manipulação


de informação

Tabelas transparentes - Tabelas reais do banco de dados.

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

/oxxx Abre nova janela com o indicado em xxx (mantendo a atual)


/n Fecha janela atual
/nxxx Fecha janela atual apontando pra indicada
/h Depura o programa (DEBUG)
/nex Fecha todas as janelas.

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

Para ativar um programa no SAP, clicar no botão com aparência de um fósforo e


escolher o programa a ser ativado.

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.

* Filtros de selects, reads, etc, entradas pelo usuário.


*------------------------------------------------- 2
PARAMETERS:
P_BUKRS LIKE T001-BUKRS.

*------------------------------------------------- 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

Variáveis standard do 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

Inicia declaração de variáveis, tabelas e work areas.


*------------------------------------------
DATA:
L_EMPRESA LIKE T001-BUKRS,
L_PAIS TYPE T001-LAND1,
N1 TYPE I,
V_NOME(10) TYPE C,
t_centros TYPE TABLE OF ty_centros. “tabela interna
wa_material TYPE campos.

* Está declarando duas tabelas e uma variável.


* Se uma variável do tipo C é declara sem a declaração de tamanhos, por default recebe
* tamanho 1.
* o tipo campos já foi decalarado anteriormente.
*-----------------------------------------

CONSTANT

Variáveis físicas fixas. Não são alteradas de forma alguma.


*------------------------------------------------
CONSTANTS:
N1 TYPE I VALUE 1,
c_dia TYPE d value '20101015'.

* A partir do momento que um valor é atribuído a ela, esta o terá para sempre.
*------------------------------------------------

TYPES

Declaração de um tipo de tabela. Cria-se uma referência de estrutura para declarações de


tabelas.

* -------------------------------------------
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

Utilizado para colocar cabeçalho em relatórios de saída. Pouco usado atualmente.


*--------------------------------------------------------
TOP-OF-PAGE.
WRITE:
/10 'Coluna 1',
20 'Coluna 2',
30 'Coluna 3'.
*--------------------------------------------------------

INITIALIZATION

Usado para carregar algumas variáveis e limpar área de memória.


Normalmente usado para setar data e hora.

* ------------------------------------------
INITIALIZATION.
VG_DATUM = sy-datum
VG_UZEIT = sy-uzeit
*------------------------------------------

Estas variáveis já devem ter sido declaradas anteriormente no início do programa.


Este evento termina quando outro evento é inicializado (geralmente o STAR-OF-
SELECTION)
Todo código colocado no inicialization é mostrado antes da execução inicial do
programa.

PARAMETERS

Utilizado para construir uma caixa de entrada de dados.


* o nome do parameter deve ter no máximo 8 caracteres.

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.

Para criar um texto descritivo para os parametros:


Ir para > Elementos de texto > textos de seleção.
Texto descritivo é o que aparece ante a caixa de diálogo do parametro para o usuário.
* Todo parameter tipo caracter deve ter seu tamanho indicado na inicialização.

Ao executar o programa, subentende-se que o usuário ira entrar com os dados e


clicar o botão de executar (encontrando no canto superior esquerdo) a partir daí que os
comandos contidos após o selection-screen serão executados.

------------------------------------------------------------------------------------------------------------------------

BEGIN OF / END OF

Abertura e fechamento de bloco.

SELECT-OPITION

Funciona como um PARAMETER porém selecionando um intervalo de valores de


dados dentro de uma tabela.

*--------------------------------------------------------
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

Funciona como um switch.


*--------------------------------------------------------------
CASE ‘op’. “ ‘op’ é a variável que recebe a opção do usuário.
WHEN ‘1’. “‘op = 1’
Codigo a ser executado...
WHEN ‘2’. “‘op = 2’
Codigo a ser executado...
ENDCASE.
*--------------------------------------------------------------

IF / ELSE

Condição comparativa. Como todo IF executa a ação determinada quando


verdadeiro.

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

Funciona da mesma maneira que nas demais linguagens.


* ---------------------------------------------------------------
DO 3 TIMES.
Codigo a ser executado.
ENDDO.
* ---------------------------------------------------------------
* Fará 3 vezes o comando contido.

IS INITIAL

Se a variável for do tipo char, ‘IS INITIAL’ indica variável vazia.


Se a variável for numérica, ‘IS INITIAL’ indica variável igual a zero.

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.

LOOP AT t_mestre INTO wa_mestre.


WRITE:
/ wa_mestre-kUNNR,
wa_mestre-VKORG,
wa_mestre-VTWEG,
wa_mestre-SPART,
wa_mestre-PARVW,
wa_mestre-PARZA,
ENDLOOP.
* o loop lerá a tabela inteira passando a cada linha para a workarea e imprimindo-a na tela.
*--------------------------------------------------------
* Quando usamos FROM sy-tabix o loop inicia a partir do ultimo valor de index armazenado
em um outro giro.

LOOP t_centros INTO wa_centros FROM sy-tabix.

SORT

Organiza a tabela a partir de um campo determinado.


*--------------------------------------------------------
SORT t_centro BY matnr.
*--------------------------------------------------------

CLEAR

Limpa o conteúdo da variável.


*--------------------------------------------------------
CLEAR:
p_variavel,
wa_legal.
*--------------------------------------------------------

SELECT

Seleciona campos da tabela selecionada e coloca em local para trabalho.

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.
*--------------------------------------------------------

No caso de o PARAMITER não estar selecionando a chave completa da tabela


(todos os campos chave) faz-se outro tipo de ‘SELECT’ que coloca os valores em uma
tabela interna.

*--------------------------------------------------------
SELECT matner
werks
pstat
FROM marc
INTO TABLE t_centros
WHERE matnr = p_matnr.
*--------------------------------------------------------

RANGE
...

FOR ALL ENTRIES

Para quando o SELECT for a partir de um SELECT-OPTION (em vez do


PARAMETER) pode -se usar no SELECT o comando FOR ALL ENTRIES. para cada
entrada do SELECT na tabela ele buscará uma entrada na outra tabela.

*--------------------------------------------------------
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.

IF sy-subrc IS INITIAL. "correto


SELECT matnr "Nº do material
werks "Centro
pstat "Status de atualização
FROM marc
INTO TABLE t_centros
FOR ALL ENTRIES IN t_material
WHERE matnr EQ t_material-matnr.
ENDIF.
*--------------------------------------------------------
* para cada entrada selecionada na tabela ‘mara’ procura-se uma entrada na tabela ‘marc’.

INNER JOIN

Forma de fazer a junção de duas tabelas em um único SELECT em uma janela de


saída.
*--------------------------------------------------------------------------------
SELECT k~ebeln k~erdat “Campos selecionados na tab EKKO
p~ebelp “Campos selecionados na tab EKPO
FROM ekko AS k “Como se “apelidando” as tabelas
INNER JOIN ekpo AS p
ON k~ebeln = p~ebeln
INTO TABLE t_saida
WHERE k~bsart = ‘NB’
* Para cada registro de ‘ekko’ buscar um registro com campo ‘ebeln’ correspondente em
* ‘ekpo’, quando ‘bsart’ de ‘ekpo’ for igual a ‘NB’. E adicionar as informações dos campos
* ‘ebeln’, ‘erdat’ e ‘ebelp’ desta linha selecionada a tabela ‘t_saida’.
*--------------------------------------------------------------------------------

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).

SORT t_centro BY matnr.


* É necessário inicialmente organizar a tabela pela ordem do registro que será buscado
para
* que se possa usar o BINARY SEARCH.
LOOP AT t_material into wa_material.
READ TABLE t_centros INTO wa_centros
WITH KEY matnr = wa_material-matnr
BINARY SEARCH.
IF sy-subrc IS INITIAL.
LOOP ATR t_centros INTO wa_centros FROM sy-tabix.
IF wa_centros-matnr ne t_centros-matnr.
EXIT. “Termina o loop.
ENDIF.
WRITE: wa_centros-werks.
ENDLOOP.
ENDLOOP.
* O loop faz a leitura de toda tabela t_material, enquanto que o READ TABLE faz a leitura
da
* tabela interna t_centro, buscando o dado específico de matnr. E se encontrado, o Loop
* seguinte busca o local da tabela onde está o dado (com auxilio do sy-tabix) e imprime até
* que o werks deixe de corresponder ao matrn selecionado (seleção feita pelo if).
* O binary search é um tipo otimizado de pesquisa em tabela.

APPEND

Informações adicionados por append são colocadas ao fim da tabela, se a tabela já


possui 10 linhas, a informação appendada é alocada na décima primeira.
*---------------------------------------------------------------------
APPEND wa_tudao to t_tudao.
*---------------------------------------------------------------------
* neste exemplo o append está dentro do loop onde os dados a serem transferidos são
* passados para a work area.

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.

* as exceptions ‘OTHERS’ e ‘ERROR MESSAGE’ são sempre recomendadas pois


* abrangem quase todos os erros possíveis.
* exporting leva as informações enviadas pra função
* importing recebe as informações que retornam da função
* usando o botão ‘pattern’’ na guia superior é possível escolher entre modelos de função
*-------------------------------------------------

RAISING

Faz o tratamento de erro, impedindo o Dump.

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

Combinado com PARAMETER ou SELECT-OPTION verifica alguns eventos do


programa, antes de continuar sua execução.

SELECTION-SCREEN begin of BLOCK b1


WITH FRAME “enquadra o bloco
TITLE TEXT-001. “insere um título

PARAMETERS: p_nome(20) type c,


p_matner type mara-matnr,
p_dia type sy-datum,
p_valor2 TYPE p DECIMALS 2,
p_seq(5) TYPE n.

SELECTION-SCREEN END OF BLOCK b1.

Ao executar o programa, subentende-se que o usuário ira entrar com os dados e


clicar o botão de executar (encontrando no canto superior esquerdo) a partir daí que os
comandos contidos apos o selection-screen serão executados.

START-OF-SELECTION / END-OF-SELECTION

Dentro destes se colocará toda a lógica de programação a ser executada.


*----------------------------------
START-OF-SELECTION.
* Não é necessariamente obrigatório que se use o 'END-OF-SELECTION'
*----------------------------------

WRITE

Imprime na tela.

WRITE /10(20) ‘Texto’.


* a / quebra linha, 10 seria o espaço inicial e 20 o tamanho desse campo.
WRITE:
wa_clientes-nome,
wa-clientes-empresa.
* Imprime a partir da work area da tabela t_clientes os campos ‘nome’ e ‘empres’.

WRITE TO

Indica o local da impressão.


*-------------------------------------
DATA VL_VALOR TYPE CHAR20.
PARAMETER P_DATA TYPE SY-DATUM .
WRITE P_DATA TO VL_VALOR.
* Jogando o valor de P_DATA na variável VL_VALOR e imprimindo na tela.

DATA VL_VALOR TYPE CHAR20.


PARAMETER P_VALOR TYPE DZMENG.
WRITE P_VALOR TO VL_VALOR.
* Joga o valor de V_VALOR em P_VALOR e imprime na tela no formato ‘0.000,000’
* (formato standard de ‘DZMENG’).

DATA V_DATA TYPE CHAR20.


PARAMETER P_DATA TYPE SY-DATUM .
WRITE P_DATA TO V_DATA DD/MM/YYYY.
* Imprime forçando o formato para o indicado.
*-------------------------------------

SKIP

Salta linhas.
*---------------------------------
SKIP 2.
* Salta duas linhas
*--------------------------------

EXIT

Encerra imediatamente o laço em que se encontra.


*---------------------------------
EXIT.
*--------------------------------

INSERT

Passa dados da tabela interna para a tabela transparente.

*----------------------------------------
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

Modifica a tabela física a partir da work areas


A wa deve estar declarada do mesmo tipo da tabela, e conter todos os seus campos.
O comando modifica a tabela quando encontra a chave, e adiciona linha quando não
encontra.

*---------------------------------------
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

A inserção desse comando garante que o dado foi gravado na tabela.

COMMIT WORK AND WAIT.


Espera que o banco de dados grave realmente a informação antes de prosseguir o
programa.

UPDATE

Transfere dados para o banco de dados.

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’

PARAMETER P_DATA1 TYPE SY-DATUM.


V_RECEBE(4) TYPE C.
*Receberá o ano, pois o sistema a data no formato ingles (AAAAMMDD)
V_RECEBE+4(2) TYPE C.
*Receberá o mês.
*------------------------------------------------------------------------

TRANSLATE

Transformar algo da variável.

* ---------------------------------------------------------------------
TRANSLATE V_VAR1 TO UPPER CASE.
* Tranforma para letras maíusculas.
TRANSLATE V_VAR1 TO LOWER CASE.
* Transforma para letras minúsculas.

DATA V_RECEBE(10) TYPE C.


V_RECEBE = ‘1000,00’.
TRANSLATE V_RECEBE USING ‘,;’.
* Substituirá a vírgula escrita por um ponto e vírgula. (todas as vírgulas que tiverem)

DATA V_RECEBE(10) TYPE C


DATA V_TROCAR(2) TYPE C VALUE ‘.;’.
V_RECEBE = ‘1000,00’.
TRANSLATE V_RECEBE USING V_TROCAR.
* Mesmo que o anterior, porém usando uma variável de troca.

V_RECEBE = ‘TESTE TROCAR TESTE’.


V_RECEBE+6(6) = ‘XXX’
* Substitui o conteúdo da variável, passará a ser ‘TESTE XXX TESTE’ o tamanho do
campo é
* mantido.
* ---------------------------------------------------------------------

CONDENSE

Retira os espaços juntando as variáveis.

* ---------------------------------------------------------------------
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.

WRITE 10(20) ‘Cristina’ COLOR 3.


* O texto ‘Cristina’ será impresso sobre um fundo na cor 3, ou seja, amarelo.
* As cores disponíveis variam de 1 a 7.
WRITE 10(20) ‘Cristina’ COLOR 3 INVERSE.
* Modifica a cor do texto.
WRITE 10(20) ‘Cristina’ COLOR 3 INTENSIFIED OFF.
* Diminui a intensidade da coloração.

CRIAÇÃO DE TABELAS

Para criar uma tabela é preciso inicialmente definir seus:


- Campos. (ex: PID, nome, cidade, etc..)
- Os tipos dos campos (ex: númerico7, char30, etc)
- Chave primária: campo que dê unicidade (a tabela não pode ter 2 registros iguais
neste campo)
- Elementos de dados:

A transação de criação de tabelas é a SE11 (dicionário de dados).


Primeira parte é a criação de elementos de dados.
Na tela inicial: colocar o nome da tabela no ‘tab. banco de dados’ referenciar o
domínio... (criando os dominios se os mesmos nao existirem).
‘Categoria de dados': criar os nomes dos campos, por exemplo:
zzznome, zzzpid, zzzcidade, zzzsexo, etc. Ao entrar definir o domínio do
campo ( dominio = tipo do mesmo) e sua descrição, depois o tamanho e
a denominação dos campos, os tamanhos e o nome do mesmo, pois isso
interfirirá em relatório quando o SAP montar, ele puxará automaticamente por
essa denominação.
Criar a tabela, colocar quais são os campos dela, o primeiro campo
sempre é a mandante (que por padrão deve chamar ‘mandt’).
* Não esquecer de ativar a tabela.
A criação das tabelas é do maior para o menor, primeiro dominio,
depois campos, depois a tabela.

Para incersão de dados nas tabelas usa-se uma transação (va01).


Geralmente um batch input é criado para facilitar esta operação
repitindo a transação quantas vezes forem necessárias.

INBOUND

É o processo de transferir informações de um sistema legado para o SAP. Quando


as informações entram no sistema, fazem-o de forma desformatada (em linha contínua). É
preciso criar um padrão de formatação, ou seja, o delimitador, e assim com auxílio do
comando SPLIT quebrar a linha de informação recebida para dividi-la pelos campos da
tabela SAP.

*-----------------------------------------
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.

SPLIT wa_table-linha AT ‘;’ INTO wa_dosbons-pid


wa_dosbons-nome
wa_dosbons-cidade.
APPEND wa_dosbons TO ti_dosbons.
CLEAR: wa_table,
wa_dosbons.

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.
*-----------------------------------------

BATCH INPUT E CALL TRANSACTION

A transação é um codigo que identfiica a chamada de um programa. Uma transação


está associada a apenas um programa. Definido pelo usuário.
O usuário digita a identificação da transação.

Para acessar grandes quantidades de dados é necessário o processamento em


Batch. Nada mais é do que o mapeamento das telas. Para uma repetição do processo.

Batch - processamento massivo.

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.

* Comando para chamar transações:


CALL TRANSACTION 'va01'
USING t_bdc
MODE vl_mode "modo de exibição de telas
* O modo mais comumente usado é o 'N' faz as transações em background.
MESSAGES INTO t_msg. "Mensagem de retorno.
endform.
*----------------------------------------------

CARACTERISTICAS DAS FUNÇÕES

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.

CRIANDO RELATORIO WRITE

*----------------
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.

Ir para > elementos de texto > símbulos de texto.


Sim. - codigos do programa.
Texto - o texto em si.
Co.- preenchido automaticamente.
* Sempre ativar os textos antes de sair.

Selecionando o elemento. > Ir para > Tradução


validará o texto para outros idiomas.

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.

CRIANDO REALATÓRIO ALV

O relatório ALV apresenta um visual mais elaboraldo do que o WRITE.


Primero passo, declarar o TYPE-POOLS, esta declaração é na verdade um pacote
que contém todas as declarações necessárias pré-definidas. E a tabela interna t_fieldcat.

* --------------------------------------
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 .

DATA: wa_fieldcat TYPE slis_fieldcat_alv.


* Para cada campo da tabela criar uma estrutura contendo o nome que aparecerá na coluna
* e sua tabela de referência.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'bukrs'. “Nome do campo
wa_fieldcat-ref_tabname = 'bkpf'. “Tabela de referência
APPEND wa_fieldcat TO t_fieldcat.

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.

TELAS DE DIÁLOGO COM O USUÁRIO

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.

Evento PBO tudo que acontece antes da tela aparecer.


Evento PAI os que acontecem após o usuario ter entrado com os dados.

SELECTION SCREEN
Usado só para reposts, uma seleção de parâmetros fixos, geralmente simples.
Criada a partir de codigos standards.

DESENVOLVIMENTO DE JANELA ONLINE

A contruções de janelas no SAP é feita através da transação SE80 que abre o


ambiente de desenvolvimento. Essa transação, assim como a SE38 pode ser usada para
criação de programas.
Aba ‘Transport Organizer’ > Programa > Colocar o nome (iniciado com SAPMZ) > Enter >
Criar > com include top
Na janela seguinte opção ‘Pool de modulos’ > Gravar
Clica na ‘include’ a ser editada.
Programa principal > botão direito > criar > Tela > Sim
Dar um número pra tela (ex 1000)

Toda tela tem 3 abas :


Características:
Descrição - Descrição do programa
Tipo - Normal (completa), subtela (dentro de outra), caixa de dialogo (pop-up)

Clicar no botão ‘Layout’ para abrir o editor de telas. (Screen Painter)


Abre a janela pra construção do layout
* Dica: 2 cliques na estrutura abre um janela de caracterisitas.

Ao terminar a edição da tela clicar em “Lógica de Processamento”


E editar as includes (criar e salvar)
Editar tela:

- 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.
*--------------------------------------------------------------------

Crias transação para chamar a tela.


Chamar transação se93 > Nomeia sem o SAPM
Desta forma, cada vez que esta transação for chamada, a tela criada será executada.

* Dois cliques na include > Ir para > Caracteristicas.


Para alterar o nome da include e melhorar a organização das mesmas.
* Para ativar todos os elementos de uma só vez, clicar com o botão direito do mouse na
pasta do programa completo e em ‘Ativar’.

Exemplo de árvore:

> Programa principal


>> Tipos
>> Campos
>> Modolo PBP
>> Modolo PAI
>> Telas
Onde fica a parte principal do código, de onde se colocam os módolos que estaram
em PBO e PAI.
>> Status GUI
>> Tits GUI
>> Transações
>> Includes
Contem:
>>> Include F01 - codigos dos performs
>>> Include I01 - codigos de PAI aqueles executados após ent de dados (ao
pressionar botoes)
>>> Include O01 - codigos de PBO executados antes dos dados. (status e titulos)
>>> Include TOP

TABLE CONTROL

Tipo de tabela contruido no modo online.


Na tela de layout, selecionar o ‘table control’ na barra de ferramentas. E desenha-la
na tela. Após, desenhar os campos (usando a caixa de campo de entrada)
Para incluir campos tem o botão ‘janela campos’ selecionar a tabela e os campos e
adicionalos. Dentro das caracteristicas da ‘tabel control’. O campo `Nome` deve estar
preenchido com o local de destino dos dados no select.
WA_EBELP-MATNR
Para validar a tabela, na include onde foram declaradas as variáveis (TOP) declarar:
*-----------------------------------------------------------------
CONTROLS tc_control TYPE TABLEVIEW USING SCREEN 1000.
*-----------------------------------------------------------------

E na tela, declar no PBO (depois da declaração de modolo) e no PAI (antes das


declarações de modolos) o Loop na table control que fará com que o cursor passe pela
tabela.

*-----------------------------------------------------------------
* -------- 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.
*-----------------------------------------------------------------

* Não esquecer de declarar a tabela interna usada (na include TOP)


TYPES: BEGIN OF ty_ebelp,
matnr TYPE ekpo-matnr,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
END OF ty_ebelp.

DATA: t_ebelp TYPE TABLE OF ty_ebelp,


wa_ebelp TYPE ty_ebelp.
*-----------------------------------------------------------------

Dentro dos codigos que serao executados quando o usuario solicitar (pelo botao executar)
colocar o SELECT necessario para preenchimento de tabela.

* neste caso, modolo user_command_1000.


*-----------------------------------------------------------------
SELECT matnr menge meins
INTO TABLE t_ebelp
FROM ekpo
WHERE ebeln = vg_ebeln.
*-----------------------------------------------------------------

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.

TYPES: BEGIN OF ty_bkpf,


bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
blart TYPE bkpf-blart,
budat TYPE bkpf-budat,
END OF ty_bkpf.
TYPES: BEGIN OF ty_bseg,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
buzei TYPE bseg-buzei,
hkont TYPE bseg-hkont,
END OF ty_bseg.
TYPES: BEGIN OF ty_tudao,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
blart TYPE bkpf-blart,
budat TYPE bkpf-budat,
buzei TYPE bseg-buzei,
hkont TYPE bseg-hkont,
END OF ty_tudao.

DATA: t_bkpf TYPE TABLE OF ty_bkpf,


t_bseg TYPE TABLE OF ty_bseg,
t_tudao TYPE TABLE OF ty_tudao,
wa_tudao TYPE ty_tudao.

SELECTION-SCREEN BEGIN OF BLOCK b1


WITH FRAME.

PARAMETERS: p_bukrs TYPE bkpf-bukrs.


SELECT-OPTIONS: s_belnr FOR bkpf-belnr.
PARAMETERS: p_gjahr TYPE bkpf-gjahr.

SELECTION-SCREEN END OF BLOCK b1.

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 .

DATA: wa_bkpf TYPE ty_bkpf,


wa_bseg TYPE ty_bseg.

SORT t_bseg BY bukrs belnr gjahr.


SORT t_bkpf BY bukrs belnr gjahr.

LOOP AT t_bkpf INTO wa_bkpf.


READ TABLE t_bseg
WITH KEY bukrs = wa_bkpf-bukrs
belnr = wa_bkpf-belnr
gjahr = wa_bkpf-gjahr
TRANSPORTING NO FIELDS
BINARY SEARCH.

IF sy-subrc IS INITIAL.

LOOP AT t_bseg INTO wa_bseg FROM sy-tabix.


IF wa_bseg-bukrs NE wa_bkpf-bukrs OR
wa_bseg-belnr NE wa_bkpf-belnr OR
wa_bseg-gjahr NE wa_bkpf-gjahr.
EXIT.
ELSE.
wa_tudao-bukrs = wa_bseg-bukrs.
wa_tudao-belnr = wa_bseg-belnr.
wa_tudao-gjahr = wa_bseg-gjahr.
wa_tudao-blart = wa_bkpf-blart.
wa_tudao-budat = wa_bkpf-budat.
wa_tudao-buzei = wa_bseg-buzei.
wa_tudao-hkont = wa_bseg-hkont.

APPEND wa_tudao to t_tudao.

ENDIF.

ENDLOOP.
CLEAR: wa_bkpf,
wa_bseg,
wa_tudao.

ENDIF.
ENDLOOP.

endform. " manipula_dados

*&---------------------------------------------------------------------*
*& Form f_monta_lv
*&---------------------------------------------------------------------*

form f_monta_lv .

DATA: wa_fieldcat TYPE slis_fieldcat_alv.

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.

* Ir em Modelo > Nome da função


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = sy-repid
IT_FIELDCAT = t_fieldcat
I_SAVE = 'A'
TABLES
t_outtab = t_tudao
EXCEPTIONS
PROGRAM_ERROR =1
OTHERS = 2.

endform.

-----------------------------------------------------------------------------------------------------------------------

PRINCIPAIS ATALHOS

F3 Voltar a janela anterior

Ctrl F2 Verificar erros

Ctrl F3 Ativar programa / elementos de texto

Ctrl S Salvar

F8 Executar
Ctrl > Passa para ‘comentário’ o bloco selecionado

Ctrl < Retora o modo ‘comentário’ do bloco selecionado

Shif F1 Pretty printer (formata o codigo)

Criação: Cristina Ferreira Santana.


Auxílio Especial: Thiago Correa Stefanini

Você também pode gostar