vendor-management

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Vendor 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 StageRecommended ToolWhy
Small (< $1M revenue)QuickBooks Online or Xero + email-based POsQuickBooks 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 UnleashedBoth handle POs, goods receipts, and vendor scorecards with Shopify/WooCommerce/BigCommerce integrations
EnterpriseNetSuite or CoupaFull procurement suite with approval workflows, supplier portals, and compliance tracking
Dropshipping focusDSers, AutoDS, or SpocketSee @dropshipping-integration skill for supplier-specific dropshipping tools
CustomBuild a PO system + supplier portalFor 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):
  1. Install the Cin7 Core connector from the Shopify App Store or via the Cin7 Core integration settings
  2. Cin7 Core syncs Shopify products and inventory — your Shopify stock levels reflect what Cin7 shows as "on hand"
  3. Create purchase orders in Cin7 Core → Purchase → Add Purchase
  4. When goods are received in Cin7 (mark as Received), Shopify inventory updates automatically
Using QuickBooks Online for POs:
  1. Connect QuickBooks to Shopify via the QuickBooks Online app or A2X connector
  2. Create POs in QuickBooks Online → Expenses → Purchase Orders
  3. When goods are received: in QuickBooks, go to the PO and click "Receive" to record the goods receipt
  4. Manually update Shopify inventory after receiving (or use Cin7 Core which does this automatically)
使用Cin7 Core(原DEAR Inventory):
  1. 从Shopify应用商店或Cin7 Core集成设置中安装Cin7 Core连接器
  2. Cin7 Core会同步Shopify的产品和库存——Shopify的库存水平将与Cin7显示的“现有库存”保持一致
  3. 在Cin7 Core中创建采购订单→采购→添加采购订单
  4. 当货物在Cin7中标记为“已接收”时,Shopify库存将自动更新
使用QuickBooks Online处理采购订单:
  1. 通过QuickBooks Online应用或A2X连接器将QuickBooks与Shopify连接
  2. 在QuickBooks Online中创建采购订单→费用→采购订单
  3. 当货物到达时:在QuickBooks中打开采购订单,点击“接收”以记录收货情况
  4. 收货后手动更新Shopify库存(或使用可自动完成此操作的Cin7 Core)

WooCommerce

WooCommerce

Using ATUM Inventory Management (PO module):
  1. Install ATUM Inventory Management from WordPress.org (premium version for PO features)
  2. Go to ATUM → Purchase Orders → Add PO
  3. Select supplier, add products, set expected delivery date
  4. ATUM emails the PO to the supplier automatically
  5. When goods arrive: mark the PO as received in ATUM → WooCommerce inventory updates automatically
Using Cin7 Core:
  1. Connect Cin7 Core to WooCommerce via their integration (Cin7 Core → Integrations → WooCommerce)
  2. Manage all POs and vendor relationships in Cin7 Core; inventory syncs back to WooCommerce
使用ATUM Inventory Management(采购订单模块):
  1. 从WordPress.org安装ATUM Inventory Management(采购订单功能需付费版本)
  2. 进入ATUM→采购订单→添加采购订单
  3. 选择供应商,添加产品,设置预计交货日期
  4. ATUM会自动将采购订单通过邮件发送给供应商
  5. 当货物到达时:在ATUM中将采购订单标记为“已接收”→WooCommerce库存将自动更新
使用Cin7 Core:
  1. 通过Cin7 Core的集成功能将其与WooCommerce连接(Cin7 Core→集成→WooCommerce)
  2. 在Cin7 Core中管理所有采购订单和供应商关系;库存将同步回WooCommerce

BigCommerce

BigCommerce

Using Unleashed:
  1. Install the Unleashed connector from the BigCommerce App Marketplace
  2. Create purchase orders in Unleashed → Purchases → New Purchase Order
  3. Unleashed syncs inventory back to BigCommerce when POs are received
Using Cin7 Core:
  1. Connect via BigCommerce API integration in Cin7 Core settings
  2. Same workflow as Shopify/WooCommerce
使用Unleashed:
  1. 从BigCommerce应用市场安装Unleashed连接器
  2. 在Unleashed中创建采购订单→采购→新建采购订单
  3. 当采购订单标记为已接收时,Unleashed会将库存同步回BigCommerce
