segunda-feira, 26 de setembro de 2011

Module Pool - Table Control

 
"  Hoje vou mostrar como alimentar um 'Table control' em um 'Module Pool'
" 'Table control' e uma estrutura que recebe os dados de uma tabela e
" mostra na tela, vou mostrar como popular um, depois eu vou mostrar como
" manipular os dados que estão no 'table control'.
"  Primeiro criei seu 'Module pool'... Se não lembra acesse link abaixo:
" http://abapjuniores.blogspot.com/2011/04/module-pool-basico.html.

" Depois de criar a tela vá até o TOP do programa e declare igual abaixo.

*&---------------------------------------------------------------------*
*& Include MZSD0001TOP                                       Module Pool      SAPMZSD0001
*&
*&---------------------------------------------------------------------*

PROGRAM  SAPMZSD0001.

"  Criei uma tabela com os campos 'MANDT, MATNR e NAME1', e uma estrutura
" com os campos 'MATNR e NAME1.
TABLES : zmara,
         zst_mara
  .

" Declarações da tela 0100.
data : V_OKCODE TYPE sy-ucomm.
"  Declaração das estruturas e tabelas internas
DATA : it_zmara TYPE TABLE OF zmara,
       st_zmara TYPE          zmara.

"  Declaração do table control.
CONTROLS : ztab_ctrl TYPE TABLEVIEW USING SCREEN 0100.


*&---------------------------------------------------------------------*
"  Após ter declarado isso vamos voltar a tela e clicar no botão 'Layout'.






"  Isso irá mostrar o design da sua tela com todos os objetos dele, olhando
" no lado esquerdo você verá as ferramentas que podem ser usadas pra fazer
" sua tela conforme a necessidade do cliente ou do seu estudo.
"  Hoje nós vamos usar o 'Table Control' conforme imagem abaixo, onde é só
" clicar no icone dele, ir para a tela que ainda não tem nada, clicar e
" Arrastar, dê o nome 'ZTAB_CTRL', conforme exemplo, como o Top já foi feito
" se você perceber ele já foi declarado para a tela 0100.
"  Depois de criar, clique no botão 'Dicionário / Tabela de campos da tela'
" Conforme mostrado na imagem abaixo, coloque o nome da estrutura criada no
" SE11, e dê 'Enter', com isso irá aparecer todos os campos do mesmo,
" selecione os campos e dê 'OK', arraste o objeto para dentro do 'table Control'.
"  Pronto, agora você tem um 'Table control' relacionado com uma estrutura.




"  Depois de fazer tudo isso clique no botão 'Atributos' e selecione as
" opções conforme figura abaixo, isso é só para deixar um pouco mais bonito
" é organizado seu 'Table Control', lembre-se bem deste botão 'atributos'
" pois ele é muito importante mais tarde para a manipulação de dados.





" Agora veja os códigos comentados:

*&---------------------------------------------------------------------*

" fluxo lógico da tela 0100.

  PROCESS BEFORE OUTPUT.
" Faz a alimentação da tabela Interna.
 MODULE z_select_zmara.

"  Joga o registro pra dentro do estrutura interna 'linkando' com
" o Table control da tela.
 LOOP AT it_zmara INTO st_zmara WITH CONTROL ztab_ctrl.
   MODULE : preenche_screen.
 ENDLOOP.

" Module que 'seta' com um PF-Status com esta tela.
 MODULE STATUS_0100.

PROCESS AFTER INPUT.

"  Loop na tabela interna com os dados que serão mostrados na
" table control, este loop no PAI, serve quando você quer fazer
" alguma ação com os dados mostrados ( Insert, Modify, Update ...)
" , você precida coloca para que o programa seja executado
" corretamente.
LOOP AT it_zmara.
ENDLOOP.

"  Module contendo todas as ações de cada comando da tela.
 MODULE USER_COMMAND_0100.


*&---------------------------------------------------------------------*

" PBO


  *&---------------------------------------------------------------------*
*&  Include           MZSD0001O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
module status_0100 output.
  set pf-status 'TELA'.

endmodule.                 " STATUS_0100  OUTPUT


*&---------------------------------------------------------------------*
*&      Module  z_select_zmara  OUTPUT
*&---------------------------------------------------------------------*
module z_select_zmara output.

  select matnr name1
    from zmara
    into corresponding fields of table it_zmara.

endmodule.                 " z_select_zmara  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  preenche_screen  OUTPUT
*&---------------------------------------------------------------------*
module preenche_screen output.

  "  Verifica o espaço que tem dentro do Table Control e especifica os
  " intervalo de registros que serão exibidos, Tipo quando seu table control
  " cabe 20 registros e você tem 100 registros, os registros que serão
  " Mostrados inicialmente serão os resgistros 1 ao 20 e só, mas quando vc
  " colocar pra baixo irá aparecer do 2 ao 21.
  if sy-stepl = 1.
    ztab_ctrl-lines =
      ztab_ctrl-top_line + sy-loopc - 1.
  endif.

  "  Move os dados da estrutura interna pra dentro da estrutura que alimenta
  " o Table control.
  move-corresponding st_zmara to zst_mara.

