Você está na página 1de 156

1 ABAP FOUNDATIONS

IP 177.140.152.215

Instancia: 41

ID: 000

Criar programa dentro de request

Criar programa local – fica com o $TMP, não sai do DEV.

Todo programa report é um programa executável.

 Criar pacote – SE80 – Z2608


 Com figurar Pretty printer (utilitários -> configurações)
Para verificar se a alteração dentro da request vai mandar tudo ou somente a parte alterada.

R3TR – Transporta tudo!

LIMU – Transporta somente a alteração!


Quando salvo programa no "objeto local": pacote $TMP

Todo programa executável é um REPORT

SE80 - Criar pacote para salvar programas. PAcote criado Z2608

Request - ID7K900634
No programa - Pretty Printer - configurar
Programa Calculadora:
_____________________________________________________________________________
_
*&--------------------------------------------------------------------
-*
*& Report ZCALCULADORA2601
*&
*&--------------------------------------------------------------------
-*
*& Descrição: Calculadora
*& Autor: Thais Jannuzzelli - Data: 26/08/2017
*&--------------------------------------------------------------------
-*

REPORT zcalculadora2601.
*Tela de SELEÇÃO:
SELECTION-SCREEN BEGIN OF BLOCK abap1 WITH FRAME TITLE text-t01.
PARAMETERS p_num1 TYPE i." TIPE 'I' - variável de numero inteiro"
PARAMETERS p_sinal TYPE c. " TIPE 'C' - variável tipo caracter"
PARAMETERS p_num2 TYPE i.
SELECTION-SCREEN END OF BLOCK abap1.

*Evento Inicial do Programa (quando executa - F8 - o programa).


START-OF-SELECTION.

DATA vl_resultado TYPE i. "DECLARAÇÃO DE VARIÁVEL, VARIAVEL DO TIPO


INTEIRO"

CASE p_sinal. "Caso o sinal seja:"


WHEN '+'.
vl_resultado = p_num1 + p_num2. "Faça essa conta de +"
WHEN '-'.
vl_resultado = p_num1 - p_num2.
WHEN '*'.
vl_resultado = p_num1 * p_num2.
WHEN '/'.
vl_resultado = p_num1 / p_num2.

ENDCASE.

WRITE 'O Resultado é:'. "o que vai sair escrito acima do resultado"
WRITE vl_resultado. "resultado da variável resultado"

______________________________________________________________________
__

Mudar cor: Clica na variavel + F1 para ver as opções:


SE93 - Criar Transação
SE11 - TABELA

SE09

Dois cliques na task


Verificar ID - programa

R3TR - Objeto total - leva tudo da tabela

LIMU - Parcial
Consultar LOG de modificações em Tabelas (SCU3).
Tabela - ZAGENDA2601

Programa

Para puxar texto base da tabela que chamei:


*&------------------------------------------------------------------
---*
*& Report ZMATERIAL2601
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa de Material
*& Autor: Thais Jannuzzelli - Data: 26/08/2017
*&------------------------------------------------------------------
---*

REPORT zmaterial2601.
*&------------------------------------------------------------------
---*
*& Internal Tables
*&------------------------------------------------------------------
---*
TABLES mara. "tabela declarada devido ao comando select-options".

*&------------------------------------------------------------------
---*
*& Types
*&------------------------------------------------------------------
---*
TYPES: BEGIN OF ty_mara,
matnr TYPE mara-matnr,
mtart TYPE mara-mtart,
meins TYPE mara-meins,
brgew TYPE mara-brgew,
ntgew TYPE mara-ntgew,
END OF ty_mara.

DATA ti_mara TYPE STANDARD TABLE OF ty_mara. "vou buscar os dados da


tabela iterna dentro da ty_mara (que foi declarada acima), por causa
da performance,
"só para trazer esses 5 campos.

*&------------------------------------------------------------------
---*
*& WorkArea
*&------------------------------------------------------------------
---*
DATA wa_mara TYPE ty_mara. "declarando a workarea

*&------------------------------------------------------------------
---*
*& Selection - Screen
*&------------------------------------------------------------------
---*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-m01.


SELECT-OPTIONS s_matnr FOR mara-matnr. " para usar o comando select-
options precisa declarar a tabela acima" esse comando abre range
para seleção"
PARAMETERS p_meins TYPE mara-meins OBLIGATORY. " p_meins TYPE
mara-meins = p-meins (18) type C." esse comando permite somente um
dado de seleção "
SELECTION-SCREEN END OF BLOCK b1.

*&------------------------------------------------------------------
---*
*& Start-of-Selection - Event
*&------------------------------------------------------------------
---*
START-OF-SELECTION.
*Seleciona Dados
SELECT matnr " 5 campos
mtart
meins
brgew
ntgew
FROM mara " da tabela mara
INTO TABLE ti_mara "ti = tabela interna, o sap tras sempre para
a tabela interna o resultado do select.
WHERE matnr IN s_matnr "IN para o select-options
AND meins = p_meins. " = para o parameters
*0 = Acho
*4 = não achou
*8 = tabela vazia

IF sy-subrc EQ 0.

*Impressão dos dados


LOOP AT ti_mara INTO wa_mara. "Loop é uma leitura sequencia, de
repetição. Cada registro lido vai para dentro de uma wa=workarea,
linha por linha
WRITE: / wa_mara-matnr,
wa_mara-mtart,
wa_mara-meins,
wa_mara-brgew,
wa_mara-ntgew.

ENDLOOP.

ENDIF.

TAREFA

*&------------------------------------------------------------------
---*
*& Report ZVENDAS2902
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa ZVendas - Curso ABAP
*& Autor: Marielena Silva - Data: 29.08.2017
*&------------------------------------------------------------------
---*
REPORT zvendas2902.

*&------------------------------------------------------------------
---*
*& Internal Tables
*&------------------------------------------------------------------
---*

TABLES vbak. "tabela declarada devido ao comando select-options".

*&------------------------------------------------------------------
---*
*& Types
*&------------------------------------------------------------------
---*
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbak-vbeln, "Doc.vendas
erdat TYPE vbak-erdat, "Dt.criação
auart TYPE vbak-auart, "Tipo doc.vendas
gsber TYPE vbak-gsber, "Divisão
vsbed TYPE vbak-vsbed, "Condição exped.
END OF ty_vbak.

DATA ti_vbak TYPE STANDARD TABLE OF ty_vbak. "vou buscar os dados da


tabela iterna dentro da ty_mara (que foi declarada acima), por caus
a da performance,
"só para trazer esses 5 campos.

*&------------------------------------------------------------------
---*
*& WorkArea
*&------------------------------------------------------------------
---*
DATA wa_vbak TYPE ty_vbak. "declarando a workarea

*&------------------------------------------------------------------
---*
*& Selection - Screen
*&------------------------------------------------------------------
---*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-v01.


SELECT-OPTIONS s_vbeln FOR vbak-vbeln. " para usar o comando select-
options precisa declarar a tabela acima" esse comando abre range par
a seleção"
SELECTION-SCREEN END OF BLOCK b1.

*&------------------------------------------------------------------
---*
*& Start-of-Selection - Event
*&------------------------------------------------------------------
---*
START-OF-SELECTION.
*Seleciona Dados
SELECT vbeln
erdat
auart
gsber
vsbed
FROM vbak
INTO TABLE ti_vbak
WHERE vbeln IN s_vbeln.

