
后端企业应用【免费下载链接】erpnextFree and Open Source Enterprise Resource Planning (ERP)项目地址https://gitcode.com/GitHub_Trending/er/erpnext点击查看免费下载导读Sales Partner销售合作伙伴是 ERPNext 中用于管理卖货但不直接归属为员工的外部销售力量的核心主数据涵盖经销商dealer、代理商distributor、佣金代理commission agent、联属推广affiliate与转售商reseller等角色。本文以 erpnext/setup/doctype/sales_partner/README.md 为骨架结合仓库源码与配置完整讲解 Sales Partner 的字段模型、佣金计算底层逻辑、目标Target设定、网页门户Website展示、推荐码Referral Code追踪以及配套报表的使用方法帮助你搭建一套可落地的渠道销售管理方案。一、Sales Partner 是什么官方 DocType 定义见 sales_partner.jsonA third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission.即Sales Partner 是第三方分销商/经销商/佣金代理/联属推广/转售商按佣金销售公司产品的主体。与 Sales Person销售员属于内部员工不同Sales Partner 是独立于组织之外的合作伙伴公司通过设定佣金率与其结算。README 原文仅一句话Partner / dealer / distributor who sells products (maybe for commission) and for whom targets can be set.——但背后的实现远比这句话丰富下面逐层展开。1.1 使用场景经销商Dealer/ 代理商Distributor按区域Territory代理销售产品公司按固定佣金率结算佣金代理Commission Agent按单笔订单的净额抽佣联属推广Affiliate/ 转售商Reseller通过推荐码Referral Code追踪引流成交针对不同 Item Group、不同 Fiscal Year 为合作伙伴设定销售目标Target并按目标达成情况考核。二、Sales Partner DocType 字段模型字段定义位于 sales_partner.json 的fields数组字段顺序即表单布局field_order。核心字段归纳如下字段Fieldtype必填/特性说明partner_nameData必填、唯一、autoname 来源合作伙伴名称作为文档自动命名autoname: field:partner_name表单内不可重复partner_typeLink → Sales Partner Type列表/筛选可见合作伙伴类型经销商/代理/联属等选项来自 Sales Partner TypeterritoryLink → Territory必填负责的销售区域用于渠道与区域管理commission_rateFloat必填佣金率百分比参与订单佣金自动计算targetsTable → Target Detail—销售目标明细表按 Item Group Fiscal Year 设定show_in_websiteCheck默认 0是否在公司门户网站公开该合作伙伴主页referral_codeData唯一、长度 8推荐码用于追踪引荐/联盟成交routeData唯一、依赖 show_in_website门户网站公开页面的 URL 路径logoAttach—合作伙伴 Logo网站展示用partner_websiteData—合作伙伴外部官网保存时自动规范化 httpsintroductionText依赖 show_in_website网站主页简介descriptionText Editor—富文本详细介绍门户页面展示权限Sales Master Manager拥有创建/读写/分享权限Sales Manager与Sales User可读、可邮件、可打印、可出报表其余财务、采购、库存、维护、交付、网站等角色仅有只读select权限见 sales_partner.json。2.1 字段背后的源码逻辑sales_partner.py 中validate()做了三件事自动生成 route若未手动填写route自动生成为partners/ self.scrub(self.partner_name)scrub 将名称转为 slug保证门户 URL 唯一规范化 partner_website利用urlsplit/urlunsplit把缺省协议或http://的网址统一改写为https://例如填写example.com会被规范为https://example.com调用 WebsiteGenerator 的校验逻辑super().validate()因为 Sales Partner 继承自WebsiteGeneratorsales_partner.py天然具备门户页生成能力。地址与联系人自动加载onload()调用load_address_and_contact(self)在表单加载时把与合作伙伴关联的 Address / Contact 数据注入__onload前端 sales_partner.js 在refresh事件中新文档__islocal隐藏地址联系人区块并清空缓存已保存文档则调用frappe.contacts.render_address_and_contact(frm)渲染地址联系人卡片。推荐码自动大写sales_partner.js 在referral_code字段变更时自动转为大写保证追踪码的一致性长度上限 8见 sales_partner.json。三、佣金计算从订单到报表的完整链路3.1 订单/发票中的佣金字段在 Sales Order、Sales Invoice、Delivery Note、POS Invoice 等销售单据上都有sales_partner、commission_rate、amount_eligible_for_commission、total_commission字段例如 sales_order.json、customer.py 中的default_sales_partner可预填默认合作伙伴。佣金计算统一实现在 selling_controller.py 的calculate_commission()def calculate_commission(self): if not self.meta.get_field(commission_rate): return self.round_floats_in(self, (amount_eligible_for_commission, commission_rate)) if not (0 self.commission_rate 100.0): throw(..., _(must be between 0 and 100)) self.amount_eligible_for_commission sum( item.base_net_amount for item in self.items if item.grant_commission ) self.total_commission flt( self.amount_eligible_for_commission * self.commission_rate / 100.0, self.precision(total_commission), )关键点校验commission_rate必须在 0100 之间否则单据保存会抛错计佣基数amount_eligible_for_commission只累加行项目上勾选了grant_commission的base_net_amount基础净额允许对特定产品行豁免佣金总额total_commission 可计佣净额 × 佣金率 / 100并按单据字段精度四舍五入。从源码结构可以推断calculate_commission在单据提交/保存流程中被销售控制器调用因此佣金金额会随订单/发票的净额变化自动重算无需手工维护。3.2 佣金汇总报表sales_partner_commission_summary.py 实现了Sales Partner Commission Summary报表其基类SalesPartnerSummaryReport的核心查询逻辑self.query ( frappe.qb.from_(self.dt) .select( self.dt.name, self.dt.customer, self.dt.territory, Field(self.date_field, posting_date, tableself.dt), self.dt.sales_partner, self.dt.commission_rate, ConstantColumn(company_currency).as_(currency), ) .where( (self.dt.docstatus 1) (self.dt.sales_partner.notnull()) (self.dt.sales_partner ! ) ) ... )支持 Sales Order / Sales Invoice / Delivery Note / POS Invoice 四种单据SALES_TRANSACTION_DOCTYPES只统计已提交docstatus 1且填写了sales_partner的单据报表列包括单据号、客户、币种、区域、日期、金额base_net_total、销售合作伙伴、佣金率、总佣金total_commission提供公司、客户、区域、合作伙伴、起止日期等筛选_apply_common_filters日期字段自动适配Sales Order 用transaction_date下单日期其余单据用posting_date过账日期。Sales Partner Transaction Summarysales_partner_transaction_summary.py在此基础上 JOIN 子表{DocType} Item把明细行Item Code、Item Group、Brand、Qty、Rate、Amount也纳入报表用于逐产品行的佣金核算。两者均继承同一基类复用查询框架。四、目标设定Target Detail 子表与考核README 中for whom targets can be set对应 Sales Partner 表单中的Sales Partner Target区块targets子表选项为 Target Detailistable 子表 DocType字段字段Fieldtype必填说明item_groupLink → Item Group—目标适用的商品组留空表示不限fiscal_yearLink → Fiscal Year是目标所属财年target_qtyFloat—目标数量target_amountFloat—目标金额distribution_idLink → Monthly Distribution是月度分配方案把年度目标摊到各月前端联动sales_partner.js填写fiscal_year后distribution_id的候选列表会被过滤为同财年的 Monthly Distribution防止选错跨财年的分配方案。4.1 目标达成考核报表仓库提供了基于 Item Group 的目标差异报表sales_partner_target_variance_based_on_item_group.py以及配套测试test_sales_partner_target_variance_based_on_item_group.py将设定的目标与实际成交进行差异对比用于季度/年度渠道考核。五、门户网站展示把合作伙伴做成公开页面勾选show_in_website后Sales Partner 会作为门户页面公开。website配置在 sales_partner.pywebsite frappe._dict( page_title_fieldpartner_name, condition_fieldshow_in_website, templatetemplates/generators/sales_partner.html, )页面标题取partner_name仅当show_in_website 1时生成页面condition_field渲染模板为 templates/generators/sales_partner.html该模板在页面上输出Logoitempropbrand、地址/电话/邮箱itempropaddress/telephone/email符合 schema.org Organization 微格式、以及description富文本介绍。模板中的地址数据来自get_context()sales_partner.py通过Dynamic Link反查关联的 Address 文档汇总address_line1/address_line2/city/state/pincode/country为多行地址并取出邮箱与电话支持多号码用br分隔。六、推荐码Referral Code与联动业务referral_code在字段定义中的 description 为To Track inbound purchase用于追踪引荐/入站成交长度 8、唯一、输入自动转大写sales_partner.js。它把 Sales Partner 与联属推广场景打通合作伙伴可通过唯一推荐码标识自己带来的客户与订单配合上述佣金报表即可核算每笔引荐成交的佣金。从源码结构看sales_partner字段在 customer、quotation、sales_order 等 DocType 中均有引用Customer 上还有default_sales_partner用于建立客户—合作伙伴默认归属关系下单时自动带入佣金率。七、Sales Partner Type类型维度partner_type链接到 Sales Partner Type这是独立的 Setup DocType用于维护经销商 / 代理商 / 联属 / 分销等分类。先创建类型再在 Sales Partner 表单中引用即可按类型过滤列表、筛选报表。八、从创建到使用的完整操作步骤维护基础资料在 Setup → Sales Partner Type 中创建类型如经销商在 CRM/Selling 模块准备 Territory、Fiscal Year、Monthly Distribution、Item Group 等关联主数据创建 Sales PartnerSetup → Sales Partner填写partner_name必填、唯一自动作为文档名选择partner_type与territory必填填写commission_rate必填0100保存后自动关联地址/联系人也可手动添加 Address / Contact 并链接到本合作伙伴设定目标在 Sales Partner Target 子表中按item_group fiscal_year添加行填写target_qty/target_amount并选择同财年的distribution_id月度分配可选门户展示勾选show_in_website填写introduction、description、logo、partner_websiteroute留空会自动生成为partners/slug可选推荐码填写referral_code≤8 位自动大写用于追踪引荐成交下单结算在 Sales Order / Sales Invoice 中关联该sales_partner系统自动计算total_commissioncalculate_commission逻辑见上文也可在 Customer 上预填default_sales_partner自动带入报表考核运行 Sales Partner Commission Summary / Sales Partner Transaction Summary 查看佣金明细运行 Sales Partner Target Variance按 Item Group对比目标与实际完成渠道考核与佣金结算。九、小结Sales Partner 是 ERPNext 渠道销售体系的枢纽主数据以合作伙伴 佣金率驱动订单级自动佣金计算selling_controller.py以targets子表承载目标管理以show_in_website开启公开门户页sales_partner.html以referral_code支撑联属追踪再配合三张专项报表佣金汇总、交易明细、目标差异完成从渠道录入、成交结算到绩效考核的闭环。对渠道型企业而言这套组合可以直接替换或补充原有的手工对账流程。赞分享后端企业应用【免费下载链接】erpnextFree and Open Source Enterprise Resource Planning (ERP)项目地址https://gitcode.com/GitHub_Trending/er/erpnext点击查看免费下载相关推荐laravel-crm销售佣金销售提成计算与发放管理laravel crm销售佣金销售提成计算与发放管理 痛点销售激励体系缺失的困境 你是否还在为销售团队的激励问题而烦恼传统的Excel表格手动计算佣金不仅后端前端企业应用为什么选择ner-bertje-tagdetekst3大核心优势助力历史文本实体识别为什么选择ner bertje tagdetekst3大核心优势助力历史文本实体识别 ner bertje tagdetekst是一款专为荷兰语历史文本设计的OpenViking 销售商机商单 Builder 实战指南双 APIKey 体系下的个人销售知识库搭建与跟进工作流OpenViking 销售商机商单 Builder 实战指南双 APIKey 体系下的个人销售知识库搭建与跟进工作流 导读 本文基于 OpenViking 仓人工智能AI AgentAgent 记忆RAG后端数据库上一篇推荐开源项目Workflow - 构建强大应用框架的利器下一篇Haystack × Pinecone 向量检索集成指南PineconeDocumentStore 与 PineconeEmbeddingRetriever 完整解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考