endmodule.                 " preenche_screen  OUTPUT

*&---------------------------------------------------------------------*

" PAI

  *&---------------------------------------------------------------------*
*&  Include           MZSD0001I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module user_command_0100 input.

  case v_okcode.
*  WHEN 'SAVE'.
    when 'BACK'.
      set screen 0.
      leave screen.
    when 'EXIT'.
      set screen 0.
      leave screen.
    when 'CANCEL'.
      set screen 0.
      leave screen.
    when others.
  endcase.

endmodule.                 " USER_COMMAND_0100  INPUT



*&---------------------------------------------------------------------*

"  Espero ter ajudado, como sempre falo 'Debbugem' tudo isso e vejam os
" valores e suas propriedades durante o processo.

quinta-feira, 22 de setembro de 2011

Tops Apagadas pelas Views de tabelas

"  Uma importante dica sobre Views de tabelas são que elas usam um grupo
" de funções conforme já foi comentado, mas toda vez que você fizer isso
" o 'Top' do Grupo de funções ( que é aonde fica todas as declarações do
" grupo ) será reecrita pela SAP e substituida, portanto caso esse grupo
" de funções esteja armazenando uma 'Function' e a mesma esteja usando 
" uma variável declarada neste top, você terá que declarar novamente pq 
" ela foi apagada rsrsrs....  muito cuidado com isso mas pra não dar esse
" problema com você e só vc criar um 2º Include TOP contendo todas as 
" Declarações que vc quiser incluir.

segunda-feira, 19 de setembro de 2011

Dicionario - View de Manutenção de tabelas

  report zmj_viewtable.

*&---------------------------------------------------------------------*
"  Hoje conforme muitos emails me solicitando estarei falando sobre 
" View de manutenção, ou atualizador de tabela, que serve para fazer 
" inclusão na tabela de uma forma mais direta, eu fiz isso poucas vezes
" mas já da pra explicar como faze um rsrs.
"  Primeiro de tudo vamos entrar na tabela que você quer criar a a View,
" entre no menu /Utilitários/gerador de atualização de tabela/ conforme
" imagem abaixo.





"  Depois disso vc irá para um ambiente de diálogo para criação de desta
" atualização da tabela.


"  Devemos preencher os campos: Nome da 'tabela/Visão', 'Grupo de 
" autorização' que dá autorização para acesso e consequentimente imput 
" dentro da tabela, bem....  vocês precisarão criar um grupo de funções
" (se80) para armazenar a View,...  depois disso cliquem no botão 
" 'Procurar nº(s) tela' e selecionar 'propor nº(s) tela' e depois aperte
" o botão para criar.Prontinho.... você acabou de criar a view, se quiser
" na transação 'sm30' você já consegue ver esta View , mas você não deixar
" sem ter uma transação então vamos para o próximo passo.
" Criar uma transação pra a view.



 "  Vamos na transação se93 que é para controle de transações e vamos criar
" uma conforme a imagem acima, preenchendo o 'código da transação', depois
" 'texto breve' e principalmente o objeto de execução como 'transação com
" parametros', dê OK.





"  Preencham os dados conforme a imagem acima, onde o 'Viewname' é o
" nome da View da tabela ( rsrsrs seriu ?) e o 'Update' é a autorização
" de Imput dentro da tabela.
" Qualquer duvida é só continuar entrando em contato comigo nos emails de
" contatos que tem no blog....  T+ Galera..

quinta-feira, 1 de setembro de 2011

ALV - Estrutura

  REPORT z_struc_alv.

*&---------------------------------------------------------------------*
"  Vou fala agora sobre Estrutura dentro do ALV, I_STRUCTURE_NAME servirá,
" como o jah falado, igual ao parametro 'IT_FIELDCAT' da função, 
" a estrutura feita tem esta cara:


 


"  Sabe criar estrutura ? acesse :
" http://abapjuniores.blogspot.com/2011/08/dicionario-estruturas.html
" o código eh muito simples olhem abaixo.

" Tabelas
TABLES :
  mara
  .

TYPE-POOLs : slis
.

" Tipos
TYPES BEGIN OF ty_outtab.
" Aki eu estou aproveitando a estrutura criada para cria o tipo identico
" para a tabela de saida.
        INCLUDE TYPE zst_struc_001.
TYPES END OF   ty_outtab.

TYPES :
  BEGIN OF ty_mara,
    matnr TYPE mara-matnr,
    ersda TYPE mara-ersda,
  END OF   ty_mara,

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

