quarta-feira, 24 de julho de 2013

At Select Screen

*  Eae pessoal, hoje vou mostrar um comando que é muito utilizado por
* nós abapers que é o 'AT SELECTION SCREEN' que conforme os Docs do SAP
* falam, esse comando é para criar evento durante o processamento da
* tela de seleção, quando você quer trabalhar as açoes do User como
* clicar em algo ou mudar algo na tela em momento de execução conforme a
* ação do User, segue os 'AT SELECTION SCREEN' mais usados ( pelomenos
* por mim rs ).
*  Bons estudos pessoal, e continuem mandando os emails com dúvidas,
* estarei respondendo o mais rápido possível.
*  Valeo.
*&---------------------------------------------------------------------*
REPORT z_at_select_screen.

* Tabelas
TABLES:
  makt.

* Variáveis
DATA :
 vg_maktx 
TYPE makt-maktx.

* Telas de seleção.
SELECTION-
SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_matnr 
TYPE mara-matnr.
SELECTION-
SCREEN END OF BLOCK   b1.

SELECTION-
SCREEN BEGIN OF BLOCK b2 WITH FRAME.
SELECT-OPTIONS:
  s_outpu 
FOR makt-matnr MODIF ID gr1 NO INTERVALS.
SELECTION-SCREEN END OF BLOCK   b2.

*  Comando acionado quando apertado o botão de Match Code do parameter
* informado.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.
  BREAK-POINT.
  
PERFORM z_select_makt.

*  Comando acionado quando apertado o Botão F1 (Ajuda)no Parameters
* Informado
AT SELECTION-SCREEN ON HELP-REQUEST FOR p_matnr.
  
BREAK-POINT.
  
PERFORM z_help_matnr.

* Processo acionado ao iniciar o programa.
AT SELECTION-SCREEN OUTPUT.
  BREAK-POINT.
  
PERFORM z_trata_tela.

*  Reparem que em nenhum momento o programa foi inicializado, pois o
* comando 'AT SELECTION SCREEN' trabalha antes de qualquer processo.
START-OF-SELECTION.
  BREAK-POINT.

quarta-feira, 12 de junho de 2013

Log de Modificações - CDHDR e CDPOS

*  Eae Pessoal, trabalhamos de corpo e alma num projeto quando estamos
* no começo, mas ABAP Junior é como um Estagiário no mundo SAP, portanto
* sempre haverá uns caras que vão falar que você fez merda, como apagar
* dados da 'MARA' ou usou alguma transação de forma errada onde acabou
* Modificando alguns dados mestres, mas pra vocês não ficarem a merce
* desses Bullings estou postando esse programa que mostra todas as
* modificações conforme o user, agora na próxima vez você executa esse
* programinha e isso retorna o log de modificações provando sua inocência.

*  O problema é que só será gravado os logs das tabelas que tiverem
* um 'flag' para registrar isso, para verificar se a tabela cria log de
* modificações é só entrar nele clicar no Botão 'Configurações técnicas'
* e olhar na ultima linha da tela que vão ver o Flag lá.


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
          .