sexta-feira, 15 de abril de 2011

Execute Online

Diquinha de Hoje

" Para executar um Module Pool criás-tes uma transação, rs"

Figura no Module Pool

  "  Radical esse código heim, hahaii !!
"  Foi como disse o meu amigo que passou este esqueminha pra mim,
" o Nicholas procurou muito na internet e naum achou porisso estou postando
" espero que ajude algum junior, vamos por passos : 

"  Passo 1 - Criar uma 'Custom Control no Layout da tela
"  Passo 2 - Dentro do 'Before OutPut (PBO) tem o Modulo de Status da tela,
"  Passo 3 - Dentro deste modulo (por Bouas praticas) crie um 'Perform para 
" chamar a imagem
"  Passo 4 - Agora coloque o codigo abaixo não esquecendo de relacionar o 
" o 'Custom Control com o container e colocar o nome do figurinha no 'Method

"  É Voala (é Assim que escreve?) agora seu 'Module Pool vai ter uma imagem a 
" maioria da vezes serve pra coloca o logo do cliente (por favor não erre a 
" imagem )

*&---------------------------------------------------------------------*
*&  Include           MZ_NCPROGRAMAF01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  Z_FIGURA_1
*&---------------------------------------------------------------------*



FORM z_figura_1 .

  DATA: w_lines TYPE i.

  TYPES pict_line(256) TYPE c.

  DATA :  container TYPE REF TO cl_gui_custom_container,
          editor    TYPE REF TO cl_gui_textedit,
          picture   TYPE REF TO cl_gui_picture,
          pict_tab  TYPE TABLE OF pict_line,
          url(255)  TYPE c.

  DATA: graphic_url(255).

  DATA: BEGIN OF graphic_table OCCURS 0,
          line(255) TYPE x,
        END OF graphic_table.

  DATA: l_graphic_conv TYPE i.
  DATA: l_graphic_offs TYPE i.
  DATA: graphic_size   TYPE i.
  DATA: l_graphic_xstr TYPE xstring.

  CALL METHOD cl_gui_cfw=>flush.

* Aqui é declarado o container onde a imagem vai aparecer.

  CREATE OBJECT: container EXPORTING container_name = 'CUSTOM_CONTROL_1', picture EXPORTING parent = container.

* Metodo que carrega a imagem do SAP.

  CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
    EXPORTING
      p_object       = 'GRAPHICS'
      p_name         = 'SUA_IMAGEM_AKI'
      p_id           = 'BMAP'
      p_btype        = 'BCOL'
    RECEIVING
      p_bmp          = l_graphic_xstr
    EXCEPTIONS
      not_found      = 1
      internal_error = 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.

  graphic_size = XSTRLEN( l_graphic_xstr ).
  l_graphic_conv = graphic_size.
  l_graphic_offs = 0.

  WHILE l_graphic_conv > 255.

    graphic_table-line = l_graphic_xstr+l_graphic_offs(255).
    APPEND graphic_table.
    l_graphic_offs = l_graphic_offs + 255.
    l_graphic_conv = l_graphic_conv - 255.

  ENDWHILE.

  graphic_table-line = l_graphic_xstr+l_graphic_offs(l_graphic_conv).
  APPEND graphic_table.

  CALL FUNCTION 'DP_CREATE_URL'
    EXPORTING
      type     'IMAGE'
      subtype  = 'X-UNKNOWN'
      size     = graphic_size
      lifetime = 'T'
    TABLES
      data     = graphic_table
    CHANGING
      url      = url.

  CALL METHOD picture->load_picture_from_url
    EXPORTING
      url = url.

  CALL METHOD picture->set_display_mode
    EXPORTING
      display_mode = picture->display_mode_fit_center.

ENDFORM.                    " Z_FIGURA_1

quinta-feira, 14 de abril de 2011

Exits de boua..

Diquinha de Hoje

" Nunca coloque Check dentro de Exits,.... Nunca..."

terça-feira, 12 de abril de 2011

Só uma letra

Diquinha de hoje

" Nunca declare nada com um único caractér, pois eh mou treta selecionar isso Debuggando"

Programinha Orientado a Objeto

  "  Este programa Mostra como eh dahora trabalha com Orientação a Objeto,
" eh dificil mas eh dahora pegando o conceito vc consegue pelomenos entender
" os programas orientado a objeto que vc for dar manutenção, pq vc vê que o
" Código e mais estruturado e organizado
"  Extra - Quem me deu aula de OO foi o Flavio Furlan do (abap101.com) e
" o Mauricio Cruz da (www.abapzombie.blog.br) portanto qualquer coisa vcs
" falem com eles rsrsrsrsrs e/ou comentem aqui.

