segunda-feira, 18 de abril de 2011
Module Pool - Básico
" Vou tentar comentar como faze um 'Module Pool simples o sulficiente pra
" fala que um dia fez um, vou tentar ser um pouco mais didádico.
" 'Module Pool ou programa online É uma ferramenta da SAP para interação
" de com o usuário.
" Existem duas maneiras de Cria um 'OnLine seria pelo se38 ( editor ABAP
" normal ) se41 (MenuPainter) se51(Screen Painter) mas isso eh soh pra sabe
" pq na verdade vc vai usa o se80 ( Object Navigator ) pq vc fika vendo a
" arvore do esquema todo que vc tah criando, 'Includes, 'Campos, ' Modulos,
" 'Telas e mais um monte de coisa que faz o se80 fika bem mais vantajoso.
" Vamo lah então step by step,
" Na se80 clique com o botão direito do mouse no na pastinha de programa e crie
" um novo programa e muito importante vc seguir a nomenclatura padrão SAP
" que seria conforme exemplo SAPMZSD0001 onde o 'SAP' é nome padrão, 'M' indica
" que é 'Module Pool, 'SD' indica pra que Modulo está sendo feita este 'Module,
" a partir daki seguir a metodologia utilizada pelo cliente ou ambiente.
" Escolha a opção com 'Include Top pq assim os includes vão ser declarados
" automaticamente, a SAP irá sugerir um nome, o mais indicado é aceitar, nos
" atributos do programa preencha o tipo de programa com 'Pool de modulos' .
" Num 'Online existem 4 principais 'Includes que serão utilizados durante
" todo o processo que ficam no programa principal já veêm escrito no código
" mas esta comentando portando soh descomente e clique duas vezes para criar,
" siga o padrão de nomenclatura que a SAP coloca no comentario:
" Nomenclatura : Include TOP - TOP / Include PBO - O01 / Include PAI - I01
" / Include Performs - f01.
" Include TOP - serve pra vc coloca todas as declarações que será usado no
" programa como variáveis, tipos, estrutura, tabelas internas, constantes etc.
" Include PBO - Serão armazenados todos os Modules PBO que são todas as
" rotinas para a preparação das informações e/ou elementos da tela antes
" da sua exibição.
" Include PAI - Serão armazenados todos os Modules PAI que são todas as
" rotinas de tratamento das ações ( comando do usuário ) que foram
" executados na tela.
" Include Performs - Onde vai fika todos os performs que vc cria.
" Agora nós estamos quase terminando, rsrs, vixi tem muita coisa ainda,
" vamos criar as telas agora, é a parte que o usuário visualiza os campos
" que tem que ser preenchido.
" Clique com o botão direito no nome do programa criar/ tela de um numero
" pra essa tela que servirá como referencia para chamar apos numero da tela
" confirme e coloque a descrição da tela e salve.
" ( a SAP recomenda usar o numero da tela de 9000 a 9999 indicando que
" a tela criada é uma tela 'Z' ( criada por nois mortais ))
" Após gravar a tela irá aparecer na arvore de objetos do programa,
" Toda ação feita na tela do programa faz retornar um valor , o
" código de função, Para saber que valor é esse, deve-se definir um
" campo OK_CODE como um campo da tela, o qual receberá o valor desse código
" e assim tomando as ações relacionadas a ela, Portanto defina uma variavel
" do tipo sy-ucomm e atribua ao campo Ok_code da tela.
" Caso queira fazer uma validação nos valores que foram informados na tela
" e informar ao usuário de que algo não está correto, deve se usar o comando
" 'Field, com a adição de uma chamada para o 'Module, isso significa que o
" referido modulo é somente executado para o campo especificado no codigo.
" Se quiser fazer uma validação em muitos campos é só reunir todos os
" campos dentro de um bloco de comandos ('Chain / EndChain'), um mesmo
" campo pode ser chamados em blocos de comandos diferentes.
" Podemos querer que chame o 'Module somente se o conteudo do campo for
" alterado usando o parâmetro 'On input na chamada do 'Module, ou então
" chamar o 'Module se o conteudo de algum dos campos dentro do bloco
" usando o parâmetro 'On chain-imput.
" O parâmetro adicional 'At exit-command, faz com que o 'Module sejá
" processado antes das verificações automaticas de entrada (PAI).
" Existe o famoso 'Status_gui que serve para customiza as barrinhas
" com os botões, menus como o botão de ativar, salvar, voltar, modelo
" e todos os outros botões que ficam encima quando vc tah programando,
" primeiro vc tem que criar o Status-gui clicando com o botão direito
" do mouse no nome do programa e ir em criar / status gui informe o
" nome do status, coloque um texto breve e no tipo de sttatus deixe como
" Status dialog mesmo e avance.
" Recomendo sempre definir primeiro as funções standard da barra 'ToolBar
" que seriam os botões Voltar / Sair / Cancelar na teclas de função onde
" vc ativa estes botões só colocando o nome neles.
" Agora com o 'Status-gui pronto nós devemos associar para uma tela onde
" é só descomentar o 'Module status_(nº tela), dar um duplo clique para
" criar o 'Module adicionando-o no PBO, dentro do 'Module coloque
" 'Set Pf-Status '(nome do status-gui criado) descomentando a linha rsrs,
" vcs viram que o SAP ajuda muito a gente pq tudo no 'Module pool e meio
" pré-definido bom pra gente rsrs.
" Um Online pode utilizar varias telas é para chamá-las e só usarmos
" set screen : para atualizar a proxima tela temporariamente, e
" call screen : para inserir um processamento de uma ou mais telas antes
" da tela atual.
" Leave to screen : Sai da tela atual ou indicada caso sejá descrita
" no código.
" Existem tb as subtelas que são areas reservadas dentro da tela principal
" para outra tela, a diferença eh que ela não tem OK_CODE, nas caracteristicas
" ela eh definida como SUBTELA.
" Existe um recurso muito utilizado que se chama 'Table control que serve
" pra mostra e edita dados de uma tabela dentro de uma tela, o 'Table control
" e tipo um quadro adicionado no 'Screen Painter ( akele botão chamado
" layout que fica do lado do 'pretty Printer na tela que vc tá mexendo ),
" para trabalhar com ela eh muito simples,
" Existe com wizard mas aih nós não vamos aprender nada, portanto manualmente
" defina o nome da 'Table Control no 'Top Include (Onde fika todas as
" declarações); na tela criar um 'Table control com as dimensões que achar
" necessário; Inserir os campos da tabela interna dentro do 'Table control.
" Bem espero ter ajuda mais duq atrapalhado, com isso que eu passei vc já
" consegue fazer um On-line feio mas que funciona e que você pode deixar
" bem maior conforme sua necessidade ou curiosidade.
" Qualquer dúvida, opnião e sugestão por favor comentar aee pq 'Module Pool
" tem muito dúvida as vezes até pra gente velha do ABAP.
"
report z_comm_modpool.
sexta-feira, 15 de abril de 2011
Figura no Module Pool
" Radical esse código heim, hahaii !!
" Foi como disse o meu amigo que passou este esqueminha pra mim,
" o Nicholas procurou muito na internet e naum achou porisso estou postando
" espero que ajude algum junior, vamos por passos :
" Passo 1 - Criar uma 'Custom Control no Layout da tela
" Passo 2 - Dentro do 'Before OutPut (PBO) tem o Modulo de Status da tela,
" Passo 3 - Dentro deste modulo (por Bouas praticas) crie um 'Perform para
" chamar a imagem
" Passo 4 - Agora coloque o codigo abaixo não esquecendo de relacionar o
" o 'Custom Control com o container e colocar o nome do figurinha no 'Method
" É Voala (é Assim que escreve?) agora seu 'Module Pool vai ter uma imagem a
" maioria da vezes serve pra coloca o logo do cliente (por favor não erre a
" imagem )
*&---------------------------------------------------------------------*
*& Include MZ_NCPROGRAMAF01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form Z_FIGURA_1
*&---------------------------------------------------------------------*
FORM z_figura_1 .
DATA: w_lines TYPE i.
TYPES pict_line(256) TYPE c.
DATA : container TYPE REF TO cl_gui_custom_container,
editor TYPE REF TO cl_gui_textedit,
picture TYPE REF TO cl_gui_picture,
pict_tab TYPE TABLE OF pict_line,
url(255) TYPE c.
DATA: graphic_url(255).
DATA: BEGIN OF graphic_table OCCURS 0,
line(255) TYPE x,
END OF graphic_table.
DATA: l_graphic_conv TYPE i.
DATA: l_graphic_offs TYPE i.
DATA: graphic_size TYPE i.
DATA: l_graphic_xstr TYPE xstring.
CALL METHOD cl_gui_cfw=>flush.
* Aqui é declarado o container onde a imagem vai aparecer.
CREATE OBJECT: container EXPORTING container_name = 'CUSTOM_CONTROL_1', picture EXPORTING parent = container.
* Metodo que carrega a imagem do SAP.
CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
EXPORTING
p_object = 'GRAPHICS'
p_name = 'SUA_IMAGEM_AKI'
p_id = 'BMAP'
p_btype = 'BCOL'
RECEIVING
p_bmp = l_graphic_xstr
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
graphic_size = XSTRLEN( l_graphic_xstr ).
l_graphic_conv = graphic_size.
l_graphic_offs = 0.
WHILE l_graphic_conv > 255.
graphic_table-line = l_graphic_xstr+l_graphic_offs(255).
APPEND graphic_table.
l_graphic_offs = l_graphic_offs + 255.
l_graphic_conv = l_graphic_conv - 255.
ENDWHILE.
graphic_table-line = l_graphic_xstr+l_graphic_offs(l_graphic_conv).
APPEND graphic_table.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'IMAGE'
subtype = 'X-UNKNOWN'
size = graphic_size
lifetime = 'T'
TABLES
data = graphic_table
CHANGING
url = url.
CALL METHOD picture->load_picture_from_url
EXPORTING
url = url.
CALL METHOD picture->set_display_mode
EXPORTING
display_mode = picture->display_mode_fit_center.
ENDFORM. " Z_FIGURA_1
" Foi como disse o meu amigo que passou este esqueminha pra mim,
" o Nicholas procurou muito na internet e naum achou porisso estou postando
" espero que ajude algum junior, vamos por passos :
" Passo 1 - Criar uma 'Custom Control no Layout da tela
" Passo 2 - Dentro do 'Before OutPut (PBO) tem o Modulo de Status da tela,
" Passo 3 - Dentro deste modulo (por Bouas praticas) crie um 'Perform para
" chamar a imagem
" Passo 4 - Agora coloque o codigo abaixo não esquecendo de relacionar o
" o 'Custom Control com o container e colocar o nome do figurinha no 'Method
" É Voala (é Assim que escreve?) agora seu 'Module Pool vai ter uma imagem a
" maioria da vezes serve pra coloca o logo do cliente (por favor não erre a
" imagem )
*&---------------------------------------------------------------------*
*& Include MZ_NCPROGRAMAF01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form Z_FIGURA_1
*&---------------------------------------------------------------------*
FORM z_figura_1 .
DATA: w_lines TYPE i.
TYPES pict_line(256) TYPE c.
DATA : container TYPE REF TO cl_gui_custom_container,
editor TYPE REF TO cl_gui_textedit,
picture TYPE REF TO cl_gui_picture,
pict_tab TYPE TABLE OF pict_line,
url(255) TYPE c.
DATA: graphic_url(255).
DATA: BEGIN OF graphic_table OCCURS 0,
line(255) TYPE x,
END OF graphic_table.
DATA: l_graphic_conv TYPE i.
DATA: l_graphic_offs TYPE i.
DATA: graphic_size TYPE i.
DATA: l_graphic_xstr TYPE xstring.
CALL METHOD cl_gui_cfw=>flush.
* Aqui é declarado o container onde a imagem vai aparecer.
CREATE OBJECT: container EXPORTING container_name = 'CUSTOM_CONTROL_1', picture EXPORTING parent = container.
* Metodo que carrega a imagem do SAP.
CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
EXPORTING
p_object = 'GRAPHICS'
p_name = 'SUA_IMAGEM_AKI'
p_id = 'BMAP'
p_btype = 'BCOL'
RECEIVING
p_bmp = l_graphic_xstr
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
graphic_size = XSTRLEN( l_graphic_xstr ).
l_graphic_conv = graphic_size.
l_graphic_offs = 0.
WHILE l_graphic_conv > 255.
graphic_table-line = l_graphic_xstr+l_graphic_offs(255).
APPEND graphic_table.
l_graphic_offs = l_graphic_offs + 255.
l_graphic_conv = l_graphic_conv - 255.
ENDWHILE.
graphic_table-line = l_graphic_xstr+l_graphic_offs(l_graphic_conv).
APPEND graphic_table.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'IMAGE'
subtype = 'X-UNKNOWN'
size = graphic_size
lifetime = 'T'
TABLES
data = graphic_table
CHANGING
url = url.
CALL METHOD picture->load_picture_from_url
EXPORTING
url = url.
CALL METHOD picture->set_display_mode
EXPORTING
display_mode = picture->display_mode_fit_center.
ENDFORM. " Z_FIGURA_1
quinta-feira, 14 de abril de 2011
terça-feira, 12 de abril de 2011
Só uma letra
Diquinha de hoje
" Nunca declare nada com um único caractér, pois eh mou treta selecionar isso Debuggando"
" Nunca declare nada com um único caractér, pois eh mou treta selecionar isso Debuggando"
Programinha Orientado a Objeto
" Este programa Mostra como eh dahora trabalha com Orientação a Objeto,
" eh dificil mas eh dahora pegando o conceito vc consegue pelomenos entender
" os programas orientado a objeto que vc for dar manutenção, pq vc vê que o
" Código e mais estruturado e organizado
" Extra - Quem me deu aula de OO foi o Flavio Furlan do (abap101.com) e
" o Mauricio Cruz da (www.abapzombie.blog.br) portanto qualquer coisa vcs
" falem com eles rsrsrsrsrs e/ou comentem aqui.
*&---------------------------------------------------------------------*
*& Report ZMJ_PROG_OO.
*&
*&---------------------------------------------------------------------*
REPORT zmj_prog_oo.
" Tela de Seleção .....
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME.
PARAMETERS: s_c TYPE i OBLIGATORY .
SELECTION-SCREEN END OF BLOCK a.
" A 'Definition serve para declaração de tudo que será usado
*----------------------------------------------------------------------*
* CLASS c1 DEFINITION
*----------------------------------------------------------------------*
CLASS c1 DEFINITION.
" 'Public Section conterá atributos visiveis pra todos ( progs, functions, etc)
PUBLIC SECTION.
" Olhando bem com o method eh, faz vc lembra de algo ne, e claro parece
" uma função a ideia eh essa mesmo, contem os importing changing e exporting
METHODS: set IMPORTING value(set_value) TYPE i,
add,
get EXPORTING value(get_value) TYPE i.
" Caso ela vire uma 'SuperClass (classe Mãe) no 'Protected Section os atributos
" e metodos seram somente usados nas subclasses e nela mesma
PROTECTED SECTION.
" 'Private section conterá atributos visiveis somente dentro da classe.
PRIVATE SECTION.
DATA contador TYPE i .
ENDCLASS. "c1 DEFINITION
" A 'Implementation serve para mostrar o q tudo que foi declarado faz,
" dica - Toda vez que abrir uma classe ou metodo ja fecha pra visualizar
" melhor oq está Fazendo.
*----------------------------------------------------------------------*
* CLASS c1 IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS c1 IMPLEMENTATION.
" 'Method que compara a variavel 'Contador com o variavel definida do 'Method
METHOD set.
contador = set_value.
ENDMETHOD. "set
" 'Method que adiciona +2 na variavel 'Contador
METHOD add.
ADD 2 TO contador.
ENDMETHOD. "add
" 'Method que compara variavel definida do 'Method com a varival 'Contador
METHOD get.
get_value = contador.
ENDMETHOD. "get
ENDCLASS. "c1 IMPLEMENTATION
" Daki pra baixo estaremos trabalhando com tudo que declaramos acima.
" Data cnt com referencia a classe criada dando assim acesso a tudo da classe.
DATA obj_1 TYPE REF TO c1.
DATA n TYPE i .
" Inicio da seleção ....
START-OF-SELECTION.
" Para estar trabalhando com ele ainda vc precisa cria-lo como objeto
CREATE OBJECT obj_1.
" Chama o 'Method set para o objeto 'obj_1 onde o valor exportado é a variável
" declarada como tipo inteiro (linha 75)
CALL METHOD obj_1->set
EXPORTING
set_value = n.
" Faz n vezes a chamada no 'Method add conforme imput na tela de seleção.
DO s_c TIMES.
CALL METHOD obj_1->add.
ENDDO.
" Chama o 'Method set para o objeto 'obj_1 onde o valor importado é a variável
CALL METHOD obj_1->get
IMPORTING
get_value = n.
" Mostra a variável pra 6 vê que funciona.
WRITE n.
" eh dificil mas eh dahora pegando o conceito vc consegue pelomenos entender
" os programas orientado a objeto que vc for dar manutenção, pq vc vê que o
" Código e mais estruturado e organizado
" Extra - Quem me deu aula de OO foi o Flavio Furlan do (abap101.com) e
" o Mauricio Cruz da (www.abapzombie.blog.br) portanto qualquer coisa vcs
" falem com eles rsrsrsrsrs e/ou comentem aqui.
*&---------------------------------------------------------------------*
*& Report ZMJ_PROG_OO.
*&
*&---------------------------------------------------------------------*
REPORT zmj_prog_oo.
" Tela de Seleção .....
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME.
PARAMETERS: s_c TYPE i OBLIGATORY .
SELECTION-SCREEN END OF BLOCK a.
" A 'Definition serve para declaração de tudo que será usado
*----------------------------------------------------------------------*
* CLASS c1 DEFINITION
*----------------------------------------------------------------------*
CLASS c1 DEFINITION.
" 'Public Section conterá atributos visiveis pra todos ( progs, functions, etc)
PUBLIC SECTION.
" Olhando bem com o method eh, faz vc lembra de algo ne, e claro parece
" uma função a ideia eh essa mesmo, contem os importing changing e exporting
METHODS: set IMPORTING value(set_value) TYPE i,
add,
get EXPORTING value(get_value) TYPE i.
" Caso ela vire uma 'SuperClass (classe Mãe) no 'Protected Section os atributos
" e metodos seram somente usados nas subclasses e nela mesma
PROTECTED SECTION.
" 'Private section conterá atributos visiveis somente dentro da classe.
PRIVATE SECTION.
DATA contador TYPE i .
ENDCLASS. "c1 DEFINITION
" A 'Implementation serve para mostrar o q tudo que foi declarado faz,
" dica - Toda vez que abrir uma classe ou metodo ja fecha pra visualizar
" melhor oq está Fazendo.
*----------------------------------------------------------------------*
* CLASS c1 IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS c1 IMPLEMENTATION.
" 'Method que compara a variavel 'Contador com o variavel definida do 'Method
METHOD set.
contador = set_value.
ENDMETHOD. "set
" 'Method que adiciona +2 na variavel 'Contador
METHOD add.
ADD 2 TO contador.
ENDMETHOD. "add
" 'Method que compara variavel definida do 'Method com a varival 'Contador
METHOD get.
get_value = contador.
ENDMETHOD. "get
ENDCLASS. "c1 IMPLEMENTATION
" Daki pra baixo estaremos trabalhando com tudo que declaramos acima.
" Data cnt com referencia a classe criada dando assim acesso a tudo da classe.
DATA obj_1 TYPE REF TO c1.
DATA n TYPE i .
" Inicio da seleção ....
START-OF-SELECTION.
" Para estar trabalhando com ele ainda vc precisa cria-lo como objeto
CREATE OBJECT obj_1.
" Chama o 'Method set para o objeto 'obj_1 onde o valor exportado é a variável
" declarada como tipo inteiro (linha 75)
CALL METHOD obj_1->set
EXPORTING
set_value = n.
" Faz n vezes a chamada no 'Method add conforme imput na tela de seleção.
DO s_c TIMES.
CALL METHOD obj_1->add.
ENDDO.
" Chama o 'Method set para o objeto 'obj_1 onde o valor importado é a variável
CALL METHOD obj_1->get
IMPORTING
get_value = n.
" Mostra a variável pra 6 vê que funciona.
WRITE n.
Perform's
" Este tipo de código e muito usado em Batch Imput, Alimentando fieldcat,
" e muitas outras coisas, O perform e usado pra organizar e pra trabalhar
" com rotinas.
" Testem aih pessoal, daki por diante soh estarei mandando os posts
" prontos pra testar eh soh copiar e colar aih assim vcs podem debuggar
" e ver como funciona pro sistema e tambem caso vc tenham que usa o codigo
" pra algum trampo rsrs.
*&---------------------------------------------------------------------*
*& Report ZMJ_PROG_FORMS.
*&
*&---------------------------------------------------------------------*
REPORT zmj_prog_forms.
" Tipos ......
types : begin of ty_mara,
matnr type mara-matnr,
ernam type mara-ernam,
pstat type mara-pstat,
end of ty_mara
.
" Estruturas ......
DATA : st_itteste type ty_mara
.
" Tabelas Internas .....
DATA : it_itteste type table of ty_mara
.
" Variaveis .....
DATA : vg_repid TYPE sy-repid
.
" inicialization
vg_repid = sy-repid
.
" Inicio do processo ....
PERFORM : z_alimenta,
z_alimenta2
.
*&---------------------------------------------------------------------*
*& Form Z_ALIMENTA
*&---------------------------------------------------------------------*
" Aqui é imput de dados na tabela interna da forma mais simples possivel,
" onde eh usado um form normal.
form Z_ALIMENTA .
clear : it_itteste. " limpa a tabela para receber os dados
st_itteste-matnr = '88988298839'. " Dados do primeiro registro
st_itteste-ernam = 'EU MESMO'.
st_itteste-pstat = 'REGISTRO 1'.
APPEND st_itteste TO it_itteste. " Coloca o registro na tabela
st_itteste-matnr = '90889878787'. " Dados do segundo registro
st_itteste-ernam = 'EU MESMO2'.
st_itteste-pstat = 'REGISTRO 2'.
APPEND st_itteste TO it_itteste. " Coloca o registro na tabela
endform. " Z_ALIMENTA
*&---------------------------------------------------------------------*
*& Form Z_ALIMENTA2
*&---------------------------------------------------------------------*
FORM z_alimenta2.
clear : it_itteste. " limpa a tabela para receber os dados
" O 'Perform declarado aki estah informando que estará usando os dados
" abaixo, eh muito importante a sequencia de dados pois eh pela sequencia
" que o 'Form se relaciona com os dados do 'Perform
PERFORM z_alimenta_itteste USING :
'88988298839' 'EU MESMO' 'REGISTRO 1', " Dados do registro 1
'90889878787' 'EU MESMO2' 'REGISTRO 2' " Dados do registro 2
.
ENDFORM. " Z_ALIMENTA2
*&---------------------------------------------------------------------*
*& Form Z_ALIMENTA_ITTESTE
*&---------------------------------------------------------------------*
" O 'Form foi declado onde o primeiro dado do registro que tah no
" 'Perform eh a variavel p_matnr que tem o tipo mara-matnr essa variável
" poderia ter qualquer nome e qualquer tipo
FORM z_alimenta_itteste USING p_matnr TYPE mara-matnr
p_ernam TYPE mara-ernam
p_pstat type mara-pstat.
st_itteste-matnr = p_matnr. " Relaciona a variavel com o campo da estr.
st_itteste-ernam = p_ernam.
st_itteste-pstat = p_pstat.
APPEND st_itteste TO it_itteste. " Coloca o registro na tabela
ENDFORM. " Z_ALIMENTA_ITTESTE.
" e muitas outras coisas, O perform e usado pra organizar e pra trabalhar
" com rotinas.
" Testem aih pessoal, daki por diante soh estarei mandando os posts
" prontos pra testar eh soh copiar e colar aih assim vcs podem debuggar
" e ver como funciona pro sistema e tambem caso vc tenham que usa o codigo
" pra algum trampo rsrs.
*&---------------------------------------------------------------------*
*& Report ZMJ_PROG_FORMS.
*&
*&---------------------------------------------------------------------*
REPORT zmj_prog_forms.
" Tipos ......
types : begin of ty_mara,
matnr type mara-matnr,
ernam type mara-ernam,
pstat type mara-pstat,
end of ty_mara
.
" Estruturas ......
DATA : st_itteste type ty_mara
.
" Tabelas Internas .....
DATA : it_itteste type table of ty_mara
.
" Variaveis .....
DATA : vg_repid TYPE sy-repid
.
" inicialization
vg_repid = sy-repid
.
" Inicio do processo ....
PERFORM : z_alimenta,
z_alimenta2
.
*&---------------------------------------------------------------------*
*& Form Z_ALIMENTA
*&---------------------------------------------------------------------*
" Aqui é imput de dados na tabela interna da forma mais simples possivel,
" onde eh usado um form normal.
form Z_ALIMENTA .
clear : it_itteste. " limpa a tabela para receber os dados
st_itteste-matnr = '88988298839'. " Dados do primeiro registro
st_itteste-ernam = 'EU MESMO'.
st_itteste-pstat = 'REGISTRO 1'.
APPEND st_itteste TO it_itteste. " Coloca o registro na tabela
st_itteste-matnr = '90889878787'. " Dados do segundo registro
st_itteste-ernam = 'EU MESMO2'.
st_itteste-pstat = 'REGISTRO 2'.
APPEND st_itteste TO it_itteste. " Coloca o registro na tabela
endform. " Z_ALIMENTA
*&---------------------------------------------------------------------*
*& Form Z_ALIMENTA2
*&---------------------------------------------------------------------*
FORM z_alimenta2.
clear : it_itteste. " limpa a tabela para receber os dados
" O 'Perform declarado aki estah informando que estará usando os dados
" abaixo, eh muito importante a sequencia de dados pois eh pela sequencia
" que o 'Form se relaciona com os dados do 'Perform
PERFORM z_alimenta_itteste USING :
'88988298839' 'EU MESMO' 'REGISTRO 1', " Dados do registro 1
'90889878787' 'EU MESMO2' 'REGISTRO 2' " Dados do registro 2
.
ENDFORM. " Z_ALIMENTA2
*&---------------------------------------------------------------------*
*& Form Z_ALIMENTA_ITTESTE
*&---------------------------------------------------------------------*
" O 'Form foi declado onde o primeiro dado do registro que tah no
" 'Perform eh a variavel p_matnr que tem o tipo mara-matnr essa variável
" poderia ter qualquer nome e qualquer tipo
FORM z_alimenta_itteste USING p_matnr TYPE mara-matnr
p_ernam TYPE mara-ernam
p_pstat type mara-pstat.
st_itteste-matnr = p_matnr. " Relaciona a variavel com o campo da estr.
st_itteste-ernam = p_ernam.
st_itteste-pstat = p_pstat.
APPEND st_itteste TO it_itteste. " Coloca o registro na tabela
ENDFORM. " Z_ALIMENTA_ITTESTE.
Assinar:
Postagens (Atom)