sexta-feira, 5 de outubro de 2012

Função - FUNCTION_EXISTS


*  Tudo bem aee pessoal, hoje vou mostrar uma função que verifica se existe
* a função que você informou, alem disso essa função retorna algumas
* informações um pouco mais detalhada que podem te ajudar no desenvolvimento.
*  Juntamente estou passando uma função de busca de funções, usando o
* comando 'AT SELECTION-SCREEN ON VALUE-REQUEST FOR' onde eu já usei em
* alguns programas de posts passados, mas em pouco tempo estarei fazendo um
* post somente sobre isso. t+ e bons estudos.
*&---------------------------------------------------------------------*
REPORT function_exists.

* Declaração dos retornos da função
DATA :
  vg_group     TYPE rs38l-area,
  vg_include   TYPE rs38l-include
  .

* tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
p_fname TYPE rs38l-name. " Nome da função
SELECTION-SCREEN END OF BLOCK   b1.

* Procedimento executando antes do processo normal do programa
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  PERFORM f_busca_func.

* Inicio do processo
START-OF-SELECTION.
* Verifica a existencia do função informada.
  PERFORM f_check_func.
* Exibe o resultado
  PERFORM f_exibe_returno.



domingo, 30 de setembro de 2012

TRANSLATE ... TO LOWER / UPPER CASE e USING


*  Fala Galera, hoje vou mostrar como deixar a informação de uma variável
* em maiuscula ou minuscula, será usada o comando 'TRANSLATE' e de brinde
* O código abaixo ainda tem uma dica para substituição de caracteres por
* outro usando o mesmo comando, Bons estudos !!!
*&---------------------------------------------------------------------*
REPORT Traslate.

* Criação da variável que iremos trabalhar.
data :
  vg_teste TYPE string VALUE ' Teste AbcDeFhiJ1'.

*  Aqui nos transformamos todos os caracteres do valor da variável em
* minusculo.
TRANSLATE vg_teste to LOWER CASE.

BREAK-POINT.

*  Agora vamos deixar todos os valores que em maiusculos
TRANSLATE vg_teste TO UPPER CASE.

BREAK-POINT.

*  Ahhh, agora tá o que eu descobri faz pouco tempo, a substituição de
* caracteres conforme informação passado após o Using.
*  O mais interessante é que os caracteres de numero Impar são substituidos
* pelos caracteres pares sequentes.
*  Exemplo abaixo. O caracter 'T' será substituido pelo caracter 'A',
* 'S' por 'B' e '1' por '2'.
TRANSLATE vg_teste USING 'TASB12'.
* translate vg_teste using : 'TA', 'SB', '12'. é a mesma coisa.

BREAK-POINT.
*  Percebam que o caracter 'A' não foi substituido por 'T', isso porque o
* comando é unilateral, sempre do Impar pro par sequente, Dahora né .


* Outra dica e que funciona com vazios tb. rsrs.
TRANSLATE vg_teste USING 'E '.

BREAK-POINT.

*  Executem Break a Break e vejam as auterações feitas durante o processo.
WRITE : vg_teste.



quinta-feira, 27 de setembro de 2012

Colorindo campos no Relatório WRITE

*  Bom dia Abapers sedentos de conhecimento, irei passar para vocês como
* deixar o texto de exibição colorido, não é muito a cara de quem trabalha
* com SAP de deixar as coisas coloridas, os alemães são muito serios, mas
* as vezes algum cliente quer deixar alguns campinhos de cor diferente para
* enxergar melhor, bem aqui vai, ... Lembrando que esse tipo de coloração é
* para relatórios em modo Write, o que pra mim já eh meio obsoleto, pois
* hoje fazemos relatórios no formato ALV, mas muitas vezes eu precisei dar
* manutenção em relatórios Write, e conhecimento nunca é demais neh.
REPORT z_format_color_write.

TABLES :
  sflight.

DATA :
  it_sflight TYPE TABLE OF sflight,
  st_sflight TYPE sflight
  .

DATA col TYPE i VALUE 0.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS :
  s_carrid FOR sflight-carrid,
  s_connid FOR sflight-connid
  .
SELECTION-SCREEN END OF BLOCK   b1 .



START-OF-SELECTION.

  PERFORM f_selection.

 
PERFORM f_trata_dados.

*  Aqui tem o exemplo dado pela própria SAP, que abrange todos os efeitos
* e todas as cores, achei legal mostrar isso também.

 
DO 8 TIMES.
    col = sy-index - 1.
    FORMAT COLOR = col.
    WRITE: /  col              COLOR OFF,
             'INTENSIFIED ON'  INTENSIFIED ON,
             'INTENSIFIED OFF' INTENSIFIED OFF,
             'INVERSE ON'      INVERSE ON.
  ENDDO.

segunda-feira, 24 de setembro de 2012

Formatando dados com Máscaras - USING EDIT MASK

*  Opa pessoal, vou mostrar hoje como mostrar os dados de uma variável
* ou campo qualquer da forma que o user quer ver, existem algumas funções
* que fazem isso, mas as vezes o User que algo fora do padrão, e pra gente
* não desenvolver uma função para tratar isso existe um comando que
* conseguirá te ajudar muito que é o 'USING EDIT MASK' que substitui os
* Underline '_' pelo respectivo numero, veja abaixo um exemplinho legar.

*  Podemos usar esse comando para mostrar CPF, CNPJ, PIS, data e Qualquer
* coisa que tenha máscara de exibição, Bons estudos.


REPORT z_using_edit_mask.

* Reparem nos tamanhos das variáveis que vão trabalhar como retorno.
data :
  vg_number TYPE i,
  vg_return(70) TYPE c,
  vg_retNum(15) TYPE c
  .

vg_number = '123456789'.


*  Aki estaremos passando os valores da variável para uma outra variável,
* mas com uma máscara que você define, assim mostrando oq o User quer sem
* mudar nada na variável principal.
write vg_number USING EDIT MASK
      '_ _ _ indiozinhos, _ _ _ indi... Assim vai a_é pass_r o tamanho d_ variável'
      to vg_return.

*  Aqui os valores são conforme acima mas só que um pouco mais perto da
* realidade
write vg_number USING EDIT MASK
      '__,__._,_,___'
      to vg_retnum.

*  Retorno na tela.
WRITE : vg_return, / , /
        vg_retnum
.

quinta-feira, 20 de setembro de 2012

Smartforms - Passo a Passo - Parte II

* Olha ai, essa e a segunda parte sobre Smartforms onde agora falaremos
* sobre o programa que irá chamar e popular seu Smartforms.
* lembrando que depois desse passo iremos deixar esse mesmo Smart com
* uma cara de documento mesmo, e não esse rascunho de nada que fizemos,
* faremos tratativas de dados internos, criaremos mas parametros de
* Importação e tabelas, sem conta o Estilo que mostrei num proximo post.
*  Bons estudos.
*&---------------------------------------------------------------------*
REPORT z_prog_call_smartforms.

DATA :
  it_tsp01   TYPE TABLE OF tsp01,
  vl_fm_name TYPE rs38l_fnam.
CONSTANTS :
*  Aqui voçês coloquem o nome do Smartforms de vocês.
 
c_form TYPE rs38l_fnam VALUE 'ZSD_TESTE2'.


START-OF-SELECTION.

  SELECT *
    FROM tsp01
    INTO TABLE it_tsp01
    WHERE rqowner = sy-uname.

 
BREAK-POINT.

* Eu mantive os comentários do Post sobre essa função. Good Luck.

  IF it_tsp01 IS NOT INITIAL.

*  Executada a função que retorna o nome da função que chama o formulário
    PERFORM z_busca_nome_function.

* Executa o function que chama o formulário.
    PERFORM z_call_form.

 
ENDIF.

terça-feira, 18 de setembro de 2012

Função - CONVERSION_EXIT_CUNIT_OUTPUT

