terça-feira, 21 de maio de 2013

Initialization / Start-of-Selection


*  Bom dia, tava trabalhando e perguntaram pra mim qual a diferença entre
* o comando 'INITIALIZATION' e 'START-OF-SELECTION', bem, pra sanar a dúvidas
* fiz este post simples pra tentar mostrar pra vocês de forma prática a
* diferença entre os mesmos, logo após ambos os comandos coloquei o mesmo
* perform, na verdade, não faz muito sentido fazer isso, mas assim vocês
* vão ver um pouco mais nítido a diferença entre eles, reparem os dados
* na tabela interna 'IT_SCARR' e no parametro de seleção 'S_CARRID', durante
* os dois momentos diferentes.

REPORT z_initi_x_start.

* Declaração de tabelas transparentes
TABLES :
  scarr.

* Tabelas Internas e estruturas
DATA:
  it_scarr 
TYPE TABLE OF scarr,
  st_scarr 
TYPE scarr.

* Tela de seleção
SELECTION-
SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS :
  s_carrid 
FOR scarr-carrid obligatory.
SELECTION-
SCREEN END OF BLOCK   b1.


*  INITIALIZATION - Esse comando força a execução de processos antes mesmo de
* mostrar a tela de seleção, funciona como o PBO de um Module Pool.
* Remember
* http://abapjuniores.blogspot.com.br/2011/04/module-pool-basico.html
INITIALIZATION.

  BREAK-POINT.

  
PERFORM z_seleciona_carrid.

*  START-OF-SELECTION - processo normal de um programa, após alimentar os dados
* na tela de seleção, os mesmos servirão como condição para as seleções de dados
* do programa e outras tratativas convenientes.
START-OF-SELECTION.

  BREAK-POINT.

  
PERFORM z_seleciona_carrid.

quinta-feira, 16 de maio de 2013

Procurando Objetos em Requests - SE03


*  Opa, trabalhando encima de um sapScript, o meu chefe perguntou...
* Quantas requests já foram pra produção com esse Formulário que você
* está trabalhando ? Na hora eu já falei não sei, mas vou ver...
*  Indo ver, percebi que não tem a opção 'Utilitarios/versões' que mostra
* todas as requests do objeto que estamos trabalhando igual a 'SE38',
* foi nessa hora que eu encontrei a transação 'SE03' que nada mais é que
* uma transação que dá um auxilio pra trabalhar com requests, o legal é
* que o primeiro link do menu é 'Procurar objetos em Ordens/Tarefas'..



segunda-feira, 13 de maio de 2013

Função - C14W_NUMBER_CHAR_CONVERSION


*  As vezes temos que trabalhar com numeros flutuantes ( type F )
* e na hora de mostrar percebos que o valor não eh muito amigável
* para um relatório, então usamos a função abaixo e o Key User
* vira nosso fã.
REPORT z_float_char_decimals.

TYPES :
  
BEGIN OF ty_saplane,
    planetype 
TYPE saplane-planetype,
    seatsmax  
TYPE saplane-seatsmax,
    consum    
TYPE saplane-consum,
    con_unit  
TYPE saplane-con_unit,
  
END OF   ty_saplane
  .

* Declaração da estrutura e variáveis
DATA :
  st_saplane 
TYPE ty_saplane,
  vg_char30  
TYPE char30,
  vg_dec     
TYPE esecompavg
  .

* Tela de seleção
SELECTION-
SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_plane 
TYPE saplane-planetype obligatory.
SELECTION-
SCREEN END OF BLOCK   b1.

* Inicio do processo
START-
OF-SELECTION.

  
PERFORM : z_select_saplane,
            z_mostra_dados
          .

sexta-feira, 15 de março de 2013

Trabalhando com Números

  *  Salve Abapers, vamos conversar hoje sobre comandos que ajudam muito
* a gente quando estamos trabalhando com valores e números, são todos
* comandos simples, e como sempre feito pelo Blog, vou explicar e dar
* pelomenos um exemplo...
*&---------------------------------------------------------------------*
REPORT z_work_with_numbers.

* Primeiro vamos declarar as variáveis que vamos trabalhar...
DATA : v_int_pos  TYPE VALUE  '5',
       v_int_zero TYPE VALUE  '0',
       v_int_neg  TYPE VALUE '-5',
       v_dec_pos  TYPE DECIMALS VALUE  '1234.56',
       v_dec_neg  TYPE DECIMALS VALUE '-1234.89',
       v_string   TYPE string VALUE 'a1bcde2fg3hij5lmn78z'.

