单选按钮过滤的问题

2020-08-21 07:39发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,我是新来的。

我目前正在尝试根据所选的单选按钮按三​​个类别进行过滤。

1。 所有航班(显示所有航班)2.国内航班(国家到价值=国家从价值)3.国际航班(国家到价值<>国家从价值开始)

当我按如下所示进行编码时,它无法正确过滤,想知道我错过了什么。

数据:带标题行的ZFLIGHT_TBL的dv_flight类型表。
数据:ls_flight类型的zflight_tbl。


* CASE语句的常量
常量标记值'X'。

*用于连接的选择
作为屏幕1100的SUBSCREEN的选择屏幕。
选择选项:ls_FLIGHT-CARRID存储器ID CARRID的SO_CARR,ls_FLIGHT-CONNID的SO_CONN。
SELECTION- 屏幕1100的屏幕结尾。


*航班选择
选择屏幕1200作为预订屏幕开始。
选择选项:SO_FLD用于ls_FLIGHT-FLDATE无扩展。
>选择屏幕1200的屏幕末端。


*输出参数
选择作为屏幕1300的选择屏幕的开始。
带有框架的块状放射状的选择屏幕的开始。
参数:PA_ALL RADIOBUTTON组RBG1,
PA_DOM RADIOBUTTON组RBG1,
PA_INT RADIOBUTTON组RBG1默认'X'。
RADIOBUTTON块的选择屏幕末端。
选择屏幕1300的屏幕末端。

标签块AI的选择屏幕开始 5行的RLINE。
选择屏幕TAB(20)TAB1用户命令连接
默认屏幕1100。

选择屏幕TAB(20)TAB2用户命令日期
默认屏幕。 1200.

选择屏幕选项卡(20)TAB3用户命令类型
默认屏幕1300.

选择航空公司的选择屏幕末端。

* == ========================= <=>
*结束新的或更改的代码
* ============ ===============


* =========================== =====
*新代码或更改代码的开头
* ============================


初始化。
*初始化CARRID的选择选项。可选
将以下项移动:'AA'到so_carr-low,
'ZZ'到so_carr-high,
'BT '至so_carr-option,
'I'至so_carr-sign。 ""包括
附加so_carr。
清除so_carr。

移动:'AZ'到so_carr-low,
'EQ'到so_carr-option,
'E'到so_carr -标志。 ""排除
附加so_carr。
清除so_carr。

*设置选项卡按钮的文本
tab1 ='连接'(t11)。
tab2 ='日期'(t12) 。
tab3 ='航班类型'(t13)。

*将第二个标签页设置为初始标签
airlines-activetab ='DATE'。
airlines-dynnr ='1200' 。

* ===========================
*新代码或更改代码的结尾
* = ==========================


开始选择。

CASE标记。

当PA_ALL时。
选择CARRID
CONNID
FLDATE
COUNTRYFR
CITYFROM
AIRPFROM
COUNTRYTO
CITYTO
AIRPTO
SEATSMAX
SEATSOCC
从ZFLIGHT_TBL到表dv_FLIGHT的对应字段中""""数组提取=到表中只有SELECT,没有endselect
SO_CARR中的CARRID和SO_CONN中的CONNID以及
FLDATE中的CARD SO_FLD。



""国内航班
当PA_DOM。

SELECT CARRID
CONNID
FLDATE
COUNTRYFR
CITYFROM
AIRPFROM
COUNTRYTO
CITYTO
AIRPTO
SEATSMAX
SEATSOCC
从ZFLIGHT_TBL到表dv_FLIGHT的对应字段中""""数组提取=到表中只有SELECT,没有endselect
SO_CARR中的CARRID和SO_CONN中的CONNID以及SO_FLD和
FLDATE中的FLDATE = ls_FLIGHT-COUNTRYFR。


