Escolar Documentos
Profissional Documentos
Cultura Documentos
ABAP No MINISAP PDF
ABAP No MINISAP PDF
0
Tela Inicial
Criando tabelas
ZMARA e a ZMAKT
Clique
em
Create.
Pgina 1
Descrio da tabela
Display/Maintenanc
e Allowed para
permitir a
manuteno da
tabela sem restrio
Classe de aplicao
Na ABA Fields repita a Descrio da tabela, e preencha os nomes dos campos como abaixo
O mandante deve
existir como
primeiro campo de
qualquer tabela e
sempre ser chave
Confirme a
criao do
Elemento de
Dados
Pgina 2
preencha o nome do
domnio a ser criado
Clique em Yes
Pgina 3
Confirme a
criao do
Elemento de
Dados
Clique em
Local Object
3 passos obrigatrios:
Salvar
Verificar
Inconsistncias
Ativar
para voltar.
Somente aps esses passos o objeto funciona. Clique em BACK
Para salvar o domnio aps o clique, marque o popup como objeto local, verifique e ative.
Voltando, salve, verifique e ative tambm o Elemento de Dados.
Campo
MATNR
Elmto Dd
ZMATNR
ERSDA
ZERSDA
MTART
ZMTART
Descries 1, 2, 3, e, 4
1- N. Matnr
2- N. Mater.
3- N. do Mater
4- N. do Material
1- Criado
2- Criado em
3- Data criao
4- Data da criao do
material
1- Tp. Material
2- Tipo material
3- Tipo de Material
4- Tipo de Mateiral
Domnio
ZMATNR
Tipo
CHAR
Tamanho
18
DATUM
DATS
ZMTART
CHAR
Crie os outros
elementos de
dados e
domnios/nse11
conforme as
especificaes e
da mesma forma
que foram criados
o Elemento de
Dados e o
Domnio do
MATNR.
Pgina 4
Elmto Dd
ZMATNR
SPRAS
ZSPRAS
MAKTX
ZMAKTX
Tipo
CHAR
Tamanho
18
CHAR
CHAR
40
Clique em Yes
Pgina 5
Clique em
Salvar e
depois em
Voltar
Salvar,
Verificar e
Ativar a tabela
Clique em criar.
Pgina 6
Para testar a
manuteno de tabela
gerada, v para a
transao SM30.
Preencha o nome da
tabela no campo
Table/View
(VIEWNAME) e clique
em Maintain (Update).
Entre com
os dados
do ex. e
salve
Para entrar
com novos
dados
Criando uma transao para manuteno de tabela - Transao: SE93 Criao de transao.
Como a SM30 no uma transao disponvel para o usurio, criar uma transao para a manuteno
da tabela na transao SE93.
Coloque o nome
da transao, no
ex. ZMARA e
clique em
Create
Pgina 7
Preencha a
descrio breve,
marque a opo
Transao com
Parmetros e
confirme.
Marque as 3 opes
de interface
Preencha com a
transao SM30
Marque Pular a
Tela Inicial
Preencha os campos e os contedos da
primeira tela da transao SM30.
MAKTX
CANETA
LAPIZ
BORRACHA
CADERNO
Pgina 8
Preencha o nome do
programa clique em
Create, todo objeto
customizado, ou que
no seja Standard
comea com Z.
Preencha o campo
Title com o nome do
relatrio, o Type
como Executable
program e o Status
como SAP Standard
Prodution Program.
Salve como Objeto
Local.
O sistema abrir o
editor de programa
ABAP; complete o
cdigo como no
modelo abaixo:
*---------------------------------------------------------------------*
* Report ZRELMARA
*
*---------------------------------------------------------------------*
* Autor:
Responsvel:
* Data:
Mdulo:
*---------------------------------------------------------------------*
REPORT zrelmara.
*---------------------------------------------------------------------*
* Declarao
*---------------------------------------------------------------------*
* Tabelas transparentes do dicionrio de dados que sero usadas no cdigo.
TABLES: zmara,
zmakt.
Pgina 9
Pgina 10
* Saida-------------------------------PERFORM imprime_saida.
*---------------------------------------------------------------------*
* Subrotinas
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*
Form busca_zbseg
*---------------------------------------------------------------------*
FORM busca_zmara .
* Seleciona os dados matnr ersda mtart
SELECT matnr ersda mtart
* para dentro da tabela interna ti_zmara
INTO TABLE ti_zmara
* vindo da tatela transparente zmara
FROM zmara
* com a condio de acordo com a tela de seleo
WHERE matnr IN s_matnr. " ranger com 'IN'
* Para testar se houve erro no select.
* Sy-subrc = 0
=
ZERO ERRO , retornou pelo menos 1 registro.
* Sy-subrc <> 0
=
HOUVE ERRO , no retornou nada
IF sy-subrc <> 0 .
* Se no retornar nada vai dar mensagem de erro.
MESSAGE i000(su) WITH 'DEU ERRO'.
* Pra o processamento e retorna para a tela de parmetros de entrada
STOP.
ELSE.
* Se a busca no deu erro, a tabela tem algum registro ento sorteia.
SORT ti_zmara BY matnr.
ENDIF.
ENDFORM.
" busca_zmara
*---------------------------------------------------------------------*
*
Form busca_zbxt
*---------------------------------------------------------------------*
FORM busca_zmakt .
* sempre que for fazer um select relacionado com uma tabela transparente
* tem que garantir que isso no ser feito com uma tabela vazia.
IF NOT ti_zmara[] IS INITIAL.
* Seleciona os dados matnr spras maktx
SELECT matnr spras maktx
* para dentro da tabela interna ti_zmakt
INTO TABLE ti_zmakt
* vindo da tatela transparente zmakt
FROM zmakt
* para cada entrada da tabela ti_zmara
FOR ALL ENTRIES IN ti_zmara
* com a condio de acordo com a tela de seleo
* e com a tabela de comparao.
WHERE matnr = ti_zmara-matnr
AND spras = p_spras. "Parameters com =
* Para testar se houve erro no select.
* Sy-subrc = 0
=
ZERO ERRO , retornou pelo menos 1 registro.
* Sy-subrc <> 0
=
HOUVE ERRO , no retornou nada
Pgina 11
IF sy-subrc = 0 .
* Neste caso pode testar se no houve erro
* e se a tabela foi preenchida ento sorteia, indexa.
SORT ti_zmakt BY matnr.
ENDIF.
ENDIF.
ENDFORM.
" busca_zmakt
*---------------------------------------------------------------------*
*
Form processa_dados
*---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM processa_dados .
* Para preencher a tabela com os dados de sada
* Para cada registro da tabela ti_mara.
LOOP AT ti_zmara INTO wa_zmara.
* move o contedo da wa_mara para wa_saida.
wa_saida-matnr = wa_zmara-matnr.
wa_saida-ersda = wa_zmara-ersda.
wa_saida-mtart = wa_zmara-mtart.
* Para carregar com os dados relacionados da ti_makt
* Tem que ler a ti_makt onde o campo chave matnr o mesmo
* Clusula Binary Serach faz uma pesquisa binria e mais rpida
READ TABLE ti_zmakt INTO wa_zmakt WITH KEY matnr = wa_zmara BINARY SEARCH.
* Para economizar processamento o valor da ti_zmakt para ti_saida
* s ser trasportado se a leitura com o comando read table tiver dado
* resultado.
IF sy-subrc = 0 .
wa_saida-spras = wa_zmakt-spras.
wa_saida-maktx = wa_zmakt-maktx.
ENDIF.
* No final do processamento o valor da wa_saida movido para ti_saida pelo
* comando APPEND.
APPEND wa_saida TO ti_saida.
ENDLOOP.
ENDFORM.
" processa_dados
*---------------------------------------------------------------------*
*
Form imprime_saida
*---------------------------------------------------------------------*
FORM imprime_saida .
* Para cada registro da tabela ti_saida
LOOP AT ti_saida INTO wa_saida.
* Imprime cada campo da tabela.
WRITE:/ wa_saida-matnr,
wa_saida-ersda,
wa_saida-mtart,
wa_saida-spras,
wa_saida-maktx.
ENDLOOP.
ENDFORM.
" imprime_saida
Pgina 12
Clicando em Goto
Text Elements
Selections Texts.
Preencher com a
descrio dos campos,
Salvar
Voltar
, Ativar
.
Pgina 13
Clique em Yes
Fazendo uma Funo calculadora simples - Transao: SE37 Construtor de funo ABAP.
Coloque o nome da
funo e clique em
Create
Pgina 14
Uma funo IMPORTA parmetros (variveis, works reas, tabelas internas) executa um
processamento e EXPORTA um parmetro de resultado .
Em Source code, a
tela trar os
parmetros declarados
anteriormente.
Pgina 15
Preencha os parmetros
de entrada e d F8.
Segue o resultado.
Usando uma funo no cdigo - Crie o programa ZCALCSP na SE38, com o cdigo abaixo.
*---------------------------------------------------------------------*
* Report ZCALSP
*---------------------------------------------------------------------*
REPORT zcalcsp.
*---------------------------------------------------------------------*
* Declarao
*---------------------------------------------------------------------*
* Variveis
DATA: v_result(10) TYPE n.
* Tela com os parmetros de entrada que serviro de filtro para a
* busca dos dados do relatrio.
* Parmetro de tela que recebe o endereo de exportao do TXT.
PARAMETERS: p_valor1(5) TYPE n,
p_sinal(1) TYPE c,
p_valor2(5) TYPE n.
Pgina 16
*---------------------------------------------------------------------*
* Processamento
*---------------------------------------------------------------------*
* para organizar o processamento neste bloco utiliza-se forms, com a chamada
* pelo comando perform.
* para criar o form referente basta clicar duas vezes no nome do perform.
* Processa dados----------------------PERFORM chama_funcao.
* Sada-------------------------------* Imprime os dados da tabela ti_saida na tela.
PERFORM imprime_saida.
*---------------------------------------------------------------------*
* Subrotinas
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*
Form chama_funcao
*---------------------------------------------------------------------*
FORM chama_funcao .
Preencha o nome da
funo no campo ende
o CALL FUNCTION
estiver flegado e
confirme.
Pgina 17
'Primeiro valor:
'Sinal
:
'Segundo valor :
'Resultado
:
',
',
',
',
p_valor1,
p_sinal,
p_valor2,
v_result.
ENDFORM.
" imprime_saida
*---------------------------------------------------------------------*
Clique em Goto
Text Elements
Selection Texts
Preencher com
o texto que os
usurios iro
ver:
Salvar,
Execute
novamente
Ativar e
Voltar.
Pgina 18
Crie um programa na SE38 com o nome de ZREMESSA e cole o cdigo do relatrio ZRELMARA
fazendo as alteraes abaixo.
* Tela com os parmetros de entrada que serviro de filtro para a
* busca dos dados do relatrio.
* Parmetro de tela que recebe o endereo de exportao do TXT.
PARAMETERS: p_path(128) TYPE c. <<<<<<<<<<<<<<<
* Parmetro de tela que recebe um nico valor
PARAMETERS: p_spras TYPE zmakt-spras.
* Parmetro de tela que recebe um perodo `de at' (ranger).
SELECT-OPTIONS: s_matnr FOR zmara-matnr.
*---------------------------------------------------------------------*
* Processamento
*---------------------------------------------------------------------*
* Busca Dados--------------------------* para organizar o processamento neste bloco utiliza-se forms, com a chamada
* pelo comando perform.
* para criar o form referente basta clicar duas vezes no nome do perform.
* Busca ZMARA - Busca dados da tabela zmara.
PERFORM busca_zmara.
* Busca ZMAKT - Busca dados da tabela zmakt
PERFORM busca_zmakt.
* Processa dados----------------------PERFORM processa_dados.
* Saida-------------------------------* Imprime os dados da tabela ti_saida na tela.
PERFORM imprime_saida.
* Exporta o txt baseado na ti_saida para o local c:/temp
Perform exporta_saida. <<<<<<<<<<<<<<
*---------------------------------------------------------------------*
* Subrotinas
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*
Form exporta_saida
*---------------------------------------------------------------------*
FORM exporta_saida .
* Essa varivel local tipo string compatvel com a funo
DATA l_path TYPE string.
* O tipo do p_path no compatvel com a funo
* mas, se o valor do que no compatvel for transportado para uma
* varivel (no ex. varivel local)compatvel o valor passa a ser til
l_path = p_path.
* A funo GUI_DOWLOAD exporta o contedo de uma tabela interna para
* um endereo local pr-definido.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename
= l_path
TABLES
data_tab
= ti_saida
Pgina 19
EXCEPTIONS
file_write_error
no_batch
gui_refuse_filetransfer
invalid_type
no_authority
unknown_error
header_not_allowed
separator_not_allowed
filesize_not_allowed
header_too_long
dp_error_create
dp_error_send
dp_error_write
unknown_dp_error
access_denied
dp_out_of_memory
disk_full
dp_timeout
file_not_found
dataprovider_exception
control_flush_error
OTHERS
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22.
" exporta_saida
Pgina 20
A organizao do programa deve ficar separada em blocos como em um report, porm tudo acontece
dentro dos respectivos includes.
Onde:
*---------------------------------------------------------------------*
no include TOP ficam todas as declaraes.
* Module Pool
SAPMZ1ONL
no include O01 ficam os processamentos
*---------------------------------------------------------------------*
* Declaraes
da tela. PBO Process Before
INCLUDE MZ1ONLTOP.
" global Data
Output
* Processamento
INCLUDE MZ1ONLO01.
INCLUDE MZ1ONLI01.
" PBO-Modules
" PAI-Modules
* Subrotinas.
INCLUDE MZ1ONLF01.
" FORM-Routines
Os includes foram sugeridos, mas devem ser criados, faa assim para cada um, (menos o TOP, que
j foi criado junto com o online). Clique 2 X no nome do include a ser criado.
Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com
ngela Cristina Junqueira angelacristina.junqueira@gmail.com
Pgina 21
Neste ponto a estrutura do Online est pronta para receber qualquer processamento, tela, botes,
cdigos, lgica, declaraes, etc. Os includes so programinhas externos e lincados ao cdigo
principal, tudo acontece neles. No necessrio usar mais do que os 4 includes inicialmente
sugeridos, mesmo que outros venham a ser sugeridos pelo SAP.
Para esse online, vamos fazer a importao, na primeira tela, do TXT exportado pelo ltimo report
e apresentar o resultado em um TABLE CONTROL em uma segunda tela.
Cole no include TOP as declaraes que sero usadas neste processamento.
*---------------------------------------------------------------------*
* Include MZ1ONLTOP
Module Pool
SAPMZ1ONL
*---------------------------------------------------------------------*
PROGRAM sapmz1onl.
* Tabelas Transparentes
TABLES: zmara, zmakt.
Pgina 22
* Tipos
* A linha de Mil caracteres, receber todo o contedo do txt.
* Os campos de sada sero declarados com seus respectivos tamanhos.
TYPES: BEGIN OF ty_txt,
linha(1000) TYPE c,
END OF ty_txt.
TYPES: BEGIN OF ty_saida,
matnr(18) TYPE c,
ersda(08) TYPE c,
mtart(04) TYPE c,
spras(02) TYPE c,
maktx(30) TYPE c,
END OF ty_saida.
* Tabelas Internas
DATA: ti_txt TYPE STANDARD TABLE OF ty_txt,
ti_saida TYPE STANDARD TABLE OF ty_saida.
* Work reas
DATA: wa_txt LIKE LINE OF ti_txt,
wa_saida LIKE LINE OF ti_saida.
* Variveis
DATA: v_path(128) TYPE c,
okcode
TYPE sy-ucomm,
v_okcode
TYPE sy-ucomm.
-----------------------------------------------------------------------------------
Clique em Yes
Coloque um
nmero ( 0100,
5000 ou 9000 )
para identificar a
tela e confirme.
`
Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com
ngela Cristina Junqueira angelacristina.junqueira@gmail.com
Pgina 23
Na ABA Atributes,
preencha a descrio
da tela
Clique em Yes
Pgina 24
O module ser criado dentro do include escolhido, descomente a linha SET TITLEBAR, coloque
o nmero da tela entre as aspas e clique 2 X para criar o ttulo da tela na barra de botes.
Pgina 25
A tela a seguir apresenta diversos botes para se formar as telas desejadas. Clique no terceiro nvel,
Functions Keys, onde ficam os botes padres de tela.
Duplo clique
em ENTE
Confirme
Preencha o
Function text
Com Enter e
Confirme.
Confirme e repita a
Seqncia para o
BACK e demais
botes que sejam
necessrio criar.
Pgina 26
Confirme.
Salvar
Verificar
Ativar
Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com
ngela Cristina Junqueira angelacristina.junqueira@gmail.com
Os botes desta
primeira tela j
existem, volte
para a lgica de
processamento.
Pgina 27
*---------------------------------------------------------------------*
* Include
MZ1ONLI01
*---------------------------------------------------------------------*
*
Module USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
* o sy-ucomm recebe o nome do boto clicado,
* o okcode um elemento de tela que vai receber o sy-ucomm
* para asegurar que o valor do boto no vai se perder
* o v_okcode recebe o valor usado para o teste no CASE.
okcode = sy-ucomm.
v_okcode = okcode.
CLEAR okcode.
* Para cada comando vamos criar um form e evitar processamentos
* dentro do CASE. Os forms vo para o include com o final F01.
CASE v_okcode.
WHEN 'ENTE'.
PERFORM f_importa_txt.
WHEN 'EXEC'.
PERFORM f_importa_txt.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0100 INPUT
Pgina 28
" f_importa_txt
Neste ponto o cdigo j importou o arquivo txt para dentro da tabela interna it_txt.
Agora vamos mostrar este contedo em uma segunda tela, porm a tabela ti_txt tem apenas um
nico campo que uma linha de 1000 caracteres; pouco funcional no processamento.
Temos que quebrar essa linha campo a campo e depois chamar a prxima tela para exibi-los;
ento temos que criar outro form onde vamos quebrar as linhas da ti_txt em uma tabela interna
mais apropriada, a ti_saida e incluir a chamada da prxima tela de exibio.
Altere o mdulo USER_COMMAND_0100 do include I01 para que fique como abaixo.
Pgina 29
*---------------------------------------------------------------------*
* Include
MZ1ONLI01
*---------------------------------------------------------------------*
*
Module USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
*
*
*
*
" USER_COMMAND_0100
INPUT
Pgina 30
*---------------------------------------------------------------------*
*
Form f_quebra_txt
*---------------------------------------------------------------------*
FORM f_quebra_txt .
clear ti_saida[].
* Para cada linha da ti_txt, carrega sua Work Area.
LOOP AT ti_txt INTO wa_txt.
* Move o trecho da linha referente a cada campo da wa_saida.
* Onde +XX = posio e o (XX) = o trecho.
wa_saida-matnr = wa_txt-linha+00(18).
wa_saida-ersda = wa_txt-linha+18(08).
wa_saida-mtart = wa_txt-linha+26(04).
wa_saida-spras = wa_txt-linha+30(02).
wa_saida-maktx = wa_txt-linha+32(30).
* Carrega a ti_saida com o contedo de sua Work Area.
APPEND wa_saida TO ti_saida.
ENDLOOP.
ENDFORM.
" f_quebra_txt
Para criar o desenho da tela, clique em LAYOUT. A ferramenta Screen Painter se abrir.
Pgina 31
Com a ferramenta de texto, crie o campo que vai receber o endereo digitado.
Pra isso, clique na ferramenta, arraste para onde o texto ficar e depois
preencha os campos Name e Text conforme especificado.
Para colocar o campo que receber o endereo ( V_PATH, declarado no TOP), clique no quadrinho
vermelho no topo da tela. No popup que se abrir, clique em Get from Program e todas as declaraes
do TOP aparecero no grid; escolha a varivel V_PATH e confirme.
Localize o campo
V_PATH e
confirme o
prximo popup.
Salve e volte.
Pgina 32
Confirme
Pgina 33
Na ABA Flow
logic, descomente
o Module
STAUS_0110
para criar a barra
de botes da tela.
Clique 2 X no nome
STATUS_0110. Para esta tela,
que s vai mostrar os dados,
vamos colocar somente o boto
Voltar. Confirme o primeiro
popup, escolha o include de PBO
com o final O01 e confirme.
Confirme
Pgina 34
Descomente o mdulo
USER_COMMAND
_0110 e clique 2 X
para cri-lo.
" USER_COMMAND_0110
INPUT
Pgina 35
Clique em
Table Control
(With Wizard)
Pgina 36
Marque todos os
campos e continue.
Pgina 37
Salve e volte. O cdigo vai estar cheio de coisas novas que com tempo merecem estudos, pois o
ideal de um table control que ele seja feito mo. Ative o Cdigo de maneira GERAL.
Pgina 38
O Programa est pronto, mas para rodar um Online, a transao deve ser criada.
O programa stardado por sua transao.
Na SE93, preencha o nome do
programa e clique em Create.
Segue o resultado:
Os botes criados
nas telas, so os
nicos ativos.
Pgina 39
LIKE sy-repid,
TYPE c.
Pgina 40
it_sort
*Works Area do AVL
DATA: wa_variant
wa_afield
wa_colinfo
wa_layout
wa_header
wa_lay
wa_sort
TYPE slis_t_sortinfo_alv .
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
LIKE
disvariant,
kkblo_fieldcat,
kkblo_specialcol,
kkblo_layout,
kkblo_listheader,
slis_layout_alv,
LINE OF it_sort.
*---------------------------------------------------------------------*
*Tela com os parmetros de entrada que serviro de filtro para a
*
busca dos dados do relatrio.
*---------------------------------------------------------------------*
**Parmetro de tela que recebe o endereo de exportao do TXT.
*PARAMETERS: p_path(128) TYPE c.
*Parmetro de tela que recebe um nico valor
PARAMETERS: p_spras TYPE zmakt-spras.
*Parmetro de tela que recebe um peroo `de at' (ranger).
SELECT-OPTIONS: s_matnr FOR zmara-matnr.
*Escolha do tipo de relatrio de sada
PARAMETERS: p_sim RADIOBUTTON GROUP said,
p_alv RADIOBUTTON GROUP said DEFAULT 'X'.
*---------------------------------------------------------------------*
*
Processamento
*---------------------------------------------------------------------*
*Busca Dados--------------------------*para organizar o processamento neste bloco utiliza-se forms, com a chamada
*pelo comando perform.
*para criar o form referente basta clicar duas vezes no nome do perform.
START-OF-SELECTION.
*Busca ZMARA - Busca dados da tabela zmara.
PERFORM busca_zmara.
*Busca ZMAKT - Busca dados da tabela zmakt
PERFORM busca_zmakt.
*Processa dados----------------------PERFORM processa_dados.
*Sada-------------------------------*Imprime os dados da tabela ti_saida na tela.
IF p_sim = 'X'.
*Imprime o relatrio com o comando WRITE
PERFORM imprime_simples.
ELSE.
*Imprime o relatrio com o processo de AVL
PERFORM imprime_alv.
ENDIF.
END-OF-SELECTION.
*Limpa todas as estruturas
PERFORM limpa_tudo.
*---------------------------------------------------------------------*
*
Subrotinas
*---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&
Form busca_zmara
*&---------------------------------------------------------------------*
FORM busca_zmara .
*Seleciona os dados matnr ersda mtart
Pgina 41
Pgina 42
'H'.
'Listagem de Impresso ALV'(001).
TO it_header.
'S'.
'Materiais'(002). "imprime uma parte em negrito
'Dados Mestres Materiais'. "imprime outra parte normal
TO it_header.
Pgina 43
= i. "Sequncia da ordem
= 'MATNR'. "Campo da tabela interna - Cx alta.
= 'X'. "Quebra e subtotaliza valores por este campo
= 'X'. "Sort descendente
it_sort.
i = i + 1.
CLEAR wa_sort.
wa_sort-spos
= i.
wa_sort-fieldname = 'ERSDA'.
APPEND wa_sort TO it_sort.
i = i + 1.
CLEAR wa_sort.
wa_sort-spos
wa_sort-fieldname
wa_sort-subtot
wa_sort-up
APPEND wa_sort TO
= i.
= 'MTART'.
= 'X'. "Outro quebra de subtotal por este campo.
= 'X'.
it_sort.
ENDFORM.
" f_alv_sort
*&---------------------------------------------------------------------*
*&
Form f_alv_fildcat
*&---------------------------------------------------------------------*
FORM f_alv_fildcat .
*
*
*
*
= i.
= 'ERSDA'.
Pgina 44
wa_afield-ref_fieldname = 'ERSDA'.
wa_afield-ref_tabname
= 'ZMARA'.
wa_afield-key
= 'X'.
APPEND wa_afield TO it_fieldcat.
i = i + 1.
CLEAR wa_afield.
wa_afield-col_pos
= i.
wa_afield-fieldname
= 'MTART'.
wa_afield-ref_fieldname = 'MTART'.
wa_afield-ref_tabname
= 'ZMARA'.
wa_afield-key
= 'X'.
APPEND wa_afield TO it_fieldcat.
i = i + 1.
CLEAR wa_afield.
wa_afield-col_pos
= i.
wa_afield-fieldname
= 'SPRAS'.
wa_afield-ref_fieldname = 'SPRAS'.
wa_afield-ref_tabname
= 'ZMARA'.
APPEND wa_afield TO it_fieldcat.
i = i + 1.
CLEAR wa_afield.
wa_afield-col_pos
= i.
wa_afield-fieldname
= 'MAKTX'.
wa_afield-ref_fieldname = 'MAKTX'.
wa_afield-ref_tabname
= 'ZMARA'.
APPEND wa_afield TO it_fieldcat.
ENDFORM.
" f_alv_fildcat
*&---------------------------------------------------------------------*
*&
Form f_alv_imprime
*&---------------------------------------------------------------------*
FORM f_alv_imprime .
* Depois que as tabelas auxiliares de impresso so carregadas...
* Os dados do Fieldcat, dever ser configurados na funo abaixo,
* para outra tabela auxiliar, neste caso a it_fcat.
* A estrutura wa_layout carrega as caractersticas do layout de
* impresso como por exemplo a otimizao das colunas ou se
* as linhas sero zebradas. Ela tambm ser configurada para w_lay.
*Transfere dados----------------------------------wa_layout-colwidth_optimize
= 'X'.
CALL FUNCTION 'REUSE_ALV_TRANSFER_DATA_BACK'
EXPORTING
it_fieldcat = it_fieldcat
is_layout
= wa_layout
IMPORTING
et_fieldcat = it_fcat
es_layout
= wa_lay.
*Imprime dados-------------------------------MOVE sy-repid TO v_repid.
MOVE v_repid TO wa_variant-report.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program
= v_repid
is_layout
= wa_lay
it_fieldcat
= it_fcat
i_callback_top_of_page = 'F_TOP_OF_PAGE'
i_background_id
= 'ALV_BACKGROUND'
it_sort
= it_sort[]
i_save
= v_save
is_variant
= wa_variant
TABLES
t_outtab
= ti_saida[]
Pgina 45
EXCEPTIONS
program_error
OTHERS
= 1
= 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
STOP.
ENDIF.
ENDFORM.
" f_alv_imprime
*---------------------------------------------------------------------*
*
Form f_top_of_page
*---------------------------------------------------------------------*
FORM f_top_of_page .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_header
i_logo
= 'ENJOYSAP_LOGO'.
ENDFORM.
" f_top_of_page
*&---------------------------------------------------------------------*
*&
Form limpa_tudo
*&---------------------------------------------------------------------*
FORM limpa_tudo .
CLEAR: ti_zmara[], ti_zmakt[], ti_saida[],
wa_zmara , wa_zmakt , wa_saida ,
v_repid
, v_save
, it_fcat[],
it_fieldcat[], it_header[], it_sort[],
wa_variant , wa_afield , wa_colinfo ,
wa_layout , wa_header , wa_lay , wa_sort .
ENDFORM.
" limpa_tudo
__________________________________________________________________________________
Clique em
Nova Gravao
Pgina 46
Pgina 47
Pgina 48
LIKE
LIKE
LIKE
LIKE
LIKE
t100-text,
balm-msgv1,
balm-msgv2,
balm-msgv3,
balm-msgv4.
*---------------------------------------------------------------------*
*
Tela
*---------------------------------------------------------------------*
* Endereo do Txt.
* Batch Input
SELECTION-SCREEN BEGIN OF BLOCK b001 WITH FRAME TITLE text-001.
PARAMETERS: p_path(128) TYPE c, "Endereo de importao do arquivo TXT.
p_mode(1)
TYPE C DEFAULT 'N' . "Modo de execuo do batch input.
*O modos modos so: A - Passo a passo
N - Background
E - Erro.
SELECTION-SCREEN END OF BLOCK b001.
*Define Sada
SELECTION-SCREEN BEGIN OF BLOCK b002 WITH FRAME TITLE text-002.
*Grupo de botes que vo definir a maneira que o log ser impresso.
PARAMETERS:
p_spl RADIOBUTTON GROUP impr, " Impresso simples
p_alv RADIOBUTTON GROUP impr. " Impresso em ALV
SELECTION-SCREEN END OF BLOCK b002.
*---------------------------------------------------------------------*
*
Processamento
*---------------------------------------------------------------------*
START-OF-SELECTION.
* Busca dados
PERFORM busca_dados.
* Processa Dados
PERFORM executa_shdb.
* Sada
PERFORM imprime_log.
END-OF-SELECTION.
*Limpa todas as estruturas
PERFORM limpa_tudo.
*---------------------------------------------------------------------*
*
Subrotinas
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*
Form busca_dados
*---------------------------------------------------------------------*
FORM busca_dados .
* A busca de dados (TXT) feita pela funo GUI_UPLOAD
DATA l_path TYPE string.
l_path = p_path.
Pgina 49
" busca_dados
*---------------------------------------------------------------------*
*
Form executa_shdb
*---------------------------------------------------------------------*
FORM executa_shdb .
CLEAR ti_log[].
* Para cada registro retornado pela importao do TXT.
LOOP AT ti_arq INTO wa_arq.
* Monta o SHDB da transao
PERFORM f_monta_bdc_data.
* Executa a transao
PERFORM f_call_trasaction.
* Tratamento de log de mensagens
PERFORM f_trata_log.
ENDLOOP.
ENDFORM.
" executa_shdb
*---------------------------------------------------------------------*
*
Form f_monta_bdc_data
*---------------------------------------------------------------------*
FORM f_monta_bdc_data .
CLEAR ti_bdcdata[].
* O Mapeamento feito no SHDB passado para o Cdigo no formato abaixo.
* O parmetro USING transporta cada contedo pra dentro do form f_bdc_data.
PERFORM f_bdc_data USING:
'SAPLZMARA' '0001' 'X' ''
'',
''
''
''
'BDC_OKCODE'
'=NEWL',
'SAPLZMARA' '0001' 'X' ''
'',
''
''
''
'BDC_OKCODE'
'=SAVE',
''
''
''
'ZMARA-MATNR(01)'
wa_arq-matnr,
''
''
''
'ZMARA-ERSDA(01)'
wa_arq-ersda,
''
''
''
'ZMARA-MTART(01)'
wa_arq-mtart.
ENDFORM.
" f_monta_bdc_data
Pgina 50
*---------------------------------------------------------------------*
*
Form f_call_trasaction
*---------------------------------------------------------------------*
FORM f_call_trasaction .
CLEAR ti_bdcmsgcoll[].
CALL TRANSACTION 'ZMARA'
USING
ti_bdcdata
MODE
p_mode
UPDATE
'S'
MESSAGES INTO ti_bdcmsgcoll.
" f_call_trasaction
ENDFORM.
*---------------------------------------------------------------------*
*
Form f_trata_log
*---------------------------------------------------------------------*
FORM f_trata_log .
wa_log-matnr = wa_arq-matnr.
wa_log-ersda = wa_arq-ersda.
* Monta mensagem standard
LOOP AT ti_bdcmsgcoll INTO wa_bdcmsgcoll.
v_msgv1
v_msgv2
v_msgv3
v_msgv4
=
=
=
=
wa_bdcmsgcoll-msgv1.
wa_bdcmsgcoll-msgv2.
wa_bdcmsgcoll-msgv3.
wa_bdcmsgcoll-msgv4.
" f_trata_log
*---------------------------------------------------------------------*
*
Form F_BDC_DATA
*---------------------------------------------------------------------*
*
-->P_program
programa
*
-->P_dynpro
tela
*
-->P_start
define a tela
*
-->P_fnam
nome do campo ou comando
*
-->P_fval
contedo do campo ou comando
*----------------------------------------------------------------------*
Pgina 51
" F_BDC_DATA
*---------------------------------------------------------------------*
*
Form imprime_log
*---------------------------------------------------------------------*
FORM imprime_log .
IF NOT p_spl IS INITIAL.
ULINE.
LOOP AT ti_log INTO wa_log.
WRITE: / '|', wa_log-matnr,
wa_log-ersda,
wa_log-tipo,
wa_log-msg_erro,
ULINE.
ENDLOOP.
ELSE.
'|',
'|',
'|',
'|'.
*********EXERCCIO*************
* COMPLETAR O PROGRAMA COM UM PROCESSO DE IMPRESSO
* EM ALV UTILIZANDO A ti_log COMO SADA.
ENDIF.
ENDFORM.
" imprime_log
*---------------------------------------------------------------------*
*
Form limpa_tudo
*---------------------------------------------------------------------*
FORM limpa_tudo .
CLEAR: ti_arq[], wa_arq,
ti_bdcdata[], ti_bdcmsgcoll[],
ti_log[], wa_bdcdata, wa_bdcmsgcoll, wa_log, v_msg ,
v_msgv1 , v_msgv2 ,
v_msgv3 ,
v_msgv4 .
ENDFORM.
" limpa_tudo
Pgina 52