quarta-feira, 27 de agosto de 2014

Função - LVC_TRANSFER_FROM_SLIS


*  Vamos mudar tudo para Orientação a Objeto', é o que a SAP fala sobre o
* ABAP no futuro, o problema vai ser dar manutenção nos ALV's antigos
* mudando para o ALV Orientado, para dar uma mãozinha nisso, existem duas
* funções que fazem a conversão do formato das tabelas usadas entre a
* função 'reuse_alv_gri_display' e a classe cl_gui_alv_grid, como sou
* defensor da Orientacao a objeto estarei mostrando a função que
* converte de Estrutural para Orientado, mas para não ficarem revoltados
* comigo a funcao q faz inverso é a 'LVC_TRANSFER_TO_SLIS'.
*&---------------------------------------------------------------------*
REPORT z_from_estrut_to_orient.

DATA :
 t_fcat     
TYPE TABLE OF slis_fieldcat_alv,
 t_fcat_lvc 
TYPE TABLE OF lvc_s_fcat,
 t_sflight  
TYPE TABLE OF sflight
 
.

* Selecao de dados
SELECT *
  
FROM sflight
  
INTO TABLE t_sflight
  
UP TO 10 ROWS
  
.

BREAK-POINT.

* Criação do catalogo de campos da função
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  
EXPORTING
    i_program_name         
sy-repid
*   I_INTERNAL_TABNAME     =
    i_structure_name       
'SFLIGHT'
*   I_CLIENT_NEVER_DISPLAY = 'X'
*   I_INCLNAME             =
*   I_BYPASSING_BUFFER     =
*   I_BUFFER_ACTIVE        =
  
CHANGING
    ct_fieldcat            
t_fcat
  
EXCEPTIONS
    inconsistent_interface 
1
    program_error          
2
    
OTHERS                 3.

BREAK-POINT.


terça-feira, 5 de agosto de 2014

View de Manutenção - JOIN de Tabelas

*  Eae Pessoas, tudo bem ? Hoje vou tentar mostrar um forma mis interessante
* de trabalhar com registros dentro de uma View usando mais de uma tabela e
* criando JOIN entre elas para que o usuário possa intergir melhor com a view.
*  Isso que irei mostrar hoje foi uma pergunta que fizeram no ultimo post
* sobre VIEW e eu achei melhor fazer um novo post além de só responder à ele.
*  Nosso Objetivo nesse Post vai ser criar uma VIEW que inseri automaticamante
* a descrição do material depois de inserido o numero do material... Então...
* Vamos Lá.

*  Primeiramente vamos criar uma tabela para gravar os dados da View.
* Não lembra como criar ? >>> Criar tabelas



*  Depois de criada vamos voltar para transação SE11 e vamos criar uma view
* conforme imagem abaixo.
* Informamos que é um View de atualização.




segunda-feira, 24 de março de 2014

Function - Help - Dados de Teste




