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.

terça-feira, 23 de fevereiro de 2016

Convertendo Spool em PDF - RSTXPDFT4


*  Fala Galera, ultimamente precisei criar um arquivo PDF baseada no
* no Spool gerada pelo Smartforms e mandar por email, procurando algo
* que me ajudasse na internet, encontrei um programa que transforma 
* o Número do Spool em um arquivo .PDF dentro do diretório que escolher.
*  Esse programa não resolvia meu problema mas me ajudou muito pois 
* usei as funções que foram usadas nesse programa.
*  Primeiramente irei mostrar um passo a passo de como processar esse 
* programa e mais tarde num próximo post mostrar como fazer um arquivo 
* .pdf pelo Spool e enviar para um email.

*  O programa que estou falando é o 'RSTXPDFT4', vá na transação SE38
* coloque RSTXPDFT4 e execute.


* O primeiro parametro é o numero do Spool, para pegar essa informação
* vá na transação SP02 e copia o Spool desejado para conversão.



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.





quarta-feira, 27 de janeiro de 2016

Trabalhando com Caixa de Texto - CL_GUI_TEXTEDIT

REPORT z_caixa_de_texto.

*  Opa pessoal, quando vamos montar telas para os nossos queridos User
* colocamos sempre os campos da tabela que estamos trabalhando e na maioria
* das vezes só os campos mais importantes, só que as vezes esses mesmos
* users querem uma caixa de texto lateral ou abaixo das informações para
* principais para que seja possível incluir observações sobre o processo,
* documento ou qualquer outra coisa que esteja fazendo... Até aí sem problema.
*  O problema começa quando o objeto de caixa de texto não é existe na caixa
* de ferramentas da edição da screen, nesse momento vamos descobrir a usar
* a classe CL_GUI_TEXTEDIT.
*  No final contem os prints de tela.
*  Caso não lembre como ver os dados gravados em um Objeto de texto.
*  Como em todos os posts estarei fazendo os comentários no meio do código,
* bons estudos =).
DATA :
  o_docking 
TYPE REF TO cl_gui_docking_container,
  o_editor  
TYPE REF TO cl_gui_textedit.

* Tela Principal
CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Module  INIT  OUTPUT
*&---------------------------------------------------------------------*
MODULE init OUTPUT.

  
CREATE OBJECT o_docking
    
EXPORTING
      repid 
= sy-repid    " Report to Which This Docking Control is Linked
      dynnr 
= '9000'.        " Screen to Which This Docking Control is Linked

  
IF o_editor IS NOT BOUND.
* Limite do docking que conterá o textedit
    o_docking
->set_extension( 400 ).
*  Criação do objeto da caixa de texto com limitações de quantidade total e
* quantidade total por linha.
    
CREATE OBJECT o_editor
      
EXPORTING
        max_number_chars           
= 100
        parent                     
= o_docking
        wordwrap_mode         
= cl_gui_textedit=>wordwrap_at_fixed_position
        wordwrap_position          
= 25
        wordwrap_to_linebreak_mode 
= cl_gui_textedit=>true.


*  Abaixo eu criei um perform para dar get e set na caixa de texto pois
* o mesmo usaria as mesmas variaveis no read_text e save_text, sendo o
* o primeiro parametro ( que nesse caso é o 'SET' como chave para o processo
* READ_TEXT -> SET_TEXT_AS_R3TABLE
    
PERFORM f_get_set_text_to_editor USING 'SET' o_editor.

  
ENDIF.

ENDMODULE.                 " INIT  OUTPUT