Mostrando postagens com marcador Funções. Mostrar todas as postagens
Mostrando postagens com marcador Funções. Mostrar todas as postagens

quinta-feira, 25 de abril de 2019

Business Transaction Events ( BTE ) - FIBF

*  Bom dia pessoal, iremos falar hoje sobre uma negocio que é usado no
* modulo de FI, a não muito famosa BTE ( Business Transaction Events ).
*  BTE são funções pré definidas e chamadas pelo standard, são pré definidas
* para que saibamos a assinatura ( parametros de importação e Expostação ),
*  Bom.... Vamos colocando a mão na massa e durante as ações eu vou
* tentando explicar, lembrando que o comentario de vocês ajuda muito
* a melhorar o Post caso necessario.

*  Primeiro passo, como tudo na vida, antes de implementar a BTE temos que
* saber o que vamos fazer que será necessario uma BTE, faremos uma coisa
* bem simples, iremos atualizar um campo da linha de documento contabil (BSEG)
* no momento da gravação. Agora sabendo o que vamos fazer, vamos para a
* transação 'FIBF' e entramos no Menu 'Ambiente / Sistemas Info ( Processos ).




*  Vamos colocar o 'Tipo de atributo' igual a 'A' ( Componente de aplicação )



*  Vamos trabalhar com '00001430 MODIFICAR DOCUMENTO:substit.campo cab./linha'
* clicando na Botão 'Interface' conseguimos ver a assinatura e clicando no
* botão 'Modulo de função modelo'... você pode não acreditar, mas irá
* mostrar uma função que podemos usar como modelo ( rsrs ).




segunda-feira, 26 de junho de 2017

Função - REUSE_ALV_POPUP_TO_SELECT

REPORT zreuse_alv_popup_to_select.
*--------------------------------------------------------------------*
* Fala pessoal, hoje irei mostrar algo que facilita muito escolhas de
* registro em massa em um ALV, para fazer isso usarei a função
* 'REUSE_ALV_POPUP_TO_SELECT' que irá exibir todas as opções de seleção
* em massa.
*  Estarei trabalhando com um exemplo simples que trará todos os objetos
* criados pelo usuário que executar o programa.
* A lista de opções de seleção de linhas do ALV será criada baseada nos
* tipos de objetos ( TADIR-OBJECT ).
* Espero que gostem desse metodo que ajudará muito na seleção de linhas
* do ALV, onde além de fazer linha por linha, será feito conforme range
* definido no PopUP.
*  Segue no final do código os prints do processo.
* Valeo.

* Tipos.
TYPES :
  BEGIN OF ty_tadir,
    selected.
        INCLUDE TYPE tadir.
TYPES :
  END OF ty_tadir.
TYPES :
  BEGIN OF ty_popup,
    select,
    text(50),
  END OF   ty_popup.

* Tabela global.
DATA :
  gt_popup    TYPE TABLE OF ty_popup.

* Variaveis referente ao ALVV
DATA :
* Objetos
  o_docking   TYPE REF TO cl_gui_docking_container,
  o_grid      TYPE REF TO cl_gui_alv_grid,
* Tabelas internas
  gt_tadir    TYPE TABLE OF ty_tadir,
  gt_fieldcat TYPE TABLE OF lvc_s_fcat,
  gt_exclude  TYPE TABLE OF ui_func,
* Estruturas
  gs_layout   TYPE lvc_s_layo.

* Ranges
DATA :
  r_object TYPE RANGE OF char20.

* Inicio do processo.
START-OF-SELECTION.

* Quando criarem a tela do ALV ( 9001 ) coloquem o código abaixo na tela.
*--------------------------------------------------------------------*
*PROCESS BEFORE OUTPUT.
*  MODULE :
*    status_9001,
*    inicialization_9001.
*
*PROCESS AFTER INPUT.
*  MODULE :
*    user_command_9001.
*--------------------------------------------------------------------*

* Tela ALV principal.
  CALL SCREEN 9001.