" Tabelas Internas e Estruturas
DATA :
  st_outtab TYPE ty_outtab,
  it_outtab TYPE TABLE OF ty_outtab,
  st_mara   TYPE ty_mara,
  it_mara   TYPE TABLE OF ty_mara,
  st_makt   TYPE ty_makt,
  it_makt   TYPE TABLE OF ty_makt
  .

" Constantes
data : c_x TYPE c VALUE 'X'.

" Tela de seleção.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS : so_matnr FOR mara-matnr
                .
SELECTION-SCREEN END OF BLOCK 1.

" Inicio do programa.
START-OF-SELECTION.

  PERFORM :
    z_busca_dados,
    z_feed_outtab,
    z_cria_alv
    .

*&---------------------------------------------------------------------*
*&      Form  Z_BUSCA_DADOS
*&---------------------------------------------------------------------*
" Leitura simples das tabelas para alimentar a tabela de saida.
FORM z_busca_dados .

  SELECT matnr ersda
    FROM mara
    INTO TABLE it_mara
    UP TO 100 ROWS
    WHERE matnr IN so_matnr
    .

  SELECT matnr maktx
    FROM makt
    INTO TABLE it_makt
    FOR ALL ENTRIES IN it_mara
    WHERE matnr = it_mara-matnr
      AND spras = 'PT'
.

ENDFORM.                    " Z_BUSCA_DADOS


*&---------------------------------------------------------------------*
*&      Form  Z_FEED_OUTTAB
*&---------------------------------------------------------------------*
" Alimentação da tabela de saida.
FORM z_feed_outtab .

  LOOP AT it_mara INTO st_mara.
    READ TABLE it_makt INTO st_makt
      WITH KEY matnr = st_mara-matnr
      .
    st_outtab-check = ' '.
    st_outtab-matnr = st_mara-matnr.
    st_outtab-ersda = st_mara-ersda.
    st_outtab-maktx = st_makt-maktx.

    APPEND st_outtab TO it_outtab.

  ENDLOOP.

ENDFORM.                    " Z_FEED_OUTTAB

*&---------------------------------------------------------------------*
*&      Form  Z_CRIA_ALV
*&---------------------------------------------------------------------*
" Cria o ALV.
form Z_CRIA_ALV .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

 EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '

" Nome do programa.
   I_CALLBACK_PROGRAM                = sy-repid

*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '

" Inserção da estrutura para a substituição do Fieldcatolog
   I_STRUCTURE_NAME                  = 'ZST_STRUC_001'

*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
*   IS_LAYOUT                         =
*   IT_FIELDCAT                       =
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
   I_SAVE                            = c_x
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
  TABLES
    t_outtab                          = it_outtab
 EXCEPTIONS
   PROGRAM_ERROR                     = 1
   OTHERS                            = 2
          .
IF sy-subrc <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


endform.                    " Z_CRIA_ALV

terça-feira, 30 de agosto de 2011

Dicionário - Tabela

  *&---------------------------------------------------------------------*
"  Vou mostra agora como fazer uma tabela transparente que são estruturas 
" lógicas que possuem dados com relação direta no banco de dados.
"  Bem espero que vcs jah tenham deduzido isso mas pra faze uma tabela 
" temos que ir na transação Se11...rsrs


 


" É soh escrever o nome da tabela e manda ver ..





"  Irá para uma tela acima onde vc deverá colocar a descrição Breve da 
" tabela, antes de tudo, na primeira aba ( Caracteristicas ) aparecerá
" informações como ultima modificação, pacote que vc colocou o objeto
" ( tabela ) e o idioma Original, 'mais tarde eu mostrarei como eh 
" importante esse negocio de idioma original e suas traduções',
" Já na segunda aba ( Entrega e atualização ) vc terá que informar a 
" Data Browser / Atualiz. VIsão Tabs que é tipo vc autoriza ou naum 
" a criar uma 'View' desta tabela, 'calma aee que eu to fazendo um post 
" sobre isso tb rs', e a classe de entrega que tem essas opções...





" Aba ( campos )....
"  Ahhhh, finalmente a parte onde vc coloca os campos desta tabela, como
" no exemplo abaixo podemos trabalhar como se fosse uma estrutura mas 
" se ficarem atentos tem algumas mudanças como a chave primária e o campo
" 'Mandt' que eh uma obrigação em todas as tabelas onde será informado
" o mandante de acesso e eh sempre chvae primaria, a chave primaria é a 
" informações que diferencia um registro do outro simples né...  Tipo
" Pessoas com o nome Mauro tem um monte, mas o RG identifica e diferencia
" estes Mauro's huahuahuahu, portanto RG eh uma chave primaria...
" Alem de relacionar os campos da tabela com elmentos de dados tb podemos 
" relacioná-los com outras estruturas soh depende da lógica e proposito 
" da tabela, quando o campos tiver relacionado com tabela irá aparecer 
" 3 quadradinhos um du lado do outro no lugar da categoria de dados.



