quarta-feira, 27 de janeiro de 2016

Trabalhando com Caixa de Texto - CL_GUI_TEXTEDIT

REPORT z_caixa_de_texto.

*  Opa pessoal, quando vamos montar telas para os nossos queridos User
* colocamos sempre os campos da tabela que estamos trabalhando e na maioria
* das vezes só os campos mais importantes, só que as vezes esses mesmos
* users querem uma caixa de texto lateral ou abaixo das informações para
* principais para que seja possível incluir observações sobre o processo,
* documento ou qualquer outra coisa que esteja fazendo... Até aí sem problema.
*  O problema começa quando o objeto de caixa de texto não é existe na caixa
* de ferramentas da edição da screen, nesse momento vamos descobrir a usar
* a classe CL_GUI_TEXTEDIT.
*  No final contem os prints de tela.
*  Caso não lembre como ver os dados gravados em um Objeto de texto.
*  Como em todos os posts estarei fazendo os comentários no meio do código,
* bons estudos =).
DATA :
  o_docking 
TYPE REF TO cl_gui_docking_container,
  o_editor  
TYPE REF TO cl_gui_textedit.

* Tela Principal
CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Module  INIT  OUTPUT
*&---------------------------------------------------------------------*
MODULE init OUTPUT.

  
CREATE OBJECT o_docking
    
EXPORTING
      repid 
= sy-repid    " Report to Which This Docking Control is Linked
      dynnr 
= '9000'.        " Screen to Which This Docking Control is Linked

  
IF o_editor IS NOT BOUND.
* Limite do docking que conterá o textedit
    o_docking
->set_extension( 400 ).
*  Criação do objeto da caixa de texto com limitações de quantidade total e
* quantidade total por linha.
    
CREATE OBJECT o_editor
      
EXPORTING
        max_number_chars           
= 100
        parent                     
= o_docking
        wordwrap_mode         
= cl_gui_textedit=>wordwrap_at_fixed_position
        wordwrap_position          
= 25
        wordwrap_to_linebreak_mode 
= cl_gui_textedit=>true.


*  Abaixo eu criei um perform para dar get e set na caixa de texto pois
* o mesmo usaria as mesmas variaveis no read_text e save_text, sendo o
* o primeiro parametro ( que nesse caso é o 'SET' como chave para o processo
* READ_TEXT -> SET_TEXT_AS_R3TABLE
    
PERFORM f_get_set_text_to_editor USING 'SET' o_editor.

  
ENDIF.

ENDMODULE.                 " INIT  OUTPUT

terça-feira, 19 de janeiro de 2016

Mudando o Layout por campo do ALV - LVC_T_STYL

REPORT z_cell_style.
*  Opa Pessoal, estou devolta pra mostrar como mudar o estilo por celula,
* o modo normal hoje para deixar zebrado ou as medidas da coluna conforme
* os valores nela contido usamos a estrutura LVC_S_LAYO mas esse layout
* é para todo o relatório, mas para trabalhar por celula conforme valor,
* ou deixar aberto um campo especifico dentro do alv usando regra de negocio,
*  isso queiremos fazer hoje, como sempre o código está simples para que
* consigam focar nas diferenças de um ALV normal.

*  Aqui, logo de começo já tem uma das diferenças que é a inclusão do campos
* 'CELLTAB' dentro da tabela ´de saída que será exibida, clicando duas vezes
* no tipo do campo 'LVC_T_LAYO' vamos perceber que ele na verdade é uma tabela,
* nesse campo que é uma tabela ira conter todos os layouts referente ao registro.
* Tipos
TYPES :
  
BEGIN OF ty_sflight.
        
INCLUDE STRUCTURE sflight.
TYPES :
  celltab 
TYPE lvc_t_styl,
  
END OF ty_sflight.

* Objetos
DATA :
  o_alv     
TYPE REF TO cl_gui_alv_grid,
  o_docking 
TYPE REF TO cl_gui_docking_container.

* Tabelas Internas
DATA :
  it_fieldcat 
TYPE TABLE OF lvc_s_fcat,
  it_sflight  
TYPE TABLE OF ty_sflight.

* Parametros
PARAMETERS :
  p_seats 
TYPE sflight-seatsocc,
  p_seatm 
TYPE sflight-seatsmax_b.

* Tela Principal com o ALV
CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Module  INITIALIZATION  OUTPUT
*&---------------------------------------------------------------------*
MODULE initialization OUTPUT.


  
BREAK-POINT.
*  Aqui estamos criando a estrutura que ira conter as informações referente
* ao layout do ALV, a unica coisa que vamos fazer nessa estrutura e informar
* no campo 'STYLEFNAME' o nome do campo/tabela que ira conter as informações
* de layout especifico para cada campo do registro atual.
  
DATAlst_layout TYPE lvc_s_layo.
  lst_layout
-no_toolbar abap_true.
  
lst_layout-stylefname 'CELLTAB'.

  
PERFORM  :
* criação do catalogo de campos
  f_fieldcat
,
* Seleção dos dados do Vôo
  f_selection_sflight
,
* Criação dos layouts para cada celula conforme regra
  f_style_celltab
.

  
IF o_docking IS INITIAL.

    
CREATE OBJECT o_docking
      
EXPORTING
        repid     
sy-repid    
        dynnr     
'9000'        
        extension 
9999.       " Control Extension

    
CREATE OBJECT o_alv
      
EXPORTING
        i_parent 
o_docking.

    o_alv
->set_table_for_first_display(
      
EXPORTING
        is_layout                     
lst_layout
      
CHANGING
        it_outtab                     
it_sflight
        it_fieldcatalog               
it_fieldcat
    
).

    o_alv
->set_ready_for_inputEXPORTING i_ready_for_input ).

  
ENDIF.

