sexta-feira, 7 de junho de 2013

Função - F4IF_INT_TABLE_VALUE_REQUEST


*  Um jeito usado frenquentemente pelos ABAP's para ver informações 
* sobre o campo e apertando o 'F1' no campo e assim vemos informações
* técnicas sobre o mesmo, só que os Key-user ( e o funcionais também )
* gostam de ir direto para os possíveis valores daquele campo, são
* os famosos Match Codes, que é só apertar aquele botão que fica no 
* limite do campo ou apertar o 'F4', o Problema é que as vezes no
* o elemento de dados usado naquele campo da tela de seleção não tem 
* ajuda de pesquisa, ou as vezes não vem a informação que precisa, ou,
* na minha opinião é a pior que é vir informações a mais que podem 
* confundir o Key-user, para resolver esse problema do Match Code, 
* podemos usar a função abaixo que é praticamente a mesma coisa só que
* aqui podemos manipular os campos que serão mostrados e os valores
* iremos adotar.
* T+ e bons estudos.

REPORT F4IF_INT_TABLE_VALUE_REQUEST.

* Declarações
DATA :
  it_scarr  
TYPE TABLE OF scarr,
  it_return 
TYPE TABLE OF ddshretval,
  st_return 
LIKE LINE OF  it_return.

* Tela de seleção
SELECTION-
SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_carrid 
TYPE scarr-carrid.
SELECTION-
SCREEN END OF BLOCK b1.

*  Processo Inicial para o parametro da tela.
*  Pra ficar legal, comente as duas linha abaixo depois que você ver como 
* funciona, pra vocês verem a diferença entre o match code já existente 
* com o que criamos agora.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_carrid.
  
PERFORM z_select_scarr.

START-
OF-SELECTION.

quinta-feira, 30 de maio de 2013

TabStrip no Module Pool


*  Eae rapaziada, hoje vamos trabalhar com uma ferramenta usada muito em
* transações Standards e que facilitam muito a visualização para o user
* separando as informações por topicos em ABAS, isso mesmo, vamos 
* trabalhar com TABSTRIP no MODULE POOL, como sempre falo, não é difícil
* mas pra trabalharmos com Module pool precisamos ter a idéia do PBO e PAI
* nítidos nas nossas cabeças, não lembra ????.. Acesse o Link abaixo...
* http://abapjuniores.blogspot.com/2011/04/module-pool-basico.html
*  Vamos começar agora, primeiramente vamos criar no Module Pool, depois
* de criar, vamos criar uma tela pra ele conforme imagem abaixo, se não 
* for problema pra vocês, usem a mesma nomenclatura que estou usando.




*  Agora com a tela criada vamos colocar os TabStrips na mesma, clique no
* botão 'LAYOUT' e vamos desenhar as ABAS apertando no botão 'Controle de 
* fichas' (Tabstrip Control) e vamos prencheer toda a area da tela, agora 
* criada vamos declarar que a mesma tem três(3) abas, clique duas vezes no
* objeto e coloque (3) no campo 'ELEM.ÍND.' que pra mim é Índice de abas,
* conforme abaixo( Não tem F1 desse parametro aqui ).




sexta-feira, 24 de maio de 2013

Comando Try / Catch


*  Nós, meros abap's, devemos trabalhar de uma forma que nunca cause
* problemas para o User, sempre informando, em formas de mensagens,
* caso alguma coisa saia fora do padrão. O problema é que as vezes acontece
* o famoso e temido 'DUMP' e isso é um pesadelo pra todo o ABAP porque
* significa que você não fez todas as tratativas possiveis, portanto o
* programa volta para a sua mão e você analisa o problema, analisando
* descobre que você não consegue tratar esse problema ( muito difícil
* isso acontecer ) mas mesmo assim, esse maldito 'DUMP' não pode ocorrer
* dinovo, pra garantir isso usamos o comando 'TRY / CATCH' que serve como
* uma forma de tratativa caso ocorra um 'DUMP' e assim você substitui
* aquela tela cheia de texto marcados em vermelho e que as vezes vem escrito
* tudo em alemão pro User e retorna uma mensagem toda feliz e tranquila.
*  Veja como abaixo. Esse comando é bem parecido com os de outras linguagens,
* use esse comando como ultima das suas ações, tente sempre tratar antes de
* processar qualquer coisa. Good Luck =)

REPORT try_catch.
*&---------------------------------------------------------------------*
DATA :
  vg_value  
TYPE i,
  vg_string 
TYPE string VALUE 'ABC',
  vg_cont   
TYPE i,
  it_mara   
TYPE TABLE OF mara,
  vg_where  
TYPE string VALUE 'VBELN = VG_STRING'.

*  Eu Criei um 'DO' pra vocês verem 'DUMP`s' diferentes acontecendo no mesmo
* programa e mesmo assim o processo não é abortado, e sim, é mostrado uma
* mensagem bem mais amigável.

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.