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(bt) WITH '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.


quarta-feira, 25 de abril de 2012

Função - DAYS_BETWEEN_TWO_DATES

  "  Opaaaa, hoje vou mostrar uma função que retorna a quantidade de dias 
" entre duas datas, muito usada no modulo HR, Agradecimentos ao nosso 
" Parceiro do Blog o Sr. Alê Henrique por este post.

REPORT  z_days_between_two_dates.

" Estruturas e tabelas internas
DATA :
  it_sflight TYPE TABLE OF sflight,
  st_sflight TYPE sflight.

START-OF-SELECTION.

" Seleção de dados para alimentar as datas.
  PERFORM : f_select,
" Usa a função pra ver o intervalo de dias entre as datas.
            f_trata_dados.

  BREAK-POINT.

*&---------------------------------------------------------------------*
*&      Form  f_select
*&---------------------------------------------------------------------*
FORM f_select .

" Seleção normal somente de 2 linhas
  SELECT *
    FROM sflight
    INTO TABLE it_sflight
    UP TO 2 ROWS.

ENDFORM.                    " f_select