ENDMODULE.                 " INITIALIZATION  OUTPUT

sexta-feira, 8 de janeiro de 2016

Personalizar o autocomplete/Editor ABAP



**********************************************************************
* Bom dia, meu nome é Victor Hugo, sou desenvolvedor ABAP Senior
* e este será meu primeiro post para o blog, hoje vou somente dar uma
* dica bem simples para quem esta começando no desenvolvimento SAP.
* Eu gosto muito de automaizar as coisas que eu faço, para não ficar
* perdendo tempo, e as vezes perdemos tempo escrevendo comentários,
* códigos repetitivos, etc. Eu posso dar um exemplo simples, quando
* estamos codificando sabemos alguns autocomplete do Editor ABAP, certo ?
* Como por exemplo o CASE e LOOP. Quando digitamos aparece como abaixo:
**********************************************************************



**********************************************************************
* E se apertamos a tecla TAB, o código se completa, montando toda a sua
* estrutura, e isso acontece para N instruções. Ok, isso você já sabe,
* mas você sabe a onde é configurado ? A configuração é do próprio
* editor ABAP, basta você clicar no botão de opções, localizado no canto inferior direito
* como abaixo:
**********************************************************************



quinta-feira, 7 de janeiro de 2016

Encontrando as Rotinas de Conversões