*&---------------------------------------------------------------------*
*&      Form  POPUP_COM_MULTIPLA_ESCOLHA
*&---------------------------------------------------------------------*
FORM popup_com_multipla_escolha .

  DATA :
    ls_popup      LIKE LINE OF gt_popup,
    lt_fcat_popup TYPE TABLE OF slis_fieldcat_alv,
    ls_fcat_popup LIKE LINE OF lt_fcat_popup,
    lt_excl       TYPE slis_t_extab,
    ls_excl       TYPE slis_extab,
    ls_object     LIKE LINE OF r_object.

* Catalogo de campos do PopUp de opções.
  ls_fcat_popup-tabname   'LT_POPUP'.

  ls_fcat_popup-col_pos   '1'.
  ls_fcat_popup-fieldname 'SELECT'.
  ls_fcat_popup-seltext_m 'SELECT'.
  APPEND ls_fcat_popup TO lt_fcat_popup.

  ls_fcat_popup-col_pos   '2'.
  ls_fcat_popup-fieldname 'TEXT'.
  ls_fcat_popup-seltext_m 'Status'.
  ls_fcat_popup-outputlen 50.
  APPEND ls_fcat_popup TO lt_fcat_popup.

* Exclusão dos botões padrões do ALV.
  ls_excl-fcode '&ETA'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '%SC'.  APPEND ls_excl TO lt_excl.
  ls_excl-fcode '%SC+'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&OUP'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ODN'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ILT'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&OL0'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRB'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRL'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRR'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&CRE'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&ALL'APPEND ls_excl TO lt_excl.
  ls_excl-fcode '&SAL'APPEND ls_excl TO lt_excl.

  CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
    EXPORTING
      i_title               'Tipos de Objetos'
      i_zebra               abap_true
      i_screen_start_column 1
      i_screen_start_line   1
      i_checkbox_fieldname  'SELECT'
      i_tabname             'LT_POPUP'
      it_fieldcat           lt_fcat_popup
      it_excluding          lt_excl
    TABLES
      t_outtab              gt_popup
    EXCEPTIONS
      program_error         1
      OTHERS                2.

  FREE r_object.
  IF gt_popup[] IS NOT INITIAL.
    LOOP AT gt_popup INTO ls_popup.
      IF ls_popup-select abap_true..
        ls_object-sign   'I'.
        ls_object-option 'EQ'.
        ls_object-low    ls_popup-text.
        APPEND ls_object TO r_object.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.

quinta-feira, 25 de maio de 2017

Função - DD_DOMVALUES_GET

REPORT valores_de_dominios.

