Sie sind auf Seite 1von 52

APRENDENDO ABAP no MINISAP NetWeaver 7.

0 Tela Inicial

Onde se digitam as transaes

Criando tabelas ZMARA e a ZMAKT

Dentro da SE11 marque Database table e coloque o nome da tabela que quer criar no campo

Transao: SE11 Dicionrio de dados

Clique em Create.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 1

Na tela que se abrir, na ABA Delivery and Maintenance preencha:

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

No campo Nmero de Material coloque o elemento de dados ZMATNR e d duplo clique para cri-lo

Clique em Local Object Clique em Yes para salvar a tabela.

Confirme a criao do Elemento de Dados

Desconsiderar essa telinha, apenas confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 2

O Elemento de Dados carrega a descrio do campo e do domnio (caractersticas).

Coloque a descrio breve

preencha o nome do domnio a ser criado

Na ABA Field Label, coloque as descries possveis para os campos e clique ENTER

O preenchimento dos tamanhos automtico

Voltando para ABA Data Type d duplo clique no nome do Domnio

Clique em Yes

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 3

Clique em Local Object

Confirme a criao do Elemento de Dados

Desconsiderar essa telinha, simplesmente confirme. O Domnio carrega as caractersticas do campo, como tamanho e tipo; e neste caso o tipo como CHAR e o tamanho 18. Descrio breve

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

ERSDA

ZERSDA

DATUM

DATS

MTART

ZMTART

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.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 4

Crie tambm a tabela ZMAKT de acordo com as especificaes abaixo.


Campo MATNR Elmto Dd ZMATNR ZMAKT Descrio: Textos breves de material Descries 1, 2, 3, e, 4 Domnio 1- N. Matnr ZMATNR 2- N. Mater. 3- N. do Mater 4- N. do Material 1- Idioma CHAR2 2- Idioma 3- Cdigo do Idioma 4- Cdigo do Idioma do Material 1- Tx mat TEXT40 2- Texto material 3- Texto breve material 4- Texto breve de material Tipo CHAR Tamanho 18

SPRAS

ZSPRAS

CHAR

MAKTX

ZMAKTX

CHAR

40

Clique Technical Settings para ativar a tabela.

Clique em Yes

Escolha APPL0 para Classe de Dados e 0 para Categoria

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 5

Clique em Salvar e depois em Voltar

Salvar, Verificar e Ativar a tabela

Manuteno das tabelas - Transao: SE11 Dicionrio de dados. Entrar na tabela ativada Utilities Table Maintenace Generator

Clique em criar.

Preencha essa tela com Grupo de Autorizao &NC&, e no Grupo de Funes coloque o mesmo nome da tabela.

Marque one step em Maintenance type e coloque 1 em overview screen.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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

Para entrar com novos dados

Entre com os dados do ex. e salve

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

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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.

No topo da pgina, clique em Salvar. Para criar a transao no necessrio ativar, basta salvar como Objeto Local. Faa tudo para as duas tabelas Preencha a tabela ZMAKT com as linhas: MATNR SPRAS 100001 BR 100002 BR 100003 BR 100005 BR MAKTX CANETA LAPIZ BORRACHA CADERNO

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 8

Criando um REPORT, relatrio simples - Transao: SE38 Editor de programa ABAP

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.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 9

