quinta-feira, 28 de julho de 2011

Fazendo um StatusGui.

  "  Agora vou mostrar como fazer um status GUI simples mas funcional,
" o status GUI nada mais eh du que, menu e os botões que ficam na parte
" de cima, soh.... Simples mas pra faze eh um poko mais dificil, aki
" estarei passando o simples,
" Bem, vamos começa, clique com o botão direito no seu programa
" criar / Status Gui.


"  Será solicitado o nome, o texto breve e o tipo do status, coloque 'Status
" Dialogo' e aperte 'OK'.
"  Acima tah a carinha para a construção do status gui contendo a barra
" de menu, a barra de botões e teclas de função.
"  A barra de menu é onde fica encima da caixa de comandos e do botão do
" 'Save e outros e onde fika o menu com os botões que vc add ou standard
" caso queira.
"  A barra de botão é na parte onde tem o botão de ativa e tudo mais, na
" maioria das vezes eh aki que nois iremos trabalhar.
"  A tecla de funções são os botões como 'Save, 'Back, 'Cancel, 'Exit entre
" outros que ficam acima do titulo e onde podemos trabalhar melhor vendo as
" funções e botões com suas teclas de atalho.

" Para criar um botão simples vá na primeira posição digite '&EXEC' e dê
" 'ENTER' aparecerá a tela abaixo, ticar Classe estático de texto.



"  O primeiro campo preenchivel é a texto da função, depois o icone, caso
" queira e depois o texto informativo que eh um textbox que aparece quando
" vc deixa o mouse encima do botão.



"  Depois de preencher e dar 'OK' aparecerá a tela abaixo pra colocar uma
" tecla pra função.




"  Perceba que o botão que vc criou está sendo mostrada na lista que rela
" ciona todos os botões e suas teclas de atalho.


"  Muito facil, o eskema agora eh visializar os Status Gui de programas Standard,
" perceba os nomes que são usados nos botões e tudo que pode ajuda na
" Construção do seu. t+

Cópia de SapScript

" Usar o programa  'RSTXSCRP' para copiar SapScript"

quinta-feira, 14 de julho de 2011

ALV - Layout

  REPORT zlayout_alv.

*&---------------------------------------------------------------------*
" Hoje nós vamos aprender a usar o layout no ALV, sabe deixar cada linha
" com uma cor diferente, tamanho das colunas, das linhas, tudo que tenha
" a ver com o layout do nosso ALVzinho rs.

" Include contendo todas as declarações default.
"http://abapjuniores.blogspot.com/2011/07/include-zincldeclaradefault.html
INCLUDE z_incl_declara_default.

" Include contendo os forms da seleção de dados default.
"http://abapjuniores.blogspot.com/2011/07/include-zinclfeeddefault.html
INCLUDE z_incl_feed_default.

" Declarações ...
" type-pools ....
TYPE-POOLS : slis
.
" Tabelas internas ....
DATA : it_fieldcat TYPE slis_t_fieldcat_alv
      .
" Estruturas ....
DATA : st_fieldcat TYPE slis_fieldcat_alv,
" Aqui está a estrutura que irá informar como deverá estar o layout.
       st_layout   TYPE slis_layout_alv
       .

" Start of selection .....

START-OF-SELECTION.

  PERFORM : z_selecao, " Form do Include de seleção default.
            z_all_alv
          .

*&---------------------------------------------------------------------*
*&      Form  Z_ALL_ALV
*&---------------------------------------------------------------------*
FORM z_all_alv .

  PERFORM : z_fieldcat,  " Cria o fieldcat para o ALV
            z_layout,    " Cria o Layout do ALV.
            z_alv        " Cria o ALV
           .

ENDFORM.                    " Z_ALL_ALV

*&---------------------------------------------------------------------*
*&      Form  Z_FIELDCAT
*&---------------------------------------------------------------------*
FORM z_fieldcat .

  "--------------------------------"Fname  Seltext                 check  Edit  Col_pos
  PERFORM z_feed_fieldcat USING : 'CHECK' ' '                     'X'    'X'    0        ,
                                  'MATNR' 'Material'              ' '    ' '    1        ,
                                  'ERSDA' 'Data de criação'       ' '    ' '    2        ,
                                  'MAKTX' 'Descrição'             ' '    ' '    3        ,
                                  'WERKS' 'Centro'                ' '    ' '    4        ,
                                  'LGORT' 'Depósito'              ' '    ' '    5        ,
                                  'PSTAT' 'Status de atualização' ' '    ' '    6
              .