IF sy-subrc EQ 0.

*Impressão dos dados


LOOP AT ti_vbak INTO wa_vbak. "Loop é uma leitura sequencia, de
repetição. Cada registro lido vai para dentro de uma wa=workarea, li
nha por linha
WRITE: / wa_vbak-vbeln,
wa_vbak-erdat,
wa_vbak-auart,
wa_vbak-gsber,
wa_vbak-vsbed.

ENDLOOP.

ENDIF.
*&------------------------------------------------------------------
---*
*& Report ZMATERIAL2600
*&
*&------------------------------------------------------------------
---*
*& Descrição: Relatório de Materiais
*& Data: 26/08/2017 - Autor: Carlos Garcia - Modulo MM
*&------------------------------------------------------------------
---*
REPORT zmaterial2600 NO STANDARD PAGE HEADING LINE-SIZE 104 LINE-
COUNT 65.

*-------------------------------------------------------------------
---*
* Tables
*-------------------------------------------------------------------
---*
TABLES mara.

*-------------------------------------------------------------------
---*
* Types
*-------------------------------------------------------------------
---*
TYPES: BEGIN OF ty_mara,
matnr TYPE mara-matnr,
mtart TYPE mara-mtart,
meins TYPE mara-meins,
brgew TYPE mara-brgew,
ntgew TYPE mara-ntgew,
END OF ty_mara,

BEGIN OF ty_makt,
matnr TYPE makt-matnr,
maktx TYPE makt-maktx,
END OF ty_makt.

*-------------------------------------------------------------------
---*
* WorkArea
*-------------------------------------------------------------------
---*
DATA: wa_mara TYPE ty_mara,
wa_makt TYPE ty_makt.

*-------------------------------------------------------------------
---*
* Internal Table
*-------------------------------------------------------------------
---*
DATA: ti_mara TYPE STANDARD TABLE OF ty_mara,
ti_makt TYPE STANDARD TABLE OF ty_makt.

*-------------------------------------------------------------------
---*
* Selection-Screen
*-------------------------------------------------------------------
---*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-m01.
SELECT-OPTIONS s_matnr FOR mara-
matnr. " Nº do material
PARAMETERS p_meins TYPE mara-
meins DEFAULT 'KG' OBLIGATORY. " Unidade de medida básica
SELECTION-SCREEN END OF BLOCK b1.

*-------------------------------------------------------------------
---*
* Top-of-Page - Event
*-------------------------------------------------------------------
---*
TOP-OF-PAGE.

WRITE: text-t01 COLOR COL_TOTAL,


38 'Data'(t02) COLOR COL_NEGATIVE,
sy-datum,
54 'Hora'(t03),
sy-uzeit,
70 'Usuário'(t04),
sy-uname,
92 'Pagina'(t05),
sy-pagno.
ULINE.

WRITE: 'Material',
20 'Descrição',
61 'Tipo',
66 'UM',
76 'Peso Bruto',
92 'Peso Liquido'.
ULINE.
*-------------------------------------------------------------------
---*
* Start-of-Selection - Event
*-------------------------------------------------------------------
---*
START-OF-SELECTION.

* Seleciona Dados ( OPEN SQL )


SELECT matnr
mtart
meins
brgew
ntgew
FROM mara
INTO TABLE ti_mara
WHERE matnr IN s_matnr
AND meins = p_meins.

IF sy-subrc NE 0.
MESSAGE text-m02 TYPE 'I'.
ENDIF.

SELECT matnr
maktx
FROM makt
INTO TABLE ti_makt
FOR ALL ENTRIES IN ti_mara
WHERE matnr = ti_mara-matnr
AND spras = sy-langu.

SORT ti_makt BY matnr. " LEITURA TABELA PARA BINARY SEARCH

SORT ti_mara by brgew DESCENDING.

* Impressão dos Dados


LOOP AT ti_mara INTO wa_mara.

READ TABLE ti_makt INTO wa_makt WITH KEY matnr = wa_mara-matnr


BINARY SEARCH.

WRITE: / wa_mara-matnr,
wa_makt-maktx,
wa_mara-mtart,
wa_mara-meins,
wa_mara-brgew,
wa_mara-ntgew.
ENDLOOP.

*&------------------------------------------------------------------
---*
*& Report ZCOMPRAS0202
*&
*&------------------------------------------------------------------
---*
*& Descrição: Relatório de Compras
*& Data: 02/09/2017 - Autor: Marielena Silva - Modulo MM
*&------------------------------------------------------------------
---*
REPORT zcompras0202.
*-------------------------------------------------------------------
---*
* Tables
*-------------------------------------------------------------------
---*
TABLES ekpo.

*-------------------------------------------------------------------
---*
* Types
*-------------------------------------------------------------------
---*
TYPES: BEGIN OF ty_ekko,
ebeln TYPE ekko-ebeln,
bsart TYPE ekko-bsart,
ekgrp TYPE ekko-ekgrp,
END OF ty_ekko,

BEGIN OF ty_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
matnr TYPE ekpo-matnr,
END OF ty_ekpo,

BEGIN OF ty_alv,
ebeln TYPE ekko-ebeln,
bsart TYPE ekko-bsart,
ekgrp TYPE ekko-ekgrp,
ebelp TYPE ekpo-ebelp,
matnr TYPE ekpo-matnr,
END OF ty_alv.

*-------------------------------------------------------------------
---*
* WorkArea
*-------------------------------------------------------------------
---*
DATA: wa_ekko TYPE ty_ekko,
wa_ekpo TYPE ty_ekpo,
wa_alv TYPE ty_alv,
wa_fieldcat TYPE slis_fieldcat_alv.

*-------------------------------------------------------------------
---*
* Internal Table
*-------------------------------------------------------------------
---*
DATA: ti_ekko TYPE STANDARD TABLE OF ty_ekko,
ti_ekpo TYPE STANDARD TABLE OF ty_ekpo,
ti_alv TYPE STANDARD TABLE OF ty_alv,
ti_fieldcat TYPE slis_t_fieldcat_alv.

*-------------------------------------------------------------------
---*
* Selection-Screen
*-------------------------------------------------------------------
---*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-c01.
SELECT-OPTIONS s_ebeln FOR ekpo-ebeln.
SELECTION-SCREEN END OF BLOCK b1.
*-------------------------------------------------------------------
---*
* Start-of-Selection - Event
*-------------------------------------------------------------------
---*
START-OF-SELECTION.

* Seleciona Dados ( OPEN SQL )


SELECT ebeln
ebelp
matnr
FROM ekpo
INTO TABLE ti_ekpo
WHERE ebeln IN s_ebeln.

IF sy-subrc NE 0.
MESSAGE text-c02 TYPE 'I'.
ENDIF.

SELECT ebeln
bsart
ekgrp
FROM ekko
INTO TABLE ti_ekko
FOR ALL ENTRIES IN ti_ekpo
WHERE ebeln = ti_ekpo-ebeln.

SORT ti_ekko BY ebeln. " LEITURA TABELA PARA BINARY SEARCH

* Processamento da Tabela de Saida


LOOP AT ti_ekpo INTO wa_ekpo.

READ TABLE ti_ekko INTO wa_ekko WITH KEY ebeln = wa_ekpo-matnr