* Tipos de referncias para declaraes das tabelas internas. TYPES: BEGIN OF ty_zmara, matnr TYPE zmara-matnr, ersda TYPE zmara-ersda, mtart TYPE zmara-mtart, END OF ty_zmara. TYPES: BEGIN OF ty_zmakt, matnr TYPE zmakt-matnr, spras TYPE zmakt-spras, maktx TYPE zmakt-maktx, END OF ty_zmakt. * Tipo de referncia que vai receber os dados gerais do relatrio. TYPES: BEGIN OF ty_saida, matnr TYPE zmara-matnr, ersda TYPE zmara-ersda, mtart TYPE zmara-mtart, spras TYPE zmakt-spras, maktx TYPE zmakt-maktx, END OF ty_saida. * Tabelas Internas que vo receber os dados vindos do banco de dados; * elas so temporrias e s existem durante o processamento do cdigo. DATA: ti_zmara TYPE STANDARD TABLE OF ty_zmara, ti_zmakt TYPE STANDARD TABLE OF ty_zmakt, ti_saida TYPE STANDARD TABLE OF ty_saida. * Work reas so iguais a 1 linha de cada tabela interna referente; * na work rea que os dados so trabalhados. DATA: wa_zmara LIKE LINE OF ti_zmara, wa_zmakt LIKE LINE OF ti_zmakt, wa_saida LIKE LINE OF ti_saida. * Variveis, quando necessrio. * Tela com os parmetros de entrada que serviro de filtro para a * busca dos dados do relatrio. * 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.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 12

Aps a finalizao do relatrio, Salvar Verificar Inconsistncias Ativar Clicar em Direct Processing (F8) para rodar o programa.

O resultado ser uma tela de entrada. Preenchendo com BR e clicando em executar...

O Relatrio impresso na tela. Clicando em Voltar, retorna-se ao cdigo e sero permitidas as alteraes nos nomes dos campos.

Clicando em Goto Text Elements Selections Texts.

Preencher com a descrio dos campos, Salvar Voltar , Ativar . e

O resultado ser a tela de entrada com os nomes corretos dos campos e no como apresentados no cdigo.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 13

Criando uma Funo - Transao: SE80 Objeto de Navegao Para criar uma funo, primeiro cria-se o grupo de funo

Clique em Yes

Selecione Function Group , coloque o nome do grupo de funo e tecle Enter.

Preencha a descrio breve e clique em Save; como objeto local. O grupo est criado. Criar a funo.

Fazendo uma Funo calculadora simples - Transao: SE37 Construtor de funo ABAP.

Coloque o nome da funo e clique em Create

Preencha o grupo de funo e a descrio breve e Salve.

Desconsidere esta tela e confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 14

Uma funo IMPORTA parmetros (variveis, works reas, tabelas internas) executa um processamento e EXPORTA um parmetro de resultado .

Preencha os parmetros de importao como o modelo e use elementos de dados j existentes.

Preencha o parmetro de exportao que receber o resultado, usando um elemento j existente.

Em Source code, a tela trar os parmetros declarados anteriormente.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 15

Escreva o cdigo e clique: Salvar Verificar Ativar Para testar a funo d F8 Preencha os parmetros de entrada e d F8. Segue o resultado.

Caso o sinal seja um invlido, verifique a mensagem de erro tipo I.

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.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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 .

Para chamar o corpo da funo, localize o cursor no local onde a funo deve constar no cdigo e clique em Pattern.

Preencha o nome da funo no campo ende o CALL FUNCTION estiver flegado e confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 17

Vai aparecer a funo para completar com os parmetros do cdigo. CALL FUNCTION 'ZCLCSP' EXPORTING p_valor1 = p_valor1 p_sinal = p_sinal p_valor2 = p_valor2 IMPORTING p_result = v_result. ENDFORM. " chama_funcao *---------------------------------------------------------------------* * Form imprime_saida *---------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM imprime_saida . WRITE:/ / / / 'Primeiro valor: 'Sinal : 'Segundo valor : 'Resultado : ', ', ', ', p_valor1, p_sinal, p_valor2, v_result.

ENDFORM. " imprime_saida *---------------------------------------------------------------------*

Teste clicando em F8; os parmetros so como os declarados. Para adequar o texto aos usurios, retorne ao cdigo...

Clique em Goto Text Elements Selection Texts

Preencher com o texto que os usurios iro ver: Salvar, Ativar e Voltar.

Execute novamente

Criando uma Interface de remessa - Transao: SE38 Editor de programa ABAP. O programa de interface tem o objetivo de troca de dados com outro sistema. Agora vamos fazer uma interface de remessa, onde selecionamos dados no SAP e exportamos um arquivo PONTO TXT, para um local disponvel para outro sistema importar.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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.

