SAP 关于弹出文本框和参数框的使用

一、弹出文本框
1.1、使用函数:TERM_CONTROL_EDIT
1.2、函数参数解释:titel→文本框名称,langu→语言,gt_textlines→将要输入的文本内表
1.3、文本框效果:
在这里插入图片描述

1.4、废话不说,直接上代码:

DATA:gt_textlines TYPE string_table WITH HEADER LINE.

  DATA:BEGIN OF ls_ZJSNO,
         zjsno TYPE char15,
       END OF ls_ZJSNO.
  DATA:lT_ZJSNO LIKE TABLE OF ls_ZJSNO.
  DATA:lv_TDLINE TYPE tdline.
  DATA:l_len TYPE i.
  DATA:w_ZJSNO TYPE char15.
  DATA:l_zbz TYPE char255.


  CLEAR:lt_ZJSNO.
  LOOP AT gt_two INTO gs_two WHERE checkbox = 'X'.
    ls_ZJSNO-zjsno = gs_two-zjsno.
    APPEND ls_ZJSNO TO lt_ZJSNO.
    CLEAR:gs_two,ls_ZJSNO.
  ENDLOOP.

  SORT lt_ZJSNO BY zjsno.
  DELETE ADJACENT DUPLICATES FROM lt_ZJSNO COMPARING zjsno.

  DELETE lt_ZJSNO WHERE zjsno = ''.
  IF lt_ZJSNO IS INITIAL.
    MESSAGE '请选择已生成单据的项目' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE TO SCREEN 100.
  ENDIF.

  CLEAR:l_zbz,gt_textlines.
  CALL FUNCTION 'TERM_CONTROL_EDIT'
    EXPORTING
      titel          = '发票备注'
      langu          = '1'
    TABLES
      textlines      = gt_textlines
    EXCEPTIONS
      user_cancelled = 1
      OTHERS         = 2.

  LOOP AT gt_textlines.
    CONDENSE gt_textlines NO-GAPS.
    l_len = strlen( gt_textlines ).

    IF l_len > 255.
      MESSAGE '您输入的备注超过了255字符,请检查' TYPE 'S' DISPLAY LIKE 'E'.
      LEAVE TO SCREEN 100.
    ENDIF.

    IF l_zbz IS INITIAL.
      l_zbz = gt_textlines.
    ENDIF.
  ENDLOOP.
  SORT gt_two BY zjsno.
  SORT lt_ZJSNO BY zjsno.
  CLEAR:w_ZJSNO.
  IF l_zbz IS NOT INITIAL.
    LOOP AT gt_two INTO gs_two.
      READ TABLE lt_ZJSNO INTO ls_ZJSNO WITH KEY zjsno = gs_two-zjsno BINARY SEARCH.
      IF sy-subrc = 0.
        gs_two-checkbox = 'X'.
        gs_two-zmark = l_zbz.
      ENDIF.
*_________________________________________更新抬头G表的发票备注
      IF w_ZJSNO IS INITIAL OR w_ZJSNO <> ls_ZJSNO-zjsno.
        w_ZJSNO = ls_ZJSNO-zjsno.
        UPDATE ztfico007g SET zmark = l_zbz
        WHERE zjsno = ls_ZJSNO-zjsno.
      ENDIF.
      MODIFY gt_two FROM gs_two.

      CLEAR:gs_two.
    ENDLOOP.
  ENDIF.