*&---------------------------------------------------------------------*
*& Report  ZMJ_PROG_OO.
*&
*&---------------------------------------------------------------------*

REPORT  zmj_prog_oo.

" Tela de Seleção .....
SELECTION-SCREEN BEGIN OF BLOCK WITH FRAME.
PARAMETERS: s_c TYPE OBLIGATORY  .
SELECTION-SCREEN END OF BLOCK a.

"  A 'Definition serve para declaração de tudo que será usado
*----------------------------------------------------------------------*
*       CLASS c1 DEFINITION
*----------------------------------------------------------------------*
CLASS c1 DEFINITION.

  " 'Public Section conterá atributos visiveis pra todos ( progs, functions, etc)
  PUBLIC SECTION.
    "  Olhando bem com o method eh, faz vc lembra de algo ne, e claro parece
    " uma função a ideia eh essa mesmo, contem os importing changing e exporting
    METHODS:   set IMPORTING value(set_value) TYPE i,
               add,
               get EXPORTING value(get_value) TYPE i.

    "  Caso ela vire uma 'SuperClass (classe Mãe) no 'Protected Section os atributos
    " e metodos seram somente usados nas subclasses e nela mesma 
  PROTECTED SECTION.

    " 'Private section conterá atributos visiveis somente dentro da classe.
  PRIVATE SECTION.
    DATA contador TYPE .
ENDCLASS.                    "c1 DEFINITION

"  A 'Implementation serve para mostrar o q tudo que foi declarado faz,
" dica - Toda vez que abrir uma classe ou metodo ja fecha pra visualizar
" melhor oq está Fazendo.
*----------------------------------------------------------------------*
*       CLASS c1 IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS c1 IMPLEMENTATION.

  " 'Method que compara a variavel 'Contador com o variavel definida do 'Method
  METHOD set.
    contador = set_value.
  ENDMETHOD.                    "set

  " 'Method que adiciona +2 na variavel 'Contador
  METHOD add.
    ADD 2 TO contador.
  ENDMETHOD.                    "add

  " 'Method que compara variavel definida do 'Method com a varival 'Contador
  METHOD get.
    get_value = contador.
  ENDMETHOD.                    "get
ENDCLASS.                    "c1 IMPLEMENTATION

" Daki pra baixo estaremos trabalhando com tudo que declaramos acima.

" Data cnt com referencia a classe criada dando assim acesso a tudo da classe.
DATA obj_1 TYPE REF TO c1.
DATA TYPE .

" Inicio da seleção ....

START-OF-SELECTION.

  " Para estar trabalhando com ele ainda vc precisa cria-lo como objeto
  CREATE OBJECT obj_1.

  "  Chama o 'Method set para o objeto 'obj_1 onde o valor exportado é a variável
  " declarada como tipo inteiro (linha 75)
  CALL METHOD obj_1->set
    EXPORTING
      set_value = n.

  " Faz n vezes a chamada no 'Method add conforme imput na tela de seleção.
  DO s_c TIMES.
    CALL METHOD obj_1->add.
  ENDDO.

  " Chama o 'Method set para o objeto 'obj_1 onde o valor importado é a variável
  CALL METHOD obj_1->get
    IMPORTING
      get_value = n.

  " Mostra a variável pra 6 vê que funciona.
  WRITE n.

Perform's

  "  Este tipo de código e muito usado em Batch Imput, Alimentando fieldcat,
" e muitas outras coisas, O perform e usado pra organizar e pra trabalhar
" com rotinas.
"  Testem aih pessoal, daki por diante soh estarei mandando os posts
" prontos pra testar eh soh copiar e colar aih assim vcs podem debuggar
" e ver como funciona pro sistema e tambem caso vc tenham que usa o codigo
" pra algum trampo rsrs.

*&---------------------------------------------------------------------*
*& Report  ZMJ_PROG_FORMS.
*&
*&---------------------------------------------------------------------*

REPORT  zmj_prog_forms.

" Tipos ......
types begin of ty_mara,
          matnr type mara-matnr,
          ernam type mara-ernam,
          pstat type mara-pstat,
        end of ty_mara
         .

" Estruturas ......
DATA : st_itteste  type ty_mara
        .

" Tabelas Internas .....
DATA : it_itteste  type table of ty_mara
        .

" Variaveis .....
DATA : vg_repid TYPE sy-repid
       .

" inicialization
vg_repid = sy-repid
.

" Inicio do processo ....
PERFORM : z_alimenta,
          z_alimenta2
                .

*&---------------------------------------------------------------------*
*&      Form  Z_ALIMENTA
*&---------------------------------------------------------------------*
"  Aqui é imput de dados na tabela interna da forma mais simples possivel,
" onde eh usado um form normal.