* para toda funo com EXCEPTIONS seve-se testar o subrc. * Se houver erro, o comando message da forma abaixo, apresentar na tela * mensagem standard. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " exporta_saida

Criando um online - Transao: SE80 Um programa online usado quando necessrio customizar uma tela fora do padro de Report e normalmente serve para dar manutenes e entrada de dados, funciona em mdulos dentro de includes.

Selecione Program, coloque o nome que deve comear com SAPMZ , tecle ENTER. Abrir um popup para criar o objeto

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 20

Os prximos popups sugerem a criao do objeto com o include TOP e o nome a ser utilizado. Basta confirmar todas as telas e salvar como Objeto Local.

Clique 2 X no nome do programa e tire os asterscos de todos os includes sugeridos no programa.

A organizao do programa deve ficar separada em blocos como em um report, porm tudo acontece dentro dos respectivos includes.
*---------------------------------------------------------------------* 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. * Subrotinas. INCLUDE MZ1ONLF01. " PBO-Modules " PAI-Modules " FORM-Routines

Onde:

no include I01 ficam os processamentos aps um comando de tela. PAI - Process After Input no include F01 ficam todos os forms dos processamentos.

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

Clique em Yes nas telas que se abriro e por ltimo, salve como Objeto Local. Para criar os outros includes, clique 2 X no nome do programa e clique 2 X no nome de outro include que ser criado, faa isso para os 3 includes: O01, I01 e F01.

O include estar pronto para receber cdigo. Sempre que for sugerido salvar .... salve.

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.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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

Para os demais includes, uma ordem deve ser seguida. Primeiro crie a primeira tela com o nmero de 0100.

Clique no nome do programa com o boto da direita do mouse. Clique em Create Clique em Screen

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

Na ABA Element list, preencha OKCODE

Na ABA Flow logic, existem os mdulos de processamento PBO, o que acontece antes da tela e o PAI, o processamento que acontece aps o comando dado na tela. No PBO descomente o module STATUS_0100 e d duplo clique no nome.

Clique em Yes

Para os modules do PBO escolha o include O01

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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.

Clique em Yes para criar o objeto; Clique em Yes para salvar o programa e na tela seguinte, coloque o Title (ttulo) e confirme. Repita a sequncia para o PF_STATUS 0100.

Clique em Yes para criar o objeto; Clique em Yes para salvar o programa e na tela seguinte, coloque o Short Text (Descrio Breve) e confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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

Na barra de Standard Toolbar, preencha os botes ENTE e BACK. NOTA: so possveis apenas 4 caracteres.

Confirme

Preencha o Function text Com Enter e Confirme.

Confirme e repita a Seqncia para o BACK e demais botes que sejam necessrio criar.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 26

A tela a seguir usada para customizao de botes: Application Toolbar

Preencha o espao com o boto EXEC, d duplo clique e confirme no popup que se abrir.

Preencha os textos Function text e Info. Text. Para os botes da barra customizada necessrio a representao por um cone. No campo Icon name, atravs do matchcode, selecione o que melhor se enquadra no padro SAP, de acordo com o costume dos usurios.

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

Nesta tela, crie o Module USER_COMMAND_0100, descomentando-o e clicando 2 X sobre o nome.

Neste mdulo, vamos colocar funcionalidade nos botes, escolha o include relativo ao PAI da tela, I01. Confirme e cole o cdigo abaixo.

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

Clicando 2 X no nome do perform, crie o form no Include prprio. Clique em Yes, escolha o include F01, confirme e salve.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 28

Cole o cdigo abaixo dentro do form criado.


*---------------------------------------------------------------------* * Include MZ1ONLF01 *---------------------------------------------------------------------* * Form f_importa_txt *---------------------------------------------------------------------* FORM f_importa_txt . clear ti_txt[]. * A varivel local l_path necessria pois o v_path que recebe o * endereo do arquivo txt na tela, do tipo char de 128 e no * compatvel com a funo 'GUI_UPLOAD'. * Ento cria-se uma varivel compatvel ( type string ) que vai * receber o valor da v_path. DATA l_path TYPE string. l_path = v_path. * Na funo passamos o endereo o arquivo txt no parmetro filename * e a tabela interna que vai receber o contedo do TXT, neste caso * a ti_txt, j est declarada no include TOP. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = l_path TABLES data_tab = ti_txt 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 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " 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.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 29