使用Cin7 Core:
  1. 在Cin7 Core设置中通过BigCommerce API集成进行连接
  2. 工作流与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中

  1. Go to Expenses → Vendors → [Vendor] → click New Transaction → Purchase Order
  2. Fill in: vendor, PO date, expected ship date, items with quantities and unit costs
  3. Click Save and Send to email the PO directly to the vendor from QuickBooks
  4. Track the PO status in Expenses → Purchase Orders — open POs show as "Open", received as "Closed"
  1. 进入费用→供应商→[对应供应商]→点击新建交易→采购订单
  2. 填写:供应商、采购订单日期、预计发货日期、商品数量和单位成本
  3. 点击保存并发送,直接从QuickBooks将采购订单邮件发送给供应商
  4. 在费用→采购订单中跟踪采购订单状态——未完成的采购订单显示为“未结”,已接收的显示为“已结”

In Cin7 Core / ATUM

在Cin7 Core / ATUM中

  1. Navigate to Purchase → New Purchase Order
  2. Select the supplier; the system pre-fills the supplier's products from your supplier catalog
  3. Adjust quantities based on your reorder quantities (see @demand-forecasting)
  4. Set the expected delivery date: your supplier's lead time + today's date
  5. Send the PO via the built-in email workflow — the PO PDF is attached to the email
  1. 进入采购→新建采购订单
  2. 选择供应商;系统会从供应商目录中预填充该供应商的产品
  3. 根据补货数量调整采购数量(查看@demand-forecasting技能)
  4. 设置预计交货日期:供应商的交货周期+当前日期
  5. 通过内置邮件工作流发送采购订单——采购订单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:
  1. 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
  2. When the supplier replies, update the PO status in your system to "Acknowledged"
  3. If the supplier can't fulfill the full quantity, get a partial commitment in writing
ATUM Supplier Portal (WooCommerce):
  1. ATUM Premium includes a supplier-facing portal where suppliers receive POs, acknowledge them, and enter tracking numbers
  2. Go to ATUM → Suppliers → [Supplier] → configure portal access credentials
Cin7 Core Supplier Portal:
  1. Cin7 Core includes a supplier portal where vendors can view POs, confirm delivery dates, and upload shipping documents
  2. Invite suppliers in Cin7 Core → Settings → Suppliers → Invite to Portal
对于通过邮件合作的供应商,简单的确认邮件工作流即可满足需求。对于高交易量的供应商合作关系,门户可提升可见性。
简单邮件工作流:
  1. 发送采购订单邮件时附带回复截止日期(2个工作日),要求供应商确认:采购订单编号、商品、数量以及预计发货日期
  2. 当供应商回复后,在系统中将采购订单状态更新为“已确认”
  3. 如果供应商无法全额供货,需获取书面的部分供货承诺
ATUM供应商门户(WooCommerce):
  1. ATUM付费版本包含供应商端门户,供应商可在此接收采购订单、确认订单并输入跟踪单号
  2. 进入ATUM→供应商→[对应供应商]→配置门户访问凭证
Cin7 Core供应商门户:
  1. Cin7 Core包含供应商门户,供应商可在此查看采购订单、确认交货日期并上传货运单据
  2. 在Cin7 Core→设置→供应商→邀请进入门户中邀请供应商

Step 5: Track goods receipt and update inventory

步骤5:跟踪货物接收并更新库存

When a shipment arrives from a supplier:
  1. Match the packing list to the purchase order — check every line item's quantity
  2. 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
当供应商的货物到达时:
  1. 将装箱单与采购订单核对——检查每一项商品的数量
  2. 识别任何差异:
    • **短装:**供应商发货数量少于订单数量→更新采购订单的已收货数量,保持采购订单为“未结”状态以等待剩余货物
    • **损坏商品:**单独记录;不要将损坏库存计入可售库存
    • **错发商品:**立即联系供应商并提供照片以获取信用备忘录
在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:
MetricDefinitionTarget
On-time delivery rate% of POs where actual receipt date ≤ expected delivery date> 90%
Fill rateTotal units received / total units ordered across all POs> 95%
Defect rateDamaged/incorrect units received / total units received< 2%
Lead time accuracyActual 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

常见陷阱

ProblemSolution
PO total doesn't match the supplier's invoiceStore 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 addressInclude 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 countOnly 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 outOn-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