" PANINT
SELECT CARRID
CONNID
FLDATE
COUNTRYFR
CITYFROM
AIRPFROM
> COUNTRYTO
CITYTO
AIRPTO
SEATSMAX
SEATSOCC
进入表的相应字段dv_FLIGHT从ZFLIGHT_TBL到""""数组提取=进入表仅具有SELECT,没有endselect
在哪里添加CARRID 如果sy-subrc = 0,则SO_CARR和
CONNID进入SO_CONN并
FLDATE进入SO_FLD和
COUNTRYTO <> ls_FLIGHT-COUNTRYFR。

ENDCASE。
在dv_flight INTO ls_flight中循环。
如果pa_all ='X'并且pa_dom <>'X'和pa_int <>'X'。

写:/ls_FLIGHT-CARRID,
ls_FLIGHT -CONNID,
ls_FLIGHT-FLDATE,
ls_FLIGHT-COUNTRYFR,
ls_FLIGHT-CITYFROM,
ls_FLIGHT-AIRPFROM,
ls_FLIGHT-COUNTRYTO, ls_FLIGHT-CITYTO,
ls_FLIGHT-SEATSMAX,
ls_FLIGHT-SEATSOCC。

否则,如果pa_dom ='X'并且ls_flight-countryto = ls_flight-countryfr和pa_int < >'X'和pa_all <>'X'。 ""国内:国家对价值=国家frm值
写:/ls_FLIGHT-CARRID,
ls_FLIGHT-CONNID,
ls_FLIGHT-FLDATE,
ls_FLIGHT-COUNTRYFR,
ls_FLIGHT-CITYFROM,< br> ls_FLIGHT-AIRPFROM,
ls_FLIGHT-COUNTRYTO,
ls_FLIGHT-CITYTO,
ls_FLIGHT-SEATSMAX,
ls_FLIGHT-SEATSOCC。


elseif pa_int ='X'并且ls_flight-countryto <> ls_flight-countryfr和pa_dom <>'X'和pa_all <>'X'。 ""国际:国家对价值<>国家frm值
写:/ls_FLIGHT-CARRID,
ls_FLIGHT-CONNID,
ls_FLIGHT-FLDATE,
ls_FLIGHT-COUNTRYFR,
ls_FLIGHT-CITYFROM,
ls_FLIGHT-AIRPFROM,
ls_FLIGHT-COUNTRYTO,
ls_FLIGHT-CITYTO,
ls_FLIGHT-SEATSMAX,
ls_FLIGHT-SEATSOCC。

ENDIF。
endloop。
endif。

清除ls_FLIGHT。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,我是新来的。

我目前正在尝试根据所选的单选按钮按三​​个类别进行过滤。

1。 所有航班(显示所有航班)2.国内航班(国家到价值=国家从价值)3.国际航班(国家到价值<>国家从价值开始)

当我按如下所示进行编码时,它无法正确过滤,想知道我错过了什么。

数据:带标题行的ZFLIGHT_TBL的dv_flight类型表。
数据:ls_flight类型的zflight_tbl。


* CASE语句的常量
常量标记值'X'。

*用于连接的选择
作为屏幕1100的SUBSCREEN的选择屏幕。
选择选项:ls_FLIGHT-CARRID存储器ID CARRID的SO_CARR,ls_FLIGHT-CONNID的SO_CONN。
SELECTION- 屏幕1100的屏幕结尾。


*航班选择
选择屏幕1200作为预订屏幕开始。
选择选项:SO_FLD用于ls_FLIGHT-FLDATE无扩展。
>选择屏幕1200的屏幕末端。


*输出参数
选择作为屏幕1300的选择屏幕的开始。
带有框架的块状放射状的选择屏幕的开始。
参数:PA_ALL RADIOBUTTON组RBG1,
PA_DOM RADIOBUTTON组RBG1,
PA_INT RADIOBUTTON组RBG1默认'X'。
RADIOBUTTON块的选择屏幕末端。
选择屏幕1300的屏幕末端。

标签块AI的选择屏幕开始 5行的RLINE。
选择屏幕TAB(20)TAB1用户命令连接
默认屏幕1100。

选择屏幕TAB(20)TAB2用户命令日期
默认屏幕。 1200.

选择屏幕选项卡(20)TAB3用户命令类型
默认屏幕1300.

选择航空公司的选择屏幕末端。

* == ========================= <=>
*结束新的或更改的代码
* ============ ===============


* =========================== =====
*新代码或更改代码的开头
* ============================


初始化。
*初始化CARRID的选择选项。可选
将以下项移动:'AA'到so_carr-low,
'ZZ'到so_carr-high,
'BT '至so_carr-option,
'I'至so_carr-sign。 ""包括
附加so_carr。
清除so_carr。

移动:'AZ'到so_carr-low,
'EQ'到so_carr-option,
'E'到so_carr -标志。 ""排除
附加so_carr。
清除so_carr。

*设置选项卡按钮的文本
tab1 ='连接'(t11)。
tab2 ='日期'(t12) 。
tab3 ='航班类型'(t13)。

*将第二个标签页设置为初始标签
airlines-activetab ='DATE'。
airlines-dynnr ='1200' 。

* ===========================
*新代码或更改代码的结尾
* = ==========================


开始选择。

CASE标记。

当PA_ALL时。
选择CARRID
CONNID
FLDATE
COUNTRYFR
CITYFROM
AIRPFROM
COUNTRYTO
CITYTO
AIRPTO
SEATSMAX
SEATSOCC
从ZFLIGHT_TBL到表dv_FLIGHT的对应字段中""""数组提取=到表中只有SELECT,没有endselect
SO_CARR中的CARRID和SO_CONN中的CONNID以及
FLDATE中的CARD SO_FLD。