BINARY SEARCH.

wa_alv-ebeln = wa_ekko-ebeln.
wa_alv-bsart = wa_ekko-bsart.
wa_alv-ekgrp = wa_ekko-ekgrp.
wa_alv-ebelp = wa_ekpo-ebelp.
wa_alv-matnr = wa_ekpo-matnr.
APPEND wa_alv TO ti_alv.

ENDLOOP.

* Preenchimento do Fieldcat
REFRESH ti_fieldcat.

* Matnr
wa_fieldcat-col_pos = 1. " Posição da Coluna
wa_fieldcat-fieldname = 'EBELN'.
wa_fieldcat-ref_tabname = 'TI_ALV'.
wa_fieldcat-outputlen = 10.
wa_fieldcat-just = 'L'.
wa_fieldcat-seltext_l = 'Documento de compras'(t01).
APPEND wa_fieldcat TO ti_fieldcat.

* MAKTX
wa_fieldcat-col_pos = 2. " Posição da Coluna
wa_fieldcat-fieldname = 'BSART'.
wa_fieldcat-ref_tabname = 'TI_ALV'.
wa_fieldcat-outputlen = 4.
wa_fieldcat-just = 'L'.
wa_fieldcat-seltext_l = 'Tipo de documento de compras'(t02).
APPEND wa_fieldcat TO ti_fieldcat.

* MTART
wa_fieldcat-col_pos = 3. " Posição da Coluna
wa_fieldcat-fieldname = 'EKGPR'.
wa_fieldcat-ref_tabname = 'TI_ALV'.
wa_fieldcat-outputlen = 3.
wa_fieldcat-just = 'L'.
wa_fieldcat-seltext_l = 'Grupo de compradores'(t03).
APPEND wa_fieldcat TO ti_fieldcat.

* MEINS
wa_fieldcat-col_pos = 4. " Posição da Coluna
wa_fieldcat-fieldname = 'EBELP'.
wa_fieldcat-ref_tabname = 'TI_ALV'.
wa_fieldcat-outputlen = 5.
wa_fieldcat-just = 'L'.
wa_fieldcat-seltext_l = 'Nº item do documento de compra'(t04).
APPEND wa_fieldcat TO ti_fieldcat.

* BRGEW
wa_fieldcat-col_pos = 5. " Posição da Coluna
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-ref_tabname = 'TI_ALV'.
wa_fieldcat-outputlen = 18.
wa_fieldcat-just = 'R'.
wa_fieldcat-seltext_l = 'Material'(t05).
APPEND wa_fieldcat TO ti_fieldcat.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
it_fieldcat = ti_fieldcat
TABLES
t_outtab = ti_alv[]
EXCEPTIONS
program_error = 1
OTHERS = 2.

2 Curso SAP ABAP ADVANCED


1. SE11 - Criar tabelas
Tipo A – Preenchida em cada ambiente – Cadastrar nos 3 ambientes, cadastro de clientes, por
exemplo.

Tipo C – Tabela transportada via request

Request ID7K900580

O elemento de dados ZECARGO1123 não existia, dar dois cliques e seguir os passos para salvar
o elemento.

Seguir as etapas abaixo.

PS. Tipo de dados NUMC – tipo numérico com caract. CHAR – permite 0 no começo do número.
Ativar o elemento e salvar na request salvar e voltar para tabela.

A tabela deve ser ativada, porém para isso é necessário configurar as configurações técnicas!
APPLO – dados mestres – Marteriais, clientes, fornecedores

APPL1 – dados movimento – Nota fiscal

APPL2 – Customizing –

Tamanho da tabela, quantas entradas são permitidas!


Registrar LOGS! Através da transação SCU3 consigo verificar os logs da tabela!

Agora já podemos ativar a TABELA

O sistema mostra uma mensagem de alerta! Categoria de ampliação!!


Para remover esse alerta seguir as etapas. (Suplemntos -> Categoria de ampliação)

PS. Essa parte não funciona para tabelas Z, somente para standard!

PS. Nas tabelas standard cadastradas como ampliável em forma de caract ou número... podemos
adicionar um campo novo, sempre colocar com ZZ (Ex. ZZCONSUMODE – MARA)
Podemos ter um campo do tipo domínio. Usado quando temos opções de seleção, por exemplo,
MASCULINO ou FEMININO.

Dois cliques no nome do domínio, o sistema vai abrir a tela de cadastro de domínio.
PS. Ao usar um campo do tipo CURR, entrar na aba CAMPOS MOEDA/QUANITDADE e preencher
os campos TABELA REFENRECIA e CAMPO REFERENCIA.
IP – 179.228.113.45
06
000

Tabelas criadas e ativadas: ZCARGO1123, ZDEPTO1123 e ZFUNC1123. ID7K900580

2.1 SE11 – Relacionar tabelas


2.2 Criar visão para cadastrar dados na tabela sem precisar de programas ou
criar SM30 para tabela.
Na SE11, acessar a tabela como modificar e clicar em Utilitário (M) / Gerador de atualização de
tabela
Se o botão NOVO está aparecendo significa que a tabela não tem visão.

Os campos grupo de autorizações, grupo de função são usados pelo BASIS e FUNCIONAL

Apagando visão.
2.3 SE93 - Criar transação para a visão da tabela (SM30)

 Acessar a SE93
 Selecionar a opção “Transação com parametros”
Preencher a s opções:

 Transação – SM30
 Selecionar a opção IGNORAR 1ª TELA (Para pular a tela inicial da SM30)

VIEWNAME = Nome da view que o usuário deve acessar

UPDATE = X ou SHOW = X

3 SE09 ou SE10 ou SE01 – Requests


4 SM37 – FUNÇÂO RETORNA VARIAVEL

RFC ou função remota – função que deve ser acessada fora do SAP –selecionar a opção Módulo
de acesso remoto! Ps. Na aba Importação os parâmetros “Transferência de valor” precisam estar
marcados.

Função Normal – ninguém de fora do sistema SAP consegue acessar.


5 Criar programa – SE38
Acessar transação SE38

Criar o programa com o nome do tipo executável.

Preencher primeiro a parte de seleção e depois chamar a função clicando no botão MODELO.

Ps. Toda função que tiver uma exceção deve ser tratada!
*&------------------------------------------------------------------
---*
*& Report ZFUNCAO1423
*&
*&------------------------------------------------------------------
---*
*& Descrição: Prgrama Modelo de Função
*& Data: 14.08.2017 - Autor: Marielena Silva
*&------------------------------------------------------------------
---*

REPORT zfuncao1423.
*-------------------------------------------------------------------
---*
* Selection Screen
*-------------------------------------------------------------------
---*
SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE text-t00.
PARAMETERS: p_ult RADIOBUTTON GROUP g1,
p_sem RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b0.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.


PARAMETERS p_data1 TYPE sy-datum.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.


PARAMETERS p_data2 TYPE sy-datum.
SELECTION-SCREEN END OF BLOCK b2.
*-------------------------------------------------------------------
---*
* START-OF-SELECTION
*-------------------------------------------------------------------
---*
START-OF-SELECTION.

DATA vl_ult_dia TYPE sy-datum.


DATA vl_dia_sem TYPE dtresr-weekday.

IF p_ult = 'X'.

CALL FUNCTION 'LAST_DAY_OF_MONTHS'


