arquivo

Arquivo do autor:Dev SAP Brasil


*——————————————————————–*
*Buscar equipamento vinculado à Nº Ordem
*——————————————————————–*
CALL FUNCTION ‘BAPI_ALM_ORDER_GET_DETAIL’
EXPORTING
number    = iv_aufnr
IMPORTING
        es_header = ls_header
TABLES
return    = lt_return.


Esta função exibe um Popup e neste podemos definir opções de Checkbox de forma que seja possível selecionar algumas opções, isto é útil quando necessitamos realizar alguma operação e definir critérios para que o usuário decida o que será executado/processado.

Read More


Uma função pode ser executada com diversos parâmetros. Em uma destas maneiras pode ser executada com o parâmetro Background.

Contextualizando: caso seja necessário gravar dados após a gravação de um determinado documento gerado através de uma transação STD, exemplo, depois de gravar um pedido de compras é necessário realizar um processo que dependa do número do pedido gerado, acontece que o número do pedido só é gerado apóa a gravação do mesmo.

Read More


Eventualmente precisamos que uma determinada ação ocorra a cada espaço de tempo.

Exemplo, em uma tela do tipo ModulePool, que exiba dados de monitoramento, queremos que a cada xx segundos os dados sejam atualizados automaticamente, para isso podemos implementar uma classe que a cada espaço de tempo irá implementar os eventos do Grid que irá atualizar os dados na tela.

 

  • Chamada da Classe (aciona o timer, no final do tempo contado, executa código implementado):

    if timer is initial.
      create object timer.
    endif.

    if cl_timer_h is initial.
      create object cl_timer_h.
    endif.

timer->interval = 10.
  call method timer->run.
  set handler cl_timer_h->run_handler for all instances.

Exemplo: o código acima pode ser implementado em um botão que irá chamar a execução de um relatório, a cada xx tempo o evento irá executar.

  • Definição da Classe CL_TIMER

*Class to handle the FINSHED Event Raised by CL_GUI_TIMER
class cl_timer definition.
 
public section.
   
methods : run_handler for event finished of cl_gui_timer.
endclass.

  • Declaração/Implementação classe CL_TIMER

data timer type ref to cl_gui_timer.
data cl_timer_h type ref to cl_timer.

class cl_timer implementation.
  method run_handler.

    call method timer->run.

    call method cl_gui_cfw=>set_new_ok_code
      exporting
        new_code = ‘REFR’.

    perform f_rebuild_grid_jobs.

  endmethod.
endclass.

O código que estiver dentro do perform f_rebuild_grid_jobs será executado a cada contagem do TIMER.


É possível implementar alguns eventos pré-definidos na SM30 para realizar alguns tratamentos, isso facilita bastante o trabalho pra implementar pequenas validações.

Fontes:

http://www.abapzombie.com/dicas-abap/2011/01/13/validacoes-simples-em-sm30-eventos/

http://sapr3abap.wordpress.com/2009/12/23/eventos-na-sm30/