form Z_ALIMENTA .

  clear : it_itteste. " limpa a tabela para receber os dados

  st_itteste-matnr = '88988298839'" Dados do primeiro registro
  st_itteste-ernam = 'EU MESMO'.
  st_itteste-pstat = 'REGISTRO 1'.
  APPEND st_itteste TO it_itteste.  " Coloca o registro na tabela

  st_itteste-matnr = '90889878787'" Dados do segundo registro
  st_itteste-ernam = 'EU MESMO2'.
  st_itteste-pstat = 'REGISTRO 2'.
  APPEND st_itteste TO it_itteste.  " Coloca o registro na tabela

endform.                    " Z_ALIMENTA

*&---------------------------------------------------------------------*
*&      Form  Z_ALIMENTA2
*&---------------------------------------------------------------------*

FORM z_alimenta2.

  clear : it_itteste. " limpa a tabela para receber os dados

"  O 'Perform declarado aki estah informando que estará usando os dados
" abaixo, eh muito importante a sequencia de dados pois eh pela sequencia
" que o 'Form se relaciona com os dados do 'Perform

  PERFORM z_alimenta_itteste USING :
        '88988298839' 'EU MESMO'  'REGISTRO 1',  " Dados do registro 1
        '90889878787' 'EU MESMO2' 'REGISTRO 2'  " Dados do registro 2
          .

ENDFORM.                    " Z_ALIMENTA2

*&---------------------------------------------------------------------*
*&      Form  Z_ALIMENTA_ITTESTE
*&---------------------------------------------------------------------*
"  O 'Form foi declado onde o primeiro dado do registro que tah no
" 'Perform eh a variavel p_matnr que tem o tipo mara-matnr essa variável
" poderia ter qualquer nome e qualquer tipo

FORM z_alimenta_itteste  USING  p_matnr TYPE mara-matnr
                                p_ernam TYPE mara-ernam
                                p_pstat type mara-pstat.

  st_itteste-matnr = p_matnr. " Relaciona a variavel com o campo da estr.
  st_itteste-ernam = p_ernam.
  st_itteste-pstat = p_pstat.

 APPEND st_itteste TO it_itteste.  " Coloca o registro na tabela
ENDFORM.                    " Z_ALIMENTA_ITTESTE.

domingo, 20 de março de 2011

Range's

Bem,

Estava eu fazendo um programinha de boua mas meu "select" não funcionava pq eu tava colocando "and" e "or" na clausula "where" do "Select e meu chefe falow pra usar o famoso "Range" mas era pra mim usar o "Range" usando "data" pq o "Range" está obsoleto, portanto caso queiram fazer um "select" onde tenham intervalo de dados ou campos com dois ou mais valores usem este codigo como exemplo :

report zrange_001.

DATA : r_taxtyp1 TYPE RANGE OF j_1bnfstx-taxtyp, " Como se fosse um tabela Interna
rl_taxtyp1
LIKE LINE OF r_taxtyp1. " Como se fosse uma estrutura

PERFORM z_preenche_r_taxtyp1. " Perform's para preenchimento do range.

FORM z_preenche_r_taxtyp1 .

rl_taxtyp1-sign =
' I '. " Inclui os valores do intervalo
rl_taxtyp1-option =
'EQ'. " Tipo como 'NE' 'BT' e por aih vai
rl_taxtyp1-low =
'ICOQ'. " Informação que esta sendo incluida
APPEND rl_taxtyp1 TO r_taxtyp1. " Alimenta a tabela pela estrutura
CLEAR rl_taxtyp1-low. " Limpa o campo "LOW" da estrutura

rl_taxtyp1-low =
'ICOW'.
APPEND rl_taxtyp1 TO r_taxtyp1.
CLEAR rl_taxtyp1-low.

rl_taxtyp1-low =
'ICOZ'.
APPEND rl_taxtyp1 TO r_taxtyp1.
CLEAR rl_taxtyp1-low.


Dá pra usa isso pra um monte de coisas..... espero que tenha ajudado......

quarta-feira, 16 de março de 2011

Vivendo e aprendendo

Galera,
Com o Pouco tempo de ABAP que eu tenho percebi uma coisa, Saiba se comunicar, não fique invergonhado em perguntar pois na maioria das vezes a sua duvida pode ser de outra gente e melhor essa duvida já foi duvida da pessoa que irá te ajudar e que com certeza ela irá responder em prontidão, Uma coisa tenham certeza seu atual chefe um dia foi Junior Também, portanto, pergunta mesmo porque ele deve ter enchido o saco de muita gente pra ser chefe hoje,. rsrsrs.