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 ROWS.

ENDFORM.                    " f_select


terça-feira, 24 de abril de 2012

Sobre os Currículos.... (2)

Opa Pessoal, gostaria de agradecer os currículos enviados e informar que a equipe AbapJuniores está correndo atrás de mais empresas como aliança para a distribuição dos currículos e indicação dos mesmos, lembrando, quem não sabe ainda, que toda a semana eu distribuo os currículos enviados para o email maurorpjunior@gmail.com para empresas filiadas com vagas para pessoas que querem iniciar ou tem pouca experiencia no mundo SAP/ABAP, estamos a todo vapor e continuem enviando. Aguardem Novidades.


segunda-feira, 23 de abril de 2012

ALV Editável / Atualização Tab. Transparente

  "  Eae pessoal, vou mostrar agora uma coisa que é muito importante para
" uma ABAP junior que é trabalhar com informações dentro do ALV, 
" deixando-a editável conforme ação do Usuário e atualizando a tabela 
" transparente do banco de dados.
"  Este programa irá mostrar um outro ALV quando você clicar duas vezes
" em um registro, este segundo ALV será editável, modifique e aperte o 
" botão 'Salvar' para que seja atualizado a tabela principal, depois é 
" só voltar e ver a tabela principal atualizada com sua modificação,
" agora é só clicar no botão 'Salvar' da primeira tela que a sua modificação
" atualizará o banco de dados com a tabela transparente.
"  Vá na transação 'SE11' e veja a modificação na tabela SFLIGHT.
"  Boa sorte e muito cuidado com atualizações de tabela transparentes,
" conheço gente que fez besteira nessa hora é quase perdeu o emprego, como
" sei que todos aqui estão usando o Minisap, então, vamos lá.

REPORT zmjteste.
" Conjunto de tipos
TYPE-POOLS : slis.

" Tipos
TYPES :
  BEGIN OF ty_selfield,
    index TYPE slis_selfield-tabindex,
  END OF   ty_selfield.

" Estruturas e tabelas internas
DATA :
  it_out   TYPE TABLE OF sflight,
  st_out   TYPE sflight,
  it_index TYPE TABLE OF ty_selfield,
  st_index TYPE ty_selfield.

" Estruturas e tabelas intenas ( ALV )
DATA :
  it_fieldcat TYPE TABLE OF slis_fieldcat_alv,
  st_layout   TYPE          slis_layout_alv.

" Fiels-symbols
FIELD-SYMBOLS :
    TYPE slis_fieldcat_alv.

START-OF-SELECTION.

  " Faz o select da tabela.
  PERFORM : f_select,
" Mostra ALV com os dados
            f_alv.

END-OF-SELECTION.

quinta-feira, 19 de abril de 2012

Colorindo campos do ALV

  "  Fala Abapers, hoje vou mostra uma coisa que é solicitado bastante
" em relatória pelo mundo afora que é colocar certas celulas do ALV
" de cor diferente conforme alguma condição do Funcional, vejam abaixo
" como o código é simples, vocês só precisam entender um pouco do
" conceito do ALV, então ..... vamos lah segue código todo comentado.

REPORT  z_alv_color.

" Conjunto de tipos
TYPE-POOLS: slis.

" Tipos
TYPES :
  BEGIN OF ty_sflight.
INCLUDE TYPE sflight.
TYPES:
    color TYPE lvc_t_scol,
  END OF ty_sflight.

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

" Estruturas e tabelas internas (ALV)
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
      st_layout   TYPE slis_layout_alv.

" Inicio
START-OF-SELECTION.

" Faz Select na tabela SFLIGHT
  PERFORM : f_select,
"  Trata os dados do Select e alimenta campo COLOR da tabela.
"  É aqui que tá o pulo do gato.
            f_trata_dados,
" Cria alv.
            f_alv.

END-OF-SELECTION.

terça-feira, 17 de abril de 2012

Tradução - Classe de Mensagens

  "  Me perguntaram por email, então vou postar, pois é muito importante,
" como traduzir os textos das classes de mensagens, vou fala a verdade
" é igual quando você vai traduzir textos de seleção de programas,
" mas vou fazer pois se você faz uma classe em português e não traduz,
" qualquer pessoa que entrar no SAP em inglês ou qualquer outra lingua
" não vai receber a msg, somente o numero da msg pois ela não vai estar 
" traduzida para a lingua da pessoa, quando você faz o programa, o funcional
" fala pra quais idiomas o seu programa vai ser utilizado, se ele não falar
" nada, então desencana mas se fala, você vai se ferra porque e mou trampo
" chato...  rsrsr, então vamos lá pro passo a passo.

" Vamos dizer que você já tenha criado uma classe de mensagem, então 
" selecione o texto ( isso mesmo, é texto por texto; porisso que eu falei 
" que era chato.) vá no Menu 'Ir para/ Tradução', conforme imagem abaixo.

 



segunda-feira, 16 de abril de 2012

Função - REUSE_ALV_FIELDCATALOG_MERGE

  "  Eae, pessoal eu não sei como ainda não tinha passado isso no Blog
" portanto pra tira o atraso, hoje vou mostrar uma função que é muito
" útil na criação de ALV, a famosa transação reuse_alv_fieldcatalog_merge
" que serve pra retornar todas as informações de todos os campos de uma
" tabela, e muito usado para criação de ALV dinâmico, ( que o usuário
" decide qual tabela ele quer ver ), puxando por este exemplo, eu fiz um
" programinha abaixo, onde o usuário informa a tabela e o programa retorna
" os campos desta tabela e suas características, semana que vem estarei
" fazendo um ALV um pouco mais complexo e utilizarei esta função, portanto
" debbugem.

REPORT z_reuse_alv_fieldcatalog_merge.

" Grupo de tipos
TYPE-POOLS : slis.
" Estrutura e tabela interna
DATA :
  it_fieldcat TYPE TABLE OF slis_fieldcat_alv,
  st_fieldcat TYPE slis_fieldcat_alv.

" Tela de seleção
SELECTION-SCREEN BEGIN OF block b1 WITH FRAME.
  PARAMETERS:
    p_tabela TYPE dd02l-tabname OBLIGATORY. " Tabela
SELECTION-SCREEN end of BLOCK   b1.

" Início do processo
START-OF-SELECTION.
" Execução da função que traz todos as informações do campos da tabela informada
  PERFORM : f_verifica_campos,
" Mostra a posição e o nome dos campos da tabela informada
            f_show.

END-OF-SELECTION.


sexta-feira, 13 de abril de 2012

Classe de Mensagens - SE91

  "  Para uma melhor organização das mensagens e as vezes porque o Cliente
" não deixa usar Hardcodes ( Sabe akelas coisas que você usa entre aspas
" simples que ficam verdes dentro do código fonte.... Isso são Hardcodes. )
" usamos as Classe de mensagens é la colocamos as informações que servem
" como interação com o Usuário.
"  Pra começar vamos entrar na transação SE91.

 


quarta-feira, 11 de abril de 2012

Função - TEXT_SPLIT


"  Haa, tava debugando o standard e encontrei essa função aee,
" bem, o que ele faz eh bem simples e até um pouco engraçado
" mas ele quebra o texto conforme o tamanho que você informar
" olha que fácil, a vantagem é que desta função para o comando
" 'SPLIT' eh que ele não exclui o delimitador.

REPORT z_text_split.

DATA : line TYPE string,
       rest 
TYPE string
       .
" Tela de seleção
SELECTION-
SCREEN BEGIN OF BLOCK b1 WITH FRAME.PARAMETERS :
  leng(
2)  TYPE i VISIBLE LENGTH 2,
  
text(50TYPE c.
SELECTION-
SCREEN END OF BLOCK   b1." Inicio de processo
START-
OF-SELECTION.

  
PERFORM text_split.
  PERFORM show.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  TEXT_SPLIT
*&---------------------------------------------------------------------*
FORM text_split .CONDENSE text.

  
CALL FUNCTION 'TEXT_SPLIT'
    
EXPORTING
      length             = leng
      
text               = text
*   AS_CHARACTER       =
    
IMPORTING
      
line               = line
      rest               = rest
            .
ENDFORM.                    " TEXT_SPLIT
*&---------------------------------------------------------------------*
*&      Form  SHOW
*&---------------------------------------------------------------------*
FORM show .

  
WRITE : 'Texto completo:    ',space,text,/
          
'Texto Selecionado: ',space,line,/
          
'Resto do texto:    ',space,rest,/
          .
ENDFORM.                    " SHOW
"

segunda-feira, 9 de abril de 2012

Transações Bloqueadas - SM12

"  Opa Comunidade ABAP, acho que todo o Júnior que é Junior já passou porisso
" Estar usando algo no SAP como fazer programa e do nada Cai a rede...
" Trágico, aih voê loga rapidão pro seu chefe não achar que você não estava
" fazendo nada, todo ansioso para recomeçar a programar você vê uma mensagem 
" tipo falando que o SEU USER tá bloqueando aquele programa que vc tah fazendo
" rsrsrs o que fazer nessa hora, caso só você use este User então na hora de 
" entrar eh soh derrubar todos que tiverem com o mesmo User, mas se você tiver
" num projeto onde todo usem o mesmo user para desenvolver...
"  A resposta e bem símples vá na transação SM12 e desbloqueie, veja como...

" Entrando na transação SM12 você verá essa tela.


quinta-feira, 5 de abril de 2012

Função - GET_KEY_FIELDS_OF_TABLE


"  Eae, vou mostrar pra vocês uma função que retorna as chaves
" de uma tabela Transparente, sabe quando vc precisa tratar as
" chaves primárias de uma tabela de forma diferente, como deixar
" de cor diferente os campos chave numa tabela em um ALV,
" ou fazer um select dinâmico pelas chave da tabela informada.

REPORT z_get_key_fields_of_table.

DATA :
" Tabela de retorna da função.
  it_keys 
TYPE TABLE OF dfies,
" Estrutura de retorno da Função
  st_keys 
TYPE dfies.

" Tela de seleção
SELECTION-
SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : p_table TYPE dfies-tabname, " Tabela
             c_mandt 
AS CHECKBOX         " Com mandante
             .
SELECTION-
SCREEN END OF BLOCK   b1.

" Inicio do processo
START-
OF-SELECTION.

" Pega os campos chave da tabela informada pelo User.
  
PERFORM z_key_fields.
" Mostra retorno da function
  
PERFORM z_show.

END-OF-SELECTION.