* Variáveis para tratativas numéricas
DATA : v_sign     TYPE i,
       v_trunc    TYPE i,
       v_frac     TYPE DECIMALS 2,
       v_sqrt     TYPE DECIMALS 2,
       v_sqrt_f   TYPE f,
       v_mod      TYPE i,
       v_div      TYPE i
       .

* Variáveis para tratativas alfanumericos.
DATA : v_strlen   TYPE i
       .




quarta-feira, 6 de março de 2013

ALV - Criação de variante de layout do ALV

  *  Um abaper Junior Bom, antes de pedir qualquer aumento pro chefe, tem
* que se garantir quando o assunto é ALV, e estamos aqui pra isso,
* para auxiliá-los nos seus programas, portanto abaixo estou dando um exemplo
* de como criar uma variante de layout de tela do seu ALV, sabe quando o
* KeyUser chega em você e fala que quer que o ALV venha somando algumas colunas,
* e faça subtotal, e coloque em ordem decrescente um monte de coisa, pra você
* não estressar com o ele, é só incluir dois parametros dentro da função
* que cria o alv, esses parametros são o 'i_save' e o 'is_variant', de
* brinde segue uma função que busca as variantes de layout do programa, segue
* código aihhhh minhaaa geeeennnntteeeeeee (Ritmo de carnaval ainda).
*  Qualquer dúvida estou a disposição.
REPORT z_criar_variante_layout_alv.

* Conjunto de tipos
TYPE-POOLS :
  slis.

* Tabelas
TABLES :
  scarr.

*Tipos
TYPES:
  BEGIN OF ty_spfli,
    carrid    TYPE spfli-carrid,
    connid    TYPE spfli-connid,
    countryfr TYPE spfli-countryfr,
    countryto TYPE spfli-countryto,
  END OF   ty_spfli,

  BEGIN OF ty_sflight,
     carrid    TYPE sflight-carrid,
     connid    TYPE sflight-connid,
     fldate    TYPE sflight-fldate,
     price     TYPE sflight-price,
     currency  TYPE sflight-currency,
     planetype TYPE sflight-planetype,
  END OF   ty_sflight,

  BEGIN OF ty_saplane,
    plantype TYPE saplane-planetype,
    consum   TYPE saplane-consum,
    producer TYPE saplane-producer,
  END OF   ty_saplane,

  BEGIN OF ty_outtab,
    carrid    TYPE scarr-carrid,
    connid    TYPE spfli-connid,
    fldate    TYPE sflight-fldate,
    price     TYPE sflight-price,
    currency  TYPE sflight-currency,
    planetype TYPE sflight-planetype,
    consum    TYPE saplane-consum,
    producer  TYPE saplane-producer,
    countryfr TYPE spfli-countryfr,
    countryto TYPE spfli-countryto,
    carrname  TYPE scarr-carrname,
    url       TYPE scarr-url,
  END OF ty_outtab
  .

* Tabelas Internas
DATA :
  it_scarr    TYPE TABLE OF scarr,
  it_spfli    TYPE TABLE OF ty_spfli,
  it_sflight  TYPE TABLE OF ty_sflight,
  it_saplane  TYPE TABLE OF ty_saplane,
  it_outtab   TYPE TABLE OF ty_outtab,
  it_fieldcat TYPE TABLE OF slis_fieldcat_alv
.

* Estruturas
DATA :
  st_scarr    TYPE scarr,
  st_spfli    TYPE ty_spfli,
  st_sflight  TYPE ty_sflight,
  st_saplane  TYPE ty_saplane,
  st_outtab   TYPE ty_outtab,
  st_fieldcat TYPE slis_fieldcat_alv,
  st_layout   TYPE slis_layout_alv,
  st_varia    TYPE disvariant
  .

* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS :
  s_carrid FOR scarr-carrid.
PARAMETERS :
  p_vari TYPE disvariant-variant.
SELECTION-SCREEN END OF BLOCK   b1.

*  Aqui tá parte do segredo, caso o programa já tenha alguma variável de
* de layout, na hora que clicar no matchcode do campo 'Layout' será
* criado um Pop-up com essas informações e assim você seleciona o que
* desejar.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
  PERFORM z_select_variavel_alv.

* Inicio do processo
START-OF-SELECTION.

  PERFORM : f_seleciona_dados.

  IF it_sflight IS NOT INITIAL.
    PERFORM : f_trata_dados,
              f_cria_alv
              .
  ENDIF.

* Fim do processo.
END-OF-SELECTION.

quinta-feira, 28 de fevereiro de 2013

Function - SCP_REPLACE_STRANGE_CHARS