*---------------------------------------------------------------------* * 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'. * Importa arquivo TXT via funo GUI_UPLOAD PERFORM f_importa_txt. * Quebra linha do TXT para tabela interna ti_saida. PERFORM f_quebra_txt. * Chama a tela de exibio da ti_saida em TABLE CONTROL CALL SCREEN '0110'. WHEN 'EXEC'. * Importa arquivo TXT via funo GUI_UPLOAD PERFORM f_importa_txt. * Quebra linha do TXT para tabela interna ti_saida. PERFORM f_quebra_txt. * Chama a tela de exibio da ti_saida em TABLE CONTROL CALL SCREEN '0110'. WHEN 'BACK'. LEAVE PROGRAM. ENDCASE. ENDMODULE. " USER_COMMAND_0100 INPUT

Clicando 2 X no perform f_quebra_txt, crie o form no Include prprio. Clique em Yes, escolha o include F01, confirme e salve.

Cole o cdigo abaixo.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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.

Primeiro, vamos fazer uma moldura com a ferramenta BOX; desenhe clicando na ferramenta e arrastando na rea de desenho, coloque um nome para o objeto criado e um texto que aparecer no topo da moldura.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 32

O processamento da primeira tela (0100) est completo, antes de criarmos a segunda tela (0110), vamos ativar todos os cdigo de uma maneira geral. Clique 2 X no nome do programa principal, clique com o boto da direita do mouse e clique em ativar.

Confirme

Para criar a segunda tela (0110), clique com o boto da direita do mouse no nome do programa principal, escolha Create e Screen.

Na ABA Attributes coloque a descrio da tela.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 33

Na ABA Element list preencha o OKCODE

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.

Perceba que o novo mdulo da tela 0110 foi criado logo abaixo do mdulo da tela 0100. Crie o TITLEBAR da tela 0110, como nome 110, clique 2 X no nome, confirme a criao do objeto em YES, salve o programa em Yes e no prximo popup, coloque o ttulo. Confirme.

Preencha o PF-STATUS com a tela 0110, clique 2 X sobre o nome, confirme a criao do objeto em YES, salve o programa em Yes e no prximo popup, coloque o ttulo.

Confirme

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 34

Clique no terceiro nvel, Functions Keys, onde ficam os botes padres de tela. Escreva BACK no boto voltar, clique no nome 2 X e confirme o prximo popup. Salve e volte para o cdigo de processamento da tela.

Descomente o mdulo USER_COMMAND _0110 e clique 2 X para cri-lo.

Confirme a criao do objeto em YES, escolha o include I01 e confirme.

O mdulo USER_COMMAND_0110 se abrir no include I01 abaixo do USER_COMMAND_0100. Cole o cdigo abaixo:
*---------------------------------------------------------------------* * Module USER_COMMAND_0110 INPUT *---------------------------------------------------------------------* MODULE user_command_0110 INPUT. okcode = sy-ucomm. v_okcode = okcode. CLEAR okcode. * Se o comando escolhido for Voltar, volta para primeira tela. IF v_okcode = 'BACK'. LEAVE TO SCREEN '0100'. ENDIF. ENDMODULE. " USER_COMMAND_0110 INPUT

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 35

Para desenhar o layout desta tela, vamos aproveitar o recurso automtico da Sreen Painter. Salve, volte e clique em Layout.

Clique em Table Control (With Wizard)

Faa um quadro no meio da rea de desenho onde o table control ser gerado. O Wizard ser aberto. Siga conforme as marcas das telas.

Preencha com o nome TC_SAIDA e continue.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 36

Escolha Internal program table e coloque o nome ti_saida, marque com Table work rea e coloque a wa_saida

Marque todos os campos e continue.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 37

