quinta-feira, 31 de maio de 2012

É felicidade ? Então passa pra frente ....

   Ahhhh, estou muito feliz e gostaria de repassar isso a todos os seguidores do Blog, o blog ABAPJuniores foi criado para troca de informações sobre a Linguagem ABAP, diariamente recebo vários emails com dúvidas e tento sanar todas (salve as exceções rsrs), na maioria desses emails aprendo algo e repasso no própio blog como Post.
   Mas hoje o blog não é somente troca de informação, trabalhamos com pessoas e porque não ajudá-las, estamos recebendo já faz mais de 6 meses currículos e repassando para empresas filiadas, foram mais de 200 currículos repassados para 12 consultorias, a equipe ABAPJuniores está tentando fazer mais alianças com outras consultorias, empresas de RH e Escolas para cursos, o primeiro Curso ABAP parceiro do Blog foi o ztreinamento onde informando o cupom você ganha 10% de desconto, e não para por ai, estamos aumentando a gama de consultorias e empresas que querem receber o currículos.
   Agora sobre o blog em si, gostaria de agradecer a participação de todos, dicas, dúvidas, reclamações rsrs são todas bem vindas pois esses blog foi feito pra isso, troca de informações, foi feito para nós.
   Se preparem que no próximo mês estaremos 'postando' muita coisa interessante sobre Smartforms, dicionários de dados, Exit's, SapScript, cheats and tricks e lógico ALV rsrs...  Obrigadão pessoal e bons estudos.

sexta-feira, 25 de maio de 2012

Função - 'CREATE_TEXT'

"  Eae Galera, lembra do ultimo post Sobre como criar um Objeto de texto,
" então agora vou mostrar como usar esse objeto de texto pra gravar textos,
" rsrsrs eh verdade..... rrsrs, abaixo tenho a função funcionando certinho,
" se vocês não lembram duq eu to falando .... Acessem..
" http://abapjuniores.blogspot.com.br/2012/05/transacao-se75-criacao-de-objeto-de.html

report  z_create_text.

data :
  it_flines type table of tline,
  st_flines type tline.

start-of-selection.

  perform zf_cria_texto.

*&---------------------------------------------------------------------*
*&      Form  ZF_CRIA_TEXTO
*&---------------------------------------------------------------------*
form zf_cria_texto .

  st_flines-tdline   'texto teste 001'.
  append st_flines to it_flines.

  call function 'CREATE_TEXT'
    exporting
      fid               'OBSE'    " Id do Objeto de texto
      flanguage         sy-langu  " Idioma
      fname             '01'    " Chave
      fobject           'ZTEXTOS' " Objeto de texto
*   SAVE_DIRECT       = 'X'
*   FFORMAT           = '*'
    tables
      flines            it_flines " Tabela com os textos.
   exceptions
     no_init           1
     no_save           2
     others            3
            .
  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_CRIA_TEXTO

"  Como todo bom observador que nós somos, devemos executar a função
" 'READ_TEXT' pra ver se o negócio funcionou mesmo, vejam link abaixo
" http://abapjuniores.blogspot.com.br/2011/10/funcao-read-text.html
"  Mas se vocês querem fazer de uma forma mais rápida, vão na transação
" SE37 entra na função 'READ_TEXT' e façam igual a imagem abaixo,
" Com isso vocês conseguiram ver ser o conteúdo foi mesmo pro objeto.

 

" Obrigadaum pessoal e como sempre qualquer dúvida comentem ou mandem email.

segunda-feira, 21 de maio de 2012

Criação de Objeto de texto - SE75

 
"  Eae galera, sabe quando estamos cadastrando algo no SAP e existe 
" akele campo 'Observações' tipo uma caixa de texto e se você quiser 
" você pode escrever um livro, então, esse texto todo é gravado num 
" objeto de texto que será o tema de hoje.
"  Esse livro será recuperado com a função 'READ_TEXT', veja link abaixo.
" http://abapjuniores.blogspot.com.br/2011/10/funcao-read-text.html
"  hoje vou mostrar como fazer um objeto de texto, e amanhã irei mostrar 
" como efetuar um cadastro em um objeto de texto.

"  Primeiramente vamos na transação 'SE75' conforme abaixo.



sexta-feira, 11 de maio de 2012

Classe - CL_GUI_TIMER

"  Ha, essa vai ser legal heimmm, me perguntaram por email como fazer
" uma atualização automática de um ALV de 5 a 5 mim que mostrava dados
" de uma tabela transparente, na hora eu falei.... pronto to ferrado pois
" eu não sei e gostaria muito de saber, até que mexendo na sdn e na net
" afora achei uma classe manerissima que é um timer, abaixo tem um código
" usando essa classe.
"  Vocês se lembram do programa que era um alv que atualizava uma tabela
" transaparente que eu postei mês passado? Então use o programa do link
" abaixo pra atualizar/modificar a tabela transparente ...
" http://abapjuniores.blogspot.com.br/2012/04/alv-editavel-atualizacao-tab.html
" e use este programa pra ver a atualização automaticamente. Valeuuuu.

