Conhecendo o módulo de função: BTE - Adicionando campos em relatórios FBL's

Fala galerinha da Fox \o/

Nesse post vou falar um pouco sobre a ferramenta BTE. Tive que fazer uma demanda onde dependia dela e vi que poucas pessoas sabia do que se tratava. Se você precisar, só consultar aqui :)

BTE - Business Transaction Events, lembra um pouco o famoso enhancements. Muito comum o seu
uso no módulo FI, representam componentes de vendas e de distribuição a receber e a pagar.
As BTE’s não são utilizadas apenas pela SAP, mas também por clientes e terceiros.
A BTE tem uma interface pré-definida e permite anexar funcionalidade adicional na forma de
um Funtion Module.

O BTE é chamado pelo programa padrão SAP por uma chamada de função: OPEN_FI_PERFORM_ ou OUTBOUND_CALL_.
Esta função verifica se há algum BTE ativa de acordo com personalização.

Sem mais delongas, vamos  colocar a mão na massa. 

Descrição da requisição: " Inserir o nome do Fornecedor e Cliente em todos relatórios FBLs (Standard). Isso deverá ser feito através da ferramenta BTE.

Mãos a obra!!!

Primeiramente vamos na estrutura RFPOS e inserir os novos campos através da estrutura " .APPEND " que deverão aparecer no relatório.
>> SE11 >> Estrutura: RFPOS >> Exibir.


Procure se algum dos campos que você pretende utilizar já estar contido na estrutura, para não precisar criar outro igual (desnecessariamente).
Para isso você deverá pesquisar pelo elemento de dados que faz referência ao campo.
No meu caso como eu queria acrescentar 2 campos para exibição de nome, então meu elemento de dados é "NAME1_GP", mas você pode procurar da maneira que achar mais fácil :)


 Minha pesquisa trouxe o campo “ZNOMEF” que tem como elemento de dados “NAME1_GP” o mesmo que eu precisava. Procurei se tinha algum outro e não encontrei. Logo teria que adicionar apenas mais um campo para essa estrutura APPEND. Então eu cliquei no campo “.APPEND” e  acrescentei o campo “ZNOMEC” utilizando o mesmo elemento de dados “NAME1_GP”. Salve e ative.

Agora você deverá fazer exatamente a mesma coisa na estrutura RFPOSX.



Salve e ative.

OBS: Para minha necessidade o campo " ZNOMEF " já era destinado ao Fornecedor, mas caso o seu caso seja diferente, você pode adicionar uma outra estrutura " .APPEND " e colocar seus campos lá dentro por segurança ;)

Agora acesse a transação SE38 e execute o programa “ RFPOSXEXTEND ”, para atualizar as estruturas estendidas da RFPOS.
E também o programa “ BALVBUFDEL “, para atualizar o buffer do SAP com a nova estrutura.

Se liga nissoooo aquiiii que vai te poupar de criar um grupo de função atoaaaa 

Acesse a transação FIBF. Vai no Menu  >> Configurações  >> Módulos (P/S)  >>  ... de um cliente


Se vocês encontrarem uma função já associada ao mesmo evento que irá utilizar, apenas acessa a mesma e implemente sua lógica junto a que já estiver contida na função. Exemplo na imagem:


Caso não tenha nenhuma função associada a seu evento, você terá que criar uma ;)

Vamos na SE80 e crie um grupo de funções para a mesma.


O próximo passo é fazer a cópia da função SAMPLE_INTERFACE_00001650 para inserir a lógica correspondente ao preenchimento dos novos campos. (ex. ZINTERFACE_00001650 ).
Acesse  a transação SE37  e faça a cópia da função Standard.


Repetir o passo a seguir, informando o módulo que estará informando ao sistema:

Transação FIBF. Vai no MENU  >> Configurações  >> Módulos (P/S)  >>  ... de um cliente


Informar o seu Evento00001650 / Produto: Dê um nome ao mesmo / Módulo de FunçãoZINTERFACE_00001650 ( a sua função que você copiou )


Agoraaaaa é o seguinte, se você não fizer esse próximo passo, você vai virar uma raposa perturbada, vagando pela estrada sem entender nada \o/

Esse é pulo da raposa, pois aqui você irá cadastrar e ativar o produto. Se você não fizer isso, sua função será um fantasma para a SAP \o/.

Na transação FIBF. Vai no Menu  >> Configurações  >> Produtos  >>  ... de um cliente



Informe o nome do produto, um texto breve e ativaaaaaaaaaa. (flag: 'A').