O table control estar criado, mas como os campos da tabela no so type a elementos de dados do dicionrio de dados, no veio nenhum ttulo e sim o nome dos campos, o que pode ser trocado, clicando em cima e alterando o Contedo do Text.

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.

D duplo clique no nome do programa principal; Clique com o boto direito do mouse novamente no nome e em Activate. Todos os objetos que devem ser ativados aparecero na tela. Confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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.

Preencha a descrio breve, marque a opo Program and screen e confirme.

Use a transao ZONLINE pra chamar o cdigo gerado. Preencha o endereo do arquivo e execute. Preencha o nome do programa e o nmero da tela. Marque as 3 opes de GUI suport e salve como objeto local.

Segue o resultado:

Os botes criados nas telas, so os nicos ativos.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 39

Criando um relatrio ALV - Transao: SE38 ABAP Editor. O ALV um relatrio dinmico no sentido de que aps impresso na tela pode ser manipulado de vrias formas, pelo usurio, obedecendo uma padro standard, lembrando uma tabela do excel. Cole o programa abaixo.
*&---------------------------------------------------------------------* *& Report ZRELALV *& *&---------------------------------------------------------------------* REPORT zrelalv. *---------------------------------------------------------------------* * Declaraces *---------------------------------------------------------------------* * Tabelas transparentes do dicionrio de dados que sero usadas no cdigo. TABLES: zmara, zmakt. * Tipos de referncias para declaraes das tabelas internas. TYPES: BEGIN OF ty_zmara, matnr TYPE zmara-matnr, ersda TYPE zmara-ersda, mtart TYPE zmara-mtart, END OF ty_zmara. TYPES: BEGIN OF ty_zmakt, matnr TYPE zmakt-matnr, spras TYPE zmakt-spras, maktx TYPE zmakt-maktx, END OF ty_zmakt. * Tipo de referncia que vai recerber os dados gerais do relatrio TYPES: BEGIN OF ty_saida, matnr TYPE zmara-matnr, ersda TYPE zmara-ersda, mtart TYPE zmara-mtart, spras TYPE zmakt-spras, maktx TYPE zmakt-maktx, END OF ty_saida. *Tabelas Internas que vo receber os dados vindos do banco de dados * elas so temporrias e s existem durante o processamento do cdigo. DATA: ti_zmara TYPE STANDARD TABLE OF ty_zmara, ti_zmakt TYPE STANDARD TABLE OF ty_zmakt, ti_saida TYPE STANDARD TABLE OF ty_saida. *Work areas so iguais a 1 linha de cada tabela interna referente, * na wrk area que os dados so trabalhados. DATA: wa_zmara LIKE LINE OF ti_zmara, wa_zmakt LIKE LINE OF ti_zmakt, wa_saida LIKE LINE OF ti_saida. *Variaveis, quando necessrio. *Declarao para o ALV-----------------------------------------------*Pool de declaraes do ALV. TYPE-POOLS: kkblo. *Variveis do AVL DATA: v_repid v_save

LIKE sy-repid, TYPE c.

*Tabelas internas do ALV. DATA: it_fcat TYPE slis_t_fieldcat_alv, it_fieldcat TYPE kkblo_t_fieldcat, it_header TYPE kkblo_t_listheader,

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 41

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 ao menos 1 resgistro. * 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'. * Para o processamento e retorna para tela de parmetros de entrada STOP. ELSE. * Se a busca no deu erro, a tabela tem algum registro ento sortea. 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 ao menos 1 registro. * Sy-subrc <> 0 = HOUVE ERRO , no retornou nada 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 *&---------------------------------------------------------------------* 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

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 42

