vendor-management
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVendor Management
供应商管理
Overview
概述
Vendor management covers creating and sending purchase orders to suppliers, tracking goods receipts, running vendor performance scorecards (on-time rate, fill rate, defect rate), and maintaining a supplier portal where vendors can acknowledge POs and provide tracking numbers. For most merchants, QuickBooks/Xero handles POs and vendor tracking, while a supplier portal can be as simple as an email-based workflow for smaller operations.
供应商管理涵盖向供应商创建并发送采购订单、跟踪货物接收情况、运行供应商绩效评分卡(准时率、订单满足率、缺陷率),以及维护供应商门户,供供应商确认采购订单并提供跟踪单号。对于大多数商家而言,QuickBooks/Xero负责处理采购订单和供应商跟踪,而小型企业的供应商门户可以是基于电子邮件的简单工作流。
When to Use This Skill
何时使用该技能
- When managing 5+ suppliers and need a centralized system instead of email-based coordination
- When your merchandising team manually creates purchase orders in spreadsheets and needs automation
- When onboarding new dropship suppliers and need a structured integration flow
- When preparing quarterly business reviews with suppliers and need performance metrics
- When building a multi-vendor marketplace where each seller needs their own dashboard
- 当管理5家及以上供应商,需要集中式系统而非基于邮件的协调方式时
- 当商品团队手动在电子表格中创建采购订单,需要自动化流程时
- 当接入新的代发货供应商,需要结构化集成流程时
- 当准备与供应商进行季度业务回顾,需要绩效指标数据时
- 当搭建多供应商市场,每个卖家需要专属仪表盘时
Core Instructions
核心操作指南
Step 1: Determine your platform and choose the right vendor management tool
步骤1:确定平台并选择合适的供应商管理工具
| Store Stage | Recommended Tool | Why |
|---|---|---|
| Small (< $1M revenue) | QuickBooks Online or Xero + email-based POs | QuickBooks handles POs, vendor payments, and basic receipt tracking; most small merchants don't need a dedicated vendor portal |
| Mid-market ($1M–$20M) | DEAR Inventory (now Cin7 Core) or Unleashed | Both handle POs, goods receipts, and vendor scorecards with Shopify/WooCommerce/BigCommerce integrations |
| Enterprise | NetSuite or Coupa | Full procurement suite with approval workflows, supplier portals, and compliance tracking |
| Dropshipping focus | DSers, AutoDS, or Spocket | See @dropshipping-integration skill for supplier-specific dropshipping tools |
| Custom | Build a PO system + supplier portal | For unique workflows that existing tools don't support |
| 店铺阶段 | 推荐工具 | 原因 |
|---|---|---|
| 小型(年收入<100万美元) | QuickBooks Online或Xero + 基于邮件的采购订单 | QuickBooks负责处理采购订单、供应商付款和基础收货跟踪;大多数小型商家不需要专门的供应商门户 |
| 中型市场(年收入100万-2000万美元) | DEAR Inventory(现Cin7 Core)或Unleashed | 两者均支持采购订单、货物接收和供应商评分卡功能,并可与Shopify/WooCommerce/BigCommerce集成 |
| 企业级 | NetSuite或Coupa | 完整的采购套件,包含审批工作流、供应商门户和合规跟踪功能 |
| 专注代发货 | DSers、AutoDS或Spocket | 如需针对供应商的代发货工具,请查看@dropshipping-integration技能 |
| 定制化 | 搭建采购订单系统+供应商门户 | 适用于现有工具无法支持的独特工作流 |
Step 2: Connect your e-commerce platform to your vendor management system
步骤2:将电商平台与供应商管理系统连接
Shopify
Shopify
Using Cin7 Core (formerly DEAR Inventory):
- Install the Cin7 Core connector from the Shopify App Store or via the Cin7 Core integration settings
- Cin7 Core syncs Shopify products and inventory — your Shopify stock levels reflect what Cin7 shows as "on hand"
- Create purchase orders in Cin7 Core → Purchase → Add Purchase
- When goods are received in Cin7 (mark as Received), Shopify inventory updates automatically
Using QuickBooks Online for POs:
- Connect QuickBooks to Shopify via the QuickBooks Online app or A2X connector
- Create POs in QuickBooks Online → Expenses → Purchase Orders
- When goods are received: in QuickBooks, go to the PO and click "Receive" to record the goods receipt
- Manually update Shopify inventory after receiving (or use Cin7 Core which does this automatically)
使用Cin7 Core(原DEAR Inventory):
- 从Shopify应用商店或Cin7 Core集成设置中安装Cin7 Core连接器
- Cin7 Core会同步Shopify的产品和库存——Shopify的库存水平将与Cin7显示的“现有库存”保持一致
- 在Cin7 Core中创建采购订单→采购→添加采购订单
- 当货物在Cin7中标记为“已接收”时,Shopify库存将自动更新
使用QuickBooks Online处理采购订单:
- 通过QuickBooks Online应用或A2X连接器将QuickBooks与Shopify连接
- 在QuickBooks Online中创建采购订单→费用→采购订单
- 当货物到达时:在QuickBooks中打开采购订单,点击“接收”以记录收货情况
- 收货后手动更新Shopify库存(或使用可自动完成此操作的Cin7 Core)
WooCommerce
WooCommerce
Using ATUM Inventory Management (PO module):
- Install ATUM Inventory Management from WordPress.org (premium version for PO features)
- Go to ATUM → Purchase Orders → Add PO
- Select supplier, add products, set expected delivery date
- ATUM emails the PO to the supplier automatically
- When goods arrive: mark the PO as received in ATUM → WooCommerce inventory updates automatically
Using Cin7 Core:
- Connect Cin7 Core to WooCommerce via their integration (Cin7 Core → Integrations → WooCommerce)
- Manage all POs and vendor relationships in Cin7 Core; inventory syncs back to WooCommerce
使用ATUM Inventory Management(采购订单模块):
- 从WordPress.org安装ATUM Inventory Management(采购订单功能需付费版本)
- 进入ATUM→采购订单→添加采购订单
- 选择供应商,添加产品,设置预计交货日期
- ATUM会自动将采购订单通过邮件发送给供应商
- 当货物到达时:在ATUM中将采购订单标记为“已接收”→WooCommerce库存将自动更新
使用Cin7 Core:
- 通过Cin7 Core的集成功能将其与WooCommerce连接(Cin7 Core→集成→WooCommerce)
- 在Cin7 Core中管理所有采购订单和供应商关系;库存将同步回WooCommerce
BigCommerce
BigCommerce
Using Unleashed:
- Install the Unleashed connector from the BigCommerce App Marketplace
- Create purchase orders in Unleashed → Purchases → New Purchase Order
- Unleashed syncs inventory back to BigCommerce when POs are received
Using Cin7 Core:
- Connect via BigCommerce API integration in Cin7 Core settings
- Same workflow as Shopify/WooCommerce
使用Unleashed:
- 从BigCommerce应用市场安装Unleashed连接器
- 在Unleashed中创建采购订单→采购→新建采购订单
- 当采购订单标记为已接收时,Unleashed会将库存同步回BigCommerce
使用Cin7 Core:
- 在Cin7 Core设置中通过BigCommerce API集成进行连接
- 工作流与Shopify/WooCommerce一致
Step 3: Create and send purchase orders to suppliers
步骤3:创建并向供应商发送采购订单
A good PO includes: your PO number, item descriptions with your SKU and the supplier's SKU, quantities, unit costs, expected delivery date, and delivery address.
一份规范的采购订单应包含:采购订单编号、带有自有SKU和供应商SKU的商品描述、数量、单位成本、预计交货日期以及交货地址。
In QuickBooks Online
在QuickBooks Online中
- Go to Expenses → Vendors → [Vendor] → click New Transaction → Purchase Order
- Fill in: vendor, PO date, expected ship date, items with quantities and unit costs
- Click Save and Send to email the PO directly to the vendor from QuickBooks
- Track the PO status in Expenses → Purchase Orders — open POs show as "Open", received as "Closed"
- 进入费用→供应商→[对应供应商]→点击新建交易→采购订单
- 填写:供应商、采购订单日期、预计发货日期、商品数量和单位成本
- 点击保存并发送,直接从QuickBooks将采购订单邮件发送给供应商
- 在费用→采购订单中跟踪采购订单状态——未完成的采购订单显示为“未结”,已接收的显示为“已结”
In Cin7 Core / ATUM
在Cin7 Core / ATUM中
- Navigate to Purchase → New Purchase Order
- Select the supplier; the system pre-fills the supplier's products from your supplier catalog
- Adjust quantities based on your reorder quantities (see @demand-forecasting)
- Set the expected delivery date: your supplier's lead time + today's date
- Send the PO via the built-in email workflow — the PO PDF is attached to the email
- 进入采购→新建采购订单
- 选择供应商;系统会从供应商目录中预填充该供应商的产品
- 根据补货数量调整采购数量(查看@demand-forecasting技能)
- 设置预计交货日期:供应商的交货周期+当前日期
- 通过内置邮件工作流发送采购订单——采购订单PDF将作为附件添加到邮件中
Using a simple email template (for merchants not using a PO system yet)
使用简单邮件模板(适用于尚未使用采购订单系统的商家)
Subject: Purchase Order PO-202603-001
Dear [Supplier Contact],
Please find our purchase order details below:
PO Number: PO-202603-001
Order Date: March 12, 2026
Expected Delivery: March 26, 2026
Items:
| SKU | Description | Qty | Unit Cost | Total |
|-----|-------------|-----|-----------|-------|
| YS-1001 | Cotton T-Shirt, White, S | 100 | $8.50 | $850.00 |
| YS-1002 | Cotton T-Shirt, White, M | 150 | $8.50 | $1,275.00 |
Total: $2,125.00
Payment Terms: Net 30
Please confirm receipt of this order and your expected ship date.
Ship to:
[Your warehouse address]Subject: Purchase Order PO-202603-001
Dear [Supplier Contact],
Please find our purchase order details below:
PO Number: PO-202603-001
Order Date: March 12, 2026
Expected Delivery: March 26, 2026
Items:
| SKU | Description | Qty | Unit Cost | Total |
|-----|-------------|-----|-----------|-------|
| YS-1001 | Cotton T-Shirt, White, S | 100 | $8.50 | $850.00 |
| YS-1002 | Cotton T-Shirt, White, M | 150 | $8.50 | $1,275.00 |
Total: $2,125.00
Payment Terms: Net 30
Please confirm receipt of this order and your expected ship date.
Ship to:
[Your warehouse address]Step 4: Set up a supplier portal for PO acknowledgment
步骤4:设置供应商门户以确认采购订单
For suppliers who work via email, a simple acknowledgment email workflow is sufficient. For higher-volume supplier relationships, a portal improves visibility.
Simple email-based workflow:
- Send PO via email with a reply-by date (2 business days) asking the supplier to confirm: PO number, items, quantities, and expected ship date
- When the supplier replies, update the PO status in your system to "Acknowledged"
- If the supplier can't fulfill the full quantity, get a partial commitment in writing
ATUM Supplier Portal (WooCommerce):
- ATUM Premium includes a supplier-facing portal where suppliers receive POs, acknowledge them, and enter tracking numbers
- Go to ATUM → Suppliers → [Supplier] → configure portal access credentials
Cin7 Core Supplier Portal:
- Cin7 Core includes a supplier portal where vendors can view POs, confirm delivery dates, and upload shipping documents
- Invite suppliers in Cin7 Core → Settings → Suppliers → Invite to Portal
对于通过邮件合作的供应商,简单的确认邮件工作流即可满足需求。对于高交易量的供应商合作关系,门户可提升可见性。
简单邮件工作流:
- 发送采购订单邮件时附带回复截止日期(2个工作日),要求供应商确认:采购订单编号、商品、数量以及预计发货日期
- 当供应商回复后,在系统中将采购订单状态更新为“已确认”
- 如果供应商无法全额供货,需获取书面的部分供货承诺
ATUM供应商门户(WooCommerce):
- ATUM付费版本包含供应商端门户,供应商可在此接收采购订单、确认订单并输入跟踪单号
- 进入ATUM→供应商→[对应供应商]→配置门户访问凭证
Cin7 Core供应商门户:
- Cin7 Core包含供应商门户,供应商可在此查看采购订单、确认交货日期并上传货运单据
- 在Cin7 Core→设置→供应商→邀请进入门户中邀请供应商
Step 5: Track goods receipt and update inventory
步骤5:跟踪货物接收并更新库存
When a shipment arrives from a supplier:
- Match the packing list to the purchase order — check every line item's quantity
- Identify any discrepancies:
- Short shipment: supplier sent fewer units than ordered → update PO with received qty, leave PO "open" for the balance
- Damaged goods: record separately; do not put damaged inventory into your sellable stock
- Wrong items: contact supplier immediately with photos for credit memo
In QuickBooks:
- Open the PO → click "Receive Items" → enter actual received quantities
- QuickBooks creates a bill for the received quantity automatically
In Cin7 Core / ATUM:
- Navigate to the PO → click "Receive Stock" → enter quantities received per line
- Inventory updates automatically in Shopify/WooCommerce/BigCommerce
当供应商的货物到达时:
- 将装箱单与采购订单核对——检查每一项商品的数量
- 识别任何差异:
- **短装:**供应商发货数量少于订单数量→更新采购订单的已收货数量,保持采购订单为“未结”状态以等待剩余货物
- **损坏商品:**单独记录;不要将损坏库存计入可售库存
- **错发商品:**立即联系供应商并提供照片以获取信用备忘录
在QuickBooks中:
- 打开采购订单→点击“接收商品”→输入实际收货数量
- QuickBooks会自动为已收货数量生成账单
在Cin7 Core / ATUM中:
- 进入采购订单→点击“接收库存”→输入每行商品的收货数量
- Shopify/WooCommerce/BigCommerce的库存将自动更新
Step 6: Calculate and review vendor performance scorecards
步骤6:计算并审核供应商绩效评分卡
Run vendor scorecards quarterly to identify underperforming suppliers and support negotiation.
Key metrics:
| Metric | Definition | Target |
|---|---|---|
| On-time delivery rate | % of POs where actual receipt date ≤ expected delivery date | > 90% |
| Fill rate | Total units received / total units ordered across all POs | > 95% |
| Defect rate | Damaged/incorrect units received / total units received | < 2% |
| Lead time accuracy | Actual lead time vs. quoted lead time | ± 2 days |
Calculate from your PO system:
In QuickBooks, export PO data to a spreadsheet and compute these metrics. In Cin7 Core and ATUM, built-in vendor reports provide these metrics automatically.
每季度运行供应商评分卡,以识别表现不佳的供应商并为谈判提供支持。
关键指标:
| 指标 | 定义 | 目标 |
|---|---|---|
| 准时交货率 | 实际收货日期≤预计交货日期的采购订单占比 | > 90% |
| 订单满足率 | 所有采购订单中已收货总数量/下单总数量 | > 95% |
| 缺陷率 | 已收到的损坏/错发商品数量/已收货总数量 | < 2% |
| 交货周期准确性 | 实际交货周期与报价交货周期的差异 | ± 2天 |
从采购订单系统中计算:
在QuickBooks中,将采购订单数据导出到电子表格并计算这些指标。在Cin7 Core和ATUM中,内置的供应商报告会自动提供这些指标。
Custom / Headless — vendor scorecard calculation
定制化/无头系统——供应商评分卡计算
typescript
async function calculateVendorScorecard(params: {
vendorId: string;
periodDays: number;
}): Promise<{
onTimeRatePct: number;
fillRatePct: number;
defectRatePct: number;
overallScore: number; // 0–100
}> {
const since = new Date(Date.now() - params.periodDays * 86400000);
const pos = await db.purchaseOrders.findAll({
vendor_id: params.vendorId,
status: { in: ['received', 'partial'] },
created_at: { gte: since },
});
if (pos.length === 0) return { onTimeRatePct: 0, fillRatePct: 0, defectRatePct: 0, overallScore: 0 };
// On-time: PO received on or before expected delivery date
const onTimeCount = pos.filter(po => po.received_at && po.received_at <= new Date(`${po.expected_delivery}T23:59:59Z`)).length;
// Fill rate: total received / total ordered
const allLines = await db.poLines.findByPoIds(pos.map(p => p.id));
const totalOrdered = allLines.reduce((s, l) => s + l.quantity_ordered, 0);
const totalReceived = allLines.reduce((s, l) => s + l.quantity_received, 0);
// Defect rate: damaged units / total received
const totalDamaged = await db.damagedReceipts.sumByVendorAndPeriod(params.vendorId, since);
const onTimeRatePct = (onTimeCount / pos.length) * 100;
const fillRatePct = totalOrdered > 0 ? (totalReceived / totalOrdered) * 100 : 0;
const defectRatePct = totalReceived > 0 ? (totalDamaged / totalReceived) * 100 : 0;
// Weighted score: on-time 40%, fill rate 40%, defect-free 20%
const overallScore = Math.round(
(onTimeRatePct * 0.4) + (fillRatePct * 0.4) + ((100 - defectRatePct) * 0.2)
);
return { onTimeRatePct, fillRatePct, defectRatePct, overallScore };
}typescript
async function calculateVendorScorecard(params: {
vendorId: string;
periodDays: number;
}): Promise<{
onTimeRatePct: number;
fillRatePct: number;
defectRatePct: number;
overallScore: number; // 0–100
}> {
const since = new Date(Date.now() - params.periodDays * 86400000);
const pos = await db.purchaseOrders.findAll({
vendor_id: params.vendorId,
status: { in: ['received', 'partial'] },
created_at: { gte: since },
});
if (pos.length === 0) return { onTimeRatePct: 0, fillRatePct: 0, defectRatePct: 0, overallScore: 0 };
// On-time: PO received on or before expected delivery date
const onTimeCount = pos.filter(po => po.received_at && po.received_at <= new Date(`${po.expected_delivery}T23:59:59Z`)).length;
// Fill rate: total received / total ordered
const allLines = await db.poLines.findByPoIds(pos.map(p => p.id));
const totalOrdered = allLines.reduce((s, l) => s + l.quantity_ordered, 0);
const totalReceived = allLines.reduce((s, l) => s + l.quantity_received, 0);
// Defect rate: damaged units / total received
const totalDamaged = await db.damagedReceipts.sumByVendorAndPeriod(params.vendorId, since);
const onTimeRatePct = (onTimeCount / pos.length) * 100;
const fillRatePct = totalOrdered > 0 ? (totalReceived / totalOrdered) * 100 : 0;
const defectRatePct = totalReceived > 0 ? (totalDamaged / totalReceived) * 100 : 0;
// Weighted score: on-time 40%, fill rate 40%, defect-free 20%
const overallScore = Math.round(
(onTimeRatePct * 0.4) + (fillRatePct * 0.4) + ((100 - defectRatePct) * 0.2)
);
return { onTimeRatePct, fillRatePct, defectRatePct, overallScore };
}Best Practices
最佳实践
- Use your accounting software (QuickBooks, Xero) for POs if you're under $1M — it integrates AP and inventory receiving in one tool; you don't need a separate vendor portal at this stage
- Set expected delivery dates conservatively — add the vendor's quoted lead time plus a 2-day buffer; this improves on-time metrics without changing actual performance
- Track partial receipts carefully — many POs arrive in multiple shipments; record the received quantity per line and keep the PO open until fully received
- Record defects at the dock, not later — damaged goods must be logged at receiving time with photos; retrospective claims are harder to substantiate with suppliers
- Share scorecards with suppliers quarterly — suppliers who see their metrics improve; use the data in pricing negotiations ("your fill rate dropped to 88% last quarter")
- 如果年收入低于100万美元,使用会计软件(QuickBooks、Xero)处理采购订单——它将应付账款和库存收货集成在一个工具中;此时你不需要单独的供应商门户
- 保守设置预计交货日期——在供应商报价的交货周期基础上增加2天缓冲期;这无需改变实际表现即可提升准时率指标
- 仔细跟踪部分收货——许多采购订单会分多批到货;记录每行商品的收货数量,保持采购订单为未结状态直到全部收货
- 在收货时记录缺陷——损坏商品必须在收货时记录并拍照;事后向供应商索赔更难举证
- 每季度与供应商共享评分卡——看到自身指标的供应商会有所改进;将数据用于价格谈判(如“上个季度你的订单满足率降至88%”)
Common Pitfalls
常见陷阱
| Problem | Solution |
|---|---|
| PO total doesn't match the supplier's invoice | Store unit costs at the PO line level and never update them retroactively; price discrepancies become AP exceptions flagged for review |
| Supplier ships to the wrong address | Include the warehouse address on every PO and in the portal confirmation screen; verify the ship-to address has been acknowledged |
| Inventory incremented before damaged goods are removed from the count | Only increment inventory for receipts with condition = 'good'; damaged goods go to a quarantine count, not sellable stock |
| Scorecard shows high on-time rate but stock still runs out | On-time rate measures delivery vs. expected date, not vs. actual demand need date; also track "stockout events attributed to late delivery" as a separate metric |
| 问题 | 解决方案 |
|---|---|
| 采购订单总额与供应商发票不符 | 在采购订单行项目级别存储单位成本,绝不追溯修改;价格差异将标记为应付账款异常进行审核 |
| 供应商发货至错误地址 | 在每份采购订单和门户确认界面中包含仓库地址;确认供应商已认可收货地址 |
| 库存在损坏商品从计数中移除前已增加 | 仅对状态为“完好”的收货增加库存;损坏商品计入隔离库存,而非可售库存 |
| 评分卡显示准时率高但仍出现缺货 | 准时率衡量的是交货日期与预计日期的对比,而非与实际需求日期的对比;需额外跟踪“因延迟交货导致的缺货事件”作为单独指标 |
Related Skills
相关技能
- @dropshipping-integration
- @order-management-system
- @multi-channel-selling
- @demand-forecasting
- @accounts-payable-management
- @dropshipping-integration
- @order-management-system
- @multi-channel-selling
- @demand-forecasting
- @accounts-payable-management