*  As vezes estamos trabalhando com unidades de medidas e dependendo do modo
* de exibição aparece uma unidade que a gente não sabe daonde veio, então
* essas unidades são unidade padrões da SAP que são relacionadas com unidades
* conforme o idioma, para não mostrar as unidades do SAP usamos uma função
* mostrar as unidades que queremos que é a 'CONVERSION_EXIT_CUNIT_OUTPUT',
* no exemplo abaixo estarei usando o Input 'ST' e o idioma do User.
*  O resultado será muito interessante.
*&---------------------------------------------------------------------*
REPORT conversion_exit_cunit_output.
DATA :
  vg_meins_out TYPE meins.

SELECTION-SCREEN BEGIN OF block b1 WITH FRAME.
 
PARAMETERS :
*  What f*&% s this, eu coloco ST e aparece outra coisa.
   
pi_meins TYPE meins DEFAULT 'ST',
    cb_with as CHECKBOX .
SELECTION-SCREEN end of BLOCK   b1.


BREAK-POINT.


IF cb_with IS INITIAL.
else.
  PERFORM z_trata_unidade.
ENDIF.

WRITE :
        pi_meins, /
        vg_meins_out.

sexta-feira, 14 de setembro de 2012

Enviando Objeto de texto para uma Request - RSTXTRAN


 Eae Gente, estava dando manutenção em um Sapscript na parte das observações
e tive que modificar um objeto de texto, se não lembra o que que é veja link :
http://abapjuniores.blogspot.com.br/2012/08/trabalhando-com-objeto-de-textos-so10.html
 Mas depois que eu fiz a modificação reparei que na hora que eu salvei não
foi solicitado uma request para que pudesse transportar aquel Objeto de texto
para o ambiente de qualidade/produção e procurei na internet algo que falasse
sobre isso é reparei que soh tinha algo na SDN comentando sobre mas não
explicando, descobri que existe um programa standard que faz essa transferencia
do objeto de texto para um request esse programa é o RSTXTRAN, vá na se38
e execute esse programa.




sexta-feira, 7 de setembro de 2012

Smartforms - Passo a Passo - Parte I


 Ahhhhh,,, hoje vou comentar e mostrar pra vocês uns dos posts mais pedidos
por todos os meios de comunicação que vocês tem comigo que ehhhhhhhhhh .....
Bem,... não eh mais surpresa pois vocês devem ter lido o título
deste post que é Smartforms,,,, Não custa lembrar mas esses posts passo a
passo que eu coloco no blog são simples, mas fazem você sair do outro
lado, espero que consigam adquirir ou pelomenos complementar algum
conhecimento.
 Primeiramente temos que saber que Smartforms são relatórios de impressão
dentro da sap, se vocês se lembram do Sapscript vão falar que é a mesmo
coisa, e é mesmo, pelomenos o resultado final, mas pra chegar até o momento
da impressão, os dois tem suas peculiaridades, o sapscript e bem mais dificil
de visualizar enquanto o Smartforms ele tem uma janela lateral num formato
hierarquico que você consegue desenvolver com maior nitidez, cada objeto de
visualização da tela; pra eu não ficar falando os pros e os contras vamos começar
a fazer logo isso e vocês mesmos falam qual é o melhor depois.
 Vamos entrar na transação 'SMARTFORMS' ( é isso mesmo ).



 Olha só a tela aiii, ela é bem simples.... vamos dar um nome pro
formulário e clicar no botão 'Criar'.
 Fazendo isso você irá para tela onde nós efetivamente iremos trabalhar com a
criação do Smartforms.






quarta-feira, 22 de agosto de 2012

Função - POPUP_TO_DECIDE_LIST

  *  Abapers, vou mostrar hoje uma função que mostra um PopUp que mostra
* opções para o User, e assim você trata o retorno do jeito que tens que
* tratar abaixo tem o código de exemplo, eu coloquei comentários nos
* parametros não usados, descomentem e façam teste... até a próxima.
*&---------------------------------------------------------------------*
REPORT z_popup_to_decide_list.

* Declaração dos parametros para exec da função
DATA :
  st_spopli TYPE spopli,           " Estrutura das Opções
  it_spopli TYPE TABLE OF spopli,  " Tabela das opções
  vg_answer TYPE answer.           " A resposta do User