REPORT  z_cl_gui_timer.

CLASS lcl_timer DEFINITION DEFERRED .

" tabela Interna
DATA : it_sflight TYPE TABLE OF sflight .

" Objetos
DATA : o_grid    TYPE REF TO cl_gui_alv_grid , " ALV
       o_actio   TYPE REF TO lcl_timer       , " Criação do Evento
       o_timer   TYPE REF TO cl_gui_timer    . " Timer

*----------------------------------------------------------------------*
*       CLASS lcl_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_timer DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_finished FOR EVENT finished OF cl_gui_timer.
ENDCLASS.                    "lcl_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_timer IMPLEMENTATION.
  METHOD handle_finished.
* Perform que cria/atualiza o tabela
    PERFORM refresh_data .
* Mensagem soh pra ver que esta funcionando.
    MESSAGE s351(btWITH 'Relatório atualizado às ' sy-uzeit.
* Inicia timer.
    CALL METHOD o_timer->run.
  ENDMETHOD.                    "handle_finished
ENDCLASS.                    "lcl_receiver IMPLEMENTATION

*--------------------------------------------------------------------*
*     Start of Selection
*--------------------------------------------------------------------*
START-OF-SELECTION .

* Select soh pra mostrar algo na tela
  PERFORM select_data .



quarta-feira, 9 de maio de 2012

Função - SWI_DURATION_DETERMINE

"  Fala aeeee, vou mostrar hoje uma função usada para retornar a diferença
" em segundos de duas datas e horas, juntamente com uma lógica muito
" interessante usando os segundos para converter em horas e minutos,
" gostaria de agradecer ao Alexandre Almeida por este post, valeuuu.

REPORT  z_swi_duration_determine.

DATA :
  valor TYPE string.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_dini TYPE dats,
  p_dfin TYPE dats,
  p_hini TYPE tims,
  p_hfin TYPE tims
  .

SELECTION-SCREEN END OF BLOCK   b1.

START-OF-SELECTION.

  " Tratativa para calculo de horas entre as datas.
  PERFORM f_tempo_lancamento USING p_dini
                                   p_dfin
                                   p_hini
                                   p_hfin
                          CHANGING valor.

  " Mostra retorno.
  PERFORM f_show USING valor.


segunda-feira, 7 de maio de 2012

Select Dinâmico

  "  Eae vou mostrar hoje um select Dinâmico onde você consegue
" controlar até as condições da tabela que você quer selecionar,
" é só colocar o nome de qualquer tabela e executar pra ver um
" ALV dinâmico, depois volte e alimente os outros campos....
" Ahhhh, pode ocorrer alguns erros pois eu não tratei de propósito
" pra ver vocês se virarem com algumas condições como campo inexistente
" na tabela selecionada ou tabela inexistente ou qualquer outro
" não previsto.... vamo pro código.

REPORT z_select_dinamic.
TYPE-POOLS slis.

* Estruturas
DATA :
  st_fieldcat TYPE slis_fieldcat_alv,
  st_fields TYPE string
  .

* Tabela Interna
DATA :
  it_table    TYPE REF TO data,
  it_fieldcat TYPE slis_t_fieldcat_alv,
  it_fields   TYPE TABLE OF string
  .

* Field-simbols
FIELD-SYMBOLS:
  TYPE STANDARD TABLE.

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

" Inicio do processo.
START-OF-SELECTION.

BREAK-POINT.

PERFORM : f_select,
          f_fieldcat,
          f_trata_campos,
          f_alv.


segunda-feira, 30 de abril de 2012

ABAP OLE - Excel.application

  "  Bom dia galera mais que tri-legal, vou passa hoje pra vocês algo muito
" legal.... Sabe quando o funcional chega em você e fala :  ..... e no final
" essa tabela tem que criar um arquivo excel.... Logo que ele fala isso
" ja pensamos :  .... Sussa, vou cria um alv e exportar, ou no máximo
" usar uma função que exporta pra um excel.... fácil....
"  Mas como a gente sabe a vida de ABAP nunca é tão fácil assim...
" o funcional já com uma cara de ironia fala :   .... o Excel tem que estar
" neste formato ..... e mostra pra você um formulário bunitão cheio de
" bordas, cores, tamanho, linhas e colunas mescladas..... e seu mundo
" desmorona, já começa a pensar que vai ter que sair mais tarde varios dias
" e quem sabe com isso pode até perder a(o) namorada(o). Pois seus problemas
" acabaram pois este post mostra como fazer um com tratativas em suas
" propriedades.
" primeiramente vá na transação se11 e veja na tabela TOLE se existe algum
" APP chamado 'EXCEL.APPLICATION', se tiver ... parabéns você está
" habilitado a prosseguir com este post. ( Pode ser pela transação SOLE tb )
"  Diferentemente neste Post eu não coloquei Break-points espalhados, portanto,
" debbuggem vocês mesmo onde acharem melhor. vamo lá então.
"  Essa é pra fecha o mês com chave de Ouro.

REPORT z_abap_excel.
*----------------------------------------------------------------------*
*  Conjunto de tipos
*----------------------------------------------------------------------*
"  Tem um include que a maioria trabalho mas eu prefiro o Grupo de tipo.
TYPE-POOLS ole2.

*----------------------------------------------------------------------*
*  Tabelas transparentes
*----------------------------------------------------------------------*
TABLES :
  sflight.

*----------------------------------------------------------------------*
*  Tabelas internas
*----------------------------------------------------------------------*
DATA :
 it_spfli   TYPE TABLE OF spfli,
 it_sflight TYPE TABLE OF sflight
.
*----------------------------------------------------------------------*
*  Estruturas
*----------------------------------------------------------------------*
DATA :
 st_spfli   TYPE spfli,
 st_sflight TYPE sflight
.

*----------------------------------------------------------------------*
*  Declarações de variáveis
*----------------------------------------------------------------------*
DATA : linha   TYPE i,      " Atribui Valor Linha
       coluna  TYPE i,
       v_texto TYPE string            " Conteudo das celulas
       .
*----------------------------------------------------------------------*
*  Definições de objetos OLE2
*----------------------------------------------------------------------*
DATA: gs_excel        TYPE ole2_object,       " Objeto Excel
      gs_workbook     TYPE ole2_object,       " Workbook 'Area de trabalho'
      gs_sheet        TYPE ole2_object,       " Planilha
      gs_cell1        TYPE ole2_object,                     " Celula 1
      gs_cell2        TYPE ole2_object,                     " Celula 2
      gs_cells        TYPE ole2_object,       " Células
      gs_range        TYPE ole2_object,       " Grupo de células
      gs_font         TYPE ole2_object,       " Fonte da célula
      gs_column       TYPE ole2_object.       " Coluna da célula


SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS:
  p_carrid TYPE sflight-carrid OBLIGATORY.
SELECT-OPTIONS:
  s_connid FOR sflight-connid,
  s_fldate FOR sflight-fldate.
SELECTION-SCREEN END OF BLOCK   b1.

START-OF-SELECTION.

* select dos dados
  PERFORM selects.

  IF it_sflight IS NOT INITIAL.

* Cria o objeto Excel com area de trabalho e planilhas.
    PERFORM f_gera_excel.

* Agora com a planilha pronta vamos formatar as colunas do excel.
    PERFORM formata_colunas.

* Eu criei um perform só pra trata o cabeçalho pra fica mais legível.
    PERFORM gera_cabecalho.

* Gera linhas
    PERFORM gera_linhas.

* Encerra planilha Excel
    PERFORM encerra_planilha_excel.

  ELSE.

    MESSAGE 'Não foi encontrado dados na tabela conforme críterios da tela de seleção'
      TYPE 'I'.

  ENDIF.

END-OF-SELECTION.


quinta-feira, 26 de abril de 2012

Classe - CL_GUI_TEXTEDIT

  "  Opa, tudo bem aii? Hoje vou passar pra vocês como fazer uma caixa
" de texto na sua tela para que o pessoal possa faze comentários sobre 
" algo, primeiramente estarei mostrando como faz um, daqui a pouco num
" post futuro eu posto usando na prática gravando e deletando estes 
" comentário.
"  Ahhh, eu criei uma tela com um Custom Control, vocês vão perceber 
" isso quando verem a classe que o objeto Container está sendo referenciado,
" o nome deste Custom Control está sendo informado quando eu crio o 
" Container. Outra coisa.... Isso eh um report não eh um module mas se quiser
" fazer em Module Pool fiquem a vontade.

REPORT z_cl_gui_textedit.

" Variáveis Globais
DATA:
  ok_code   TYPE sy-ucomm.

" Estruturas e tabelas internas
DATA:
  st_tdline  TYPE tdline,
  it_tdline  TYPE TABLE OF tdline.

" Objetos
DATA:
  container TYPE REF TO cl_gui_custom_container,
  editor    TYPE REF TO cl_gui_textedit.

" Início do processo

START-OF-SELECTION.

  " Chama tela de o Custom Control de caixa de texto.
  CALL SCREEN 9001.

END-OF-SELECTION.