EXPORTING
day_in = p_data1
IMPORTING
last_day_of_month = vl_ult_dia
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.

IF sy-subrc = 1.
MESSAGE 'Não é uma data' TYPE 'I'.
ELSEIF sy-subrc = 2.
MESSAGE 'Erro na função' TYPE 'I'.
ELSE.
WRITE: 'O ultimo dia do mês é: ',
vl_ult_dia.
ENDIF.

ELSE.
CALL FUNCTION 'DATE_TO_DAY'
EXPORTING
date = p_data2
IMPORTING
weekday = vl_dia_sem.

WRITE: 'O dia da semana é: ',


vl_dia_sem.
ENDIF.

Ps. Os campos destacados devem ser preenchidos corretamente para funcionar


Ao passar pelo comando USER_COMMAND o sistema direciona para o AT SELECTION-SCREEN
Ps. Para download dos programas usar o programa ZDOWNLOAD na SE38

6 Criar FUNÇÃO Z
 Criar grupo de função na SE80

 Para usar é necessário ativar – Botão direito - ATIVAR


 Entrar na SE37 – Criar função – preencher os dados abaixo, com o nome da função e o
grupo criado na SE80.
Adicionando uma Exceção...

Já aparece no código fonte... Porém é necessário criar a verificação (Dentro do código IF).
TESTE

Ao executar o sistema retorna uma exceção DATA2_MENOR, a função não exibe a mensagem
do erro. O programa que vai tratar as mensagens!
Para chamar essa função dentro de um programa:

Na SE38, criar o programa como tipo executável e começar a digitar o código abaixo.
*&------------------------------------------------------------------
---*
*& Report ZFUNCAO1523
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa Modelo de Função
*& Data: 15.08.2017 - Autor: Marielena Silva
*&------------------------------------------------------------------
---*
REPORT zfuncao1523.
*-------------------------------------------------------------------
---*
* Selection Screen
*-------------------------------------------------------------------
---*
SELECTION-SCREEN BEGIN OF BLOCK bloco1 WITH FRAME TITLE text-t01.
PARAMETERS: p_data1 TYPE sy-datum,
p_data2 TYPE sy-datum.
SELECTION-SCREEN END OF BLOCK bloco1.
*-------------------------------------------------------------------
---*
* START-OF-SELECTION
*-------------------------------------------------------------------
---*
START-OF-SELECTION.

DATA resultado TYPE i.

CALL FUNCTION 'ZCALCULO_DATA1523'


EXPORTING
data1 = p_data1
data2 = p_data2
IMPORTING
resultado = resultado
EXCEPTIONS
data2_menor = 1
data1_vazia = 2
OTHERS = 3.
IF sy-subrc = 1.
MESSAGE 'Data2 dois é menor que a Data1' TYPE 'I'.
ELSEIF sy-subrc = 2.
MESSAGE 'O campo Data1 está vazio' TYPE 'I'.
ELSE.
WRITE: 'A diferença entre DATA2 e DATA1 é: ',
resultado.
ENDIF.

7 SM37 – FUNÇÃO RETORNA TABELA


SE37 – Criar função Z
Para que esse erro não aconteça devemos usar uma estrutura, e ela deve ser criado na SE11
Depois ir para SUPLEMENTOS -> CATEGORIA DE AMPLIAÇÃO -> NÃO AMPLIAVEL

Salvar e ativar

Voltar na SE37, na sua função e alterar o campo destacado abaixo para a estrutura que criamos.
Função usando tabela como entrada
Para usar o campo CHANGE (Modificação dentro da função)
8 Construir classe – SE24
Para entrar no código, clicar na folhinha ou dois cliques no método.
Criar programa para chamar o método – SE38
*&------------------------------------------------------------------
---*
*& Report ZCLASSE1523
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa Modelo de Função
*& Data: 15.08.2017 - Autor: Marielena Silva
*&------------------------------------------------------------------
---*

REPORT zclasse1523.

*-------------------------------------------------------------------
---*
* Selection Screen
*-------------------------------------------------------------------
---*
SELECTION-SCREEN BEGIN OF BLOCK bloco1 WITH FRAME TITLE text-t01.
PARAMETERS: p_data1 TYPE sy-datum,
p_data2 TYPE sy-datum.
SELECTION-SCREEN END OF BLOCK bloco1.
*-------------------------------------------------------------------
---*
* START-OF-SELECTION
*-------------------------------------------------------------------
---*
START-OF-SELECTION.

DATA vl_result TYPE i.


DATA oclasse TYPE REF TO zclasse1523. "Declarar oclasse como tip
o da nossa classe

CREATE OBJECT oclasse. "Instanciar o objeto na memória

CALL METHOD oclasse-


>calcula_data "Substituir ME pelo nome da classe
EXPORTING
data1 = p_data1
data2 = p_data2
IMPORTING
resultado = vl_result.

Write: 'O calculo é: ',


vl_result.

BADI = METHOD

BAPI = MF
9 Module Pool ou On-line
Exemplo MM01, MM02 e MM03 usam o mesmo programa o que muda é a transação

Na transação VA01, clicar em SISTEMA -> STATUS


Dois cliques no nº tela

Podemos perceber que temos o PBO (Process before output) + TELA + PAI (Process After Input)
Criar:

SE80
Dar dois cliques no nome de cada INCLUDE e salvar

Dois cliques no nome abre o código do include.

Ps. Se esta azul é pq está inativo! Para ativar entrar um por um e ativar ou clicar botão direito
em cima do PROGRAMA e ATIVAR...

Deve ser ativado na sequência...


Ativar as telas criadas!

Criar transação para o programa SE93, selecionar a opção Transação de diálogo!!


Para habilitar o botão abaixo.

Na tela 100 dois cliques no nome do modulo -> criar


Como ele é do PBO selecionar a linda do include O

Tudo que for colocado entre aspas e n for uma mensagem pro usuário deve ser em maiúsculo.

Dois cliques na parte em amarelo para criar.


O STATUS de uma tela é inserir MENU, Barra de ferramentas e teclas de função
Preencher o Codigo de função para o botão BACK

Agora ao botão está ativo, porém sem código portanto ao clicar nele não acontece NADA.

A Ação deve ser colocada no PAI


Após preencher o código abaixo... salvar e ativar tudo.

Agora o botão já está funcionando!

Para colocar o menu – entrar na tela 0100 e no STAT.. – BARRA DE MENU


Dois cliques no amarelo FUNCIONARIO e preencher o INCLU e o CONSU.

Dois cliques no amarelo TABELAS e preencher o CARGO e o DEPTO.


Ao testar aparece as opções na barra de menu.

Para funcionar esse botão tenho que colocar o código dentro do PAI da tela 0100.

Ao clicar em Cargos o sistema abre a transação abaixo...


Ao clicar em Departamento o sistema abre a transação abaixo...

Ao clicar em INCLUSAO/ALTERAÇÃO abrir a tela 0200 e ao clicar em CONSULTA abrir a tela 0300.
Ao fazer isso ainda não funciona porque não parametrizamos as telas 0200 e 0300. Vamos
começar com a 0200.

No PBO fazer as alteração abaixo..

Dois cliques nas opções em amarelo e criar o botão VOLTAR e TITULO.

Agora dentro do PAI da tela 0200.


Dentro da tela 200 clicar em LAYOUT