START-OF-SELECTION.

  PERFORM : z_cria_opcoes,
            z_exec_func,
            z_trata_retorno_func.


terça-feira, 7 de agosto de 2012

ALV - 'IT_SORT', somatória e subtotal

  *  Eae, vou comentar hoje como usar o parametro 'IT_SORT' da função que
* cria o ALV, esse parametro informa um ou mais campos da tela que será
* ordenado da forma que desejar também, segue aee o código comentado,
* adicionei algumas propriedade no alv como somatória por subtotal, usando
* o parametro 'IT_SORT' e 'IT_FIELDCAT', bons estudos.
*&---------------------------------------------------------------------*
REPORT z_alv_sort.

* Declaração do grupo de types para criação do ALV.
TYPE-POOLS :
  slis.

* Tabelas Transparentes
TABLES :
  spfli,
  sflight.

* Tabelas Internas
DATA : it_spfli   TYPE TABLE OF spfli,
       st_spfli   TYPE spfli,
       it_sflight TYPE TABLE OF sflight,
       st_sflight TYPE sflight
      .

* Estruturas e tabelas internas para uso do ALV
DATA : it_fieldcat TYPE TABLE OF slis_fieldcat_alv,
       st_fieldcat TYPE slis_fieldcat_alv,
       it_sort     TYPE TABLE OF slis_sortinfo_alv,
       st_sort     TYPE slis_sortinfo_alv,
       it_layout   TYPE TABLE OF slis_layout_alv,
       st_layout   TYPE slis_layout_alv
      .

* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_carrid TYPE spfli-carrid.
SELECT-OPTIONS :
  s_connid FOR spfli-connid.
SELECTION-SCREEN END OF BLOCK   b1.

START-OF-SELECTION.

* Seleções
  PERFORM zf_selects.

* Relatorio
  PERFORM zf_relatorio.



sexta-feira, 3 de agosto de 2012

Trabalhando com Objeto de textos - SO10

  *  Eae, hoje vou passar uma diquinha sobre a transação 'SO10' que trabalha 
* com objeto de textos, vcs se lembram dos posts sobre criação e leitura 
* de textos? segue links abaixo:
* http://abapjuniores.blogspot.com.br/2012/05/funcao-createtext.html
* http://abapjuniores.blogspot.com.br/2011/10/funcao-read-text.html
* Então,... alem de vocês executaram as funções para criação e leitura,
* vocês podem ir nessa transação e trabalhar com objetos de textos do
* mesmo jeito.

* Olha a telinha aiii... 


 

quarta-feira, 1 de agosto de 2012

Função - SSF_FUNCTION_MODULE_NAME

  *  Eae rapaziada, desculpa a ausência, mas já estou voltando a ativa
* novamente, agora irei começar a passar alguns pré requisitos para
* fazermos o Smartforms passo a passo, simmm..... o tão esperado Smartforms.
*  Primeira coisa que vou passar vai ser uma função que retorna o nome
* da função criada pelo seu formulário ( smartforms ou Sapscript ), o nome
* da função que executa seu formulário é criada dinamicamente.
*  Se você tiver algum smart ou sapscript, coloque o nome dele no campo
* formname, se não tiver espere um pouquinho que daki a pouco estaremos
* fazendo ums passo a passo de Smartforms. Bons testes.
*
*&---------------------------------------------------------------------*

REPORT  z_form_function_name.

data :
  vl_fm_name TYPE RS38L_FNAM.

START-OF-SELECTION.

*  Executada a função que retorna o nome da função que chama o formulário
  PERFORM z_busca_nome_function.

* Executa o function que chama o formulário.
  PERFORM z_call_form.

quarta-feira, 4 de julho de 2012

Classe - CL_ABAP_TYPEDESCR

  *  Bom dia, hoje vou mostrar um classe que mostra detalhes sobre o tipo
* da declaração como tamanho, tipo e mais algumas coisas, no exemplo
* abaixo estarei usando o método 'describe_by_data' mas se vc for na
* Transação se24 e colocar a classe lah, verá que existe outros metodos
* tão importante quanto, t+.
*&---------------------------------------------------------------------*
REPORT  z_describe_by_data.

