当前位置:   article > 正文

F4搜索帮助和按条件写sql

F4搜索帮助和按条件写sql

1.写SQL

*  -----增加业务员名字字段------
  SELECT
    A~VBELN,
    C~NAME1_TEXT
  FROM VBAK AS A
  INNER JOIN VBPA AS B ON A~VBELN = B~VBELN
  INNER JOIN BUT000 AS C ON B~KUNNR = C~PARTNER
  WHERE
   B~PARVW = 'Z1'
  AND B~POSNR = ''
*  AND C~NAME1_TEXT IN @S_NAME
  INTO TABLE @GT_NAME1 .


  SELECT
    A~VBELN,
    C~NAME1_TEXT
  FROM VBAK AS A
  INNER JOIN VBPA AS B ON A~VBELN = B~VBELN
  INNER JOIN BUT000 AS C ON B~KUNNR = C~PARTNER
  WHERE
   B~PARVW = 'Z1'
  AND B~POSNR <> ''
*  AND C~NAME1_TEXT IN @S_NAME
  INTO TABLE @GT_NAME2 .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

2.按条件读取刚刚写的sql数据,if sy-subrc 中可以继续读

READ TABLE GT_NAME1 INTO DATA(LS_NAME1) WITH KEY VBELN = LS_GROUP1-VBELN
           BINARY SEARCH.
      IF SY-SUBRC = 0.
        CONDENSE LS_NAME1-NAME1_TEXT.
        GS_ALV-NAME1_TEXT = LS_NAME1-NAME1_TEXT.            "高级业务员
      ELSE.
        READ TABLE GT_NAME2 INTO DATA(LS_NAME2) WITH KEY VBELN = LS_GROUP1-VBELN
           BINARY SEARCH.
        IF SY-SUBRC = 0.
          CONDENSE LS_NAME1-NAME1_TEXT.
          GS_ALV-NAME1_TEXT = LS_NAME2-NAME1_TEXT.
        ENDIF.
      ENDIF.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.搜索帮助用函数和sql实现


"搜索帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-LOW.  "搜索帮助
  PERFORM FRM_SEARCH_HELP.
  
FORM FRM_SEARCH_HELP.
  TYPES:BEGIN OF TY_TAB,
          NAME2_TEXT TYPE BUT000-NAME1_TEXT,
        END OF TY_TAB.
  DATA:GT_SEARCH TYPE TABLE OF TY_TAB WITH HEADER LINE,
       GS_SEARCH TYPE TY_TAB.

  SELECT DISTINCT
    NAME1_TEXT
    FROM BUT000
    WHERE NAME1_TEXT <> ''
    INTO TABLE @DATA(GT_SEARCH_NAME).

  LOOP AT GT_SEARCH_NAME INTO DATA(GS_SEARCH_NAME).

    CONDENSE GS_SEARCH_NAME-NAME1_TEXT.
    GS_SEARCH-NAME2_TEXT =  GS_SEARCH_NAME-NAME1_TEXT.
    APPEND GS_SEARCH TO GT_SEARCH.
    CLEAR GS_SEARCH.

  ENDLOOP.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'NAME2_TEXT'   "指定要返回屏幕参数的在内表中的field
      VALUE_ORG       = 'S'            "S代表structure
      DYNPPROG        = SY-REPID       "指定屏幕参数所在的程序名称
      DYNPNR          = SY-DYNNR       "指定参数所在的屏幕编号
      DYNPROFIELD     = 'S_NAME'       "指定屏幕参数的名称
    TABLES
      VALUE_TAB       = GT_SEARCH      "内表
*     return_tab      = lt_return1
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.

ENDFORM.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

4.根据屏幕输入数据筛选实现

*&-------START BY YAOBODONG AT 2024.7.3 增加高级业务作为搜索条件
    IF S_NAME-LOW = ''.
      APPEND GS_ALV TO GT_ALV.
    ELSE.
      IF GS_ALV-NAME1_TEXT = ''.
        CLEAR GS_ALV.
        CONTINUE.
      ELSE.
        IF GS_ALV-NAME1_TEXT = S_NAME-LOW.
          APPEND GS_ALV TO GT_ALV.
        ENDIF.
      ENDIF.
    ENDIF.
*&--------END BY YAOBODONG AT 2024.7.4

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

搜索条件可以这样加 用NOT IN 语法
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/828153
推荐阅读
相关标签
  

闽ICP备14008679号