PS. Atentar para as barras de rolagem


Para habilitar a função SALVAR

Entrar no STATUS 0200 e habilitar SAVE

Entrar no COMAND 0200 (PAI)


Salvar no F, pois o performe gera um FORM

Podemos usar os comandos abaixo....

INSERT

UPDATE

DELETE
MODIFY – Funciona usando o insert e o update ao mesmo tempo, caso o código já exista ele
atualiza, senão ele inseri.

Antes de ativar, é necessário ir para o include TOP e colocar a linha TABLES abaixo.

Ps. Caso vc tenha mudado o nome dos campos no layout deve-se usar a linha que esta
comentada.

Depois é so ativar, preencher os campos e salvar!


Na se16n conseguimos ver os dados salvos!

Para gerar uma mensagem de confirmação da gravação dos dados.


Ps. O correto é usar o text-m01!

Exemplo: MESSAGE text-m01 type ‘S’.

Para salvar os dados no banco de dados – comando COMMIT WORK... sem isso fica salvo na
memória.

O ideal seria usar uma classe de mensagem, que pode ser vista na SE91
Vamos fazer a mensagem dentro de uma classe.

Dois cliques na parte amarela, sim, sim salvar.


Apagar os dados da tela depois que a mensagem salvar estiver ok.

Nesse caso, o sistema salva as informações no banco, exibe a mensagem e já apaga os dados.

Se usarmos a mensagem do tipo I, o sistema salva as informações no banco, exibe a mensagem,


aguarda a ação do usuário de clicar em OK e depois apaga os dados.

 Deixar um campo como obrigatório.

Dois cliques no campo desejado, na aba programa opção entrada como REQUIRED.

Ativar e testar! A parte em destaque significa que ele é obrigatório.


 Incrementar automaticamente o código do funcionário...

No SAP usamos intervalo de numeração e uma função que pega o valor de lá, porém na
nossa aplicação vamos usar o SELECT MAX

Criar um modulo no PBO da tela 200.

Dois cliques e criar o modulo com o código abaixo.


 Verificar se o campo já existe na tabela

Na tela 0200 na opção do PAI criar um novo módulo

Dois cliques no nome do modulo, avançar, colocar dentro do include I.


Agora quando eu entro na transação e pesquiso por um ID que já existe ele mantem o ID e traz
as informações pertinentes a ele.

 Quando eu saio e volto ele mantem os dados.

Criar um perfom f_limpa_tela... digitar o código e dar dois cliques.

Criar o limpa tela.


Chamar esse perfom dentro do GRAVAR DADOS

 Quando altero um cadastro deverá exibir a mensagem de dados alterados com sucesso.
 Alterar a descrição do título ao criar e alterar.
 Alinhar campo a direita

Dentro do layout, dois cliques no campo e na aba de propriedades clicar na opção alinhar a
direita.

 Ao entrar na opção de alterar o campo código deve ficar fechado.


 Criar a barra de ferramenta com botão
Campo Texto ícone – aparece na frente do ícone

Campo Texto de informação – aparece quando passa o mouse pelo botão.


 Desenvolver a opção de demitir
 Para sumir com o botão demitir quando estiver incluindo.
 Criar pergunta “Deseja demitir o funcionário? ” no momento de clicar no botão demitir.

 Ajuda de pesquisa de CARGOS

SE11
Ativar e requeste.

Agora é necessário colocar a ajuda no código. Temos 2 formas de fazer isso..

No LAYOUT da tela.. dois cliques no campo.. e preencher no campo ajuda de pesquisa o nome
da ajuda que criamos na SE11.
A outra maneira de colocar ajuda de pesquisa, é dentro da SE11 entrando na tabela como
modificar, na aba abaixo.
 Tela 0300 – CONSULTA
10 Batch-input

Se11
O SHDB usa como base o BDCDATA.

SHDB -> NOVA GRAVAÇÃO


Salvar o arquivo conforme abaixo.
 Criar o código para o upload!

Chamar a função
 Declarar a tabela ti_user dentro do include TOP.
*&------------------------------------------------------------------
---*
*& Report ZBATCH_INPUT2123_USER
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa de Batch-input
*& Autor: Marielena Silva Data: 21/08/2017
*&------------------------------------------------------------------
---*

REPORT zbatch_input2123_user.

INCLUDE zbatch_input2123_user_top.

*&------------------------------------------------------------------
---*
*& SELECTION-SCREEN
*&------------------------------------------------------------------
---*

SELECTION-SCREEN BEGIN OF BLOCK abap1 WITH FRAME TITLE text-t01.


PARAMETERS p_file TYPE string.
SELECTION-SCREEN END OF BLOCK abap1.
*&------------------------------------------------------------------
---*
*& At Selection-Screen
*&------------------------------------------------------------------
---*
AT SELECTION-SCREEN on VALUE-REQUEST FOR p_file.

CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'


EXPORTING
WINDOW_TITLE = 'Arquivo de usuários'
DEFAULT_EXTENSION = 'TXT'
DEFAULT_FILE_NAME = p_file

IMPORTING
FULLPATH = p_file.

*&------------------------------------------------------------------
---*
*& Start-of-selection
*&------------------------------------------------------------------
---*

START-OF-SELECTION.
*Carrega arquivo para SAP no formato de tabela interna.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
tables
data_tab = ti_user
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.

IF sy-subrc <> 0.
MESSAGE E003(ZMSG1723).
ENDIF.
*Le os dados importado pelo SAP.
LOOP at ti_user into wa_user.
WRITE / wa_user.
ENDLOOP.
Apagar a impressão da tabela e criar o batch-input.

PROGRAMA
*&------------------------------------------------------------------
---*
*& Report ZBATCH_INPUT2123_USER
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa de Batch-input
*& Autor: Marielena Silva Data: 21/08/2017
*&------------------------------------------------------------------
---*

REPORT zbatch_input2123_user.

INCLUDE zbatch_input2123_user_top.

*&------------------------------------------------------------------
---*
*& SELECTION-SCREEN
*&------------------------------------------------------------------
---*

SELECTION-SCREEN BEGIN OF BLOCK abap1 WITH FRAME TITLE text-t01.


PARAMETERS p_file TYPE string.
SELECTION-SCREEN END OF BLOCK abap1.
*&------------------------------------------------------------------
---*
*& At Selection-Screen
*&------------------------------------------------------------------
---*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'


EXPORTING
window_title = 'Arquivo de usuários'
default_extension = 'TXT'
default_file_name = p_file
IMPORTING
fullpath = p_file.

*&------------------------------------------------------------------
---*
*& Start-of-selection
*&------------------------------------------------------------------
---*

START-OF-SELECTION.
*Carrega arquivo para SAP no formato de tabela interna.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
TABLES
data_tab = ti_user
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.

IF sy-subrc <> 0.
MESSAGE e003(zmsg1723).
ENDIF.
*Le os dados importado pelo SAP.
LOOP AT ti_user INTO wa_user.

PERFORM f_preenche_bdcdata USING:


'X' 'SAPLSUID_MAINTENANCE' '1050',
' ' 'BDC_OKCODE' '=CHAN',
' ' 'SUID_ST_BNAME-BNAME' wa_user-usuario.
PERFORM f_preenche_bdcdata USING:
'X' 'SAPLSUID_MAINTENANCE' '1100',
' ' 'BDC_OKCODE' '=UPD',
' ' 'SUID_ST_NODE_WORKPLACE-DEPARTMENT' wa_user-depto.
ENDLOOP.

