You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在CDS视图中关联表函数获取MSEG批次对应采购价?

关联CDS视图与表函数获取原始采购价

你已经搭建好了基础的发票数据CDS视图和用于提取MSEG批次采购数据的表函数,接下来只需要在基础视图中通过**批次(Batch)**字段将两者关联起来,就能拿到对应的原始采购价格了。

修改后的完整CDS视图代码

@AbapCatalog.sqlViewName: '<view_name>'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '<text>'
@VDM.viewType: #BASIC
define view <view_name> as select distinct 
    from I_BillingDocumentItemCube( P_ExchangeRateType: 'M', P_DisplayCurrency: 'EUR' ) as billing
    left join <table_function>( clnt: $CLIENT, charg: billing.Batch ) as mseg_data
        on billing.Client = mseg_data.clnt
        and billing.Batch = mseg_data.charg_exp
{
    key billing.BillingDocument,
    key billing.BillingDocumentItem,
    billing.BillingDocumentType,
    billing._BillingDocument._Item._PricingElement[ConditionType = 'XXX1'].ConditionRateValue as cost1,
    billing._BillingDocument._Item._PricingElement[ConditionType = 'XXX2'].ConditionRateValue as cost2,
    billing.SoldToParty,
    billing.SoldToPartyName,
    billing.Material,
    billing.BillingDocumentItemText,
    billing.Batch,
    billing.BillingDocumentDate,
    billing.BillingQuantity,
    billing.BillingQuantityUnit,
    billing.SalesDocumentItemCategory,
    -- 新增采购相关字段
    mseg_data.dmbtr as total_purchase_amount,
    mseg_data.menge as purchase_quantity,
    -- 计算单位采购价(处理除数为0的异常情况)
    case when mseg_data.menge > 0 then mseg_data.dmbtr / mseg_data.menge else 0 end as unit_purchase_price
};

关键关联逻辑说明

  1. 表函数调用方式:通过left join <table_function>( clnt: $CLIENT, charg: billing.Batch )直接传入当前客户端($CLIENT)和基础视图中的批次字段,这样就能针对每一行发票数据,匹配对应的MSEG批次记录。
  2. 关联条件:加上客户端字段的匹配是ABAP数据模型的标准规范,避免跨客户端的数据混乱,同时保证批次匹配的准确性。
  3. 采购价计算:通过dmbtr(采购总金额)除以menge(采购数量)得到单位采购价,这里用case处理了数量为0的异常情况,避免出现除法运算错误。

可选优化点

  • 如果业务场景中同一个批次可能对应多条MSEG记录(比如多次收货),可以调整表函数逻辑:比如去掉top 1,改为按mblnr+mjahr+zeile排序后取最新/最早的记录,或者用sum(dmbtr)sum(menge)汇总采购金额与数量。
  • 可以给表函数新增material参数,关联时同时传入物料编码,进一步避免不同物料共用批次的极端情况,提升数据准确性。

内容的提问来源于stack exchange,提问作者susosaurus

火山引擎 最新活动