ENDFORM.                    " Z_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  Z_FEED_FIELDCAT
*&---------------------------------------------------------------------*
FORM z_feed_fieldcat  USING    fname
                               seltext
                               check
                               edit
                               col_pos .

  st_fieldcat-fieldname   = fname.
  st_fieldcat-seltext_m   = seltext.
  st_fieldcat-checkbox    = check.
  st_fieldcat-edit        = edit.
  st_fieldcat-col_pos     = col_pos.
  APPEND st_fieldcat TO it_fieldcat.
  CLEAR  st_fieldcat.


ENDFORM.                    " Z_FEED_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  Z_LAYOUT
*&---------------------------------------------------------------------*
FORM z_layout .

" mexe no tamanho da coluna conforme a qtde de caracter da Informação.
  st_layout-colwidth_optimize = 'X'.

" huahuahuahua, simples,,... deixa zebrado.
  st_layout-zebra             = 'X'.

" tem mais esse monte de parametros mas eu naum sei mexe na maioria,
" mas está aih pra vcs mexerem, ow se quiserem ir mais fundo cliquem
" duas vezes no tipo da estrutura 'st_layout'

* st_layout-no_colhead = c_x.               " no headings
* st_layout-no_hotspot = c_x.               " headings not as hotspot
* st_layout-zebra      = c_x.               " striped pattern
* st_layout-no_vline   = c_x.               " columns separated by space
* st_layout-no_hline   = c_x.               "rows separated by space B20K8A0N5D
* st_layout-cell_merge = c_x.               " not suppress field replication
* st_layout-edit       = c_x.               " for grid only
* st_layout-edit_mode  = c_x.               " for grid only
* st_layout-numc_sum   = c_x.               " totals for NUMC-Fields possib.
* st_layout-no_input   = c_x.               " only display fields
* st_layout-f2code     = sy-ucomm,
* st_layout-reprep     = c_x.,              " report report interface active
* st_layout-no_keyfix  = c_x.,              " do not fix keycolumns
* st_layout-expand_all = c_x.,              " Expand all positions
* st_layout-no_author  = c_x.,              " No standard authority check
* st_layout-def_status = c_x.,              " default status  space or 'A'
* st_layout-item_text  = 'texto do item'.,  " Text for item button

ENDFORM.                    " Z_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  Z_ALV
*&---------------------------------------------------------------------*
FORM z_alv .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
      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       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
      is_layout                         = st_layout
      it_fieldcat                       = it_fieldcat
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'

" o 'i_save serve pra grava as alterações que vc fizer SOMENTE no layout
    i_save                            = '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_ALV

Include - Z_INCL_FEED_DEFAULT

  " Include - Z_INCL_FEED_DEFAULT.

*&---------------------------------------------------------------------*
*&      Form  Z_SELECAO
*&---------------------------------------------------------------------*
form Z_SELECAO .

  PERFORM z_select_mara.
" Confere se retornou dados no select
  IF sy-subrc = 0.
    PERFORM z_select_makt.
    PERFORM z_select_mard.
  ELSE.
    MESSAGE 'Não foi encontrados registro(s) com os dados informados ' TYPE 'I'.
  ENDIF.
  PERFORM z_feed_table.

endform.                    " Z_SELECAO

*&---------------------------------------------------------------------*
*&      Form  Z_SELECT_MARA
*&---------------------------------------------------------------------*
FORM z_select_mara .

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

ENDFORM.                    " Z_SELECT_MARA
*&---------------------------------------------------------------------*
*&      Form  Z_SELECT_MAKT
*&---------------------------------------------------------------------*
FORM z_select_makt .

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

ENDFORM.                    " Z_SELECT_MAKT