*  Fala Pessoal, estou desenvolvendo um relatorio que irá trabalhar com
* informações de requests do ambiente, para um controle mais detalhado
* para a gerencia técnica e os mesmos me pediram pra colocar tudo sobre
* as requests e objetos incluindo os status deles, como na maioria dos
* textos sempre ficam em tabela separada conforme exemplo
* ( Ex1. MARA( Material ) -> MAKT ( Textos Material )
*   Ex2. J_1BDOCTYPES ( Tipo de documento ) -> J_1BDOCTYPEST ( Textos ... )
* Visualizando as tabelas pela transação SE16N é possivel ver a tabela de
* Textos referente a tabela consultada.



*  Isso facilita muito pegar os textos, mas as vezes os textos não estão em
* tabelas, estão implícitas dentro do dominio.




*  Perceba que na imagem acima não está informado o campo 'Tab. Valores'
* onde estaria a tabela dos possiveis textos, além disso, os textos descritivos
* estão diretamente no dominio.
*  Pra conseguir reservar essas informações que estão no dominio e só usar
* a função do titulo do post e pronto, rsrs.

*  Segue um codigo que fiz como exemplo onde alimento a tabela com
* informações de dois dominios, para que vocês percebam que a tabela
* de retorno é a mesma e dentro da mesma é definido uma chave (DOMNAME), 
* assim facilitando a busca.


segunda-feira, 13 de março de 2017

Debuggando processo em UPDATE TASK e SM13

REPORT update_task.
*--------------------------------------------------------------------*
*  Fala Galera, hoje vou mostrar como faz para debuggar processos em
* Update Task. Funções que são executadas em update Task são reservadas
* e são somentes processadas quando executada o commando 'COMMIT WORK',
* esse comando irá processar tudo pue ficou na pilha pra ser processado
* depois. Vamos lá.
* Observações : Estarei realizando essa demonstração com vocês com uma
* função muito importante de atualização de dados da Nota fiscal, mas
* logo no começo dela já tem uma validação do campo DOC_NUMBER, portanto
* não alimente esse campo, para não ter problemas de atualizar algo que
* não deveria.

*  Primeiramente para usar uma função em 'update task', a mesma, tem que
* ser uma função de atualização.




*  Agora coloque o código abaixo e vamos pros testes.
*  Primeira coisa que devemos fazer quando parar no primeiro 'break' e ir
* no menu 'Configurações->Modificar Configurações/Perfil Depurador' e entrar
* nessa janela abaixo



* 'Flag' o campo 'Depur. Atualização'.




quarta-feira, 21 de setembro de 2016

Função - SELECT_OPTIONS_RESTRICT

REPORT zrestringindo_select_options.
*--------------------------------------------------------------------*
*  Fala galera, hoje vou mostrar a usar uma função que faz restrição nos
* select-options, muito das vezes os funcionais pedem para que não deixemos
* o usuário colocar qualquer coisa, ou nós mesmos percebemos que certas
* informações podem dar dump em um select ou processos.
* Ai estais a salvação.
A Ideia é ficar igual a imagem.




* Estruturas e tabelas internas.
DATA :
  lt_saplane 
TYPE TABLE OF saplane,
  ls_saplane 
LIKE LINE OF  lt_saplane
  
.

* Parametros de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS :
  so_plane 
FOR ls_saplane-planetype NO INTERVALS
  
.
SELECTION-SCREEN END OF BLOCK   b1.

* PBO
AT SELECTION-SCREEN OUTPUT.
  
PERFORM restricao_campos.

segunda-feira, 14 de março de 2016

Mandando Spool para Emails


FUNCTION zf_send_email.
*"----------------------------------------------------------------------
*"*"Interface local:
*"  IMPORTING
*"     VALUE(IM_SPOOL) TYPE  RSPOID OPTIONAL
*"     VALUE(IM_EMAIL) TYPE  AD_SMTPADR OPTIONAL
*"----------------------------------------------------------------------

*  Bom dia Abapers, conforme prometido hoje vou mostrar uma função prática
* que envia o Spool em anexo para o email informado, os parametros de
* importação estão informadas acima, qualquer dúvida comentem e vamos
* aprendendo juntos, coloquei alguns Breaks no código para visualizarem
* o processo.

* A transação para saber o Spool é a SP01 / SP02.

  
DATA :
    lt_lines        
TYPE TABLE OF tline,
    lst_lines       
LIKE LINE OF lt_lines,
    l_rspoid        
TYPE rspoid,
    lst_tsp01       
TYPE tsp01,
    l_objtype       
TYPE rststype-type,
    l_pdf_bytecount 
TYPE i,
    l_pdf_spoolid   
TYPE tsp01-rqident,
    l_btc_jobname   
TYPE tbtcjob-jobname,
    l_btc_jobcount  
TYPE tbtcjob-jobcount,
    l_xstring       
TYPE xstring,
    lt_soli_tab     
TYPE TABLE OF soli,      " soli_tab
    lt_solix_tab    
TYPE TABLE OF solix,      " solix_tab,
    l_size          
TYPE sood-objlen,
    lt_text         
TYPE TABLE OF solisti1,
    lst_text        
LIKE LINE OF lt_text,
    li_emails       
TYPE TABLE OF ad_smtpadr,
    lst_email       
TYPE ad_smtpadr,
    l_subject       
TYPE so_obj_des
    
.

  
DATA :
    lo_document  
TYPE REF TO cl_document_bcs,
    lo_bcs       
TYPE REF TO cl_bcs,
    lo_recipient 
TYPE REF TO if_recipient_bcs,
    lo_ex_bcs    
TYPE REF TO cx_bcs.

  
BREAK-POINT.

* Seleção para get dos detalhes do Spool Informado.
  
SELECT SINGLE FROM tsp01 INTO lst_tsp01 WHERE rqident im_spool.

  
IF sy-subrc IS INITIAL.
* Função para get dos atributos do Spool,
    
CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
      
EXPORTING
*       AUTHORITY     = ' '
        
client        lst_tsp01-rqclient
        name          
lst_tsp01-rqo1name
      
IMPORTING
        objtype       
l_objtype
      
EXCEPTIONS
        fb_error      
1
        fb_rsts_other 
2
        no_object     
3
        no_permission 
4
        
OTHERS        5.

    
IF sy-subrc IS INITIAL.
* Inicio - Conversão SPOOL -> PDF
      
IF l_objtype(3) = 'OTF'.
        
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
          
EXPORTING
            src_spoolid              
lst_tsp01-rqident
            no_dialog                
space
          
IMPORTING
            pdf_bytecount            
l_pdf_bytecount
            pdf_spoolid              
l_pdf_spoolid
            btc_jobname              
l_btc_jobname
            btc_jobcount             
l_btc_jobcount
          
TABLES
            pdf                      
lt_lines[]
          
EXCEPTIONS
            err_no_otf_spooljob      
1
            err_no_spooljob          
2
            err_no_permission        
3
            err_conv_not_possible    
4
            err_bad_dstdevice        
5
            user_cancelled           
6
            err_spoolerror           
7
            err_temseerror           
8
            err_btcjob_open_failed   
9
            err_btcjob_submit_failed 
10
            err_btcjob_close_failed  
11
            
OTHERS                   12.

      
ELSE.
        
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
          
EXPORTING
            src_spoolid              
lst_tsp01-rqident
            no_dialog                
space
          
IMPORTING
            pdf_bytecount            
l_pdf_bytecount
            pdf_spoolid              
l_pdf_spoolid
            btc_jobname              
l_btc_jobname
            btc_jobcount             
l_btc_jobcount
          
TABLES
            pdf                      
lt_lines[]
          
EXCEPTIONS
            err_no_abap_spooljob     
1
            err_no_spooljob          
2
            err_no_permission        
3
            err_conv_not_possible    
4
            err_bad_destdevice       
5
            user_cancelled           
6
            err_spoolerror           
7
            err_temseerror           
8
            err_btcjob_open_failed   
9
            err_btcjob_submit_failed 
10
            err_btcjob_close_failed  
11
            
OTHERS                   12.

      
ENDIF.

segunda-feira, 8 de fevereiro de 2016

Função - RKD_WORD_WRAP

REPORT rkd_word_wrap.

*  Eae Galera, atualmente estou trabalhando com SAPScript e tenho que
* tratar os textos e tamanho da linha conforme layout do Formulário,
* ai aprendi a usar a função abaixo que faz a quebra do texto conforme
* tamanho que desejar, essa função é legal porque além de fazer a quebra
* de texto você tambem pode fazer Split de string usando o parametro de
* exportação 'DELIMITER'.

* Estruturas e tabelas Internas
DATA :
  lt_lines  TYPE TABLE OF char30,
  lst_lines LIKE LINE OF lt_lines.

* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
* Parametros da tela de seleção
PARAMETERS :
  p_string TYPE char100 DEFAULT
  '1234567 123456 4857948655458745  87778+ 784541251 1 1254 1112121212',
  p_output TYPE DEFAULT '10'.
SELECTION-SCREEN END OF BLOCK   b1.

BREAK-POINT.
*  Essa função é muito prática para tratar textos que você queira quebrar
* antes de gravar num Objeto de texto, ou num campos que você queira ver
* somente partes pré definidas de uma string.
CALL FUNCTION 'RKD_WORD_WRAP'
  EXPORTING
    textline            p_string
*   DELIMITER           = ' '
    outputlen           p_output
* IMPORTING
*   OUT_LINE1           =
*   OUT_LINE2           =
*   OUT_LINE3           =
  TABLES
    out_lines           lt_lines
  EXCEPTIONS
    outputlen_too_large 1
    OTHERS              2.

BREAK-POINT.

* Exibição dos dados da tabela de retorno conforme regra determinada
LOOP AT lt_lines INTO lst_lines.
  WRITE / lst_lines.
ENDLOOP.

* Valeo... Segue as imagens do processo.