AMDP表函数中的数组用法。

2020-09-27 08:54发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我有一个要求,我必须使用第一条记录的值来获取第二条记录中的计算值。 请查看Sc以获得确切的要求。

引用了此博客 https://blogs.sap.com/2014/12/16/using-array-as-internal-table-to-handle-and -process-data/comment-page-1/#comment-390619

,并使用数组进行计算。 但无法计算值...

使用以下代码

对于1个库存。。CARDINALITY(:a_mandt)做

a_quantity [:stock] + a_quantity [:stock + 1];

结尾;

但是出现错误" SQLSCRIPT消息:必须声明标识符:A_QUANTITY&A0&A1&A2&A3&A4&A5&A6&A7&A8&A9"

请提出建议!

我非常愿意采取另一种方法来解决该问题。

提前谢谢。.

(6.1 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我有一个要求,我必须使用第一条记录的值来获取第二条记录中的计算值。 请查看Sc以获得确切的要求。

引用了此博客 https://blogs.sap.com/2014/12/16/using-array-as-internal-table-to-handle-and -process-data/comment-page-1/#comment-390619

,并使用数组进行计算。 但无法计算值...

使用以下代码

对于1个库存。。CARDINALITY(:a_mandt)做

a_quantity [:stock] + a_quantity [:stock + 1];

结尾;

但是出现错误" SQLSCRIPT消息:必须声明标识符:A_QUANTITY&A0&A1&A2&A3&A4&A5&A6&A7&A8&A9"

请提出建议!

我非常愿意采取另一种方法来解决该问题。

提前谢谢。.

(6.1 kB)
付费偷看设置
发送
2条回答
N-Moskvin
1楼-- · 2020-09-27 09:30

不知道您的完整代码,但是错误消息看起来好像未声明数组A_QUANTITY。 请检查一下。

另一个问题是为什么您需要该构造,以及为什么不能用纯SQL解决它? 同样,由于没有有关所需结果的信息,因此无法提供任何建议。 但是从代码片段看来,它只能使用SQL来完成。

如果确实需要这样的命令逻辑,也许也值得一看基于索引的单元格访问表变量。 这样一来,就无需在数组和表变量之间进行转换。

致谢,
弗洛里安

灬番茄
2楼-- · 2020-09-27 09:36

感谢弗洛里安的输入,

需求很直接,我需要以递归方式从当前库存中扣除数量。 第一行的剩余库存将被视为第二行的当前库存(请参考有问题的excel快照。)

现在是的,如果可以使用SQL,请也建议。 这是我的第一本具有不同基础知识的CDS。

我附上完整的代码供您参考。

 CLASS ZMM_CL_TEST_AMDP DEFINITION
   上市
   最后
   创建公众。
   公共部分。
 *数据库过程的标记接口
   接口:if_amdp_marker_hdb。
 * TYPE:TY_TABLE TYPE zmmistockaging。
 *数据:zmmistockaging的lv_table类型表。
   TYPES:TY_TABLE TYPE zmmistockaging。
          类型:开始于ty_rank,
                  MANDT类型zmmistockaging-mandt,
                  MATBF型zmmistockaging-matbf,
                  WERKS型zmmistockaging-WERKS,
                  CHARG_SID类型zmmistockaging-CHARG_SID,
                  BUDAT类型zmmistockaging-BUDAT,
                  MAT_KDAUF类型的zmmistockaging-MAT_KDAUF,
                  MAT_KDPOS类型的zmmistockaging-MAT_KDPOS,
                  LGORT_SID类型zmmistockaging-LGORT_SID,
                  STOCK_QTY类型zmmistockaging-STOCK_QTY,
                  STOCK_BALANCE类型zmmistockaging-STOCK_BALANCE,
                  老化类型zmmistockaging-AGING,
                  排名I,
                 结束于ty_rank。
   数据:zmmistockaging的lv_table类型表。
 *方法定义
 表函数ZMM_AGGING_CALCULATION的类方法get_agging_details。
     。
   受保护的部分。
   专用部分。
 ENDCLASS。
 类别ZMM_CL_TEST_AMDP实施。
 方法get_agging_details通过数据库功能
                          对于组屋
                          语言SQLSCRIPT
                          选项只读
                          使用zmmistockaging。/*我的CDS视图*/
   

    DECLARE lv_index int;
    DECLARE LINDEX DECIMAL(20);
    DECLARE LV_COUNT FLOAT;
    DECLARE A_MANDT NVARCHAR(3)数组;
    DECLARE A_MATBF NVARCHAR(40)数组;
    DECLARE A_WERKS NVARCHAR(4)数组;
    DECLARE A_CHARG_SID NVARCHAR(10)数组;
    DECLARE A_BUDAT NVARCHAR(8)数组;
    DECLARE A_MAT_KDAUF NVARCHAR(10)数组;
    DECLARE A_MAT_KDPOS NVARCHAR(6)数组;
    DECLARE A_LGORT_SID NVARCHAR(4)数组;
    DECLARE A_quantity十进制数组;
    DECLARE A_stock十进制数组;
    DECLARE stock_quantity十进制数组;
    lt_stock =选择*来自zmmistockaging
            通过MATBF,WERKS,CHARG_SID,BUDAT DESC排序;
    a_MANDT = ARRAY_AGG(:LT_Stock.MANDT按MATBF,WERKS,CHARG_SID,BUDAT DESC排序);
    a_MATBF = ARRAY_AGG(:LT_Stock.MATBF按MATBF,WERKS,CHARG_SID,BUDAT DESC排序);
    a_WERKS = ARRAY_AGG(:LT_Stock.WERKS按MATBF,WERKS,CHARG_SID,BUDAT DESC排序);
    a_CHARG_SID = ARRAY_AGG(:LT_Stock.CHARG_SID按MATBF,WERKS,CHARG_SID,BUDAT DESC排序);
    a_BUDAT = ARRAY_AGG(:LT_Stock.BUDAT按MATBF,WERKS,CHARG_SID,BUDAT DESC排序);
    a_quantity = ARRAY_agg(:MATBF,WERKS,CHARG_SID,BUDAT DESC的lt_stock.stock_qty顺序);
   

    为lv_index在1 .. CARDINALITY(:a_mandt)做
      a_stock [:lv_index]:= a_quantity [:lv_index] + a_quantity [:lv_index + 1];
    结束于

    var_out = UNNEST(:a_mandt,:a_MATBF,:a_WERKS,:a_CHARG_SID,:a_BUDAT,:A_STOCK,:A_QUANTITY)
                  AS(" MANDT"," MATBF"," WERKS"," CHARG_SID"," BUDAT"," STOCK_QTY"," STOCK_BALANCE");
    返回select * from:var_out;

  终结法。
 ENDCLASS。

一周热门 更多>