新版表头(订单列表导出)
{{ s.name }}
自定义表头(订单自定义导出)
{{ s.name }}
已支持(抖店「订单自定义导出」108 列)
{{ s.name }}
未支持(请走「订单原始表」)
{{ s.name }}
武汉运费账单
顺丰账单
地区运费规则
理赔原始表
期初单价
出入库原始表
库存月快照
采购原始表(已停用)
退货记录
出库订单明细
出库产品明细
出入库明细
发货订单
采购单价
百优仓账单
出库产品明细
成本补差表
入库明细
其他出库明细
长沙退货
出库明细
全部
快递账单
{{ s }}
异常费用
{{ s }}
⚠ 加收>{{ (meta.wh_freight||{}).surcharge_std || 0.4 }}
费率卡(工作簿「地区运费」sheet,调价改 WH_WUHAN_RATES 常量)
这里只是基础资料;按这张卡逐行核对账单的结果在「武汉(百侣)运费表 → 核对」tab
特殊类型(橙色四列):物流公司为
{{ ((wwc.data || {}).special_carriers || []).join(' 或 ') }} 且收货省为
宁夏 / 青海 时,0.5/1/2/3kg 四档改按橙色价核;没有首重/续重,>3kg 仍不参与核对。
其余承运商(含圆通)一律走左侧正常卡。
| 项 目 | 行次 | {{ (tk.period||'').slice(5) }}月 | 公式 / 取数说明 |
|---|---|---|---|
| {{ r.label }} | {{ r.no || '' }} |
|
| 项 目 | 订单(越南盾) | 订单(人民币) | 样品(越南盾) | 样品(人民币) | 合计(越南盾) | 合计(人民币) |
|---|---|---|---|---|---|---|
| {{ r.label }}
|
{{ r.vnd ? tkInt(r.o) : tkNum(r.o) }} | {{ tkNum(r.oc) }} | {{ r.vnd ? tkInt(r.s) : tkNum(r.s) }} | {{ tkNum(r.sc) }} | {{ r.vnd ? tkInt(r.a) : tkNum(r.a) }} | {{ tkNum(r.ac) }} |
| 科目 \ 结算月 | {{ m }}(₫) | {{ m }}(元) | 合计(₫) | 合计(元) |
|---|---|---|---|---|
| {{ r.label }}
|
{{ tkInt((r.cells[m]||{}).vnd) }} | {{ tkNum((r.cells[m]||{}).cny) }} | {{ tkInt(r.total.vnd) }} | {{ tkNum(r.total.cny) }} |
| 项 目 | 行次 | {{ (tth.period||'').slice(5) }}月 | 公式 / 取数说明 |
|---|---|---|---|
| {{ r.label }} | {{ r.no || '' }} |
|
| 项 目 | 订单(泰铢) | 订单(人民币) | 样品(泰铢) | 样品(人民币) | 合计(泰铢) | 合计(人民币) |
|---|---|---|---|---|---|---|
| {{ r.label }}
|
{{ tthNum(r.o) }} | {{ tthNum(r.oc) }} | {{ tthNum(r.s) }} | {{ tthNum(r.sc) }} | {{ tthNum(r.a) }} | {{ tthNum(r.ac) }} |
| 科目 \ 结算月 | {{ m }}(฿) | {{ m }}(元) | 合计(฿) | 合计(元) |
|---|---|---|---|---|
| {{ r.label }}
|
{{ tthNum((r.cells[m]||{}).thb) }} | {{ tthNum((r.cells[m]||{}).cny) }} | {{ tthNum(r.total.thb) }} | {{ tthNum(r.total.cny) }} |
| 项 目 | 行次 | {{ (sp.period||'').slice(5) }}月 | 公式 / 取数说明 |
|---|---|---|---|
| {{ r.label }} | {{ r.no || '' }} |
|
| 项目 | {{ (m||'').slice(5) }}月 | 合计 | 公式 / 取数说明 | ||
|---|---|---|---|---|---|
| 越南盾 | 金额 | 越南盾 | 金额 | ||
| {{ r.label }} | {{ spInt((r.cells[m]||{}).vnd) }} | {{ spNum((r.cells[m]||{}).cny) }} | {{ spInt(r.total.vnd) }} | {{ spNum(r.total.cny) }} | |
| 项目 | 越南盾 | 金额 | 公式 / 取数说明 |
|---|---|---|---|
| {{ r.label }} |
{{ spInt(r.vnd) }} | {{ spNum(r.cny) }} | |
| {{ sp.ads.total.label }} | {{ spInt(sp.ads.total.vnd) }} | {{ spNum(sp.ads.total.cny) }} |
成本口径差额 {{ spNum(sp.final.cost_diff.diff) }} 元
—— 本表成本合计 {{ spNum(sp.final.cost_diff.order_side) }},总表「产品成本」{{ spNum(sp.final.cost_diff.pl_side) }}。
{{ sp.final.cost_diff.note }}
|
{{ c[1] }}
|
|||||||
|---|---|---|---|---|---|---|---|
| {{ (r.order_time||'').slice(0,16) }} | {{ r.oid }} | {{ r.status_cn }} | {{ spInt(r.sale) }} | {{ spNum(r.cost) }} | {{ r.paid == null ? '——' : spInt(r.paid) }} | {{ r.alloc == null ? '——' : spInt(r.alloc) }} |
|
| 生效月 | 汇率 | 备注 | 最后修改 | 操作 |
|---|---|---|---|---|
| {{ r.eff_month || '期初档' }} | {{ (r.rate_mil||0)/1000 }} | {{ r.note }} | {{ r.updated_at }} | |
| 还没登记任何一档,当前用的是内置期初值 {{ (sp.fx.seed_mil||0)/1000 }} | ||||
{{ record.sku_id }} 这个月出库 {{ fmt(Math.abs(record.out_qty)) }} 件,
系统算不出它的成本价:
{{ record.why }}
{{ record.why }}
费率表还没有任何一档,当前报表用的是代码内置的期初值
(快递 {{ (vf.rateSeed.ship_mil||0)/1000 }} / 大货物流 {{ (vf.rateSeed.bulk_mil||0)/1000 }} / 包装盒 {{ (vf.rateSeed.box_mil||0)/1000 }} 元)。
登记一档就会接管它。
已人工指定(撤销也会留痕 —— 硬删后无法解释成本为何变过又变回来)
将影响 {{ thwPfx.nos.length }} 个出库单号下的所有行。
按单号整单改 —— 同一单的多行是一次出库的不同货品,劈到两个月的话报表上看不出来。
账期决定这批货算进哪个月的报表,改动会记进操作日志;改过的行在账期列上带「人工」标记,
原推导值留着、随时可改回。
{{ record.out_orders_adj ? (record.out_orders_adj > 0 ? '+' : '') + record.out_orders_adj : '—' }}
补差超出,按 0 计费
{{ record.out_note }}
{{ record.out_orders_adj_c4 ? fmt(record.out_orders_adj_c4 / 10000) : '—' }}
{{ record.out_amt_note }}
费率表还没有任何一档,当前报表用的是代码内置的期初值
(退货快递 {{ (thwfee.rateSeed.ret_ship_mil||0)/1000 }} / 出库快递 {{ (thwfee.rateSeed.ship_mil||0)/1000 }} /
大货物流 {{ (thwfee.rateSeed.bulk_mil||0)/1000 }} / 包装盒 {{ (thwfee.rateSeed.box_mil||0)/1000 }} 元)。
登记一档就会接管它。
已指定的归属(人工改动台账)
这是本页唯一「人可以直接改报表数字」的通道;标可删除的说明补齐数据后已能自动匹配,覆盖已多余
还没有人工指定过归属
这三笔都是人工填的,系统算不出来。填在「店铺 × 订单月」这一个格子上。
店铺
订单月
退货单数 进退货快递费
退货快递费=退货单数 × 单价。它不是流水里的退货行数:流水记的是"退回来的货品",
单数记的是"退回来的包裹",一个包裹可能装多个货品。
出库单数补差 进出库快递费与包装盒
出库单数是系统按【泰国仓发货订单原始表·订单编号】去重数出来的,这一格是补它的差,
可正可负;出库快递费与包装盒都按「出库单数 + 补差」算。
出库单数补差金额(元) 只登记,不进任何费用
这一笔只做登记:不进出库快递费、不进包装盒、不进大货物流费,
也不进「TikTok 泰国财务报表」的成本四项。表格底部那一行是本列自己的合计。
来源:{{ thwfee.attrRow.src_label }} ·
这一行没有单号,按备注原文归属
单号:{{ thwfee.attrRow.match_key || '(空)' }}
备注:{{ thwfee.attrRow.note }}
备注:{{ thwfee.attrRow.note }}
选中 {{ (thwfee.sel || []).length }} 行,去重后 {{ thwAttrBatchPairs.length }} 个归属键
(同一个键的多行共用一条归属;没有单号的行按备注原文成键,
所以备注相同的几行会一起归走)。这批会一起归到下面填的店铺与月份,理由也共用一条。
🟡 补齐订单数据即可自动消(不需要人工归属)
本类不存在「补数据即可消」——
平台只给了总费用、没拆任何费用明细,补多少数据、加多少列都补不上,
只能在下面那一区人工指定归属科目
按订单号号段与订单表已覆盖的范围比 ——
TikTok 订单号内含时间戳、单调递增,故能逐单指名该补哪个方向的月份;
号段落在已覆盖区间内却查不到的,补文件也消不掉,会归到下面那一区
按「品名的历史归属店铺」+「该店订单表已覆盖的下单月」推断该补什么——
订单表按下单月归档,故这里比对的是下单月而不是发货月
—— 本类没有这一档
✓ 没有「补数据即可消」的未匹配
🟠 兜底归属复核(系统按商品名猜的,可改)
{{ fmt(unmD.review_rows || 0) }} 单 / {{ fmt(unmD.review_cost || 0) }} {{ unmUnit }}
备注只说「样品/寄样」而商品名认不出任何品牌 → 已按兜底店铺计入。
这部分钱已经算进某家店了(不是挂账),所以不计入上面的未匹配金额;不对就在这里改。
已选 {{ unm.rvSel.length }} 单
批量指定归属
另有 {{ fmt(unmD.review_truncated) }} 单未展示(处理完本批刷新即补上)
🔴 需人工指定归属
共 …{{ unmFiltered ? '已筛出' : '共' }} {{ fmt(unmManualRows.length) }} 行 / {{ fmt(unmFilteredTotal) }} {{ unmUnit }}
清空列筛选
全选{{ unmFiltered ? '筛选结果' : '' }}({{ fmt(unmManualRows.length) }} 行)
已选 {{ unm.sel.length }} 行
批量指定归属
导出 xlsx
另有 {{ fmt(unmD.truncated) }} 行未展示(导出 xlsx 可看全量;处理完本批刷新即补上)
各列表头 ⏷ 可筛选/排序(筛选与排序在已加载的前 500 单内进行);改筛选会清空已勾选,防隐藏行被一并归属
{{ c.cause }}:{{ fmt(c.rows) }} 行 / {{ fmt(c.fee != null ? c.fee : c.cost) }} {{ unmUnit }}
当前列筛选下没有行——
清空列筛选 (共 {{ fmt((unmD.need_manual || []).length) }} 行)
✓ 没有需要人工归属的行
已指定的归属(人工改动台账)
这是系统里唯一「人可以直接改报表数字」的通道——金额影响列记录每次改动挪动了多少钱;
标「可删除」的说明补了数据后已能自动匹配,覆盖已多余
尚未指定过任何归属
消除历史(最近 {{ unm.ledger.resolved.length }} 条)
未匹配台账:每单记首次出现时间与消除方式(补数据自动消 / 人工指定 / 原始行删除)——
成本"变过又变回来"从此有痕可查;侧栏徽标与挂账天数同源于此
人工改钱台账 · 共 {{ alog.total }} 条
凡是人直接改过报表数字的都在这儿:人工指定归属、手工调整行、改成本价、改快递费率。
每条记「谁、什么时候、把什么改成了什么、理由、影响多少钱」
{{ s.label }}({{ s.n }})
查询
🩺 匹配健康度
核对中(需遍历各店守恒/成本表交叉核对,稍候)…
🩺 匹配健康度
异常 {{ unm.health.bad }}
警告 {{ unm.health.warn }}
计算于 {{ unm.health.age_sec > 60 ? Math.floor(unm.health.age_sec / 60) + ' 分钟前' : '刚刚' }}
({{ unm.health.computed_at }})
重算
系统里还有一批跨表匹配,失配后会自动降级换个规则继续算、页面上看不出来;这里把它们的实况列出来
导入台账
「未匹配」最常见的上游成因是该月订单表被静默剔了一半——
归属过滤剔除、零额守卫拦截、覆盖重导清库此前只在弹窗闪一次,现在留档可查
刷新台账
暂无导入记录(本功能 2026-07-26 上线,只记录此后的导入)
{{ rt.asOfApplied || '期初' }} 当天生效的价格
重量向上取整;超 3kg 按 首重 + 续重 × 重量取整 算。
点表头=配这个方案管哪些快递、哪些省;点价格=改价 / 看历史。
· 角标 = 这个格子有历史价。灰格 = 该省不在这个方案里。
服务费规则
与省份无关,只看重量;核对时逐单比对账单「服务费」列
{{ x.label }}:{{ x.price == null ? '未配置' : fmt(x.price) }}
({{ x.eff_date || '期初' }} 起)
匹配检查
改完价,用真实的一单验一下命中哪个方案
快递公司
省份
重量 kg
发货日
{{ rt.quote ? (rt.quote.ok ? ('¥' + fmt(rt.quote.total)) : '缺价') : '—' }}
{{ (rt.quote || {}).why || '选好四项自动试算' }}
怎么接 四步,一次就好 —— 下面那段配置里的条目名与地址是这条通道自己的,别跟另一条混用
复制右边这段,粘进 WorkBuddy 的 mcp.json(别的 MCP 客户端同理)。
第一次连接时,浏览器会自动弹出一张授权页。
在那一页上用你自己的 BL 账号点一下「授权」—— 它拿到的权限就是你此刻的权限,一分不多。
想收回,随时到下面那张表里点吊销,立刻失效、不可恢复。
{{ mcpConf() }}
手工签静态令牌那条路已经关掉(2026-09-10)——
原先那种明文令牌不会过期、也不绑定客户端;而登录授权拿到的这枚跟着你的账号走:
你的权限变了它立刻跟着变,停用账号它当场失效。历史上签过的那些在下面照常看得见,也随时能吊销。
那套离线算账脚本 2026-09-10 整体退役。装过的人请把本机的
~/.workbuddy/skills/bl-finance-report/ 目录删掉 ——
留着它会接着按退役那天的口径算,而算出来的数看着完全正常,不会报错。
要算账走上面这条 MCP:报表由 BL 现算,口径永远是线上这一版。已授权的应用 一行一个连过来的客户端。「现在能用」是按授权人此刻的部门权限实时算的,不是授权那天的快照
这条通道的边界 四条都是结构性的,不是设置项
只读助手改不了 BL 里的任何东西 —— 不能建档、不能刷新、不能改标记。要写还是回页面上点。
权限跟着你走能调什么,按授权人当前的部门权限每次现查。权限被摘掉,同一条连接当场就调不动。
给得出什么{{ (mcpChannel && mcpChannel.desc) || '' }}
每次都留痕谁在什么时候取走了什么,都记在「调用记录」页上,留档 90 天。
{{ t.name }}
{{ t.menu_cn }}
会写数据
{{ t.body || t.desc }}
你可以这样问
{{ q }}
注意
{{ n }}
参数
必填
说明
{{ p.name }}
必填选填
{{ p.desc || '—' }}
不用传参,直接调。
正在取这条通道的工具契约…
你当前的部门权限在这条通道上一个技能都用不了 ——
连上去也是空的。找管理员在「系统管理 → 部门管理」里补权限。
这条通道还没有人调用过。接上之后,每一次取数都会记在这里。
加载失败:{{ pb.loadErr }} —— 这一页现在显示的不是打法库的真实内容,别照它判断。
重试
正在加载…
这个模块下还没有打法。清掉筛选
打法库还是空的。点左上角「新建打法」写第一条 —— 助手取不到东西时会明确说"没有",不会自己编。
打法库还是空的,而你没有编辑权限。找管理员在「部门管理」里给你的部门勾上「打法库」。
{{ r.title }}
{{ r.code }}
{{ pbMenuCn(r.menu) }}
已停用(助手取不到)
复制正文
编辑
{{ r.is_active ? '停用' : '启用' }}
{{ r.summary || '(没写一句话说明 —— 助手靠它判断该不该取这一条)' }}
{{ r.stamp }}
{{ r.body || '(还没有正文)' }}
标识 code —— 助手按它取这一条。建完就别再改:改了等于换了一把键,
助手手上那条引用会当场断掉。只能用小写字母、数字、连字符。
名称(给人看的)
归属模块 —— 决定谁看得见、哪条 MCP 通道取得到。选「通用」则每个人都看得到。
一句话说明 —— 助手靠它判断该不该取这一条正文,写清楚"什么时候用"。
正文 —— 助手会原样读到。写成步骤或模板,越具体越不容易被它自由发挥。
{{ pv.desc }}
店铺罗盘 Cookie精选联盟同步启用
{{ ifShopErr }}
未关联
已同步 {{ ifBuyinN(sh) }} 人
关联了,还没同步
还没有店 —— 点右上「添加店铺」,粘一把抖音电商罗盘的 Cookie 并起个名。
下拉里的候选来自插件同步回来的「我的达人库」,一个店都还没同步过时它是空的 ——
去「商务 → 已建联达人库」同步一次。没关联会阻断本店完整判定:系统会等待本店已建联名单同步,
不会借用其它店的已建联数据。
Cookie 只能人工粘 —— 罗盘登录态是 HttpOnly 的,系统结构上拿不到;
换过密码、换了登录主体都要重新粘。
插件
{{ ifBridgeExt(pv).name }}
v{{ ifBridgeExt(pv).version }}
下载
{{ if2ExtSize(ifBridgeExt(pv).size) }} · {{ bjTimeShort(ifBridgeExt(pv).created_at) }} 上传
插件下载页里还没有「{{ pv.bridgeName }}」——
它得先由管理员传上去({{ '\u0054ikTok 运营 → 浏览器插件 → 插件下载' }} → 上传新版)。
怎么装
下载的 zip 解压到一个长期留着的目录(Chrome 记的是路径,
路径没了插件会静默失效)→
chrome://extensions →
开「开发者模式」→「加载已解压的扩展程序」→ 选那个文件夹。
装完点扩展图标右键「选项」,BL 地址保持默认,把上面签发的令牌粘进去。
换新版时:解压覆盖,再回 chrome://extensions
点那个扩展的 ↻ 重新加载。
前提
{{ pv.bridgeNeed }}
令牌
已有 {{ ifGlobalToks().length }} 枚全域令牌:{{ ifGlobalToks().map(t => t.token_head + '…' + (t.label ? '(' + t.label + ')' : '')).join('、') }}。
管理
还没有全域令牌 —— 点右上「签发插件令牌」,
记得勾上「全域」(灰豚数据是给所有部门的灵感行做增强的,部门令牌只覆盖本部门)。
已有 {{ ifBridgeToks(pv).length }} 枚令牌:{{ ifBridgeToks(pv).map(t => t.token_head + '…' + (t.label ? '(' + t.label + ')' : '')).join('、') }}。
管理 / 再签一枚
还没有令牌 —— 点右上「签发插件令牌」。
签发人必须有「商务」模块的编辑权:令牌能碰哪个模块跟着签发人当前权限走,
被降级或禁用就当场失效。
不要配这个。灰豚是单设备的:服务器拿着同一份 SESSION 去取数时,
灰豚会判定会话异常并把服务器和你的浏览器一起作废(2026-08-14 线上实证:
服务器连打几次接口后,浏览器当场弹「账号已在别处登录」)。
生产上的表现是一天要重新粘 4 次 Cookie。上面那个插件方案就是为了消灭这件事。
这里保留只是因为边车还没退役,配了它 = 把问题重新装回来。
{{ pv.empty || '未配置,点右上「添加」粘贴 Key。' }}
密钥经 Fernet 加密后存独立库,页面不回显明文。状态标签可点击切换启用/停用;停用全部 Key 后该接口回落到各自的免费/环境变量兜底。