*&---------------------------------------------------------------------*
*&      Form  Z_SELECT_MARD
*&---------------------------------------------------------------------*
FORM z_select_mard .

  SELECT  matnr
          werks
          lgort
          pstat
    FROM mard
    INTO TABLE it_mard
    FOR ALL ENTRIES IN it_mara
    WHERE matnr = it_mara-matnr
    AND   werks = p_werks
    AND   lgort = p_lgort
    .

ENDFORM.                    " Z_SELECT_MARD

*&---------------------------------------------------------------------*
*&      Form  Z_feed_table
*&---------------------------------------------------------------------*
FORM z_feed_table .

  LOOP AT it_mara INTO st_mara.
    READ TABLE it_makt INTO st_makt WITH KEY matnr = st_mara-matnr.
    READ TABLE it_mard INTO st_mard WITH KEY matnr = st_mara-matnr
                                             werks = p_werks
                                             lgort = p_lgort .
    st_outtab-check = space.
    st_outtab-matnr = st_mara-matnr.
    st_outtab-ersda = st_mara-ersda.
    st_outtab-maktx = st_makt-maktx.
    st_outtab-werks = st_mard-werks.
    st_outtab-lgort = st_mard-lgort.
    st_outtab-pstat = st_mard-pstat.

    APPEND st_outtab TO it_outtab.

    CLEAR : st_outtab.
  ENDLOOP.
ENDFORM.                    " Z_feed_table

Include - Z_INCL_DECLARA_DEFAULT

  *&---------------------------------------------------------------------*
"  Aee gente, hoje eu acordei com mou preguiça de fika fazendo as mesmas
" declarações e selects portanto estarei mostrando como faz um include,
" éééé... vcs vão ver como eh facil.
"  O objetivo das includes e elas virarem objetos para uso de varios
" programas ao mesmo tempo, portanto depois de criados (caso esteja sendo
" usados pro programas que vc não tem o controle ) tentem não mexer neles
" o maximo possivel.
"  Pra faze eh muito facil, soh escrever 'INCLUDE' e escrever o nome da
" da mesma, ai é soh clicar duas vezes e pronto.

" A include criada abaixo será uma declaração de tipos, estruturas e
" tabelas internas padrão pra que eu não precisemos declarar isso toda hora.

" Include -- Z_INCL_DECLARA_DEFAULT "

" Tabelas transparentes ....
TABLES : mara
  .
" Tipos .....
TYPES :
" Tabela de clientes ..
  BEGIN OF ty_mara,
    matnr TYPE mara-matnr,
    ersda TYPE mara-ersda,
    ernam TYPE mara-ernam,
  END OF   ty_mara,

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

  BEGIN OF ty_mard,
    matnr TYPE mard-matnr,
    werks TYPE mard-werks,
    lgort TYPE mard-lgort,
    pstat TYPE mard-pstat,
  END OF   ty_mard,

  BEGIN OF ty_outtab,
    check TYPE c,
    matnr TYPE mara-matnr,
    ersda TYPE mara-matnr,
    maktx TYPE makt-maktx,
    werks TYPE mard-werks,
    lgort TYPE mard-lgort,
    pstat TYPE mard-pstat,
  END OF ty_outtab
       .

" Estruturas ....
DATA : st_mara    TYPE ty_mara,
       st_makt    TYPE ty_makt,
       st_mard    TYPE ty_mard,
       st_outtab  TYPE ty_outtab,
       st_outtab2 TYPE ty_outtab
      .

" Tabelas internas ....
DATA : it_mara    TYPE TABLE OF ty_mara,
       it_makt    TYPE TABLE OF ty_makt,
       it_mard    TYPE TABLE OF ty_mard,
       it_outtab  TYPE TABLE OF ty_outtab,
       it_outtab2 TYPE TABLE OF ty_outtab
      .

" Tela de seleção .....
SELECTION-SCREEN BEGIN OF BLOCK b1.
SELECT-OPTIONS : so_matnr FOR  mara-matnr.
PARAMETERS :     p_spras  TYPE makt-spras,
                 p_werks  TYPE mard-werks,
                 p_lgort  TYPE mard-lgort
            .
SELECTION-SCREEN END OF BLOCK b1.

terça-feira, 12 de julho de 2011

Transação para verif. de erro - UCCHECK