PERFORM f_preenche_bdcdata USING:


'X' 'SAPLSUID_MAINTENANCE' '1050',
' ' 'BDC_OKCODE' '/EBACK'.

wa_params-dismode = 'N'. "A - Visivel / N - background


wa_params-racommit = 'X'.

CALL TRANSACTION 'SU01' USING ti_bdcdata


OPTIONS FROM wa_params
MESSAGES INTO ti_message.

*Impressão do LOG da transação.


LOOP AT ti_message INTO wa_message.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = wa_message-msgid
msgnr = wa_message-msgnr
msgv1 = wa_message-msgv1
msgv2 = wa_message-msgv2
msgv3 = wa_message-msgv3
msgv4 = wa_message-msgv4
IMPORTING
message_text_output = vg_texto.

IF wa_message-msgtyp = 'S'.
WRITE: /3 icon_green_light AS ICON,
vg_texto.
ELSE.
WRITE: /3 icon_red_light AS ICON,
vg_texto.

ENDIF.

CLEAR wa_message.

ENDLOOP.

*&------------------------------------------------------------------
---*
*& Form F_PREENCHE_BDCDATA
*&------------------------------------------------------------------
---*
* text
*-------------------------------------------------------------------
---*
* --> p1 text
* <-- p2 text
*-------------------------------------------------------------------
---*
FORM f_preenche_bdcdata USING: p1 p2 p3.

IF p1 = 'X'.
wa_bdcdata-program = p2.
wa_bdcdata-dynpro = p3.
wa_bdcdata-dynbegin = p1.
APPEND wa_bdcdata TO ti_bdcdata.
ELSE.
wa_bdcdata-fnam = p2.
wa_bdcdata-fval = p3.

APPEND wa_bdcdata TO ti_bdcdata.


ENDIF.
CLEAR wa_bdcdata.

ENDFORM. " F_PREENCHE_BDCDATA

CODIGO NO TOP - DECLARAÇÃO


*&------------------------------------------------------------------
---*
*& Include ZBATCH_INPUT2123_USER_TOP
*&------------------------------------------------------------------
---*

*&------------------------------------------------------------------
---*
*& Structure / Types
*&------------------------------------------------------------------
---*

TYPES: BEGIN OF ty_user,


usuario(12) TYPE c,
depto(40) TYPE c,
END OF ty_user.

*&------------------------------------------------------------------
---*
*& WorkArea
*&------------------------------------------------------------------
---*
DATA: wa_user TYPE ty_user,
wa_bdcdata TYPE bdcdata,
wa_params TYPE ctu_params,
wa_message TYPE bdcmsgcoll.

*&------------------------------------------------------------------
---*
*& Internal Table
*&------------------------------------------------------------------
---*

DATA: ti_user TYPE STANDARD TABLE OF ty_user,


ti_bdcdata TYPE STANDARD TABLE OF bdcdata,
ti_message TYPE STANDARD TABLE OF bdcmsgcoll.

*&------------------------------------------------------------------
---*
*& Variablle
*&------------------------------------------------------------------
---*
DATA vg_texto TYPE string.
BATCH_INPUT para cadastrar usuários usando nosso programa Z e recebendo as informações
de um arquivo CSV
*&------------------------------------------------------------------
---*
*& Report ZBATCH_INPUT2223_FUNC
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa de Batch-input
*& Autor: Marielena Silva Data: 21/08/2017
*&------------------------------------------------------------------
---*

REPORT zbatch_input2223_func.

INCLUDE zbatch_input2223_func_top.

*&------------------------------------------------------------------
---*
*& SELECTION-SCREEN
*&------------------------------------------------------------------
---*

SELECTION-SCREEN BEGIN OF BLOCK abap1 WITH FRAME TITLE text-t01.


PARAMETERS p_file TYPE string.
SELECTION-SCREEN END OF BLOCK abap1.
*&------------------------------------------------------------------
---*
*& At Selection-Screen
*&------------------------------------------------------------------
---*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'


EXPORTING
window_title = 'Arquivo de Funcionário '
default_extension = 'CSV'
default_file_name = p_file
IMPORTING
fullpath = p_file.

*&------------------------------------------------------------------
---*
*& Start-of-selection
*&------------------------------------------------------------------
---*

START-OF-SELECTION.
*Carrega arquivo para SAP no formato de tabela interna.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
TABLES
data_tab = ti_csv
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.

IF sy-subrc <> 0.
MESSAGE e003(zmsg1723).
ENDIF.
*Le os dados importado pelo SAP.
LOOP AT ti_csv INTO wa_csv.

SPLIT wa_csv-line AT ';' INTO wa_func-nome


wa_func-dtadm
wa_func-dtnasc
wa_func-cargo
wa_func-depto
wa_func-salar
wa_func-moeda
wa_func-depen
wa_func-rua
wa_func-bairr
wa_func-cidad
wa_func-cep
wa_func-uf
wa_func-pais.

TRANSLATE wa_func-dtadm using '/.'.


TRANSLATE wa_func-dtnasc using '/.'.

PERFORM f_preenche_bdcdata USING:


'X' 'ZONLINE1523' '0100',
' ' 'BDC_OKCODE' '=INCLU'.

PERFORM f_preenche_bdcdata USING:


'X' 'ZONLINE1523' '0200',
' ' 'BDC_OKCODE' '/00',
' ' 'ZFUNC1123-NOME' wa_func-nome,
' ' 'ZFUNC1123-DTADM' wa_func-dtadm,
' ' 'ZFUNC1123-DTNASC' wa_func-dtnasc,
' ' 'ZFUNC1123-CARGO' wa_func-cargo,
' ' 'ZFUNC1123-DEPTO' wa_func-depto,
' ' 'ZFUNC1123-SALAR' wa_func-salar,
' ' 'ZFUNC1123-MOEDA' wa_func-moeda,
' ' 'ZFUNC1123-DEPEN' wa_func-depen,
' ' 'ZFUNC1123-RUA' wa_func-rua,
' ' 'ZFUNC1123-BAIRR' wa_func-bairr,
' ' 'ZFUNC1123-CIDAD' wa_func-cidad,
' ' 'ZFUNC1123-CEP' wa_func-cep,
' ' 'ZFUNC1123-UF' wa_func-uf,
' ' 'ZFUNC1123-PAIS' wa_func-pais.

PERFORM f_preenche_bdcdata USING:


'X' 'ZONLINE1523' '0200',
' ' 'BDC_OKCODE' '=SAVE'.

PERFORM f_preenche_bdcdata USING:


'X' 'ZONLINE1523' '0200',
' ' 'BDC_OKCODE' '=BACK'.
ENDLOOP.

PERFORM f_preenche_bdcdata USING:


'X' 'ZONLINE1523' '0100',
' ' 'BDC_OKCODE' '=BACK'.

wa_params-dismode = 'A'. "A - Visivel / N - background


wa_params-racommit = 'X'.

CALL TRANSACTION 'ZPROJETO1523' USING ti_bdcdata


OPTIONS FROM wa_params
MESSAGES INTO ti_message.

*Impressão do LOG da transação.