*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 transportado 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_simples *&---------------------------------------------------------------------* FORM imprime_simples. *Para cada registro da tabela ti_saida LOOP AT ti_saida INTO wa_saida. ULINE. "Imprime um linha contnua *Imprime cada campo da tabela. WRITE:/ '|', wa_saida-matnr, '|', wa_saida-ersda, '|', wa_saida-mtart, '|', wa_saida-spras, '|', wa_saida-maktx. ENDLOOP. ULINE. ENDFORM. " imprime_simples *&---------------------------------------------------------------------* *& Form imprime_alv *&---------------------------------------------------------------------* FORM imprime_alv . *Carrega dados do cabealho PERFORM: f_alv_header. *Define a indexao da impresso PERFORM: f_alv_sort. *Define as caractersticas dos campos PERFORM: f_alv_fildcat. *Imprime o relatrio PERFORM: f_alv_imprime. ENDFORM. " imprime_alv *&---------------------------------------------------------------------* *& Form f_alv_header *&---------------------------------------------------------------------* FORM f_alv_header . *A tabela it_header, carregada com dados e caractersticas que sero *usadas na impresso do cabealho do relatrio *Carrega uma linha CLEAR wa_header. wa_header-typ = wa_header-info = APPEND wa_header *Carrega uma linha CLEAR wa_header. wa_header-typ = wa_header-key = wa_header-info = APPEND wa_header com um fonte maior para ttulo, tipo 'H'. 'H'. 'Listagem de Impresso ALV'(001). TO it_header. com um fonte mdia para sub-ttulos, tipo 'S'. 'S'. 'Materiais'(002). "imprime uma parte em negrito 'Dados Mestres Materiais'. "imprime outra parte normal TO it_header.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 43

DATA: l_linha(40) TYPE c. l_data(10) TYPE c. *Carrega uma linha com um fonte menor para detalhes, tipo 'A'. WRITE sy-datum TO l_data. CONCATENATE 'Data:' l_data INTO l_linha. CLEAR wa_header. wa_header-typ = 'A'. wa_header-info = l_linha. APPEND wa_header TO it_header. ENDFORM. " f_alv_header *&---------------------------------------------------------------------* *& Form f_alv_sort *&---------------------------------------------------------------------* FORM f_alv_sort . * A tabela it_sorte carrega a ordem dos campos * na seguncia que deve ser impressa DATA i TYPE i. i = i + 1. CLEAR wa_sort. wa_sort-spos wa_sort-fieldname wa_sort-subtot wa_sort-up APPEND wa_sort TO

= 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 . * * * * A tabela it_fieldcat guarda todos os campos e suas caractersticas que devero ser impressos no relatrio, somente estes campos sero impressos, mesmo que haja outros campos na tabela interna de sada. se forem para imprimir, eles devem estar carregados na it_fieldcat. DATA i TYPE i. i = i + 1. CLEAR wa_afield. wa_afield-col_pos = i. "Ordem do fieldcat wa_afield-fieldname = 'MATNR'. "Nome do campo da tb. de sada wa_afield-ref_fieldname = 'MATNR'. "Campo de refrncia para herdar caractersticas wa_afield-ref_tabname = 'ZMARA'. "Tabela transparente que tem o campo acima wa_afield-key = 'X'. "Marca como chave APPEND wa_afield TO it_fieldcat. i = i + 1. CLEAR wa_afield. wa_afield-col_pos wa_afield-fieldname

= i. = 'ERSDA'.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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[]

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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

__________________________________________________________________________________

Criando um processo de Batch Input - Transao: SE38 ABAP Editor. O Processo de Batch Input tem o objetivo de dar carga nas tabelas transparentes do SAP, porm obedecendo todas as consistncias e integridades geradas pelas regras de negcio de cada transao. Nenhuma carga no SAP efetuada diretamente no Banco de Dados (direct input tem que ser bem estudado). O processo se divide em Mapeamento e Programa de Carga. Transao: SHDB / Mapeamento Gravador de Transao.

Clique em Nova Gravao

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 46

D um nome para Gravao, coloque o nome da Transao que ser gravada e confirme.