* Fala rapaziada, hoje vou mostrar como encontrar um Rotina de conversão.
* Muitas vezes estamos usando valores de exibição e usamos ele para fazer
* seleção em alguma tabela mas esquecemos de incluir os zeros a esquerda,
* conforme o material ( MATNR ), ou o campo que é uma coisa mas na hora de
* usar como chave em outra tabela ele tem outro valor ( conforme elemento PEP
* ( PS_PSP_PNR ).

* Para encotrar é muito fácil, primeiro você clica duas vezes no elemento ou
* vai na se11 e coloca o nome do elemento na campo 'Categoria de dados' e clique
* em 'Exibir' conforme abaixo.



* Depois clique duas vezes no Domínio.




terça-feira, 13 de outubro de 2015

Projeto ABAP Junior - Skype

Fala Galera, pensando nos emails que estou recebendo de dúvidas e sugestões estou criando um grupo no Skype para conversarmos sobre tópicos de interesse coletivo e principalmente que faça sentido para o Mundo SAP / ABAP.

- Dúvidas
A ideia é simples, vamos conversando  ajudando uns aos outros, essa será uma importante ferramenta para auxílio de todo o ABAP emergente.

- Sugestões
Mais simples ainda.... As vezes estou focado num Post sobre algo interessante, mas que na minha visão é interessante, como criei o Blog para ajudar os ABAP que querem aprender nada melhor que perguntar para vocês quais são os tópicos mais desejados.

- Oportunidades
Essa com certeza irão gostar, aparecendo vagas estarei disponibilizando-as no grupo e torcendo para que consigam entrar ou até trocar de emprego caso necessário.
Obs.: A situação atualmente do Brasil não está muito boa, mas estaremos estudando nesse grupo para que situações externas não afetem a nossas oportunidades, pois sendo um profissional diferenciado, o mercado olhará pra você de forma diferenciada.

Me adicionem e peçam para entrar no Grupo, todos cientes dos tópicos acima serão bem vindos

Skype : maurorpjunior

Valeoooooo


quinta-feira, 21 de maio de 2015

Função - SD_CALC_DURATION_FROM_DATETIME

*  Boa tarde galera, quem é vivo sempre aparece, hoje vou mostrar
* uma função muito boa que te retorna o intervalo entre duas datas
* em horas, minutos e se for esperto até os segundo, usei essa função
* pra criar uma regra de criticidade das datas onde a empresa deveria
* dar retorno ao cliente deles.
*  Vamos lá então porque a função é simples, e de brinde executei a
* rotina de conversão, pra vocês compararem os valores coloquei um
* break-point no meio do processo.
*  Bons estudos e espero ter ajudado.
*--------------------------------------------------------------------*

REPORT zfunction_calc_Interval_date_hour.

*  Tela de seleão com parametros e um CheckBox caso queira usar a rotina
* de conversão.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_date2 TYPE sy-datum" Data
  p_time2 TYPE sy-uzeit" Hora
SELECTION-SCREEN END OF BLOCK   b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS :
  cb_conv AS CHECKBOX.   " Rotina de Conversão.
SELECTION-SCREEN END OF BLOCK   b2.

DATA :
  l_tdiff    TYPE tvro-fahztd,
  l_duration(10),
  l_hour_bpm TYPE i
  .

* Essa é a função.... Simples e rápida.
CALL FUNCTION 'SD_CALC_DURATION_FROM_DATETIME'
  EXPORTING
    i_date1          sy-datum
    i_time1          sy-uzeit
    i_date2          p_date2
    i_time2          p_time2
  IMPORTING
    e_tdiff          l_tdiff
  EXCEPTIONS
    invalid_datetime 1
    OTHERS           2.

quinta-feira, 6 de novembro de 2014

Função - 'NUMBER_GET_NEXT'


*  Opa, agora que sabemos mexer com objeto de intervalo, vamos aprender
* a usar a função que informa o ultimo numero do nosso intervalo, essa
* função é a 'NUMBER_GET_NEXT'.

REPORT z_gera_serializacao.

DATA v_number TYPE char10.

START-OF-SELECTION.

* Geração do serial usando o Primeiro Range do Objeto de Intervalo
  
PERFORM f_gera_serial
    
USING '01' 'Z_DOCS'.

* Geração do serial usando o Segundo Range do Objeto de Intervalo
  
PERFORM f_gera_serial
    
USING '02' 'Z_DOCS'.

segunda-feira, 3 de novembro de 2014

Objeto de Intervalo de Numeração - SNRO

*  A SAP fornece muitas ferramentas que nos auxiliam na hora de desenhar
* ou aplicar a solução, hoje vou mostrar como usar uma transação que
* serializa numeros, isso ajuda muito quando você cria algo. Exemplo :
*  Quando criamos um material, ou Ordem de venda, ou Requisição......
* aquele numero que o sistema retorna pra você é o Numero sequencial dado
* ao seu processo por um intervalo serializado pré definido usando um
* determinado Objeto de intervalo de numeração.
*  Não entendeu, vamos pra prática e irá entender.


*  Primeiramente vamos para a Transação SNRO, iremos criar esse tal Objeto,
* que servirá para serializa Documentos. Dê o nome do objeto de 'Z_DOCS' e
* clique no botão 'CRIAR'.