我正在为 SAP R/3 创建一个 BAPI。我正在尝试编写的 MSSQL 中的等价物是:
select
bkpf.BELNR,
bkpf.BUKRS,
bkpf.GJAHR,
bkpf.AWKEY
into
#tab
from
bkpf
where
exists ( select 1 from #n_tab n where CONCAT(n.BELNR, n.GJAHR) = bkpf.AWKEY )
;
但显然 Open Sql 不允许在查询中进行操作。因此,对于我的研究,我想“加入”的表必须检索到内存表中,在循环中创建一个新列来执行操作并与 #tab 表进行比较。但我在语法上苦苦挣扎。我到目前为止是这样的:
FUNCTION ZBAPI_TEST.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------
select
bkpf~BELNR
bkpf~BUKRS
bkpf~GJAHR
bkpf~AWKEY
into ITAB_BKPF
from bkpf.
loop at ITAB_BKPF.
ITAB_BKPF-chkey = CONCATENATE BELNR GJAHR.
modify ITAB_BKPF.
endloop.
ENDFUNCTION.
但我收到以下错误。
字段“ITAB_BKPF”未知。它既不在指定的表之一中,也不由“DATA”语句定义。
字段“ITAB_BKPF-GJAHR”未知。它既不在指定的表之一中,也不由“DATA”语句定义。
嵌套错误:语句“ENDFUNCTION”之前,“SELECT”引入的控制结构必须以“ENDSELECT”结束。
嵌套错误:在“+END-OF-INCLUDE”语句之前,“FUNCTION”引入的控制结构必须以“ENDFUNCTION”结束。
显然有一个公开的声明。但我不太熟悉这种语言,不知道在哪里需要句号,或者我是否放错了任何结束语。我在网上看到的其他方法是使用构造SELECT..ENDSELECT
:
FUNCTION ZBAPI_TEST.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------
select
bkpf~belnr
bkpf~bukrs
bkpf~gjahr
bkpf~awkey
into corresponding fields
wa_bkpf
from bkpf.
wa_bkpf-chkey = concatenate belnr gjahr.
append wa_bkpf to itab_bkpf.
endselect.
ENDFUNCTION.
但这会产生一批新的错误:
“对应”字段未知。它既不在指定的表之一中,也不由“DATA”语句定义。字段“WA_BKPF-CHKEY”未知。它既不在指定的表之一中,也不由“DATA”语句定义。字段“WA_BKPF”未知。它既不在指定的表之一中,也不由“DATA”语句定义。
我怀疑我在网上找到的解决方案和示例跳过了他们定义他们使用的一些结构的部分。但我真的不知道该怎么做。有人可以帮忙吗?
编辑:最终代码如下所示:
types: begin of t_bkpf,
belnr type belnr_d,
bukrs type bukrs,
gjahr type gjahr,
awkey type awkey,
chkey type string.
types: end of t_bkpf.
data: itab_bkpf type standard table of t_bkpf.
field-symbols: <wa> type t_bkpf.
select
BELNR
BUKRS
GJAHR
AWKEY
into corresponding fields of table ITAB_BKPF
from bkpf.
loop at ITAB_BKPF assigning <wa>.
CONCATENATE <wa>-BELNR <wa>-GJAHR into <wa>-chkey.
endloop.