ABAP 设置下拉框<LISTBOX>

TYPE-POOLS: VRM.
DATA: NAME1 TYPE VRM_ID,
      LIST1 TYPE VRM_VALUES,
      VALUE1 LIKE LINE OF LIST1.

SELECTION-SCREEN: BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-T02.
PARAMETERS: P_BSART LIKE EKKO-BSART AS LISTBOX VISIBLE LENGTH 20
OBLIGATORY. "配送订单类型
SELECTION-SCREEN: END OF BLOCK B2.

AT SELECTION-SCREEN OUTPUT.
REFRESH LIST1.
  NAME1 = 'P_BSART'.
  VALUE1-KEY = 'ZEB'.
  VALUE1-TEXT = '配送转储采购订单'.
  APPEND VALUE1 TO LIST1.
  VALUE1-KEY = 'ZCB'.
  VALUE1-TEXT = '非生产材料领料单'.
  APPEND VALUE1 TO LIST1.
  VALUE1-KEY = 'ZPB'.
  VALUE1-TEXT = '生产领料单'.
  APPEND VALUE1 TO LIST1.
  VALUE1-KEY = 'ZXB'.
  VALUE1-TEXT = '计划直传转储采购订单'.
  APPEND VALUE1 TO LIST1.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      ID     = NAME1
      VALUES = LIST1.



http://blog.youkuaiyun.com/reacleliu/article/details/6653309

<think>好的,我现在需要帮助用户解决关于ABAP中删除内表记录的WHERE条件的问题。用户给出的代码是“abap delete <内表> where 字段 <> 怎么写”,看起来用户想了解如何在内表操作中使用DELETE语句来删除不符合条件的记录。 首先,我需要确认用户的问题是什么。用户可能不太清楚ABAP中DELETE语句的正确语法,特别是当使用不等条件(<>)时。他们可能遇到了语法错误或者逻辑错误,导致无法正确删除内表的某些行。 接下来,我需要回忆ABAP中DELETE语句的使用方法。ABAP中的内表操作通常使用DELETE语句来删除符合条件的行。对于内表,可以使用WHERE子句来指定条件。正确的语法应该是DELETE <内表> WHERE <字段> <> <值>。这里需要注意的是,字段名应该用正确的名称替换,比如field_name,而值应该用具体的数值或变量替换,比如'ABC'或lv_value。 然后,我需要检查用户提供的示例是否有错误。用户原来的写法是“abap delete <内表> where 字段 <> 怎么写”,这里的“字段”和“怎么写”可能是占位符,需要替换为实际的字段名和比较值。但用户可能没有正确理解如何构造这个条件,特别是比较值的部分。例如,如果字段是字符类型,需要使用单引号包围值,如果是数字,则直接写数值即可。 此外,用户可能想删除字段不等于某个值的所有记录,这时候正确的语法应该是在WHERE子句中使用正确的比较运算符。在ABAP中,不等于用“NE”或者“<>”都可以,但更常见的是使用“NE”。不过,这里用户用了“<>”,这在ABAP中也是有效的,所以需要确认这一点是否正确。 另外,还需要考虑内表的类型。如果内表是标准表,DELETE语句会删除所有符合条件的行;如果是排序表或哈希表,可能需要不同的处理方式,但通常WHERE子句在DELETE中的用法是相同的。 用户可能的错误包括:字段名拼写错误,值没有正确引用,或者内表变量名不正确。例如,如果内表名为it_data,字段名为field1,正确的语句应该是DELETE it_data WHERE field1 <> 'ABC'。 可能用户还不太清楚ABAP中字符串比较是否需要区分大小写,或者是否需要考虑字段的数据类型。例如,如果字段是数字类型,值应该不用引号,如果是字符串,则需要用单引号。 此外,用户可能没有意识到DELETE语句会直接修改原内表,而不是返回一个新内表,所以需要确认他们是否正确理解了这一点。如果用户想要保留原内表,可能需要先复制内表再进行删除操作。 总结一下,用户需要的是如何正确使用DELETE语句来删除内表中字段不等于特定值的所有行。我的回答需要包括正确的语法示例,可能需要注意的事项,以及常见的错误点,比如字段名和值的正确写法,是否需要引号,以及内表类型的考虑。 最后,可能需要提供一个完整的示例,说明如何定义内表、填充数据,然后使用DELETE语句进行删除,并展示删除前后的数据变化,帮助用户更直观地理解。同时提醒用户在实际编码中替换占位符,如内表名、字段名和比较值,以及注意数据类型的一致性。</think>在 ABAP 中,使用 `DELETE` 语句结合 `WHERE` 条件可以删除内表中**不满足条件**的数据行。若需要删除字段值**不等于**(`<>` 或 `NE`)某个特定值的所有条目,语法如下: --- ### **基本语法** ```abap DELETE <内表名> WHERE <字段名> <> <值>. ``` - `<内表名>`:要操作的内表变量名。 - `<字段名>`:需要比较的字段名。 - `<值>`:可以是常量、变量或表达式。 --- ### **示例代码** 假设有一个内表 `gt_data`,结构包含字段 `matnr`(物料编号),需要删除所有 `matnr` 不等于 `'ABC123'` 的行: ```abap DATA: gt_data TYPE TABLE OF mara, " 假设 mara 是物料主数据表 gs_data LIKE LINE OF gt_data. " 填充内表数据(示例) APPEND INITIAL LINE TO gt_data ASSIGNING FIELD-SYMBOL(<fs>). <fs>-matnr = 'ABC123'. APPEND INITIAL LINE TO gt_data ASSIGNING <fs>. <fs>-matnr = 'XYZ789'. " 删除 matnr 不等于 'ABC123' 的所有行 DELETE gt_data WHERE matnr <> 'ABC123'. " 检查结果 LOOP AT gt_data INTO gs_data. WRITE: / gs_data-matnr. ENDLOOP. ``` **执行结果**: ``` ABC123 " 仅保留符合条件的行 ``` --- ### **关键注意事项** 1. **字段名与数据类型**: -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值