二、弹出参数框的使用
2.1、使用函数:POPUP_GET_VALUES
2.2、函数参数解释:popup_title→参数框名称;start_column→参数框宽度;start_row→参数框高度;lt_mess→参数内表(内表中常用字段的解释:TABNAME→参考表名,FIELDNAME→参考表的参考字段名,fieldtext→字段文本名称,FIELD_OBL→是否必输,value→参数值,field_attr→外观属性,值含义范围见下图)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般正常输入数据会直接空着,密码不显示可以选04(例子没有选),弹出前赋值做显示用选02,但我下面的例子选的05它也可以(奇怪)
2.3、参数框效果图:
在这里插入图片描述
2.4、上代码:

 DATA:lv_MESSAGE     TYPE bapi_msg,
       lv_MSGTYPE     TYPE bapi_mtype,
       lv_errcode     TYPE char4,
       lv_description TYPE char100.
  DATA:lt_mess LIKE TABLE OF sval WITH HEADER LINE.
  DATA:rtncode TYPE char1.
  DATA:lv_zpass TYPE char10.
  DATA:lv_zfpdm TYPE zfpdm.
  DATA:lv_pbs TYPE char1.
  DATA:l_lines TYPE i.
  DATA:BEGIN OF ls_zjsno,
         zjsno   TYPE char15,
         maber   TYPE char2,
         zfpdm   TYPE zfpdm,
         zfphm   TYPE zfphm,
         zkpr    TYPE char12,
         zstatus TYPE char1,
       END OF ls_zjsno.
  DATA:w_bukrs TYPE char4.
  DATA:lt_zjsno LIKE TABLE OF ls_zjsno.
  DATA:lt_ztfico007z TYPE TABLE OF ztfico007z.
  DATA:ls_ztfico007z TYPE ztfico007z.
  DATA:lv_zczrzh TYPE char12.
  CLEAR:lt_ZJSNO.
  LOOP AT gt_two INTO gs_two WHERE checkbox = 'X'.
    IF w_bukrs IS INITIAL.
      w_bukrs = gs_two-bukrs.
    ENDIF.
    IF gs_two-zjsno <> ''.
      IF gs_two-state = '已开具' OR gs_two-state = '已红冲'.
        MOVE-CORRESPONDING gs_two TO ls_ZJSNO.
        IF gs_two-state = '已红冲'.
          ls_ZJSNO-zfphm = gs_two-zhcfph.
          ls_ZJSNO-zfpdm = gs_two-zhcfpdm.
        .ENDIF.
        APPEND ls_ZJSNO TO lt_ZJSNO.
      ENDIF.
    ENDIF.
    CLEAR:gs_two,ls_ZJSNO.
  ENDLOOP.

  DATA(lt_check) = lt_zjsno.
  SORT lt_check BY zjsno.
  DELETE ADJACENT DUPLICATES FROM lt_check COMPARING zjsno.

  l_lines = lines( lt_check ).
  IF l_lines > 1.
    SELECT SINGLE zczrzh INTO lv_zczrzh FROM ztfico007k WHERE zczrzh = sy-uname.
    IF sy-subrc <> 0.
      MESSAGE '请单张作废' TYPE 'S' DISPLAY LIKE 'E'.
      LEAVE TO SCREEN 100.
    ENDIF.
  ENDIF.

  DELETE lt_ZJSNO WHERE zstatus = '5'.

  IF lt_ZJSNO IS INITIAL.
    MESSAGE '您选择的数据已作废过' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE TO SCREEN 100.
  ENDIF.

  DELETE lt_ZJSNO WHERE zfpdm = ''.

  IF lt_ZJSNO IS INITIAL.
    MESSAGE '请选择已传输成功的单据项目' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE TO SCREEN 100.
  ENDIF.

  SORT lt_ZJSNO BY zjsno.
  DELETE ADJACENT DUPLICATES FROM lt_ZJSNO COMPARING zjsno.

  DELETE lt_ZJSNO WHERE zjsno = ''.


  IF lt_ZJSNO IS INITIAL.
    MESSAGE '请选择已生成单据的项目' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE TO SCREEN 100.
  ENDIF.



  "作废二次弹窗密码确认


  READ TABLE lt_ZJSNO INTO ls_zjsno INDEX 1.
  IF sy-subrc = 0.
    lv_zfpdm = ls_zjsno-zfpdm.
  ENDIF.

  CLEAR:lt_mess[],lv_ZPASS,ls_zjsno.
  lt_mess-tabname = 'ZTFICO007G'.
  lt_mess-fieldname = 'ZFPDM'.
  lt_mess-fieldtext = '金税发票代码'.
  lt_mess-field_attr = '05'.
  lt_mess-value = lv_zfpdm.
  APPEND lt_mess.


  CLEAR:lt_mess.

  lt_mess-tabname    = 'ZTFICO007R'.

  lt_mess-fieldname  = 'ZPASS'.

  lt_mess-fieldtext = '密码'..

  APPEND lt_mess.

  CALL FUNCTION 'POPUP_GET_VALUES'
    EXPORTING
      no_value_check  = ' '
      popup_title     = '作废密码二次确认'
      start_column    = '5'
      start_row       = '5'
    IMPORTING
      returncode      = rtncode
    TABLES
      fields          = lt_mess
    EXCEPTIONS
      error_in_fields = 1
      OTHERS          = 2.
  CHECK rtncode <> 'A'.

  READ TABLE lt_mess WITH KEY fieldname = 'ZPASS'.
  IF sy-subrc = 0.
    CONDENSE lt_mess-value NO-GAPS.
    lv_ZPASS = lt_mess-value.
  ENDIF.

  SELECT SINGLE zpass INTO lv_zpass FROM ztfico007r WHERE zpass = lv_ZPASS AND bukrs = s_bukrs-low.
  IF sy-subrc <> 0.
    MESSAGE '密码错误,请检查' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE TO SCREEN 100.
  ENDIF.
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值