" A transação 'UCCHECK' seleciona os programas e ele 'cheka' se tem algum erro de sintase, Muito loko "
Obs. mudem o numero maximo de programa pra aparece o ALV.

sexta-feira, 8 de julho de 2011

Programa de Busca Completo

" Mexam no programa " rpr_abap_source_scan ", esse programa faz uma varredura em tudo no SAP."

quarta-feira, 6 de julho de 2011

Dicionário - Dominio

  report zse11_Dominio.

*&---------------------------------------------------------------------*
" Começaremos com o Inicio, o 'Dominio, que são aonde vc coloca as ca
" racteristicas técnicas tipo, tamanho e casas decimais caso tenha, o 
" dominio tb pode deixar valores pré-definidos, nos programas nós não
" podemos colocar uma variavel com um tipo 'Dominio sem relação
" com campo de tabelas ou estruturas.
" Agora nós iremos fazer um dominio 'Z'
" Primeiro vá na transação 'SE11', flag a opção 'Dominio' e clique no 
" botão 'Criar' indicado na imagem abaixo.




" Depois de Clicar irá aparecer está tela.



" Nesta tela você terá que colocar primeiro a descrição Breve e o tipo de 
" dados pra conseguir mexer no mesmo, se vc perceber tem três abas,
" a aba 'Caracts. onde está a data e o usuário da ultima modificação, o 
" pacote que salvou o objeto e o idioma do objeto.
" Na aba 'Definições é aonde vc informa o tipo e o tamanho do dados que 
" esse dominio suporta e por ultimo na aba Interv.Vals. onde vc colocará 
" os valores que este dominio pode receber, se vc não tiver controle sobre
" isso então deixe vazio mesmo.
" Muito Facil né, mas ele eh muito importante tb, portanto não saia 
" criando dominios por aih sem controle ( na verdade como tudo no ambiente).

Dicionário de dados


  "  Hoje estaremos entrando numa coisa muito importante durante o desenvol
" vimento de programas que é o dicionário de dados ABAP, que servem
" como padrão de dados, trataremos os mais importantes, que são 'dominios,
" elementos de dados, estruturas, e tabelas transparentes na transação 
" 'SE11' que servem de forma global,(para todos os programas ABAP, 
" functions, etc).

" Acima tem uma ilustração de como estes objetos conversam entre si, cada 
" um com a sua importancia.
" Nos Proximos dias, estarei explicando cada objeto do dicionário, e atuali
" zarei este post com os links de cada.

" Dominio - http://abapjuniores.blogspot.com/2011/07/dicionario-dominio.html
" Elemento de dados - http://abapjuniores.blogspot.com/2011/08/dicionario-elemento-de-dados.html
" Estruturas - http://abapjuniores.blogspot.com/2011/08/dicionario-estruturas.html
" Tabelas - http://abapjuniores.blogspot.com/2011/08/dicionario-de-dados-tabela.html

terça-feira, 5 de julho de 2011

Comparação de objetos semelhantes

  " Estarei mostrando uma técnica usada bastante quando e feito cópia de 
" Standard ou quando vc quer compara algo pra ver as diferenças entre 
" dois arquivos semelhantes ou ateh os mesmos soh que em versões diferentes
", um negocio chamado 'Editor de tela dividida.
" Primeiro entre no arquivo que vc quer compara, Depois faça o seguinte
" Passo
" Utilitários/ Outros Utilitários / Editor de tela dividida..


" Depois deste passo irá aparecer está tela onde vc deverá colocar o objeto
" que deseja comparar, repare que da pra faze isso com programas, funções e
" classes. Aperte o botão 'Exibir.






" Agora aparecerá o codigo fonte dos dois programas, clicando no botão 
" Indicado na imagem ele irá frizar todos as diferenças entre eles ficando 
" mais facil de procurar alterações e melhorias entre os arquivos solicitados.

segunda-feira, 4 de julho de 2011

Status GUI dahorinha

" O programa SAPLSLVC_FULLSCREEN tem uns Status GUI bons, assim vc naum precisa faze, e soh copia "

sexta-feira, 1 de julho de 2011

Functions com Exceptions

" Descomente o 'Exception' das 'Functions', isso garante o funcionamento da function por completo"