【问题标题】:SAP: join partner function data based on sales typeSAP:根据销售类型加入合作伙伴功能数据
【发布时间】:2025-12-11 21:25:02
【问题描述】:

使用 SAP 数据,我们愿意丰富最后一位客户的销售数据。根据销售类型,有不同的合作伙伴功能代码对应于最后执行销售的公司(例如:我们可能有间接或直接销售)。目前,我们一直在考虑表格 VBAP/VBAK/VBPA。我们从每个表中提取数据以使用sap4j 分隔文件,然后在 VBELN 上连接 VBAP 和 VBPA,并考虑合作伙伴代码 WE(收货人)或指示最后一位买家的自定义托运代码。

是否有一些准确的方法可以知道谁是给定销售链中的最后一个买家?

【问题讨论】:

  • standard reports,但其中没有按销售订单类型,所以您唯一的选择是vbap/vbpa

标签: sap-erp


【解决方案1】:

可以通过以下方式完成:

def sales_tabkey(row):
    return "001{}{}".format(row['VBELN'], row['POSNR'])

def expected_partner_function_for_sales_type(row):
    consignation_codes = set(['ORK', 'XKB', 'ZSOK', 'ZLZK', 'ZTSK', 'KE', 'ZED', 'ZZN'])
    if row['AUART'] in consignation_codes:
        return 'ZK'
    return 'WE'

def get_kunnrf_frame(vbap, vbak, vbpa, kna):
    consignation_codes = set(['ORK', 'XKB', 'ZSOK', 'ZLZK', 'ZTSK', 'KE', 'ZED', 'ZZN'])

    df = pd.merge(vbap, vbak, on=['VBELN'], how='left')
    df = pd.merge(df, vbpa, on='VBELN', how='left')

    df["EXPPARVW"]=df.apply(expected_partner_function_for_sales_type, axis=1)

    # KUNNR in kna is considered end_client_id
    df = pd.merge(df, kna, on='ADRNR', how='left')[['VBELN','POSNR', 'KUNNR','end_client_id', 'ADRNR', 'PARVW', 'EXPPARVW', 'AUART']].drop_duplicates()
    df['TABKEY']=df.apply(sales_tabkey,axis=1)

    endclient_tabkeys = set(df.TABKEY.unique())
    dfa = df[df.PARVW==df['EXPPARVW']]
    dfb = df[df.TABKEY.isin(endclient_tabkeys.difference(set(dfa.TABKEY.unique())))]

    return pd.concat([dfa, dfb])

【讨论】: