关于ABAP动态WHERE条件 SQL查询的处理
最近在处理一项批量修改凭证文本内容时候,先要查出关键字的所有凭证,包括行项目文本及凭证抬头文本,用户也不高兴分别查询,又想有时候单独查询。
这个时候如果这样写
SELECT BSEG~BUKRS,BSEG~GJAHR,BSEG~BELNR,BSEG~BUZEI,BSEG~SGTXT,BKPF~BKTXT FROM BSEG INNER JOIN BKPF ON BKPF~BUKRS = BSEG~BUKRS AND BKPF~GJAHR = BSEG~GJAHR AND BKPF~BELNR = BSEG~BELNR WHERE BSEG~BUKRS EQ @P_BUKRS AND BSEG~GJAHR EQ @P_GJAHR AND BSEG~BELNR IN @S_BELNR AND ( BSEG~SGTXT IN @S_SGTXT OR BKPF~BKTXT IN @S_BKTXT ) INTO TABLE @DATA(LT_BSEG1).
结果是当两者都输的时候是没问题的,但是只输一个文本框,另一个不输的话,会出现全部的数据。询问了其他大神,都是建议使用动态条件去处理。
LR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS. "动态where条件 DATA:LV_STRING TYPE STRING. IF S_SGTXT IS NOT INITIAL. LV_STRING = 'BSEG~SGTXT IN @S_SGTXT'. ENDIF. IF S_BKTXT IS NOT INITIAL. LV_STRING = 'BKPF~BKTXT IN @S_BKTXT'. ENDIF. IF S_BKTXT IS NOT INITIAL AND S_SGTXT IS NOT INITIAL. LV_STRING = '( BSEG~SGTXT IN @S_SGTXT OR BKPF~BKTXT IN @S_BKTXT )'. ENDIF. * IF S_SGTXT IS NOT INITIAL AND S_BKTXT IS INITIAL. SELECT BSEG~BUKRS,BSEG~GJAHR,BSEG~BELNR,BSEG~BUZEI,BSEG~SGTXT,BKPF~BKTXT INTO TABLE @DATA(LT_BSEG) FROM BSEG INNER JOIN BKPF ON BKPF~BUKRS = BSEG~BUKRS AND BKPF~GJAHR = BSEG~GJAHR AND BKPF~BELNR = BSEG~BELNR WHERE BSEG~BUKRS EQ @P_BUKRS AND BSEG~GJAHR EQ @P_GJAHR AND BSEG~BELNR IN @S_BELNR AND (LV_STRING)
注意:常量时需要加引号,处理的时候用三个引号来表示一个引号,包含小数点的数字也需要加引号。
单独输行项目文本:
单独查凭证抬头文本
两者都输
分类:
SAP-ABAP
, SAP-FI/CO/AM/PS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2021-08-31 MIR7/MIRO 贷项凭证/事后借记/后续贷记
2020-08-31 Java-多线程-等待与唤醒机制