Estude bem a transao que ser gravada, porque a cada comando dado ser gravado o programa, a tela e os dados de tela do momento. A gravao deve ser a mais limpa e completa possvel, sem telas desnecessrias ao processo e chegando at o momento de salvar ou encerrar completamente; logo aps, o mapeamento ser apresentado em uma tabela. Salve. No utilize matchcode. Pode colar e copiar mas saiba exatamente quais os dados e os campos que sero utilizados. ENTER comando igual boto. Mandando processar, ser apresentado passo a passo cada tela preenchida, somente aguardando a confirmao dos comandos. No final ser apresentado um relatrio com todas as mensagens de Sucesso ou Erro dadas durante o processo.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 47

Programa de Carga bsico de Batch Input. A tela de parmetros de seleo ficar assim:

Cole o programa abaixo.


*&---------------------------------------------------------------------* *& Report ZBATCH1 *& *&---------------------------------------------------------------------* REPORT zbatch1 LINE-SIZE 140 NO STANDARD PAGE HEADING. *---------------------------------------------------------------------* * Declaraes *---------------------------------------------------------------------* * Tabelas transparentes TABLES : zmara. * Tipos * Receber os dados importados para o SAP pela funo GUI_UPLOAD. TYPES: BEGIN OF ty_arq, matnr(18) TYPE c, ersda(8) TYPE c, mtart(4) TYPE c, spras(2) TYPE c, maktx(40) TYPE c, END OF ty_arq. * Tabelas internas DATA: ti_arq TYPE STANDARD TABLE OF ty_arq. * Work areas DATA: wa_arq LIKE LINE OF ti_arq. * Declaraes para o Batch Input--------------* Tipos: * Recebe os dados configurados de ERRO do Batch Input + campos chaves. TYPES: BEGIN OF ty_log, matnr(18) TYPE c, ersda(8) TYPE c, tipo(1) TYPE c, msg_erro(100) TYPE c, END OF ty_log.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 48

* Tabelas Internas auxiliares no processo de batch input. DATA: ti_bdcdata TYPE STANDARD TABLE OF bdcdata , "Guarda o mapeamento ti_bdcmsgcoll TYPE STANDARD TABLE OF bdcmsgcoll, "Guarda as mensagens ti_log TYPE STANDARD TABLE OF ty_log. "Relatrio de mensagens * Work Areas DATA: wa_bdcdata LIKE LINE OF ti_bdcdata , wa_bdcmsgcoll LIKE LINE OF ti_bdcmsgcoll, wa_log LIKE LINE OF ti_log. *Variveis DATA: v_msg v_msgv1 v_msgv2 v_msgv3 v_msgv4

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.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 49

CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = l_path TABLES data_tab = ti_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 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. STOP. ENDIF. ENDFORM. " 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

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

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. ENDFORM. " f_call_trasaction

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

CALL FUNCTION 'MESSAGE_PREPARE' EXPORTING language = wa_bdcmsgcoll-msgspra msg_id = wa_bdcmsgcoll-msgid msg_no = wa_bdcmsgcoll-msgnr msg_var1 = v_msgv1 msg_var2 = v_msgv2 msg_var3 = v_msgv3 msg_var4 = v_msgv4 IMPORTING msg_text = v_msg EXCEPTIONS function_not_completed = 1 message_not_found = 2 OTHERS = 3. IF sy-subrc <> 0 . CLEAR wa_log-tipo. v_msg = 'No houve mensagem'. ENDIF. wa_log-tipo = wa_bdcmsgcoll-msgtyp. wa_log-msg_erro = v_msg. APPEND wa_log TO ti_log. ENDLOOP. ENDFORM. " 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 *----------------------------------------------------------------------*

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 51

FORM f_bdc_data USING p_program p_dynpro p_start p_fnam p_fval. * Este form recebe cada contedo passado em ordem para os parmetros de * entrada e abaixo preenche a wa_bdcdata que por sua vez carrega a ti_bdcdata. CLEAR wa_bdcdata. wa_bdcdata-program = p_program. wa_bdcdata-dynpro = p_dynpro. wa_bdcdata-dynbegin = p_start. wa_bdcdata-fnam = p_fnam. wa_bdcdata-fval = p_fval. APPEND wa_bdcdata TO ti_bdcdata. ENDFORM. " 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

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 52

Das könnte Ihnen auch gefallen