* Declarações
TYPES ty_tipo TYPE i.

DATA: vg_variavel   TYPE ty_tipo,
      ref_descricao TYPE REF TO cl_abap_typedescr.

* Início do processo
START-OF-SELECTION.

*  Eu deixei um código comentado abaixo para vocês fazerem o teste com 
* outra variável.
  ref_descricao cl_abap_typedescr=>describe_by_datavg_variavel ).
*  ref_descricao = cl_abap_typedescr=>describe_by_data( ref_descricao ).


  BREAK-POINT.

  WRITE: 'Referência:', ref_descricao->absolute_name.
  WRITE: 'Tipo      :', ref_descricao->type_kind.
  WRITE: 'Tamanho   :', ref_descricao->length.
  WRITE: 'Decimais  :', ref_descricao->decimals.

  BREAK-POINT.

segunda-feira, 2 de julho de 2012

Tipos de Selects - Parte 2

  *  Fala galerinha, Hoje vem a segunda parte dos Tipos de selects um pouco
* mais fundo sobre o assunto, mas mesmo assim básico pra qualquer ABAPer,
* ahhhh, tah com o mesmo esquema de break-points do post anterior, bons
* Estudos e qualquer dúvida estamos aih, vou aproveitar e informar que
* o serviço de distribuição de curriculos continua a todo o vapor, to
* falando isso pq recebi alguns emails com essa dúvida. Valeo aeee.
*&---------------------------------------------------------------------*
REPORT z_selects_type.

* Declarações das estruturas e tabelas Internas
DATA :
  it_spfli   TYPE TABLE OF spfli,
  it_sflight TYPE TABLE OF sflight,
  st_spfli   TYPE spfli,
  st_sflight TYPE sflight
  .

* Range's
DATA :
  r_fltime  TYPE RANGE OF spfli-fltime,
  rs_fltime LIKE LINE OF r_fltime.
.

*  Usando Inner Join / Left outer Join, que serve pra alimentar uma
* unica tabela com informações de duas tabelas que tenha pelomenos uma
* relação (campo) em comum.
PERFORM f_inner_join.

*  O famoso 'For all entries' primeiro seleciona normal os dados de uma
* tabela e na segunda tabela são selecionados os registros conforme os
* dados da primeira
PERFORM f_for_all_entries.

* Seleciona com condições especíais.
PERFORM f_cond_especial.

terça-feira, 26 de junho de 2012

Tipos de Selects - Parte 1

  "  Boa tarde galera, hoje vou passar um guia prático de alguns dos tipos
" mais usados de selects com explicação e exemplo. Na minha opnião, o
" select é o coração do programa, é o que faz tudo acontecer, pois sem
" dados não conseguimos (não precisamos) fazer nada.
"  Eu mesmo coloquei um Break-point em cada momento importante do programa
" para que vocês possam ver os valores.
"  Ahhhh fique sempre com a tabela aberta (SE11) pra confirmar os valores 
" retornados pelo selects.
"  Esse é só o começo, depois eu mostro outros tipos de selects... Bons estudos
*&---------------------------------------------------------------------*
REPORT z_selects_type.

* Declarações
DATA :
  it_spfli   TYPE TABLE OF spfli,
  it_sflight TYPE TABLE OF sflight,
  st_spfli   TYPE spfli,
  st_sflight TYPE sflight
  .

* Select simples.
PERFORM f_simples.

* select com condição.
PERFORM f_condicao.

* Seleciona somente uma linha
PERFORM f_single.

*  Seleciona somente as informações de um ou mais campos alimenta
* uma ou mais variáveis conforme condições.
PERFORM f_variavel.

*  Selecionando campos especificos e alimentando os respectivo
* campos da tabela/ estrutura.
PERFORM f_corresponding_fields.

*  Seleciona conforme informações específicas ( MAX, MIN, AVG, SUM, COUNT )
PERFORM f_agregados.

sexta-feira, 22 de junho de 2012

Dicionário de dados - Rotinas da View de Manut.

  "  Boa dia aee, hoje vou mostrar uma outra ferramenta na criação de views