*  Fala Galera, ultimamente tenho ficado um pouco ausente com os posts pois
* estava num projeto tenso, rsrs, estarei conpensando pois o projeto já foi
* dado Go Live e agora terei a minha vida normal, desculpasss...
*  hoje estarei falando sobre uma função que tira os acentos das palavras,
* um dia vocês irão fazer ( se não já fizeram ) uma etiqueta zebra, a
* impressora não reconhece letras acentuadas portanto ficando buracos entre
* palavras na hora da impressão tipo assim :
* Normal : Difícil
* Zebra  : Dif cil
*  Não querendo que ficasse assim achei a função abaixo.
REPORT  z_replace_strange.
* Variáveis
DATA :
  vg_text TYPE string VALUE 'pãpêpìpú'.

* Início de processo
START-OF-SELECTION.

  PERFORM zf_trata_valor_variavel.

*&---------------------------------------------------------------------*
*&      Form  ZF_TRATA_VALOR_VARIÁVEL
*&---------------------------------------------------------------------*
FORM zf_trata_valor_variavel .

  CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
    EXPORTING
      intext                  vg_text
*   INTEXT_LG               = 0
*   INTER_CP                = '0000'
*   INTER_BASE_CP           = '0000'
*   IN_CP                   = '0000'
*   REPLACEMENT             = 46
   IMPORTING
     outtext                 vg_text
*   OUTUSED                 =
*   OUTOVERFLOW             =
   EXCEPTIONS
     invalid_codepage        1
     codepage_mismatch       2
     internal_error          3
     cannot_convert          4
     fields_not_type_c       5
     OTHERS                  6
            .
*  Sempre tente dar uma olhada no código dentro da função, a maioria das vezes
* conseguimos encontrar algo que pode prestar para outra coisa, como outras 
* funções, comandos ou regras de interessantes de codificação.

  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.                    " ZF_TRATA_VALOR_VARIÁVEL

segunda-feira, 25 de fevereiro de 2013

Função - TH_POPUP

  *  Pessoal, espero que vocês tenham curtido esse carnaval, mas você sabe
* depois de uma bela zuera, as vezes, temos muitas novidades para contar
* para os amigos, mas também, sempre que voltamos de um feriado parece que
* o serviço duplicou rsrs, portanto pra trabalhar e ao mesmo tempo
* contar as novidades e histórias absurdas com seu amigo ( outro Usuário
* logado no mesmo ambiente ), vocês podem usar a função abaixo.
*  Essa Função é usada por Basis pra informar os usuários algo importante,
* portanto usem com moderação.

REPORT  z_like_msn.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_user TYPE tr_as4user DEFAULT sy-uname, "User a se contactar
  p_msg  TYPE sm04dic-popupmsg.            "Mensagem
SELECTION-SCREEN END OF BLOCK b1.

* Início de processo
START-OF-SELECTION.

  PERFORM zf_falar_amigo.

*&---------------------------------------------------------------------*
*&      Form  ZF_FALAR_AMIGO
*&---------------------------------------------------------------------*
FORM zf_falar_amigo .

  CALL FUNCTION 'TH_POPUP'
    EXPORTING
      client               sy-mandt
      user                 p_user
      MESSAGE              p_msg
*   MESSAGE_LEN          = 0
*   CUT_BLANKS           = ' '
 EXCEPTIONS
   user_not_found       1
   OTHERS               2
            .

  BREAK-POINT.
  IF sy-subrc 1.
    MESSAGE 'Usuário não encontrado, Sorry'
      TYPE 'E'.
  ENDIF.


ENDFORM.                    " ZF_FALAR_AMIGO

quinta-feira, 10 de janeiro de 2013

Função - IQAPI_WORD_WRAP


*  Eae Pessoal, Tudo bem, me perguntaram por email porque um texto que
* ele tava passando no Smartforms só estava aparecendo somente os
* primeiros 52 caractéres, informei pra ele que era por causa do tamanho
* do frame.


*  Entendido o porque acontecia isso a mesma pessoa informou que não
* poderia mudar a dimenção da linha com a informação do texto, mas mesmo
* assim deveria mostrar toda a informação, pra isso existe uma função
* que quebra o texto conforme o tamanho necessário e joga a informação
* dentro de uma tabela, a função abaixo pode ser usado pra várias coisas.
*  Valeo a dica Caroline Vaz, e continuem mandando suas dúvidas.
REPORT z_quebra_texto.DATA :
  vg_textline
(256TYPE c,
  it_textline 
LIKE TABLE OF vg_textline,
  vg_t1
(256TYPE c,
  vg_t2
(256TYPE c,
  vg_t3
(256TYPE c
  .
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_outp 
TYPE i,
  p_deli 
TYPE c AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK   b1.START-OF-SELECTION.

  
BREAK-POINT.
  
PERFORM z_cria_tabela.

  
PERFORM z_mostra_dados_tabela.