`


Bom, você criou a tabela e gerou sua SM30. Daí você precisa fazer uma consistência sempre que o user entrar com um valor na SM30. Entre na SE11 -> Menu gerar SM30 -> Modificação -> Hora (traduçao porca! em inglês é Event)

Ignore o pop-up (afinal, TUDO pertence a SAP, duh). Aperte F4 na primeira coluna, e você vai ver a lista de eventos que podem disparar um FORM "Z".

Escolha um Evento (eu escolhi o 05, sempre que uma nova linha for inserida). Dê um nome para seu FORM e aperte ENTER. Vai aparecer aquele ícone de editor ali.

Pode apertar Enter na tela de nova include, porque a idéia é criar uma include separada mesmo. Um detalhe importante é que ele não vai criar o comando FORM.. ENDFORM automático. Você deve entrar na mão. CUIDADO PARA NÃO ERRAR O NOME DO FORM! 😉

Ative, a tabela e saia da SE11. Por precaução, verifique na SE80 se o Grupo de Funções da SM30 também foi ativado. Agora, entre na SM30, coloque uma nova linha e aperte enter… que vai parar no FORM que você criou! 😀

Agora você me pergunta: tá, e daí?

Simples! Se você re-gerar a sua SM30, tudo que você vai ter que fazer para sua lógica voltar a funcionar na nova SM30, é adicionar UMA linha de código, independente da quantidade de consistências que você fez. (claro que se a tabela foi alterada, você vai ter que ajustar a lógica.. mas isso é o de menos).

É só abrir o programa principal do grupo de funções da SM30 re-gerada, e adicionar a include que foi criada na hora que você criou o evento. Simples assim! 😀


Aqui vai uma dica de como encontrar USER-EXITS para determinada transação.

Fonte:

http://sapempt.blogspot.com.br/2010/09/encontrar-user-exit-para-uma-transaccao.html

Vamos utilizar uma transação de CO como exemplo. Execute a transação KSB1.

Duplo clique na transação.

Anotar pacote de desenvolvimento.

Executar transação SMOD, menu Utilitários / Procurar.

Inserir nome do pacote de desenvolvimento e executar.

Serão exibidas as funções disponíveis para a USER-EXIT COOMEP01 (CO-OM: Information system -> line item reports). Basta ativar a codificar através da SE37.

Entrou no radá!


ME21N,ME21N

Badi Pedido de Compras

Purchase

Fonte: http://scn.sap.com/docs/DOC-42557

PO Item modification using BADI ME_PROCESS_PO_CUST

This document would give in formation on how to access or change the PO item data before save using different methods.

Create implementation for BADI ME_PROCESS_PO_CUST

go to Method PROCESS_ITEM(This method can be used to change the Item)

DATA:

Flg_pers type c,

ref_pohdr TYPE REF TO if_purchase_order_mm,

wa_pohdr TYPE mepoheader,

wa_item TYPE mepoitem,

wa_pitem TYPE mepoitem.

* This method can be used to get referance(Pointer) for header data

ref_pohdr = im_item->get_header( ).

* Read header data from above referance

wa_pohdr = ref_pohdr->get_data( ).

* im_item of PROCESS_ITEM can be used as a referance to get item data

wa_item = im_item->get_data( ).

* IS_PERSISTENT can be used to check whether item is already created or it is nw entry

flg_pers = im_item->is_persistent( ).

* We can apply logic for only new items

IF flg_pers IS NOT INITIAL.

EXIT.

ENDIF.

* in this example I am modifying GR indicator for few conditions

IF wa_pohdr-ekorg EQ ‘1001’ AND wa_item-knttp = ‘F’.

wa_item-wepos = space.

im_item->set_data( EXPORTING im_data = wa_item ).

ENDIF.


Este programa salva em um diretório todos os ícones do SAP.

Para visualizar todos os os ícones do SAP, entrar na transação ICON.

Fonte do programa: http://wiki.sdn.sap.com/wiki/display/ABAP/Download+SAP+Icons+to+files+or+Desktop+Using+ABAP

REPORT zicon_download NO STANDARD PAGE HEADING LINE-SIZE 255.

* Data declaration
DATA t_files TYPE bapifiles OCCURS 0.
DATA: icon TYPE TABLE OF icon.
DATA : wa_icon LIKE LINE OF icon.
DATA: filename TYPE string,
pathname TYPE string,
fullpath TYPE string,
filefilter TYPE string,
user_action TYPE i,
wa_files TYPE bapifiles.

DATA my_bds TYPE REF TO cl_bds_document_set.
DATA objkey TYPE bapibds01-objkey.

DATA p_path TYPE string.

* Select Icons from icons table
SELECT name FROM icon INTO CORRESPONDING FIELDS OF TABLE icon.

START-OF-SELECTION.

CALL FUNCTION ‘GUI_FILE_SAVE_DIALOG’
EXPORTING
window_title = ‘Selecione o caminho para salvar icones’
IMPORTING
fullpath = p_path.

* If data exists
IF sy-subrc = 0.

PERFORM download_icons.

REFRESH icon.
CLEAR icon.
ENDIF.
*&


Na exibição dos dados em formato ALV, é possível o usuário mudar o layout da tela, modificando a orientação e exibição dos campos, este novo layout pode ser salvo, podendo inclusive ser definido como específico do usuário.

Entretanto, podemos imagina que isso é um recurso Standard, porém, veremos a seguir que é um parâmetro programável.

Veja na imagem abaixo que a opção de Salvar Layout Específico Usuário está desabilitada.

Para habilitar esta opção necessário apenas incluir uma linha de comando na chamada do ALV, conforme abaixo.

Lembrando que a opção válida é o valor = ‘A’ ou ‘U’, se colocar ‘X’, não vai funcionar, veja o código Standard para esse trecho.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_callback_program = sy-repid
is_layout = w_alv_layout
i_callback_user_command = ‘F_USER_COMMAND’
it_fieldcat = it_fieldcat
it_sort = it_sort
i_save = ‘A’
TABLES
t_outtab = it_output[]
EXCEPTIONS
program_error = 1
OTHERS = 2.


Fonte:

http://scn.sap.com/thread/737900

REPORT z_dummy_atg_3.

DATA : l_bytecount TYPE i,
l_tdbtype LIKE stxbitmaps-tdbtype,
l_content TYPE STANDARD TABLE OF bapiconten INITIAL SIZE 0.

DATA: graphic_size TYPE i.

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

PARAMETERS: p_name TYPE stxbitmaps-tdname,
p_obj LIKE stxbitmaps-tdobject DEFAULT ‘GRAPHICS’,
p_id LIKE stxbitmaps-tdid DEFAULT ‘BMAP’,
p_type LIKE stxbitmaps-tdbtype DEFAULT ‘BCOL’,
p_path LIKE rlgrap-filename DEFAULT ‘C:\TEMP\LOGO.bmp’.

CALL FUNCTION ‘SAPSCRIPT_GET_GRAPHIC_BDS’
EXPORTING
i_object = p_obj
i_name = p_name
i_id = p_id
i_btype = p_type
IMPORTING
e_bytecount = l_bytecount
TABLES
content = l_content
EXCEPTIONS
not_found = 1
bds_get_failed = 2
bds_no_content = 3
OTHERS = 4.

CALL FUNCTION ‘SAPSCRIPT_CONVERT_BITMAP’
EXPORTING
old_format = ‘BDS’
new_format = ‘BMP’
bitmap_file_bytecount_in = l_bytecount
IMPORTING
bitmap_file_bytecount = graphic_size
TABLES
bds_bitmap_file = l_content
bitmap_file = graphic_table
EXCEPTIONS
OTHERS = 1.

CALL FUNCTION ‘WS_DOWNLOAD’
EXPORTING
bin_filesize = graphic_size
filename = p_path
filetype = ‘BIN’
TABLES
data_tab = graphic_table
EXCEPTIONS
invalid_filesize = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4
unknown_error = 5
gui_refuse_filetransfer = 6.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.