3. ABAP Dictionary..........................................................................................................................10
3.1 Categoria de tabelas do ABAP Dictionary........................................................................................10
3.2 1 Objetos que formam uma tabela......................................................................................................12
3.2.1.1. Atributo do elemento de dados......................................................................................................12
3.3 Configuraes tcnicas da tabela....................................................................................................... 14
3.4 Tabelas de verificao........................................................................................................................ 15
3.4.1. Consulta.........................................................................................................................................15
3.4.1.1. Pesquisar tabelas com chave estrangeira.................................................................................... 16
3.5 ndices.................................................................................................................................................17
3.5.1. Rotina interna de indexao e pesquisa..........................................................................................17
3.5.2 Consultando ndices..........................................................................................................................17
3.6. Operadores relacionais .......................................................................................................................18
3.7.Estruturas..............................................................................................................................................18
3.8 Views ..................................................................................................................................................19
3.9 Criando tabela.......................................................................................................................................20
3.9.1 atualizao de opes tcnicas.........................................................................................................28
3.9.2 consultando objetos criados..............................................................................................................30
4. Reports............................................................................................................................................... 31
4.1. Eventos Utilizados............................................................................................................................31
4.1.2. Controle de nvel na tabela interna.................................................................................................. 32
4.1.3. Comando Message ..........................................................................................................................33
4.1.4. Alguns Comandos ABAP................................................................................................................. 34
4.1.5. Formatos de sada............................................................................................................................43
4.1.6. Hotspots............................................................................................................................................43
4.1.7. Programa Report Simples.................................................................................................................43
4.2 ALV...................................................................................................................................................... 49
5. Dialog............................................................................................................................................... 56
5.1. Module Pool...................................................................................................................................56
5.2. Tabstrip..........................................................................................................................................72
5.2.1. Criando Tabstrip com assistente.....................................................................................................72
5.3. Table Control................................................................................................................................ 77
5.3.1 Criando table control com o assistente...........................................................................................77
5.3.2 Loop at screen................................................................................................................................82
6. SHDB................................................................................................................................................ 84
7. RFC................................................................................................................................................... 86
8. Batch input ........................................................................................................................................87
9. Call transaction.................................................................................................................................. 98
10. BAPI.................................................................................................................................................108
10.1 Programa BAPI.............................................................................................................................108
11. Field Exit...................................................................................................................................117
12. Screen Exit...............................................................................................................................118
13. Badi.......................................................................................................................................119
14. SAPSCRIPT..........................................................................................................................122
15. SMART FORM .....................................................................................................................127
15.1 Criando Smartform...................................................................................................................127
15.2 Programa para Smartform........................................................................................................137
2
1. SYSTEM OVERVIEW
1.1.1. Logon
Assim que a janela SAP Logon for exibida, escolha o ambiente e d um duplo clique na
linha.
3
Na tela de logon, informe mandante, usurio e sua senha e pressione [Enter].
Menu bar
System function bar
Title Bar
Application tool bar
Dympro Area
Status Bar
4
Menu bar
Neste campo podemos utilizar transaes Standard do SAP ERP como MM01 e VA01,
transaes customizadas para o cliente que iniciam com a letra Z ou Y, tambm podemos
encerrar o processamento do SAP GUI, abrir outras instncias do SAP GUI, entrar em
modo de depurao ABAP etc.
Title bar
Status Bar
Nesta barra so apresentadas informaes gerais do SAP ERP, sendo que no extremo
esquerdo so apresentadas s mensagens do sistema e no estremo direito informaes
como: Sistema, Client, User, Program, Transaction etc.
5
1.1.3 ABAP Editor
6
TAB Editor
Minsculas;
Maisculas;
Palavras chaves em maisculas (Comandos);
Palavras chaves em minsculas (Comandos).
TAB Depurao
7
P WORKBENCH
2.1. Arquitetura do Sistema SAP ERP
Presentation Layer
Onde apresentado o SAPGUI e onde o usurio interage com o sistema SAP ERP
Aplication Layer
Database Layer
8
Dispatcher
Work Process
Tipos:
Dialog Pedidos de um usurio para execuo de dialog steps;
9
3. ABAP DICTIONARY
Tela principal
Tabelas
Estruturas
Vises
Elemento de dados
Categoria tabela
Grupo de tipos
Domnios
Ajuda de pesquisa
Objetos de bloqueio
Documentao
Tabelas transparentes
As tabelas transparentes so criadas na SE11, atravs da opo de criao de
tabelas. Quando ativadas, so criadas no sistema de banco de dados com os
mesmos nomes e caractersticas tcnicas informadas no ABAP Dictionary.
Pooled table
So tabelas agrupadas, ou seja, um conjunto de tabelas no dicionrio de
dados que so representadas por apenas uma tabela no sistema de banco
de dados.
Cluster table
Tambm so tabelas agrupadas, porm so utilizadas para armazenar grandes
quantidades de informao.
NOTA: Podemos utilizar ABAP JOIN nas tabelas Cluster e Pooled table
10
Restries nas Pooled e Cluster tables:
Campo: Indica o nome do campo de uma tabela. O Campo MANDT indica a que
mandante pertencem os dados da tabela
Chave primria: Indica que s ser permitida uma ocorrncia para uma linha ou um
conjunto de linhas de uma tabela.
Casa decimal: Nmero das posies vlidas de um campo sem caracteres de edio
(por exemplo, vrgulas ou pontos).
11
3.2.1. Objetos que formam uma Tabela
TAB - Caractersticas
12
Nome componente default: possvel atribuir um nome default ingls ao
elemento de dados neste campo.
TAB - Caractersticas
TAB Definio
Categoria de dados: (Char, Dats, Cuky, Int1, Lang, Quan, Numc etc...).
13
Caractersticas de sada - Quadro onde so informados:
Local onde podem ser inseridos valores individuais, intervalo de valores ou uma tabela
de valores.
Tipo de dados: Determinar a nvel lgico, em que rea fsica d o DB a tabela ser
arquivada:
14
3.4 Tabelas de Verificao
As tabelas de verificao servem para validao de dados no sistema, onde s permitida
a entrada de uma informao em um campo que referencie uma tabela de verificao.
3.4.1 Consulta
Para consultar a tabela de verificao entrar na SE16 colocar o nome da tabela e exibir.
Na tela clicar em Tabela de verificao,
15
Duplo clique
Chama SE16
para a tabela
da Entidade.
3.5 ndices
16
So utilizados para acelerar a pesquisa de dados em uma tabela, porm a gravao
lenta.
Os campos podem ser uma chave primria ou campos onde haver grandes
quantidades de pesquisa, por parte do sistema.
Ser apresentada a tabela de ndices para a tabela, ou uma mensagem indicando que no
foram criados ndices para a tabela.
17
Na tela de listagem de ndices, d um duplo clique em um dos ndices para exibir os
atributos.
Inner join
Outer join
18
3.7. Estruturas
Uma estrutura, quando chamada em um programa, cria uma rea de memria no ABAP
para armazenamento de uma linha de informao.
Utilizamos vises quando precisamos unir campos de varias tabelas em uma nica
visualizao.
1. Criar um Domnio
20
Campo Domnio, informe o nome tcnico.
Clique em Criar;
21
2. Criar elemento de Dados
Clique em Criar.
22
Selecione Elemento de Dados no Radio Button.
TAB Definies.
23
TAB Denomin.
24
Salve o objeto no pacote e informe a ordem utilizada.
25
3. Criar tabela
26
Campos: informar nome do campo
Chave primaria: Flegar se for a chave primaria
Tipo de Campo: Informar elemento de dados
Para os campos do tipo moeda ou quantidade, tem que informar uma tabela de
Referncia.
27
Campos: informar Tabelas de referncia.
Clicar em salvar.
28
Na tela de atualizao da tabela, clique em Configuraes tcnicas;
Categor. Tamanho = 0;
Salvar;
Menu Configuraes Verificar;
Veja o log de ativao, se existir, e proceda com as correes.
Ative a tabela.
29
3.9.1 Consultando objetos criados
30
4. REPORTS
O comando WRITE ir indicar a gerao de uma lista para o buffer. Quando a sada da
lista j foi construda no buffer, o sistema gera a imagem de tela do buffer da lista
TABLES ....
DATA .....
.....
INITIALIZATION.
31
Evento usado para marcar o inicio de um conjunto de selees
START-OF-SELECTION de dados.
START-OF-SELECTION.
END-OF-SELECTION.
START-OF-SELECTION.
SELECT marc~matnr marc~werks t001w~name1 makt~maktx
INTO TABLE t_marc
FROM marc
INNER JOIN t001w ON marc~werks = t001w~werks
INNER JOIN makt ON marc~matnr = makt~matnr
and makt~spras = sy-langu
WHERE t001w~werks IN S_CENTRO
AND marc~matnr IN S_MATERI.
END-OF-SELECTION.
32
AT NEW campo Comando dentro do LOOP, identifica o primeiro
registro de uma seqncia (quebra)
SORT BY campo.
LOOP AT t_tabela.
AT NEW campo.
.
ENDAT.
...
ENDDLOOP.
* MESSAGE-ID nnn deve ser usado junto com o comando REPORT, no inicio do
programa.
Tipo de mensagens:
E - Erro
A - Aborta
W - Aviso
I - Informao
S - Sucesso
34
CASE okcode.
WHEN 'SIM'.
...
WHEN 'NAO'.
...
WHEN OTHERS.
...
ENDCASE.
35
TOP-OF-PAGE.
WRITE NOVO CABECALHO DEFINIDO PELO PROGRAMA.
END-OF-PAGE.
36
IF NOT var IS INITIAL.
....
ENDIF.
LOOP AT t_tabela.
.
.
ENDDLOOP.
37
Os campos devem ser os mesmos.
38
ENDLOOP.
SELECT
Select Single vbeln , erdat
From vbak
Into wa_vbak
Where vbeln = p_vbeln
Select vbeln
From vbak
Into table t_vbak
Where vbeln in s_vbeln
* Sempre que for utilizar For all Entries utilizar If SY-SUBRC ou CHECK
Select campo
From vbap
Into table t_vbap
For all entries in t_vbak
Where vbeln = t_vbak-vebln
40
SKIP Comando usado para pular linhas em relatrio.
WRITE IMPRIME UMA LINHA.
SKIP 2. Pular duas linhas.
42
Hotspots
Hotspots so reas especiais para relatrios. Se o usurio clicar no campo que esteja
preparado com o hotspots, o evento acionado (Evento AT LINE-SELECTION).
*&---------------------------------------------------------------------*
*& Report Z_SD_ORDENSVENDA_37
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*Tabelas
TABLES: vbak,vbap,vbuk,makt.
43
*Tipos
BEGIN OF y_vbak,
vbeln TYPE vbak-vbeln, " Documento de vendas
erdat TYPE vbak-erdat, " Data de criao do registro
netwr TYPE vbak-netwr, " Valor lquido da ordem na moeda do documento
waerk TYPE vbak-waerk, " Moeda do documento SD
bstnk TYPE vbak-bstnk, " N pedido do cliente
END OF y_vbak,
BEGIN OF y_vbuk,
vbeln TYPE vbuk-vbeln, " Documento de vendas
gbstk TYPE vbuk-gbstk, " Status Global Processamento de Vendas
END OF y_vbuk,
BEGIN OF y_makt,
matnr TYPE makt-matnr, " N do material
maktx TYPE makt-maktx, " Texto breve de material
END OF y_makt,
BEGIN OF y_vtotal,
netwr TYPE vbak-netwr, " Valor lquido da ordem na moeda do documento
END OF y_vtotal.
* Tabelas Transparentes
* Work Areas
*Variaveis
44
DATA: v_bot(1) TYPE c .
DATA: cor TYPE c.
*Constantes
* Eventos
* Tela de Seleo
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CHECK screen-name = 'S_MAKTX'.
screen-input = 0.
screen-output = 1.
screen-display_3d = ' '.
MODIFY SCREEN.
ENDLOOP.
AT LINE-SELECTION.
SELECT SINGLE maktx
FROM makt
INTO s_maktx
WHERE spras = sy-langu
AND matnr = s_matnr-low.
45
CHECK sy-subrc NE 0.
CLEAR s_maktx.
MESSAGE e208(00) WITH text-004.
START-OF-SELECTION.
PERFORM zf_seleciona_dados.
PERFORM zf_imprime_dados.
PERFORM zf_imprime_dados1.
*&---------------------------------------------------------------------*
*& Form zf_seleciona_dados
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_seleciona_dados .
IF p_bot1 = 'X'.
v_bot = 'A'.
ELSEIF
p_bot2 = 'X'.
v_bot = 'B'.
ELSE.
p_bot3 = 'X'.
v_bot = 'C'.
ENDIF.
46
WHERE vbeln = t_vbak-vbeln AND gbstk = v_bot.
ULINE.
WRITE:/ sy-vline,
(10) text-008, sy-vline,
(10) text-009, sy-vline,
(28) text-010, sy-vline,
(05) text-011, sy-vline,
(10) text-012, sy-vline.
ULINE.
LOOP AT t_vbak INTO wa_vbak.
IF cor IS INITIAL.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
cor = 'x'.
ELSE.
FORMAT COLOR COL_KEY INTENSIFIED OFF.
CLEAR cor.
ENDIF.
ENDLOOP.
47
ENDFORM. " zf_imprime_dados
*&---------------------------------------------------------------------*
*& Form zf_imprime_dados1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_imprime_dados1 .
wa_vtotal-netwr = wa_vbap-netwr.
COLLECT wa_vtotal INTO t_vtotal.
AT END OF vbeln.
ULINE.
LOOP AT t_vtotal INTO wa_vtotal.
ENDLOOP.
4.2 ALV
48
O Abap List Viewer (ALV) uma ferramenta que padroniza e simplifica o uso de listas e
relatrios no sistema R/3 tanto para o desenvolvedor tanto para o usurio que interage
com o relatrio.
O ALV atravs de suas funes e estruturas torna o desenvolvimento mais simples na
medida que economiza significativas linhas de cdigo como por exemplo no tratamento de
quebras, totais, subtotais, cores e outras vantagens que veremos a seguir.
*&---------------------------------------------------------------------*
*& Report ZSD_ALV1_37
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZSD_ALV1_37.
*Declarao do grupo de tipos SLIS que contm as definies necessrias
*para interagir com as funes ALV
TYPE-POOLS: slis.
TYPES:BEGIN OF y_cabecalho,
matnr TYPE mara-matnr, " N do material
ersda TYPE mara-ersda, " Data de criao
mtart TYPE mara-mtart, " Tipo de material
matkl TYPE mara-matkl, " Grupo de mercadorias
ntgew TYPE mara-ntgew, " Peso lquido
maktx TYPE makt-maktx,
box(1) TYPE c,
END OF y_cabecalho.
49
*----------------------------------------------------------------------
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.
*Declarao da varivel que armazenar o nome do programa e ser
*enviada para a funo de chamada do ALV
DATA: v_repid TYPE sy-repid. "Nome do Programa
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
*Chamada da rotina para carregar a tabela interna
PERFORM zf_buscar_dados.
PERFORM zf_top_of_page.
PERFORM zf_cabecalho.
*Indicao de campos para exibio na lista
PERFORM zf_fieldcat_init.
*Definio dos parmetros de layout que sero utilizados
PERFORM zf_ordenar_lista.
PERFORM zf_layout_build.
PERFORM zf_list_display.
*----------------------------------------------------------------------*
* END-OF-SELECTION *
*----------------------------------------------------------------------*
END-OF-SELECTION.
*Chamada da rotina para construo da lista ALV Grid
FORM zf_layout_build.
50
*Abre a lista com as colunas do tamanho necessrio para mostragem
w_layout-colwidth_optimize = 'X'.
*&---------------------------------------------------------------------*
*& Form ZF_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Chamada da funo de abertura do ALV com todas as informaes
*----------------------------------------------------------------------*
FORM zf_list_display.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = v_repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = 'USER COMMAND'
i_callback_top_of_page ='ZF_TOP_OF_PAGE'
* I_CALLBACK_HTML_TOP_OF_PAGE =
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = w_layout "Variao de Layout
it_fieldcat = t_fieldcat "Estrutura utilizada
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = t_sort
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = 'A' "Permite salvar layouts
* IS_VARIANT =
* IT_EVENTS =
51
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = t_cabecalho "Tabela Interna
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form zf_ordenar_lista
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form zf_ordenar_lista .
*Montar estrutura
CLEAR w_sort.
w_sort-spos = 1. " Seqncia de ordenao
w_sort-fieldname = 'MATNR'. " Nome do campo
w_sort-tabname = 'T_CABECALHO'. " Nome da tabela de lista
w_sort-up = 'X'. " Ordenao crescente
w_sort-expa = 'X'. " Expandir lista
APPEND w_sort TO t_sort.
CLEAR w_sort.
w_sort-spos = 2. " Seqncia de ordenao
w_sort-fieldname = 'NTGEW'. " Nome do campo
w_sort-tabname = 'T_CABECALHO'. " Nome da tabela de lista
w_sort-up = 'X'. " Ordenao crescente
52
* w_sort-expa = 'X'. " Expandir lista
w_sort-subtot = 'X'. " Subtotal
*
APPEND w_sort TO t_sort.
*Limpar tabela
CLEAR t_fieldcat.
*Data de Criao
CLEAR w_fieldcat.
w_fieldcat-fieldname = 'ERSDA'.
w_fieldcat-ref_tabname = 'MARA'.
APPEND w_fieldcat TO t_fieldcat.
*Criado por
CLEAR w_fieldcat.
w_fieldcat-fieldname = 'MTART'.
w_fieldcat-ref_tabname = 'MARA'.
APPEND w_fieldcat TO t_fieldcat.
*Tipo de Ordem
53
CLEAR w_fieldcat.
w_fieldcat-fieldname = 'MATKL'.
w_fieldcat-ref_tabname = 'MARA'.
APPEND w_fieldcat TO t_fieldcat.
*Canal de distribuio
CLEAR w_fieldcat.
w_fieldcat-fieldname = 'MAKTX'.
w_fieldcat-ref_tabname = 'MAKT'.
APPEND w_fieldcat TO t_fieldcat.
endform. " zf_fieldcat_init
*&---------------------------------------------------------------------*
*& Form zf_cabecalho
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form zf_cabecalho .
CLEAR t_listheader[].
CLEAR w_listheader.
w_listheader-typ = 'H'.
w_listheader-info = text-013.
APPEND w_listheader TO t_listheader.
CLEAR w_listheader.
w_listheader-typ = 'S'.
w_listheader-info = text-012.
APPEND w_listheader TO t_listheader.
CLEAR w_listheader.
w_listheader-typ = 'A'.
w_listheader-info = text-014.
APPEND w_listheader TO t_listheader.
54
*----------------------------------------------------------------------*
FORM zf_top_of_page .
55
5. DIALOG
Cada tela tem um evento que ocorre antes da apresentao da tela e um evento que
ocorre depois do usurio fazer alguma ao na tela gerada.
Esses eventos so
56
Informar o nome do programa a ser criado no campo em destaque abaixo:
Selecionar:
E Informar o nome da
aplicao e clicar no boto
ENTER.
Clicar em sim! (Desejo criar o objeto).
Ele pergunta se iremos querer o include TOP, que o include onde iremos declarar todas
as nossas variveis globais. Devemos marcar que iremos utilizar o include TOP.
57
Informar O Ttulo do programa e clicar no boto gravar.
58
Informar descries das telas:
E clicar em .
59
Informar o Nome OK_CODE, que
ser responsvel por armazenar o
cdigo do comando efetuado pelo
usurio, seguindo a Idia do SY-
UCOOM.
60
Utilizar o F6 para localizar os campos das tabelas:
61
E apertar Enter. S posicionar os campos na tela e pronto.
Obs: Para mais opes com o design da tela, utilizar Barra de ferramentas ao lado
esquerdo.
62
Para checar os detalhes de cada campo, apertar o f2 em cima do mesmo, ser exibida a
tela:
Para testar se a tela est Ok. Executar a o nome da transao na barra com o /o para abrir
uma nova janela .
64
A tela dever seguir o modelo abaixo:
Dever ser retirado o comentrio dos INCLUDE e dar um clique duplo sobre eles, ser
solicitado pra criar o include no programa!
65
Dica: Sempre que ocorre a interao do usurio com o programa, o sistema executa as
instrues do PAI (PROCESS AFTER INPUT) e depois carrega o PBO (PROCESS
BEFORE OUTPUT).
66
Retirar o comentrio do MODULE STATUS_1000. Dar um duplo clique e criar o objeto.
O Objeto dever ser associado ao include com final O01. Include PBO.
67
Tirar o comentrio de linha dos dois itens e substituir xxxxx por um nome.
68
69
Atribuir nomes aos botes da barra Application tool bar.
70
Tirar o comentrio do USER_COMMAND_1000. E dar um duplo clique para criar o objeto.
5.2. TABSTRIP
71
um componente disponvel para criar uma diviso por abas, cada aba tendo o seu
prprio contedo.
72
Definir o nome
do Tabstrip
73
Indicar quantas abas
E quais os nomes a
Serem utilizados
74
Os cdigos gerados, sero includos nos
includes indicados. recomendado no
alterar essas opes.
75
Criado o Tabstrip pelo wizard, uma srie de cdigos so inseridos nos includes para
fazer todo o tratamento das abas e chamadas das subtelas.
Para inserir dados dentro das subtela, basta abrir a subtela no editor grfico e
inserir o que deseja.
Cada subtela possui seu prprio PBO e PAI que chamado a cada seleo de aba.
Podemos codificar apenas para a aba utilizando essas chamadas locais.
76
5.3. TABLE CONTROL
77
Definir o nome
do Table Control
78
Definir se utilizar os campos de uma
<TT> ou de uma <TI>. Caso seja de
uma <TI>, esta j dever estar declarada
no programa.
79
Definir se o TC permitir a entrada de
dados ou se ser somente de
visualizao.
80
Os cdigos gerados, sero includos nos includes indicados.
recomendado no alterar essas opes.
81
O resultado do Table Control com os
botes de paginao.
Os ttulos das colunas devem ser
alteradas.
Criado o Table Control pelo wizard, uma srie de cdigos so inseridos nos includes
para fazer todo o tratamento das linhas e colunas, e relao com a tabela interna.
Para que os dados apaream no Table Control, basta inseri-los na tabela interna
correspondente. Porm depois de criado o Table Control, se adicionarmos um
campo na tabela interna, deveremos adicion-lo manualmente no Table Control.
Quando utilizado o campo para marcao, para verificar se a linha est marcada
basta checar se o contedo do campo de marcao recebeu o valor X.
SCREEN uma tabela do sistema que contm todos os objetos da tela atual. Com
isso podemos percorrer essa tabela e alterar algumas das propriedades dos
campos existentes.
Algumas opes que podemos alterar so: visibilidade do campo, habilitao para
insero de dados, enfatizar, etc...
O loop at screen deve ser feito sempre no PBO da tela que pretendemos alterar.
82
Sintaxe:
loop at screen.
if screen-name eq nome_campo.
screen-input = 0. desabilita para escrita
screen-invisible = 1. torna o campo invisvel
modify screen.
endif.
endloop.
83
6. SHDB
84
Para visualizar resultado do mapeamento, duplo clique no registro.
85
7. RFC
Funo RFC nada mais do que um mdulo de funo que est habilitado a ser
executado de fora do SAP.
Por exemplo, utilizando um conector.net para o SAP podemos chamar uma funo
RFC do SAP de dentro de um programa em VB. O mesmo ocorre para outras
linguagens como o PHP.
86
8. BATCH INPUT
Criao do Programa
o Antes de voc escrever um programa Batch Input, voc tem que executar a
transao e anotar o nmero da tela, seqncia de telas e os nomes dos
campos da tela para serem endereados mais tarde no programa. Voc entra
com estes dados na tabela BDC.
o O nome do campo para o OK-code o mesmo para todas as telas:
BDC_OKCODE. O valor para o OK-code consiste de uma barra / e o
nmero da tecla de funo (ex: /11).
87
1. Declarar Tabelas, Types, Work reas e tabelas internas para utilizao.
*&---------------------------------------------------------------------*
*& Report ZMM_FORNBI_23
*&
*&---------------------------------------------------------------------*
*& Descrio : Programa para Batch Input
*& Autor : Daniela Cristina Guerra
*&---------------------------------------------------------------------*
REPORT zmm_fornbi_23.
*&Tabelas--------------------------------------------------------------*
TABLES: bdcdata.
*&Types----------------------------------------------------------------*
*&Tabelas Internas-----------------------------------------------------*
*&Work areas-----------------------------------------------------------*
*&Inicializao--------------------------------------------------------*
INITIALIZATION.
88
PERFORM zf_abrir_busca_arquivo.
START-OF-SELECTION.
PERFORM zf_upload_arquivo.
PERFORM zf_loop.
*&---------------------------------------------------------------------*
*& Form zf_abrir_busca_arquivo
*&---------------------------------------------------------------------*
* Descrio: Inicia a tela para buscar arquivo
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_abrir_busca_arquivo.
ENDIF.
89
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_upload_arquivo .
ENDIF.
90
*&---------------------------------------------------------------------*
*& Form zf_loop
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form zf_loop .
AT FIRST.
PERFORM zf_open.
ENDAT.
PERFORM zf_parametros_doc.
PERFORM zf_insert.
CLEAR t_bdc_data.
AT LAST.
PERFORM zf_close.
ENDAT.
ENDLOOP.
IF sy-subrc = 0.
message i208(00) with text-008.
ENDIF.
*&---------------------------------------------------------------------*
*& Form zf_monta_t_upload
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_monta_t_upload USING begin TYPE any
prog TYPE any
value TYPE any.
CLEAR wa_bdc_data.
IF begin = 'X'.
91
wa_bdc_data-dynbegin = begin.
wa_bdc_data-program = prog.
wa_bdc_data-dynpro = value.
append wa_bdc_data to t_bdc_data.
ELSE.
wa_bdc_data-fnam = prog.
wa_bdc_data-fval = value.
append wa_bdc_data to t_bdc_data.
ENDIF.
*&---------------------------------------------------------------------*
*& Form zf_parametros_doc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_parametros_doc.
92
'X' 'SAPMF02K' '0120',
93
ENDFORM. " zf_parametros_doc
Voc recebe vrios valores de retorno via EXCEPTIONS. Voc pode ler
esses valores com SY-SUBRC.
*&---------------------------------------------------------------------*
*& Form zf_open
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_open .
94
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form zf_insert
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form zf_insert .
95
IF sy-subrc = 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form zf_close
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form zf_close .
96
Funcionalidades da Transao SM35
Voc pode processar pastas com a funo Batch Input (escolher System
Services Batch Input, ou acessar a transao SM35). A informao
fornecida no status, seqncia de telas, contedo das telas, o usurio
que est fazendo o processamento, o modo de processamento, o
servidor, bem como o usurio que usa a checagem de autorizao.
OBS:
97
9. CALL TRANSACTION
*&-------------------------------------------------------------------------*
*& Report ZSD_CLIENTE_CT_23
*&
*&-------------------------------------------------------------------------*
*& Descrio: Programa de CALL TRANSACTION
*& Autor: Daniela Guerra
*&-------------------------------------------------------------------------*
*&Types--------------------------------------------------------------------*
TYPES:
BEGIN OF y_arq,
line(1000) TYPE c, " tipo para upload do arquivo com ';'
END OF y_arq,
BEGIN OF y_final,
bukrs TYPE rf02d-bukrs, " Empresa
ktokd TYPE rf02d-ktokd, " Grupo de contas do cliente
name1 TYPE kna1-name1, " Nome 1
sortl TYPE kna1-sortl, " Nome 2
stras TYPE kna1-stras, " Rua e n
ort01 TYPE kna1-ort01, " Local
pstlz TYPE kna1-pstlz, " Cdigo postal
ort02 TYPE kna1-ort02, " Bairro
land1 TYPE kna1-land1, " Chave do pas
regio TYPE kna1-regio, " Regio (pas, estado, provncia, condado)
spras TYPE kna1-spras, " Cdigo de idioma
txjcd TYPE kna1-txjcd, " Domiclio fiscal
akont TYPE knb1-akont, " Cta.de reconciliao na contabilidade geral
zterm TYPE knb1-zterm, " Chave de condies de pagamento
zwels TYPE knb1-zwels, " Lista de formas de pagamentos a considerar
END OF y_final,
BEGIN OF y_log,
msg(100) TYPE c, " Tipo para tabela de log de erros
log TYPE y_arq,
98
END OF y_log.
*&Tabelas Internas----------------------------------------------------------*
DATA: t_arq TYPE TABLE OF y_arq, " Tabela para upload do arquivo
t_final TYPE TABLE OF y_final, " Tabela final para separao dos dados
t_log TYPE TABLE OF y_log, " Tabela de log de erros
t_msgn TYPE TABLE OF bdcmsgcoll, " Tabela de msgs para log de erros
t_bdc_data TYPE TABLE OF bdcdata.
*&Work Areas----------------------------------------------------------------*
*&Variveis----------------------------------------------------------------*
valor type c.
*&Constantes--------------------------------------------------------------*
CONSTANTS spaces VALUE ';'. " Constante para separao dos dados no
loop_monta_tabela_final
*&Tela de Seleo---------------------------------------------------------*
*&Inicializao ----------------------------------------------------------*
INITIALIZATION.
PERFORM zf_busca_arquivo.
*&Inicio do Processamento------------------------------------------------*
START-OF-SELECTION.
PERFORM zf_importa_arquivo.
99
PERFORM zf_loop_monta_tabela_final.
PERFORM zf_loop_dbc_dados.
*&----------------------------------------------------------------------*
*& Form zf_busca_arquivo
*&----------------------------------------------------------------------*
* Descrio: funo para buscar arquivo para Upload
*-----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*-----------------------------------------------------------------------*
FORM zf_busca_arquivo .
*&---------------------------------------------------------------------*
*& Form zf_importa_arquivo
*&---------------------------------------------------------------------*
* Descrio: Funo que efetua o upload do Arquivo
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_importa_arquivo .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_arq
* FILETYPE = 'ASC'
* HAS_FIELD_SEPARATOR = ' '
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
100
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
data_tab = t_arq
* 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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
101
wa_final-ort01
wa_final-pstlz
wa_final-ort02
wa_final-land1
wa_final-regio
wa_final-spras
wa_final-txjcd
wa_final-akont
wa_final-zterm
wa_final-zwels.
ENDLOOP.
PERFORM zf_parametros_shdb.
PERFORM zf_insert.
CLEAR t_bdc_data.
ENDLOOP.
102
' ' 'BDC_OKCODE' '/00',
' ' 'RF02D-BUKRS' wa_final-bukrs,
' ' 'RF02D-KTOKD' wa_final-ktokd,
103
value TYPE any.
IF begin = 'X'.
CLEAR wa_bdc_data.
MOVE : begin TO wa_bdc_data-dynbegin,
prog TO wa_bdc_data-program,
value TO wa_bdc_data-dynpro.
CALL TRANSACTION 'XD01' USING t_bdc_data MODE 'N' UPDATE 'S' MESSAGES INTO
t_msgn.
CHECK sy-subrc NE 0.
MOVE wa_arq TO wa_log-log.
104
ENDFORM. " zf_insert
**&---------------------------------------------------------------------*
*& Form zf_message_erro
*&----------------------------------------------------------------------*
* Descrio: Funo para menssagens de erro
*-----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*-----------------------------------------------------------------------*
FORM zf_message_erro .
*&---------------------------------------------------------------------*
*& Form zf_download_log
*&---------------------------------------------------------------------*
* Descrio: Funo para download do log de erro
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_download_log .
105
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* WRITE_EOL = ABAP_TRUE
* IMPORTING
* FILELENGTH =
TABLES
data_tab = t_log
* FIELDNAMES =
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
IF sy-subrc = 0.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
106
ENDFORM. " zf_download_log
*&---------------------------------------------------------------------*
*& Form zf_message_confirm
*&---------------------------------------------------------------------*
* Descrio: Funo para popup de confirmao de download do arquivo de
* log de erro.
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_message_confirm .
107
10. BAPI
Podemos usar as BAPIs para realizar cargas de dados, bastando para tal verificar a
existncia de uma BAPI para a carga que se quer fazer.
Depois de fazermos a chamada da BAPI, colocar uma verificao do sy-subrc,
se ele for initial, chamar a bapi abaixo: CALLFUNCTION 'BAPI_TRANSACTION_COMMIT'
10.1 Programa BAPI
108
*&---------------------------------------------------------------------*
*& Report ZMM_BAPI_PO_CREATE_23
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zmm_bapi_po_create_23.
*&Types--------------------------------------------------------------------*
TYPES:
BEGIN OF y_arq,
line(1000) TYPE c, " tipo para upload do arquivo com ';'
END OF y_arq,
BEGIN OF y_table,
tipo(1) TYPE c,
comp_code TYPE bapimepoheader-comp_code,
doc_type TYPE bapimepoheader-doc_type,
creat_date TYPE bapimepoheader-creat_date,
vendor TYPE bapimepoheader-vendor,
purch_org TYPE bapimepoheader-purch_org,
pur_group TYPE bapimepoheader-pur_group,
currency TYPE bapimepoheader-currency,
currency_iso TYPE bapimepoheader-currency_iso,
exch_rate(9) TYPE c,
doc_date TYPE bapimepoheader-doc_date,
incoterms1 TYPE bapimepoheader-incoterms1,
incoterms2 TYPE bapimepoheader-incoterms2,
po_item TYPE bapimepoitem-po_item,
material TYPE bapimepoitem-material,
plant TYPE bapimepoitem-plant,
quantity(13) TYPE c,
po_unit TYPE bapimepoitem-po_unit,
po_unit_iso TYPE bapimepoitem-po_unit_iso,
net_price(28) TYPE c,
price_unit(5) TYPE c,
END OF y_table.
*&Tabelas Internas----------------------------------------------------------*
109
*&Work Areas----------------------------------------------------------------*
*&Variavel----------------------------------------------------------------*
*&Constantes--------------------------------------------------------------*
CONSTANTS spaces VALUE ';'. " Constante para separao dos dados no
loop_monta_tabela_final
*&Tela de Seleo---------------------------------------------------------*
*&Inicializao ----------------------------------------------------------*
INITIALIZATION.
PERFORM zf_busca_arquivo.
*&Inicio do Processamento------------------------------------------------*
START-OF-SELECTION.
PERFORM zf_importa_arquivo.
PERFORM zf_loop_monta_tabela_table.
PERFORM zf_move_campos.
PERFORM zf_chama_funcao_create.
*&----------------------------------------------------------------------*
*& Form zf_busca_arquivo
*&----------------------------------------------------------------------*
* Descrio: funo para buscar arquivo para Upload
*-----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
110
*-----------------------------------------------------------------------*
FORM zf_busca_arquivo .
*&---------------------------------------------------------------------*
*& Form zf_importa_arquivo
*&---------------------------------------------------------------------*
* Descrio: Funo que efetua o upload do Arquivo
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_importa_arquivo .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_arq
* FILETYPE = 'ASC'
* HAS_FIELD_SEPARATOR = ' '
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
data_tab = t_arq
111
* 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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF wa_arq-line(01) = 'H'.
112
SPLIT wa_arq AT spaces INTO: wa_table-tipo
wa_table-po_item
wa_table-material
wa_table-plant
wa_table-quantity
wa_table-po_unit
wa_table-po_unit_iso
wa_table-net_price
wa_table-price_unit.
ENDIF.
ENDLOOP.
IF wa_table-tipo = 'H'.
MOVE:
wa_table-comp_code TO wa_header-comp_code,
wa_table-doc_type TO wa_header-doc_type,
wa_table-creat_date TO wa_header-creat_date,
wa_table-vendor TO wa_header-vendor,
wa_table-purch_org TO wa_header-purch_org,
wa_table-pur_group TO wa_header-pur_group,
wa_table-currency TO wa_header-currency,
wa_table-currency_iso TO wa_header-currency_iso,
wa_table-exch_rate TO wa_header-exch_rate,
wa_table-doc_date TO wa_header-doc_date,
wa_table-incoterms1 TO wa_header-incoterms1,
wa_table-incoterms2 TO wa_header-incoterms2.
MOVE:
'X' TO wa_headerx-comp_code,
'X' TO wa_headerx-doc_type,
'X' TO wa_headerx-creat_date,
'X' TO wa_headerx-vendor,
113
'X' TO wa_headerx-purch_org,
'X' TO wa_headerx-pur_group,
'X' TO wa_headerx-currency,
'X' TO wa_headerx-currency_iso,
'X' TO wa_headerx-exch_rate,
'X' TO wa_headerx-doc_date,
'X' TO wa_headerx-incoterms1,
'X' TO wa_headerx-incoterms2.
IF sy-tabix NE 1.
PERFORM zf_chama_funcao_create.
CLEAR:
t_headerx,
t_item,
t_itemsx.
ENDIF.
ELSE.
MOVE:
wa_table-po_item TO wa_item-po_item,
wa_table-material TO wa_item-material,
wa_table-plant TO wa_item-plant,
wa_table-quantity TO wa_item-quantity,
wa_table-po_unit TO wa_item-po_unit,
wa_table-po_unit_iso TO wa_item-po_unit_iso,
wa_table-net_price TO wa_item-net_price,
wa_table-price_unit TO wa_item-price_unit.
MOVE:
wa_table-po_item TO wa_itemsx-po_item,
'X' TO wa_itemsx-po_itemx,
'X' TO wa_itemsx-material,
'X' TO wa_itemsx-plant,
'X' TO wa_itemsx-quantity,
'X' TO wa_itemsx-po_unit,
'X' TO wa_itemsx-po_unit_iso,
'X' TO wa_itemsx-net_price,
'X' TO wa_itemsx-price_unit.
ENDIF.
AT LAST .
114
PERFORM zf_chama_funcao_create.
ENDAT.
ENDLOOP.
PERFORM grava_pedido.
ENDIF.
115
* POSCHEDULE =
* POSCHEDULEX =
* POACCOUNT =
* POACCOUNTPROFITSEGMENT =
* POACCOUNTX =
* POCONDHEADER =
* POCONDHEADERX =
* POCOND =
* POCONDX =
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
* POTEXTITEM =
* ALLVERSIONS =
* POPARTNER =
* POCOMPONENTS =
* POCOMPONENTSX =
* POSHIPPING =
* POSHIPPINGX =
* POSHIPPINGEXP =
.
IF sy-subrc = 0.
116
11. FIELD EXIT
As User Exits foram desenvolvidas originalmente para o Mdulo SD, com o propsito de
permitir ao usurio modificar o sistema sem, no entanto, modificar o cdigo fonte.
117
12. SCREEN EXIT
118
13. BADI
Para utilizarmos uma BADI, devemos entrar na transao SE18 e escolher a BADI que
iremos utilizar.
119
Nessa implementao poderemos ver os mtodos disponveis para trabalharmos.
120
121
14. Sapscript
Transao SE71.
122
Formatos de Elementos de Texto
* Pargrafo Padro
= Linha longa
( Linha Bruta
/ Avano de Linha
/= Avano de Linha e Linha Longa
/( Avano de Linha e Linha Bruta
/: Linha de Comando
/* Linha de Comentrio
/E Elemento de Texto
Abertura de formulrio
O primeiro passo para a impresso de um SAPscript atravs de um programa a abertura
de um formulrio para que se possa fazer o povoamento.
Utilizamos a seguinte funo para abrir:
123
OTHERS = 12
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Os parmetros mais importantes a serem passados para a funo so:
Inicializao de um formulrio
Utilizado para quebra e criao de vrios formulrios para uma s seleo de dados.
A seleo dos dados feita normalmente com comando SELECT e demais comandos
ABAP, como j foi visto em tpicos anteriores.
A impresso dos dados nas janelas na maioria das vezes feita simultaneamente com a
seleo dos dados, ou seja, a medida que os dados so selecionados, so enviados
imediatamente para o formulrio.
Utilizamos a seguinte funo:
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'ITEM'
* FUNCTION = 'SET'
* TYPE = 'BODY'
window = 'MAIN'
* IMPORTING
* PENDING_LINES =
EXCEPTIONS
element = 1
function = 2
type = 3
unopened = 4
unstarted = 5
window = 6
bad_pageformat_for_print = 7
spool_error = 8
codepage = 9
OTHERS = 10
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
125
Funo que finaliza um Sapscript:
Obs.: No obrigatria.
126
15. SMARTFORM
Smartform o sucessor do Sapscript, com ele possvel criar relatrios para impresso,
inserir imagens e utilizar cores.
A organizao pode ser feita de forma simplificada, atravs do ambiente grfico, definindo
pginas e janelas para separar as informaes.
O relatrio criado sem a necessidade de codificao e formatao, pois uma
Ferramenta Visual.
127
Abrir uma tela para que sejam feitas as configuraes.
No item Interface de Formulrio, na aba Tabelas, defina o nome da tabela que ser
utilizada e o seu tipo.
128
Devemos retornar a tela inicial e criar um estilo para o Formulrio.
129
Defina os parmetros de fonte para o pargrafo.
130
Agora devemos definir o pargrafo padro para o estilo. Aps, salvamos, ativamos e
retornamos para o Formulrio.
Criaremos uma janela para cada item do relatrio. No nosso caso o Cabealho.
131
Criaremos um objeto Grfico para inserir o Logotipo
Nas propriedades do Grfico digite o nome do arquivo ou aperte F4 caso queira localizar.
Clique no boto Form Painter para definir o tamanho e organizao das janelas.
132
Organize o layout do relatrio e defina o tamanho e a margem dos campos.
Dentro da Janela Main criaremos uma Tabela para listar os dados da Tabela de Origem.
133
Nas propriedades da Tabela, clique no boto Detalhes para definirmos os campos desta
Tabela.
Dentro da rea de Cabealho devemos criar uma Entrada tabela para definir os campos
do cabealho.
134
Selecione o Tipo de linha da tabela que foi criada e as colunas automaticamente
aparecero dentro da rea do Cabealho.
135
Para inserir os dados da tabela, clique no boto Inserir Campo
e digite o nome da varivel entre &.
136
15.2 Programa para Smartform
*&-----------------------------------------------------------------*
*& Report Z_SMARTFORM_23
*&
*&-----------------------------------------------------------------*
*&
*&
*&-----------------------------------------------------------------*
REPORT z_smartform_23.
*Tabelas-----------------------------------------------------------*
*&Tipos------------------------------------------------------------*
TYPES:
BEGIN OF y_ekko,
ebeln TYPE ekko-ebeln, "
bstyp TYPE ekko-bstyp, "
kunnr TYPE ekko-kunnr, "
END OF y_ekko,
BEGIN OF y_kna1,
name1 TYPE kna1-name1, "
kunnr TYPE ekko-kunnr, "
END OF y_kna1,
BEGIN OF y_makt,
maktx TYPE makt-maktx, " Descrio
matnr TYPE ekpo-matnr, " Material
END OF y_makt,
BEGIN OF y_ekpo,
ebelp TYPE ekpo-ebelp, " Item
matnr TYPE ekpo-matnr, " Material
werks TYPE ekpo-werks, " Centro
menge TYPE ekpo-menge, " Quantidade
meins TYPE ekpo-meins, "
netwr TYPE ekpo-netwr, "
ebeln TYPE ekpo-ebeln, "
END OF y_ekpo.
*Tabelas Internas--------------------------------------------------*
DATA:
t_ekko TYPE TABLE OF y_ekko,
t_kna1 TYPE TABLE OF y_kna1,
t_ekpo TYPE TABLE OF y_ekpo,
t_makt TYPE TABLE OF y_makt,
t_itens TYPE TABLE OF zitens_23.
137
*&Work Areas-------------------------------------------------------*
*&Variaveis--------------------------------------------------------*
*&Tela de Seleo--------------------------------------------------*
*&Inicializao----------------------------------------------------*
INITIALIZATION.
*&Inicio do Processamento------------------------------------------*
START-OF-SELECTION.
PERFORM zf_seleciona_dados_A.
PERFORM zf_seleciona_dados_B.
PERFORM zf_monta_cabec_itens.
PERFORM zf_name_smartform.
PERFORM zf_chama_smartform.
*&-----------------------------------------------------------------*
*& Form zf_seleciona_dados_A
*&-----------------------------------------------------------------*
* text
*------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*------------------------------------------------------------------*
FORM zf_seleciona_dados_A.
IF sy-subrc = 0.
ENDIF.
138
*&-----------------------------------------------------------------*
*& Form zf_seleciona_dados_B
*&-----------------------------------------------------------------*
* text
*------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*------------------------------------------------------------------*
FORM zf_seleciona_dados_B .
CHECK sy-subrc = 0.
*&-----------------------------------------------------------------*
*& Form zf_monta_cabec_itens
*&-----------------------------------------------------------------*
* text
*------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*------------------------------------------------------------------*
FORM zf_monta_cabec_itens .
READ TABLE t_makt INTO wa_makt WITH KEY matnr = wa_ekpo-matnr BINARY SEARCH.
MOVE:
wa_ekpo-ebelp TO wa_itens-ebelp, " Item
wa_ekpo-matnr TO wa_itens-matnr, " Material
wa_makt-maktx TO wa_itens-maktx, " Descrio
wa_ekpo-werks TO wa_itens-werks, " Centro
wa_ekpo-menge TO wa_itens-menge, " Quantidade
wa_ekpo-meins TO wa_itens-meins, " Unidade
wa_ekpo-netwr TO wa_itens-netwr. " Valor Liquido
APPEND wa_itens TO t_itens.
ENDLOOP.
ENDFORM. " zf_monta_cabec_itens
139
*&-----------------------------------------------------------------*
*& FORM zf_name_smartform
*&-----------------------------------------------------------------*
* text
*------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*------------------------------------------------------------------*
FORM zf_name_smartform .
*&-----------------------------------------------------------------*
*& FORM zf_chama_smartform
*&-----------------------------------------------------------------*
* text
*------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*------------------------------------------------------------------*
FORM zf_chama_smartform .
140
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
tables
t_itens = t_itens
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
141