LOOP AT ti_message INTO wa_message.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = wa_message-msgid
msgnr = wa_message-msgnr
msgv1 = wa_message-msgv1
msgv2 = wa_message-msgv2
msgv3 = wa_message-msgv3
msgv4 = wa_message-msgv4
IMPORTING
message_text_output = vg_texto.

IF wa_message-msgtyp = 'S'.
WRITE: /3 icon_green_light AS ICON,
vg_texto.
ELSE.
WRITE: /3 icon_red_light AS ICON,
vg_texto.

ENDIF.

CLEAR wa_message.

ENDLOOP.
*&------------------------------------------------------------------
---*
*& Form F_PREENCHE_BDCDATA
*&------------------------------------------------------------------
---*
* text
*-------------------------------------------------------------------
---*
* --> p1 text
* <-- p2 text
*-------------------------------------------------------------------
---*
FORM f_preenche_bdcdata USING: p1 p2 p3.

IF p1 = 'X'.
wa_bdcdata-program = p2.
wa_bdcdata-dynpro = p3.
wa_bdcdata-dynbegin = p1.
APPEND wa_bdcdata TO ti_bdcdata.
ELSE.
wa_bdcdata-fnam = p2.
wa_bdcdata-fval = p3.

APPEND wa_bdcdata TO ti_bdcdata.


ENDIF.
CLEAR wa_bdcdata.

ENDFORM. " F_PREENCHE_BDCDATA

*&------------------------------------------------------------------
---*
*& Include ZBATCH_INPUT2223_FUNC_TOP
*&------------------------------------------------------------------
---*

*&------------------------------------------------------------------
---*
*& Structure / Types
*&------------------------------------------------------------------
---*

TYPES: BEGIN OF ty_func,

NOME(40) TYPE c,
DTADM(10) TYPE c,
DTNASC(10) TYPE c,
CARGO(3) TYPE c,
DEPTO(3) TYPE c,
SALAR(13) TYPE n,
MOEDA(3) TYPE c,
DEPEN(2) TYPE c,
RUA(40) TYPE c,
BAIRR(20) TYPE c,
CIDAD(20) TYPE c,
CEP(10) TYPE c,
UF(2) TYPE c,
PAIS(2) TYPE c,
END OF ty_func,

*Parte para usar o CSV


BEGIN OF ty_csv,
line(120) TYPE c,
END OF ty_csv.

*&------------------------------------------------------------------
---*
*& WorkArea
*&------------------------------------------------------------------
---*
DATA: wa_func TYPE ty_func,
wa_csv TYPE ty_csv,
wa_bdcdata TYPE bdcdata,
wa_params TYPE ctu_params,
wa_message TYPE bdcmsgcoll.

*&------------------------------------------------------------------
---*
*& Internal Table
*&------------------------------------------------------------------
---*

DATA: ti_func TYPE STANDARD TABLE OF ty_func,


ti_csv TYPE STANDARD TABLE OF ty_csv,
ti_bdcdata TYPE STANDARD TABLE OF bdcdata,
ti_message TYPE STANDARD TABLE OF bdcmsgcoll.

*&------------------------------------------------------------------
---*
*& Variablle
*&------------------------------------------------------------------
---*
DATA vg_texto TYPE string.
11 BAPI

Na transação BAPI encontra com a BAPI que precisamos usar, dai vamos na SE37 e testamos a
BAPI
 Criar programa ZBAPI_2223_USER
*&------------------------------------------------------------------
---*
*& Report ZBAPI_2223_USER
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa de Batch-input
*& Autor: Marielena Silva Data: 21/08/2017
*&------------------------------------------------------------------
---*

REPORT zbapi_2223_user.

INCLUDE zbatch_input2123_user_top.

*&------------------------------------------------------------------
---*
*& SELECTION-SCREEN
*&------------------------------------------------------------------
---*

SELECTION-SCREEN BEGIN OF BLOCK abap1 WITH FRAME TITLE text-t01.


PARAMETERS p_file TYPE string.
SELECTION-SCREEN END OF BLOCK abap1.
*&------------------------------------------------------------------
---*
*& At Selection-Screen
*&------------------------------------------------------------------
---*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'


EXPORTING
window_title = 'Arquivo de usuários'
default_extension = 'TXT'
default_file_name = p_file
IMPORTING
fullpath = p_file.

*&------------------------------------------------------------------
---*
*& Start-of-selection
*&------------------------------------------------------------------
---*

START-OF-SELECTION.
*Carrega arquivo para SAP no formato de tabela interna.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
TABLES
data_tab = ti_user
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.

IF sy-subrc <> 0.
MESSAGE e003(zmsg1723).
ENDIF.

DATA wa_address TYPE bapiaddr3.


DATA wa_addressx TYPE bapiaddr3x.
DATA wa_return TYPE bapiret2.
DATA ti_return TYPE TABLE OF bapiret2.

*Le os dados importado pelo SAP.


LOOP AT ti_user INTO wa_user.

wa_address-department = wa_user-depto.
wa_addressx-department = 'X'.

CALL FUNCTION 'BAPI_USER_CHANGE'


EXPORTING
username = wa_user-usuario
address = wa_address
addressx = wa_addressx
TABLES
return = ti_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

READ TABLE ti_return into wa_return INDEX 1.

IF wa_return-type = 'S'.
WRITE: /3 icon_green_light AS ICON,
wa_return-message(100).
ELSE.
WRITE: /3 icon_red_light AS ICON,
wa_return-message(100).

ENDIF.

ENDLOOP.

*Impressão do LOG da transação.

*&------------------------------------------------------------------
---*
*& Form F_PREENCHE_BDCDATA
*&------------------------------------------------------------------
---*
* text
*-------------------------------------------------------------------
---*
* --> p1 text
* <-- p2 text
*-------------------------------------------------------------------
---*
FORM f_preenche_bdcdata USING: p1 p2 p3.

IF p1 = 'X'.
wa_bdcdata-program = p2.
wa_bdcdata-dynpro = p3.
wa_bdcdata-dynbegin = p1.
APPEND wa_bdcdata TO ti_bdcdata.
ELSE.
wa_bdcdata-fnam = p2.
wa_bdcdata-fval = p3.

APPEND wa_bdcdata TO ti_bdcdata.


ENDIF.
CLEAR wa_bdcdata.

ENDFORM. " F_PREENCHE_BDCDATA


12 EXIT

Como encontrar a EXIT na transação standard

Entra na transação, acessa o debug e realiza a ação. No nosso caso, o exemplo é a MM02,
dados básicos 1, /H e salvar.
Avançar

Pressionar F8.

Na se38 entrar no programa, encontrar a chamada de função..


Dois cliques no 001.

Criar o include / Dois cliques no nome.

Pega o nome do programa standard, depois o nome do pacote e entra na SMOD


Entrei no mesmo lugar
SUID_ST_NODE_WORKPLACE-DEPARTMENT

APERTAR F8
Pressionar F5

Clicra no lápis e alterar o valor

PRESSIONAR F8 e verificar se al informação salva

Na SE38 entrar no programa LSUID_MAINTENANCEI04


Possibilita ampliar onde tem a SETA preta.. Porém como no nosso programa ele não apareceu
e portanto esse não serve pra gente.
Fazendo o mesmo processo encontramos esse ponto

Botão direito
Clica em declaração

Preencher o código