"  Depois na 4ª aba ( Entrs Possiveis / Verificação ) aki vc jah consegue 
" ter uma visão de chave estrangeira, categoria de dados, origem entrada
" possiveis caso o dominio tenha e por falar nele vc consegue visualizar 
" o dominio tb .




" Na 5ª e ultima aba ( campos moeda / quantidade ) vc informa o tabela 
" e campo de referencia de campos co tipo moeda e quantidade ( jah foi
" comentado isso na criação da estrutura ).
"  A gente não pode esquece de uma coisa, na verdade se vc esquecer vc  
" não conseguirá ativar rsrsr portanto eh muito importante,...
"  Nos botões la encima existe três de extrema importancia que são os 
" configurações técnicas, Índices... e Estruturas append..., sobre os 
" dois ultimos iremos falar aparte, iremos falar soh das configurações
" técnicas clicando lah irá aparecer a tela abaixo onde irá ser pedido
" duas informações muito importante que seria categoria de dados onde 
" vc informa quais são os tipos de dados que terá esta tabela e o tamanho
" que essa tabela vai ter ( tomem bastante cuidado quando vcs forem fazer
" copia de tabelas de SAP de versões antigas pois o foi mudado as qtde 
" padroes ) nesta tela vc só salva e jah era, depois volta (f3) e ativa
" o sua tabela, talvez a apareça uma 'warning' sobre a tabela mas 
" Provavelmente será sobre a categoria de ampliação que estah no menu
" 'Suplementos'...


"  Tabela transparente eh um assunto muito grande portanto estarei postando
" mais coisas sobre isso. qualquer dúvida estou aeee. t+.

quinta-feira, 25 de agosto de 2011

Dica para um ABAPerfeito. rsrs.

SDN + F1 + SAPDOCU + /H = Programador ABAP Ideal.

sexta-feira, 12 de agosto de 2011

Debugando janela Pop-up

  "  Tava dando uma olhada numa transação que a tela dela eh um Pop-Up e
" eu precisava 'debugar' pra pegar o problema na hora já pensei em um
" arquivinho que em txt que roda pela net pra conseguir debugar essas
" coisas, mas meu chefe muito sábio, me ensinou como fazer esse arquivo
" pelo SAP, aki vão as instruções:
" 1º : entre no SAP e aperte no botão 'Criar uma ligação', ^conforme 
" abaixo.




"  Depois irá aparecer a tela abaixo, prencha igual, prestando bastante 
" atenção no campos 'Tipo', 'Comando' e 'local'.




"  Pronto agora vc não precisa mais busca na internet este arquivo .txt
" se vc quiser vc pode abrir este arquivo SAP num bloco de notas pra 
" ver o codigo fonte. Opa tava quase esquecendo rsrsrs, pra vc usa isto
"  é só vc arrastar o arquivo criado pra 'Coisa' q vc quer Debugar.

quarta-feira, 10 de agosto de 2011

Dicionário - Estruturas

  *&---------------------------------------------------------------------*
"  Agora vamos pro próximo passo que será fazer uma estrutura, a estru-
" tura é um conjunto de campos onde cada campo é definido por elemento
" de dados, as estruturas não armazenam dados, ele funciona como um
" header, recebendo a linha que vc estah trabalhando e soh, portanto eh
" muito importante na codificação, sem conta q pode ser usado na criação
" do ALV.
"  Primeiro entre na 'SE11' e digite o nome da estrutura na 'Categoria de
" dados' e aperte 'Criar'.


 


"  Irá aparecer uma caixinha, selecione 'Estrutura'.



"  Aparecerá uma tela igual a de baixo preencha a 'Descrição breve', no
" campo 'Componente' fica o nome do campo da estrutura e no campo
" 'tipo componente' fica o elemento de dados que define o campo da estru-
" tura.



" Tudo isso na aba 'Componentes', mas tb existem as abas...
" 'Caracteristicas' - fica as informações como ultima modificação, pacote
" e idioma original.
" 'Entradas possiveis/verificação' - aki vc trabalha com chaves extrangeiras
" e tb consegue visualizar o dominio (caso esteja usando) de cada campo da
" sua estrutura.





" 'Campo moeda/quantidade' - onde caso o campo seja do tipo 'Curr' vc terá
" que referencia este campo com um campo 'cury' da sua estrutura ou de 
" outra tabela a 'maioria das vezes o campo eh 'TCURC-WAERS' conforme acima.
"  Agora e só salvar, verificar os posiveis erros e Ativar.
" Obs.: Preste bastante atenção no log se aparecer, provavelmente será algo
" sobre Categoria, veja isso em /suplementos/categoria de ampliação.