使用VBRK和VBRP时如何解决ABAP中的数据类型转换SQL错误

问题描述

我想获取固定时间段和定义的组织内开票的数量总和,但它显示为0或出现SQL错误,如屏幕截图所示。

the error

我将表VBRK用于组织和数据,将表VBRP用于数量和货币。


   Tables: VBRK,lips,VBRP.


TYPES: Begin of itab5,VKORG TYPE VBRK-VKORG,FKDAT TYPE VBRK-FKDAT,ARKTX TYPE LIPS-ARKTX,FKIMG TYPE VBRP-FKIMG,VRKME TYPE VBRP-VRKME,End of itab5.

DATA: wa_ma5 TYPE itab5,it_ma5 TYPE STANDARD TABLE OF itab5,quan TYPE VBRP-FKIMG,curr TYPE vbrp-vrkme.
SELECT-OPTIONS: DATE FOR VBRK-FKDAT.
SELECT-OPTIONS: Organ FOR VBRK-VKORG.
APPEND date.
APPEND Organ.

START-OF-SELECTION.
  SELECT VKORG FKDAT FKIMG VRKME FROM VBRK
    inner JOIN VBRP ON VBRP~netwr = VBRK~WAERK
     INTO CORRESPONDING FIELDS OF TABLE it_ma5
     WHERE VBRK~FKDAT IN DATE AND VBRK~VKORG IN Organ.

END-OF-SELECTION.

  quan = 0.

  LOOP AT it_ma5 INTO wa_ma5.
*    if sy-subrc = 0.
    quan = quan + wa_ma5-fkimg.

*    endif.

  ENDLOOP.

  WRITE: 'the quantity',quan.

   

解决方法

这并不复杂。 您正在使用 VBRP-NETWR VBRK-WAERK 在两个表之间进行联接,这没有意义(它们是不同的数据类型)。

VBRK 通过 VBELN 字段与 VBRP 链接(一个是帐单标题和一个帐单项目),因此正确的JOIN为:

START-OF-SELECTION.
  SELECT vkorg fkdat fkimg vrkme
    FROM vbrk
   INNER JOIN vbrp
      ON vbrp~vbeln = vbrk~vbeln
    INTO CORRESPONDING FIELDS OF TABLE it_ma5
   WHERE vbrk~fkdat IN date
     AND vbrk~vkorg IN organ.

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...