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'.




segunda-feira, 12 de dezembro de 2016

Criação de Fórmulas SD - VOFM

*  Eae 'debuggadores' hoje vou mostrar como criar uma formula SD do começo
* ao fim, primeiramente essas formulas são códigos abaps encapsulados para
* processos especificos, depois de criados eles são definidos de forma
* Customizing pelo funcional que solicitou isso, no nosso caso de exemplo
* iremos mostrar a criação de uma formula SD.
*  Para essa criação precisamos ir para a transação VOFM ir no menu
* 'Fórmulas -> Base de condição'... Conforme imagem abaixo.





*  Depois, iremos definir o numero da formula ( na maioria das vezes o
* funcional imforma isso ) e dar 'Enter' o problema que esse processo gera
* objetos Standards que em seguida necessida de chave de acesso, é só mandar
* o print do objeto e copiar e colar a chave do objeto mais a instalação pro
* Basis do projeto que depois de 5 dias ( brincando... rs ) eles te retornam
* com a chave, essa chave você p~eo no campo correspondente e pronto, objeto
* pronto e criado para você colocar o código necessário.



*  Ao criar o objeto, ele virá com o assistente de modificação é só ir no
* menu 'Processar -> Operações de Modificação -> Desativar assistente'.




* Logo após isso, irá aparecer uma imagem para te amedrontar, mas não se
* preocupem é só um informativo.

quinta-feira, 29 de setembro de 2016

Modificando denominação de elementos Standard

*  Eae pessoal, queria mostrar pra vocês uma jeito muito interessante e 
* e fácil para modificar textos de elementos Standards de uma forma
* muito simples.....
*  Sabe quando o Key-user ( principalmente em uma implantação ) fala 
* que o campo chave de alguma transação tem a descrição diferente da 
* habitual, e que isso poderia causar algum desconforto para a linha de
* frente que usa a transação... Além de criamos alguma exit para mudar 
* o texto existe esse processo que vou mostrar abaixo que muda a 
* denominação do elemento de dados mesmo que Standard. As vezes os próprios 
* funcionais fazem isso, mas como todos nós queremos ser diferenciados, 
* vamos aprender mais essa.
* Primeiramente vamos entrar na transação 'CMOD' e vamos seguir o caminho 
* conforme a imagem abaixo.
* ( Ir para -> Ampliações globais -> palavras-chave -> modificar )







* Informe a lingua e o elemento de dados que você quer modificar o texto.







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.

quinta-feira, 8 de setembro de 2016

SAP Inside Track São Paulo 2016 - Developer - #SITSP

Pessoal, todo ano acontece um evento que agrega muito aos profissionais SAP, estou falando do SAP INSIDE TRACK que esse ano vai acontecer no dia 03 de dezembro em São Paulo, como sempre GRATUÍTO, sim na faixa,..... Vários profissionais da area irão falar de assuntos referentes a parte de desenvolvimento SAP, nós ABAPers não podemos perder isso.

Cliquem no texto linkado acima e veja maiores informações.

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.