" de manutenção que são a criação de Rotinas nas Views...
"  Não sei se vocês perceberam mas no post passado sobre View de manutenção
" link: http://abapjuniores.blogspot.com.br/2012/06/span-font-family-courier-newfont-size.html
" que conseguimos deixar o campo 'NOME' de uma forma que não pudesse ser
" mais editado, mas existe um botãozinho malandro que se chama 'Novas
" entradas' esse botão inclui uma nova entrada na tabela ( dãããã ), mas
" conforme informado no post passado essa View de manutenção é soh pra ver
" mesmo, portanto neste post irei mostrar como passar por rotinas após
" ação do User sem codificar nada.
"  Vamos lah, primeiro vá na tabela(se11), deixe-a para edição( clique no
" lapizinho), e vá para o menu 'Utilitários/Gerador de atualização de tabela'.
" conforme Imagem abaixo.


 

"  Bemm, aqui nós estaremos nos dados da 'geração de diálogos de tabelas'
" onde espero que o mesmo já tenha sido criado, se não, veja link abaixo.
" http://abapjuniores.blogspot.com.br/2011/09/dicionario-view-de-manutencao-de.html
"  Agora nessa tela vá no menu 'Ambiente/modificação/Horas'





terça-feira, 19 de junho de 2012

Função - SPELL_AMOUNT

 
"  Eae galera, desculpa a ausência, mas estou respondendo os emails o mais
" rápido possível.... agora vou passar uma função interessante pra quem
" trabalha com alguns clientes que gostam mais do visual da tela... vou
" mostrar uma função onde você infoma um número e ela retorna a o texto do
" mesmo. ex. Importing 55, exporting 'CINQUENTA E CINCO' é legalzinho pra
" documentos e pra tela do User.

REPORT  z_spell_amount.

" Tela de seleçãio
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_numero TYPE i,        " Número
  p_langu  TYPE sy-langu. " Idioma do texto

SELECTION-SCREEN END OF   BLOCK b1.

DATA :
  st_words TYPE spell.

CALL FUNCTION 'SPELL_AMOUNT'
 EXPORTING
   amount          p_numero
*   CURRENCY        = ' '
*   FILLER          = ' '
   language        p_langu
 IMPORTING
   in_words        st_words " Estrutura de retorno
 EXCEPTIONS
   not_found       1
   too_large       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.



DATA :
  it_split     TYPE TABLE OF string,
  st_split     TYPE string,
  vg_txt_final TYPE string.

SPLIT st_words-word AT space INTO TABLE it_split.

BREAK-POINT.


terça-feira, 5 de junho de 2012

View de Manutenção - Campo editável e não editável

  "  Eae, tudo certin ? Hoje vou entrar um pouco mais a fundo sobre o assunto
" 'View de Manutenção de Tabelas' se vocês não lembram oq é isso veja o link
" http://abapjuniores.blogspot.com.br/2011/09/dicionario-view-de-manutencao-de.html
"  Sabemos que todos os campos que são chaves na tabela são fechadas na view,
" e que fica aberto para edição os campos que não são chaves, mas as vezes
" precisamos criar views soh pra ver mesmo o conteudo da tabela, então...
" vou mostrar como fechar para edição os campos que não são chaves, mas antes
" vamos entender um pouco melhor a view de manutenção e seu grupo de função.

"  Provavelmente quando vocês fizeram a view de manutenção, vocês foram
" no grupo de função da view pra dar uma olhadinha neh, espero que sim rsrs,
" não sei se perceberam mas o grupo de função tah cheio de coisa dentro
" tudo coisa criada automaticamente pelo SAP, para criar sua View que é nada
" mais, nada menos, que um programinha tipo module pool (telas) para manipulação
" de dados da tabela que você criou a View.

"  Agora que sabemos disso, poderemos mexer nela agora com um pouco menos de
" receio, abaixo existe uma View que criei de uma tabela simples onde o campo
" 'NOME' não é chave da tabela e porisso aparece aberta para edição mas nós
" vamos fechar para edição.





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.


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