SAP QA11决策屏幕增强

1.效果

增强数据保存到QALS表的ZZREASON

2.增强点:QEVA_SUBSCREEN_1101

2.1 filter

2.2 增强子屏幕和函数组

需要创建个函数组ZQMFG01,来托管子屏幕以及处理屏幕数据和标准程序主程序数据之间的传递

增强结构CI_QALS

函数组top全局变量定义


TABLES: qals_cust.
DATA: subscr_1101_qeva TYPE REF TO if_ex_qeva_subscreen_1101,
      gs_qals          TYPE qals,
      flt_val          TYPE qherk,
      gs_rqeva         TYPE rqeva.

增强屏幕逻辑流代码

PROCESS BEFORE OUTPUT.
  MODULE status_9001.

PROCESS AFTER INPUT.
  FIELD qals_cust-zzreason MODULE mod_check_zzreason.
  MODULE user_command_9001.

增强屏幕PBO代码

*----------------------------------------------------------------------*
***INCLUDE LZQMFG01O01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.

  IF subscr_1101_qeva IS INITIAL.
    CALL METHOD cl_exithandler=>get_instance_for_subscreens
      CHANGING
        instance                      = subscr_1101_qeva    " Instance
      EXCEPTIONS
        no_reference                  = 1
        no_interface_reference        = 2
        no_exit_interface             = 3
        data_incons_in_exit_managem   = 4
        class_not_implement_interface = 5
        OTHERS                        = 6.

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.

  PERFORM frm_modify_screen.


ENDMODULE.

增强屏幕PAI代码

我的需求是决策代码输入03 退货供应商时,原因必填。可以用增强点SMOD:EXIT_SAPMQEVA_010实现检查。但EXIT_SAPMQEVA_010里报E消息,屏幕所有字段灰色不能输入,并不友好。故这里选择在增强9001屏幕的PAI,写个module检查

*----------------------------------------------------------------------*
***INCLUDE LZQMFG01I01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.

  MOVE-CORRESPONDING qals_cust TO gs_qals.

  IF subscr_1101_qeva IS NOT INITIAL .

    CALL METHOD subscr_1101_qeva->get_data
      EXPORTING
        flt_val = flt_val   " Inspection Lot Origin
      IMPORTING
        e_qals  = gs_qals.     " Inspection Lot Record


  ENDIF .



ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  MOD_CHECK_ZZREASON  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE mod_check_zzreason INPUT.

  PERFORM frm_check_zzreason.


ENDMODULE.

 FORM代码

*----------------------------------------------------------------------*
***INCLUDE LZQMFG01F01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_ZZREASON
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_zzreason .

  FIELD-SYMBOLS <fs_rqeva> TYPE rqeva.

  ASSIGN ('(SAPMQEVA)RQEVA') TO <fs_rqeva>.
  CHECK sy-subrc = 0.

  IF <fs_rqeva>-vcodegrp = 'IQCUD'
     AND <fs_rqeva>-vcode = '03' "退供应商,要求填写原因
     AND qals_cust-zzreason IS INITIAL.

    MESSAGE e000(zqm001).

  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MODIFY_SCREEN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_modify_screen .

  ASSIGN ('(SAPMQEVA)G_T185F_AKTI') TO FIELD-SYMBOL(<fs_akti>).
  IF sy-subrc = 0 AND <fs_akti> = 'A'.
    LOOP AT SCREEN.
      IF screen-name+0(12) = 'QALS_CUST-ZZ'.
        screen-input = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.

PBO的函数,作用:主程序数据传给屏幕

FUNCTION zqm_put_qa11_data.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(I_QALS) TYPE  QALS
*"     REFERENCE(I_QHERK) TYPE  QHERK
*"     REFERENCE(I_RQEVA) TYPE  RQEVA
*"----------------------------------------------------------------------

  CLEAR: gs_rqeva.

  MOVE-CORRESPONDING i_qals TO qals_cust.
  MOVE-CORRESPONDING i_rqeva TO gs_rqeva.

  flt_val = i_qherk.


ENDFUNCTION.

PAI的函数,作用:屏幕数据传给主程序

FUNCTION zqm_get_qa11_data.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     REFERENCE(E_QALS) TYPE  QALS
*"     REFERENCE(E_RQEVA) TYPE  RQEVA
*"----------------------------------------------------------------------

* 屏幕数据传递到主程序
  MOVE-CORRESPONDING gs_qals TO e_qals.
  MOVE-CORRESPONDING gs_rqeva TO e_rqeva.

ENDFUNCTION.

3.BADI实施类

ZCL_IM_QEVA_SUBSCREEN_1101

实施方法GET_DATA和PUT_DATA

  METHOD if_ex_qeva_subscreen_1101~get_data.

    DATA: program_name TYPE string VALUE '(SAPMQEVA)QALS',
          infos        TYPE ci_qals,
          cust         TYPE ci_qals.
    FIELD-SYMBOLS:<fs_info> TYPE qals .


    CALL FUNCTION 'ZQM_GET_QA11_DATA'
      IMPORTING
        e_qals  = e_qals
        e_rqeva = e_rqeva.

    MOVE-CORRESPONDING e_qals TO if_ex_qeva_subscreen_1101~g_qals.
    ASSIGN (program_name) TO <fs_info> .

    IF sy-subrc IS INITIAL.

      MOVE-CORRESPONDING e_qals TO cust .
      MOVE-CORRESPONDING cust TO <fs_info> .
    ENDIF .



  ENDMETHOD.


  METHOD if_ex_qeva_subscreen_1101~put_data.

    DATA: ls_qals TYPE qals.

    IF if_ex_qeva_subscreen_1101~g_qals IS NOT INITIAL .
      MOVE-CORRESPONDING if_ex_qeva_subscreen_1101~g_qals TO ls_qals .
    ELSE.

      MOVE-CORRESPONDING i_qals TO ls_qals .
    ENDIF .

    CALL FUNCTION 'ZQM_PUT_QA11_DATA'
      EXPORTING
        i_qals  = ls_qals
        i_qherk = flt_val
        i_rqeva = i_rqeva.


  ENDMETHOD.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值