我正在为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”引入的控制结构必须 以“终结”结束。
显然有一个公开声明。但我并不熟悉这种语言,也不知道这段时间的位置,或者我是否放错了任何结束语。我在网上看到的其他方法是使用构造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.
但这会产生一批新的错误:
字段“CORRESPONDING”未知。它既不属于其中之一 指定的表,也不是由“DATA”语句定义的。领域 “WA_BKPF-CHKEY”未知。它既不属于其中之一 指定的表,也不是由“DATA”语句定义的。字段“WA_BKPF” 不明。它既不在指定的表之一也不定义 通过“数据”声明。
我怀疑我在网上找到的解决方案和示例跳过某些部分,他们定义了一些他们使用的结构。但我真的不知道怎么做。有人可以帮忙吗?
编辑: 最终的代码如下:
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.
答案 0 :(得分:3)
manoftheyear。
请告诉我这是否适合您:
*** Definition of custom type.
TYPES: BEGIN OF ty_bkpf,
belnr TYPE bukrs,
bukrs TYPE belnr_d,
gjahr TYPE gjahr,
awkey TYPE awkey,
chkey TYPE string, " Replace with the type you need to use.
END OF ty_bkpf.
*** Definition of internal table of custom type.
DATA lt_bkpf TYPE STANDARD TABLE OF ty_bkpf.
*** Definition of field symbol (pointer) of custom type.
FIELD-SYMBOLS <lfs_bkpf> TYPE ty_bkpf.
*** Extraction of data from BKPF database table.
SELECT belnr bukrs gjahr awkey
FROM bkpf
INTO CORRESPONDING FIELDS OF TABLE lt_bkpf.
*** Checks if extraction was succesful.
IF sy-subrc IS INITIAL.
UNASSIGN <lfs_bkpf>.
*** Loop internal table...
LOOP AT lt_bkpf ASSIGNING <lfs_bkpf>.
*** ...and create value for field CHKEY.
CONCATENATE <lfs_bkpf>-belnr
<lfs_bkpf>-gjahr
INTO <lfs_bkpf>-chkey. " By using a pointer, there's no need to use MODIFY sentence.
ENDLOOP.
ENDIF.
干杯。
答案 1 :(得分:0)
您可以直接在QUERY上使用CONCAT。示例:
SELECT SINGLE CONCAT( CONCAT( a~name1, a~name2 ), a~name3 )
FROM ( ( adrc AS a
INNER JOIN j_1bbranch AS j ON a~addrnumber = j~adrnr )
INNER JOIN t001w AS t ON j~cgc_branch = t~j_1bbranch
AND j~bukrs = @i_postab-bukrs
AND t~werks = @e_postab-prctr+4(4) )
INTO @e_postab-company_name.