ABAP实例:如何生成年月的输入帮助

  在ABAP的设计过程中经常会出现账务期输入,格式为年月。如果我们使用spmon元素为参考,但是系统无输入帮助,用户常常出错,为了避免输入错误。我们可以自定义输入帮助,步骤如下:

    1、定义选择变量
 

parameter p_spmon  type spmon  default  sy - datum + 0 ( 6 ) obligatory.
    select
- options s_spmon  for  s031 - spmon  default  sy - datum + 0 ( 6 ) obligatory.
    

    2、定义帮助子过程

form  monat_f4.
      data: begin of mf_dynpfields occurs 
1 .
              include structure dynpread.
      data: end   of mf_dynpfields.
      data: mf_returncode   like sy
- subrc,
            mf_monat        like isellist
- month,
            mf_hlp_repid    like sy
- repid.
      field
- symbols:  < mf_feld > .

      get cursor field mf_dynpfields
- fieldname.
      append mf_dynpfields.
      mf_hlp_repid 
=  sy - repid.
      
do   2  times.
        call function 
' DYNP_VALUES_READ '
             exporting
                  dyname               
=  mf_hlp_repid
                  dynumb               
=  sy - dynnr
             tables
                  dynpfields           
=  mf_dynpfields
             exceptions
                  invalid_ABAPworkarea 
=   01
                  invalid_dynprofield  
=   02
                  invalid_dynproname   
=   03
                  invalid_dynpronummer 
=   04
                  invalid_request      
=   05
                  no_fielddescription  
=   06
                  undefind_error       
=   07 .
        
if  sy - subrc  =   3 .
          mf_hlp_repid 
=   ' SAPLALDB ' .
        
else .
          read table mf_dynpfields index 
1 .
          translate mf_dynpfields
- fieldvalue using  ' ' .
          exit.
        endif.
      enddo.
      
if  sy - subrc  =   0 .
        call function 
' CONVERSION_EXIT_PERI_INPUT '
             exporting
                  input  
=  mf_dynpfields - fieldvalue
             importing
                  output 
=  mf_monat
             exceptions
                  error_message 
=   1 .
        
if  mf_monat is initial.
          mf_monat 
=  sy - datlo( 6 ).
        endif.
        call function 
' POPUP_TO_SELECT_MONTH '
             exporting
                  actual_month               
=  mf_monat
             importing
                  selected_month             
=  mf_monat
                  return_code                
=  mf_returncode
             exceptions
                  factory_calendar_not_found 
=   01
                  holiday_calendar_not_found 
=   02
                  month_not_found            
=   03 .
        
if  sy - subrc  =   0  and mf_returncode  =   0 .
          call function 
' CONVERSION_EXIT_PERI_OUTPUT '
               exporting
                    input  
=   mf_monat
               importing
                    output 
=   mf_dynpfields - fieldvalue.
          collect mf_dynpfields.
          call function 
' DYNP_VALUES_UPDATE '
               exporting
                    dyname               
=  mf_hlp_repid
                    dynumb               
=  sy - dynnr
             tables
                    dynpfields           
=  mf_dynpfields
               exceptions
                    invalid_ABAPworkarea 
=   01
                    invalid_dynprofield  
=   02
                    invalid_dynproname   
=   03
                    invalid_dynpronummer 
=   04
                    invalid_request      
=   05
                    no_fielddescription  
=   06
                    undefind_error       
=   07
        endif.
      endif.
    endform.                               
" MONAT_F4

    

    3、定义输入帮助事件   

at selection - screen on value - request  for  p_spmon.
      perform monat_f4.
    at selection
- screen on value - request  for  s_spmon - low.
      perform monat_f4.
    at selection
- screen on value - request  for  s_spmon - high.
      perform monat_f4.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值