*  Eae Pessoal, hoje vou mostrar algo que ajuda muito a nós quando 
* estamos tendo problemas de testes em function(BAPI's tb)...
*  É um uma dica muito útil e simples, usarei uma BAPI como exemplo.
*  Sabe quando o funcional passa pra gente, todos os parametros para 
* execução da BAPI mas mesmo assim não funciona, além de sair reclamando
* pro funcional, vamos ver aonde essa BAPI é usada, e vamos colocar um 
* ponto de parada nela, além de você ficar procurando igual a um louco
* aonde está a diferença, você faz igual a imagem abaixo.


*  Clique com o botão direito no espaço onde apareceria alguma variavel.
* Entre na opção, 'Gravar parametros como dados de Teste(Se37)'. Nomeie.



*  Depois, acesse a se37, entre na respectiva function e execute, acima 
* haverá um icone escrito 'Diretório de dados de teste'.



*  Seleciona a variante q você criou e pronto, agora você tem um exemplo
* que funciona.... depois disso você compara as entradas e mostra pro
* funcional aonde ele errou, isso eh muito mais divertido que só 
* perguntar.
*  Valeooooooo....

sexta-feira, 17 de janeiro de 2014

Trocando Telas por Subtelas


* Um dia desses foi solicitado para que eu fizesse um programa que mostrasse
* o resultado em um ALV na mesma tela que a tela de seleção, já veio na
* cabeça, entrar no layout da Tela e desenhar todos os parametros que
* seriam necessários para o resultado correto... Mas aí eu lembrei de um
* jeito bem Maroto de resolver, que é colocando uma SubScreen na Tela e
* assim eu não precisaria desenhar nada, somente criar um selectio-screen
* normal e declarar ele como uma Subscreen, e depois na tela chamar como
* o exemplo abaixo. A vantagem disso é a velocidade de desenvolvimento, pois
* não precisará ficar desenhando cada parametro de entrada das seleções na Tela.

REPORT z_call_subscreen.

DATA :
  it_spfli  
TYPE TABLE OF spfli,
  st_layout 
TYPE lvc_s_layo.

DATA:
  o_alv       
TYPE REF TO cl_gui_alv_grid,
  o_container 
TYPE REF TO cl_gui_custom_container.

SELECTION-SCREEN BEGIN OF SCREEN 0100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_carrid 
TYPE s_carr_id.
SELECTION-SCREEN END OF BLOCK   b1.
SELECTION-SCREEN END OF SCREEN 0100.

START-OF-SELECTION.

* Primeiramente vamos chamar nossa Screen.
  
CALL SCREEN 9000.

*  Agora vamos criar os objetos desse tela.



quinta-feira, 14 de novembro de 2013

Função - DATE_CHECK_PLAUSIBILITY

*  Eae Galera, trabalhando com retorno de doc. financeiros, precisei
* tratar as informações de data dentro de um arquivo txt, a unica coisa
* que eu precisava verificar era se a data informada era uma data valida,
* pra não ficar criando logicas loucas para verificar a data, a SAP,
* Muito boazinha, criou essa função que faz todas essas verificações pra
* nós abapers.
*  Mais simples que essa não existe, ela nem retorno nada, só o SUBRC,
* mas é o suficiente para tomarmos atitude depois.

REPORT z_date_check_plausibility.

* Declarações
DATA :
  vl_message 
TYPE string.

* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS :
  p_date 
TYPE sy-datum.
SELECTION-SCREEN END OF BLOCK   b1.

START-OF-SELECTION.

  
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
    
EXPORTING
      
date                      p_date
    
EXCEPTIONS
      plausibility_check_failed 
1
      
OTHERS                    2.

* Mensagem de retorno.
  
IF sy-subrc IS INITIAL.

    
CONCATENATE 'Data'
                 p_date
                 
'Ok.'
      
INTO vl_message
      
SEPARATED BY space.

    
MESSAGE vl_message TYPE 'S'.
  
ENDIF.

  
CLEAR vl_message.

segunda-feira, 21 de outubro de 2013

Programas Sem Objetos de textos


*  Na maioria das vezes que vamos trabalhar com os textos entramos no
* tradicional menu conforme imagem abaixo.


 
 
*  Mas como somos pessoas ousadas, queremos incluir esses textos na raça,
* sem precisar criar qualquer tipo de objeto de texto, hoje esse post vou
* mostrar como fazer isso, não sei te explicar qual momento poderiamos
* usar isso, mas o mais importante é saber que é possível e que não é
* dificil o quanto parece. Como sempre, o segredo é estar familiarizado com
* com a cara de Debugger, vamos começar
*&---------------------------------------------------------------------*
REPORT z_text_in_selection_screen.

TYPES :
 
BEGIN OF ty_name,
   name     
TYPE screen-name,
   
text(30TYPE c,
 
END OF   ty_name
 
.

DATA :
  st_name 
TYPE ty_name,
  it_name 
TYPE TABLE OF ty_name
  
.

* Declaração pra criar o Select-option.
DATA :
 vso_default 
TYPE c.

FIELD-SYMBOLS :
 <name> 
TYPE ANY.

* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS :
  p_field1
(3TYPE c,
  p_field2
(5TYPE c,
  p_field3    
TYPE p,
  p_field4    
TYPE i
  
.
SELECT-OPTIONS :
  s_field5  
FOR vso_default.
.
SELECTION-SCREEN END OF BLOCK   b1.

* Processo inicial ( PBO )
AT SELECTION-SCREEN OUTPUT.

quarta-feira, 14 de agosto de 2013

Assing Component

*  Fala aee, olha um post muito interessante pra quem gosta de trabalhar
* de forma dinamica, hoje vamos falar sobre o comando 'Assign Component'
* é uma comando usado pra você se referenciar ao valor do campo e não
* ao campo em sí.
*  No exemplo abaixo estou fazendo um programa que mostra somente os
* chaves da tabela informada, onde deverá ser criado as estrutura e
* tabelas tudo de forma dinâmica, reparem quais são os valores de cada
* tabela interna e veja como trabalho com ela no relacionamento de
* alimentação da tabela principal que terá uma estrutura só com os
* campos chaves da tabela da tela de seleção.

* Qualquer dúvida ou complemento fiquem a vontade. Espero ajudar. Tnx.

* Tirem as aspas simples (') da frente dos Fields Symbols.... rs

 
 
*&---------------------------------------------------------------------*
REPORT z_assign_component.

TYPE-POOLS :
  slis
.

DATA :
  it_table    
TYPE REF TO data,
  st_line     
TYPE REF TO data,
  it_keys     
TYPE TABLE OF dfies,
  st_keys     
TYPE dfies,
  it_fcat     
TYPE TABLE OF lvc_s_fcat,
  st_fcat     
TYPE lvc_s_fcat,
  dy_table    
TYPE REF TO data,
  dy_line     
TYPE REF TO data
  
.

* Field-simbols
FIELD-SYMBOLS :
  ‘<fs_table>  
TYPE STANDARD TABLE,
  ‘<fs_line>
,
  ‘<dyn_table> 
TYPE STANDARD TABLE,
  ‘<dyn_line>
,
  ‘<dyn_field>
.

START-OF-SELECTION.

* Tela de seleção.
  
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
  
PARAMETERS :
    p_table 
TYPE dd02l-tabname OBLIGATORY,  " Nome da tabela
    p_rows  
TYPE i,      " Quantidade de linhas à retornar
    p_where 
TYPE char100 " Condições do Select ( sem ponto no final )
    
.
  
SELECTION-SCREEN END OF BLOCK   b1.

  
PERFORM z_select_dynamic,
            z_get_keys
,
            z_create_dynamic_table
,
            z_feed_dynamic_table
,
            z_alv
            
.