ATIVAR
OS. EXIT não podemos colocar COMMIT WORK. A SAP não permite fazer isso no STANDARD.

 Como encontrar o ENHANCEMENT

Na se80, pesquisar pelo PACOTE usado na empresa.


http://abapjuniores.blogspot.com.br/2011/11/enhancements-modificando-o-standard.html

13 Chamar um programa dentro de outro programa usando


variável SAP. (SET e GET)

Criar programa ZMEMORIA01_23


*&------------------------------------------------------------------
---*
*& Report ZMEMORIA01_23
*&
*&------------------------------------------------------------------
---*
*&
*&
*&------------------------------------------------------------------
---*

REPORT ZMEMORIA01_23.

DATA: VL_RESULTADO TYPE I,


VL_RESULT1(20) TYPE C.

PARAMETERS: P_NUM1 TYPE I,


P_NUM2 TYPE I.

VL_RESULTADO = P_NUM2 + P_NUM1.

VL_RESULT1 = VL_RESULTADO.

*Memoria SAP
SET PARAMETER ID 'Z2323' FIELD VL_RESULT1.

SUBMIT ZMEMORIA02_23 WITH P_NOME = 'MARIELENA' AND RETURN. "Para cha


mar um novo programa.

WRITE 'ACABOU'.

Criar programa ZMEMORIA02_23


*&------------------------------------------------------------------
---*
*& Report ZMEMORIA02_23
*&
*&------------------------------------------------------------------
---*
*& Programa de memoria - Impressão
*&
*&------------------------------------------------------------------
---*

REPORT ZMEMORIA02_23.

DATA: VL_RESULT(20) TYPE C.

"Pegar variavel!
GET PARAMETER ID 'Z2323' FIELD vl_result.

PARAMETER P_NOME(30) TYPE C.

WRITE: VL_RESULT,
P_NOME.

Ao executar programa 1 ele chama o 2 e exibe o resultado.


14 Memoria ABAP
Abriu uma sessão nova a memória ABAP vai embora, a SAP fica até fechar o SAP ou desligar a
máquina.
*&------------------------------------------------------------------
---*
*& Report ZMEMORIA01_23
*&
*&------------------------------------------------------------------
---*
*&
*&
*&------------------------------------------------------------------
---*

REPORT ZMEMORIA01_23.

DATA: VL_RESULTADO TYPE I,


VL_RESULT1(20) TYPE C,
VL_NOME(30) type C VALUE 'MARIELENA'.

PARAMETERS: P_NUM1 TYPE I,


P_NUM2 TYPE I.

VL_RESULTADO = P_NUM2 + P_NUM1.

VL_RESULT1 = VL_RESULTADO.

*Memoria SAP
SET PARAMETER ID 'Z2323' FIELD VL_RESULT1.

*Memoria ABAP
EXPORT VL_NOME TO MEMORY ID 'ZMAT1'.
SUBMIT ZMEMORIA02_23 WITH P_NOME = 'MARIELENA' AND RETURN. "Para cha
mar um novo programa.

WRITE 'ACABOU'.

*&------------------------------------------------------------------
---*
*& Report ZMEMORIA02_23
*&
*&------------------------------------------------------------------
---*
*& Programa de memoria - Impressão
*&
*&------------------------------------------------------------------
---*

REPORT ZMEMORIA02_23.

DATA: VL_RESULT(20) TYPE C,


VL_ABAP(30) type c.

"Pegar variavel!
GET PARAMETER ID 'Z2323' FIELD vl_result.

"pegar variavel ABAP


IMPORT VL_NOME TO VL_ABAP FROM MEMORY ID 'ZMAT1'.

PARAMETER P_NOME(30) TYPE C.

*Impressao SAP
WRITE: VL_RESULT,
P_NOME.

*Impressao ABAP
WRITE: VL_ABAP.

15 Relatório de stoque

*&------------------------------------------------------------------
---*
*& Report ZESTOQUE2423
*&
*&------------------------------------------------------------------
---*
*& Descrição: Programa de Estoque
*& Autor: Mari - Data: 24/08/2017
*&------------------------------------------------------------------
---*

REPORT zestoque2423 NO STANDARD PAGE HEADING LINE-SIZE 104.

INCLUDE zestoque2423_top.

*&------------------------------------------------------------------
---*
* Selection-Screen
*&------------------------------------------------------------------
---*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_matnr FOR mara-matnr,
s_werks FOR mard-werks,
s_lgort FOR mard-lgort.
SELECTION-SCREEN END OF BLOCK b1.

*&------------------------------------------------------------------
---*
* Sart-of-selection
*&------------------------------------------------------------------
---*

START-OF-SELECTION.

PERFORM f_selecao_dados.

IF ti_mara IS INITIAL.
MESSAGE 'Dados não encontrados'(001) TYPE 'I'.
ENDIF.

PERFORM f_impressao_dados.
*&------------------------------------------------------------------
---*
* FORM F_SELECAO_DADOS
*&------------------------------------------------------------------
---*
* Seleciona dados
*&------------------------------------------------------------------
---*
FORM f_selecao_dados.

SELECT matnr
FROM mara
INTO TABLE ti_mara
WHERE matnr IN s_matnr.

IF sy-subrc EQ 0.

SELECT matnr
maktx
FROM makt
INTO TABLE ti_makt
FOR ALL ENTRIES IN ti_mara
WHERE matnr = ti_mara-matnr
AND spras = sy-langu.

SELECT matnr
werks
lgort
labst
FROM mard
INTO TABLE ti_mard
FOR ALL ENTRIES IN ti_mara
WHERE matnr = ti_mara-matnr
AND werks IN s_werks
AND lgort IN s_lgort.

DELETE ti_mard WHERE labst = 0. "Para deletar as linhas que tem


saldo igual a 0.

ENDIF.

ENDFORM.

*&------------------------------------------------------------------
---*
*& Form F_IMPRESSAO_DADOS
*&------------------------------------------------------------------
---*
* Impressão dos dados
*-------------------------------------------------------------------
---*

FORM f_impressao_dados .

SORT ti_makt BY matnr. "usado somente por causa do READ TABLE e de


ve ser inserido o BINARY SEARCH dentro do READ TABLE para melhorar p
erformace

SORT ti_mard BY matnr werks lgort.

LOOP AT ti_mard INTO wa_mard.

AT NEW matnr.
READ TABLE ti_makt INTO wa_makt WITH KEY matnr = wa_mard-matnr
BINARY SEARCH.
ENDAT.

WRITE: /01 '|',


wa_mard-matnr.
WRITE: 21 '|',
wa_makt-maktx,
64
'|',
wa_mard-lgort,
75
'|',
wa_mard-werks,
84
'|',
wa_mard-labst,
104
'|'.

AT END OF MATNR.
SUM.
ULINE.

WRITE: 01 '|',
21 'Total por Deposito',
84 '|',
wa_mard-labst COLOR COL_TOTAL,
104 '|'.
ULINE.
ENDAT.

ENDLOOP.
ENDFORM. " F_IMPRESSAO_DADOS

16 BADI

Como achar uma BADI em uma transação STANDARD

Dentro do programa da transação procurar por cl_exithandler=>get_instance

http://abap101.com/2009/01/05/descobrindo-e-implementando-badis/

http://j-nilson.blogspot.com.br/2011/10/implementar-badi-exemplo-migo.html