OBS: Para essa situação onde eu quero apenas inserir novos campos no relatório, você pode ir direto na SE37 e copiar a função SAMPLE_INTERFACE_00001650, como eu fiz. Mas caso o seu objetivo não seja esse, então você deverá acessar a transação FIBF. No MENU acesse: Ambiente (U) >> Sistema de informação (P/S)


E está é a ferramenta BTE. Lembrando que existe dois tipos:
Publish & Subscribe as interfaces - Não é possível atualizar dados. Possível ter várias implementações
Interfaces Processes - Pode atualizar data. Apenas uma implementação ativa.

Caso você não sabia o parâmetro específico a informar, apenas execute a transação.


Logo será exibido uma lista de eventos e suas funcionalidades.


Caso você quisesse o evento " 00001650 ” (que foi o evento que nós utilizamos no tutorial), selecione a linha desejada e clique em “ Módulo de função modelo “.


Observe que simplesmente encurtou o passo que nós já havíamos feito antes.


Agora vamos editar a função que copiamos anteriormente.
Na guia “ Texto Fonte” é o bendito lugar onde você deverá inserir o seu código.


Abaixo vou postar o código que eu utilizei (para minha necessidade) para ajudar vocês a não colocar fogo na raposa, mas lembre-se que o seu caso pode ser diferente, então a lógica poderá ser outra \o/

Minha requisição: Inserir o nome do fornecedor e cliente em todas FBLs, ou seja, essa coisa linda que nós fizemos aqui, vai refletir nos relatórios: FBL1, FBL1H, FBL1N, FBL2, FBL2N, FBL5, FBL5H, FBL5N, FBL6 e FBL6N............. Loucooo né?!
Deixei bem comentado pra ficar fácil de entender.


FUNCTION ZINTERFACE_00001650.
*"----------------------------------------------------------------------
*"*"Interface local:
*"  IMPORTING
*"     VALUE(I_POSTAB) LIKE  RFPOS STRUCTURE  RFPOS
*"  EXPORTING
*"     VALUE(E_POSTAB) LIKE  RFPOS STRUCTURE  RFPOS
*"----------------------------------------------------------------------
* Declarando WA
DATA: wa_bseg TYPE bseg.

* Isso aqui já vem desse jeito, descomente apenas, se não entender faz o curso da Fox ;)
e_postab = i_postab.

* Limpa essa birosca para não correr o risco de dá merda lá na frente 
  CLEAR: wa_bseg.

* Selecione todos os campos da BSEG ( se vc quiser escolher os campos específicos, fica avonts )
  SELECT SINGLE *
           FROM bseg
           INTO wa_bseg                             “ Coloca os meninos aqui
          WHERE bukrs = i_postab-bukrs  “ Só vai pra WA_BSEG se isso aqui for verdadeiro
            AND gjahr = i_postab-gjahr       “ Isso aqui também
            AND belnr = i_postab-belnr.      “ E isso também \o/

* Se tiver encontrado algum código de fornecedor, procure seu nome
  IF wa_bseg-lifnr IS NOT INITIAL.

*  E_POSTAB é minha tabela de exportação
*  Buscando o NOME do Fornecedor
    SELECT SINGLE name1
             FROM lfa1
             INTO (e_postab-znomef)      “ ZNOMEF lembra dele lá na estrutura APPEND ? ;)
            WHERE lifnr EQ wa_bseg-lifnr.
  ENDIF.

* Se tiver encontrado algum código de cliente, procure seu nome
  IF wa_bseg-kunnr IS NOT INITIAL.

*  Buscando o NOME do Cliente
    SELECT SINGLE name1
             FROM kna1
             INTO (e_postab-znomec)    “ Haaa esse cara nós ascrencentamos na estrutura \o/
            WHERE kunnr EQ wa_bseg-kunnr.
  ENDIF.

* Wooow acabouuu, só isso \o///////////

ENDFUNCTION.

É isso aí pessoal, pode fazer um teste em qualquer um dos FBL's ( FBL1, FBL1H, FBL1N, FBL2, FBL2N, FBL5, FBL5H, FBL5N, FBL6 e FBL6N ) e executar o relatório.
Na exibição lembra de clicar no botão ''Modificar Layout" e selecionar os campos que você adicionou nas estruturas RFPOS e RFPOSX.


Prontoooo, ficou grandão, mas foi preciso para vocês não se perderem \o/////

Gostou da publicação? Então clica na raposinha e curta nossa fanpage \o/


Quer aprender ABAP definitivamente, sem precisar sair de casa?

Acessewww.abapfox.org

“O sucesso é a soma de pequenos esforços repetidos dia após dia” – Robert Collier

0 comentários:

Copyright © 2013 ABAP SAP - AbapFox! Aprenda ABAP Definitivamente