""国内航班
当PA_DOM。

SELECT CARRID
CONNID
FLDATE
COUNTRYFR
CITYFROM
AIRPFROM
COUNTRYTO
CITYTO
AIRPTO
SEATSMAX
SEATSOCC
从ZFLIGHT_TBL到表dv_FLIGHT的对应字段中""""数组提取=到表中只有SELECT,没有endselect
SO_CARR中的CARRID和SO_CONN中的CONNID以及SO_FLD和
FLDATE中的FLDATE = ls_FLIGHT-COUNTRYFR。


" PANINT
SELECT CARRID
CONNID
FLDATE
COUNTRYFR
CITYFROM
AIRPFROM
> COUNTRYTO
CITYTO
AIRPTO
SEATSMAX
SEATSOCC
进入表的相应字段dv_FLIGHT从ZFLIGHT_TBL到""""数组提取=进入表仅具有SELECT,没有endselect
在哪里添加CARRID 如果sy-subrc = 0,则SO_CARR和
CONNID进入SO_CONN并
FLDATE进入SO_FLD和
COUNTRYTO <> ls_FLIGHT-COUNTRYFR。

ENDCASE。
在dv_flight INTO ls_flight中循环。
如果pa_all ='X'并且pa_dom <>'X'和pa_int <>'X'。

写:/ls_FLIGHT-CARRID,
ls_FLIGHT -CONNID,
ls_FLIGHT-FLDATE,
ls_FLIGHT-COUNTRYFR,
ls_FLIGHT-CITYFROM,
ls_FLIGHT-AIRPFROM,
ls_FLIGHT-COUNTRYTO, ls_FLIGHT-CITYTO,
ls_FLIGHT-SEATSMAX,
ls_FLIGHT-SEATSOCC。

否则,如果pa_dom ='X'并且ls_flight-countryto = ls_flight-countryfr和pa_int < >'X'和pa_all <>'X'。 ""国内:国家对价值=国家frm值
写:/ls_FLIGHT-CARRID,
ls_FLIGHT-CONNID,
ls_FLIGHT-FLDATE,
ls_FLIGHT-COUNTRYFR,
ls_FLIGHT-CITYFROM,< br> ls_FLIGHT-AIRPFROM,
ls_FLIGHT-COUNTRYTO,
ls_FLIGHT-CITYTO,
ls_FLIGHT-SEATSMAX,
ls_FLIGHT-SEATSOCC。


elseif pa_int ='X'并且ls_flight-countryto <> ls_flight-countryfr和pa_dom <>'X'和pa_all <>'X'。 ""国际:国家对价值<>国家frm值
写:/ls_FLIGHT-CARRID,
ls_FLIGHT-CONNID,
ls_FLIGHT-FLDATE,
ls_FLIGHT-COUNTRYFR,
ls_FLIGHT-CITYFROM,
ls_FLIGHT-AIRPFROM,
ls_FLIGHT-COUNTRYTO,
ls_FLIGHT-CITYTO,
ls_FLIGHT-SEATSMAX,
ls_FLIGHT-SEATSOCC。

ENDIF。
endloop。
endif。

清除ls_FLIGHT。

付费偷看设置
发送
5条回答
小熊yu生菜
1楼 · 2020-08-21 08:22.采纳回答

1。 至于基于自己的"答案"的"新"要求:

还将数据库的新z字段ZCOUNTRYTO_INT添加为选择选项作为选择选项:

  *连接选择
 屏幕SELECT的屏幕开始为1100。
 选择选项:SO_CARR for ls_FLIGHT-CARRID内存ID CARRID,
                 SO_CONN FOR ls_FLIGHT-CONNID,
                 SO_CINT FOR ls_FLIGHT-ZCOUNTRYTO_INT," NEW Select-Option
 屏幕1100的选择屏幕结束。

 "...。

 选择CARRID CONNID FLDATE COUNTRYFR CITYFROM AIRPFROM zcountryto_int CITYTO AIRPTO SEATSMAX SEATSOCC
 表dv_FLIGHT的对应字段
 来自ZFLIGHT_TBL
 SO_CARR中的CARRID
   和CONNID IN SO_CONN
   和FLDATE IN SO_FLD
   AND zcountryto_int输入SO_CINT。  "筛选新的选择选项

 

旁注:select选项表中的多个包含值与" OR"语句组合(不包括" AND"值)。

2。 至于您的"原始"要求:

对于国内和国际选择,您尝试通过将db属性COUNTRYTO与变量ls_FLIGHT的属性COUNTRYFR进行比较来进行选择,但是,您从未设置该值 选择变量! 并且根据您的要求,它也不会以您打算的方式工作。

相反,您必须执行以下操作:

"选择国际航班:z〜  COUNTRYTO <> z〜COUNTRYFR
 选择CARRID CONNID FLDATE COUNTRYFR CITYFROM AIRPFROM zcountryto_int CITYTO AIRPTO SEATSMAX SEATSOCC
 表dv_FLIGHT的对应字段
 来自ZFLIGHT_TBL AS z
 z〜CARRID在SO_CARR中
   和在SO_CONN中的z〜CONNID
   和z_FLDATE IN SO_FLD
   和z〜COUNTRYTO <> z〜COUNTRYFR。  "如果从国家到<>国家从

 "...。

 "选择国内航班:z〜COUNTRYTO = z〜COUNTRYFR
 选择CARRID CONNID FLDATE COUNTRYFR CITYFROM AIRPFROM zcountryto_int CITYTO AIRPTO SEATSMAX SEATSOCC
 表dv_FLIGHT的对应字段
 来自ZFLIGHT_TBL AS z
 z〜CARRID在SO_CARR中
   和在SO_CONN中的z〜CONNID
   和z_FLDATE IN SO_FLD
   AND z〜COUNTRYTO = z〜COUNTRYFR。 注意:您必须为表声明一个别名,以便还可以将表值彼此进行比较,否则,系统(至少NW  7.4)假设COUNTRYFR是未声明的变量。

Doze时光
2楼-- · 2020-08-21 08:11

您说"过滤不正确"。"正确"的含义是什么?请解释您的操作(如何重现),

空代码
3楼-- · 2020-08-21 08:05

您好,谢谢您的答复,我通过在db表中创建2个新字段并命名来过滤了三种不同的航班(国内,国际和所有航班) 这两个数据元素为(countryto_dom和countryto_int)。我在域值范围内分配了国家/地区。

我在where子句中分配了这些数据元素以进行过滤

zcountryto_int ='FRA'或
zcountryto_int ='DEN'。

是否可以不对其进行硬编码?

__________
选择CARRID
CONNID
FLDATE
COUNTRYFR
CITYFROM
AIRPFROM
zcountryto_int
CITYTO
AIRPTO
SEATSMAX
SEATSOCC < br>从ZFLIGHT_TBL到表dv_FLIGHT的对应字段中""""数组提取=到表中仅具有SELECT,没有endselect
SO_CARR中的CARRID和SO_CONN中的CONNID以及SO_FLD和
中的FLDATE zcountryto_int ='FRA'或
zcountryto_int ='DEN'。

木偶小白
4楼-- · 2020-08-21 08:26

Sao GS

请使用CODE选项粘贴您的代码,也请进一步说明您的问题。

注意!

wang628962
5楼-- · 2020-08-21 08:25

AS ,不确定我是否正确理解您,但我想您是在问怎么做 根据用户输入在一个选择语句中选择国内还是国际选择?

这是您可以执行的操作:

  1. 通过单选按钮提供用于选择国际和国内的参数
  2. 基于输入创建动态where语句
    在两种情况下,我都创建了"虚拟"语句,您也可以 如果动态where语句中的全部限制或至少一个其他限制被消除,则将其删除
  3. 将生成的动态where语句添加到您选择的查询中
 PARAMETERS:  rb_both RADIOBUTTON GROUP gr1默认'X',
             rb_int RADIOBUTTON GROUP gr1,
             rb_dom RADIOBUTTON GROUP gr1。

 DATA domvsint TYPE字符串。

 案例abap_true。
   当rb_both。
     domvsint ='z〜COUNTRYTO = z〜COUNTRYTO'。  "虚拟countryto = countryto
   当rb_int。
     domvsint ='z〜COUNTRYTO <> z〜COUNTRYFR'。  "如果从国家到<>国家从
   当rb_dom。
     domvsint ='z〜COUNTRYTO = z〜COUNTRYFR'。  "如果国家到国家=来自国家,则为国内
 结束。

 选择CARRID CONNID FLDATE COUNTRYFR CITYFROM AIRPFROM zcountryto_int CITYTO AIRPTO SEATSMAX SEATSOCC
 表dv_FLIGHT的对应字段
 来自ZFLIGHT_TBL AS z
 z〜CARRID在SO_CARR中
   和在SO_CONN中的z〜CONNID
   和z_FLDATE IN SO_FLD
   AND(domvsint)。  "国内,国际或同时

一周热门 更多>