You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ABAP SQL查询求助:完善可用通行证筛选逻辑

ABAP方法实现:可用通行证列表筛选方案

1. 先处理VSTEL取值逻辑(含ZTSD_WERKPRD扩展)

首先基于ZSLO_VEHICLE_LIST_ALV-VSTEL生成完整的VSTEL范围,包含ZTSD_WERKPRD中对应的VSTEL_P:

DATA: lv_base_vstel TYPE vstel,
      lt_vstel_range TYPE RANGE OF vstel,
      ls_vstel_range LIKE LINE OF lt_vstel_range,
      lt_werkprd TYPE TABLE OF ztsd_werkprd.

* 从ALV获取基础VSTEL
lv_base_vstel = zslo_vehicle_list_alv-vstel.

* 将基础VSTEL加入范围表
ls_vstel_range-sign = 'I'.
ls_vstel_range-option = 'EQ'.
ls_vstel_range-low = lv_base_vstel.
APPEND ls_vstel_range TO lt_vstel_range.

* 查询ZTSD_WERKPRD,获取对应VSTEL_P并补充到范围表
SELECT vstel_p FROM ztsd_werkprd INTO TABLE lt_werkprd
 WHERE vstel = lv_base_vstel.

LOOP AT lt_werkprd INTO DATA(ls_werkprd).
  CLEAR ls_vstel_range.
  ls_vstel_range-sign = 'I'.
  ls_vstel_range-option = 'EQ'.
  ls_vstel_range-low = ls_werkprd-vstel_p.
  APPEND ls_vstel_range TO lt_vstel_range.
ENDLOOP.

2. 修改运输单查询语句(关联VTTS并加入VSTEL条件)

关联VTTK与VTTS,加入DAREG日期范围(系统日期前一天至当天),并使用上面生成的VSTEL范围:

SELECT DISTINCT vttk~tknum
  FROM vttk
  INNER JOIN vtts ON vttk~tknum = vtts~tknum
  INTO TABLE @lt_tknum
 WHERE vttk~sttrg IN ( @zif_vehicle_model_dao=>mc_s_sttrg-_2, @zif_vehicle_model_dao=>mc_s_sttrg-_6 )
   AND vttk~shtyp = 'ZTRR'
   AND vttk~dareg BETWEEN ( sy-datum - 1 ) AND @sy-datum
   AND vtts~vstel IN @lt_vstel_range.

关键说明:

  • 用DISTINCT避免同一运输单因多条VTTS记录重复输出
  • 引用常量替代硬编码状态值,符合ABAP规范
  • DAREG条件调整为需求的日期范围

3. 排除已发放未交付的通行证

从可用通行证列表中移除关联到上述运输单的通行证(假设存在关联表ZTLO_PASS_ASSIGN,若无则需根据实际业务关联逻辑调整):

* 获取已发放的通行证ID
SELECT zzpass_id FROM ztlo_pass_assign INTO TABLE DATA(lt_used_pass)
 WHERE tknum IN @lt_tknum.

* 从可用列表中剔除已发放项
DELETE lt_pass WHERE zzpass_id IN @lt_used_pass.

内容的提问来源于stack exchange,提问作者Alexander Chebotarev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:40:17