Skip to content

固定组合 ​

固定组合是「把一组商品绑成一个价」的最省事做法:一张单 = 一个名称 + 一段起止日期 + 一张明细表,明细里逐行填数量与现价,表头直接给出原价金额与现价金额两个数。它没有分组、没有任选、没有分店范围、没有促销时段,收银端按整体识别——客人买的就是这一套,不做挑选。

入口:促销管理 → 固定组合,页面地址 /admin/Promotion/salesetcasepage/。它和促销方案里的套餐促销是两套独立的东西:不同的表、不同的页面、不同的审核状态,配出来的都是「多商品一口价」,但数据结构完全不同。

一、功能概述 ​

项目说明
单据主表SCtrl_SaleSetCase(方案级),明细表 SCtrl_SaleSetCaseDetail(物料行)
生效判定日期窗口 + 审核标志,没有单据状态机(不走 fBillState)
审核标志主表 fStopSign:0 = 已审核(在用),1 = 未审核(停用)
适用范围没有。一张单对所有门店生效,不能按分店圈定
时段与周期没有。只有开始日期、结束日期,精确到日期
收银端表现按整体识别,子件固定,顾客不选
与套餐促销的分界需要「这组里任选一件」就用套餐促销;内容写死就用固定组合

二、界面布局说明 ​

列表页 ​

固定组合列表页:新增方案按钮、过滤四个标签、关键字与匹配方式、方案编号到总金额八列、下方方案内容区

区域内容
右上蓝色 + 新增方案;工具栏只有 新增方案 / 查询 / 重置三个按钮,没有导出、没有打印、没有回收站
过滤单选标签:未过期(默认)/ 有效 / 未生效 / 全部,点标签即自动查询
关键字一个匹配方式下拉 + 一个输入框。匹配方式:包含 / 等于 / 开头为 / 结尾为 / 不等于 / 不包含 / 介于(默认「包含」);输入框提示「方案编号/名称」
计数行共 N 条,第 1-N 条;无结果时只有 共 0 条,表体显示 暂无数据
列表勾选框 / 行内编辑(铅笔图标,悬停提示「编辑方案」)/ 序号 / 方案编号(蓝色下划线链接)/ 方案名称 / 开始日期 / 结束日期 / 提交人 / 提交日期 / 审核状态 / 总金额;末尾还有一个隐藏的 ID 列
分页默认每页 50 条,可选 20 / 30 / 50 / 100 / 200
下方方案内容 区:列 行号 / 编号 / 条码 / 名称 / 单位 / 单位数量 / 基础数量 / 原价 / 现价 / 总金额;未选单时显示 请选择上方单据查看明细

默认排序是方案 ID 倒序,也就是新建的排最前。

组合方案窗口 ​

点 方案编号 弹出「组合方案 - 方案名称」窗(不是新页签,是浮层里套的一页)。默认只读:

组合方案窗口只读态:返回、编辑、审核、删除四个按钮,方案编号灰底只读,组合明细显示总件数、原价金额、现价金额与暂无物料

位置只读态编辑态
工具栏返回 / 编辑 / 审核 / 删除返回 / 保存 / 审核 / 删除
方案编号只读仍然只读(系统生成,改不了)
方案名称 / 开始日期 / 结束日期 / 方案摘要只读可写,日期换成日期选择器
明细表首列无多一个 # 操作列(+ 加行、- 删行)
明细空态暂无物料暂无物料, + 蓝色 添加物料 按钮

组合方案窗口编辑态:工具栏变为保存,明细表出现操作列与添加物料按钮

统计行 在明细表上方一行:总件数:N 原价金额:X 现价金额:Y元,现价金额橙色高亮。三个数的口径是:

统计算法
总件数明细的行数,不是件数合计
原价金额Σ(原价 × 单位数量)
现价金额Σ 各行 总金额,即 Σ(现价 × 单位数量)
折扣只在「原价金额 > 0 且 现价金额 < 原价金额」时出现在现价金额后面,形如 (85.7%),等于 现价金额 ÷ 原价金额

原价金额 − 现价金额 就是这套组合给客人省的钱。

三、业务操作步骤 ​

新建一个「早餐 15 元」组合 ​

  1. 促销管理 → 固定组合,先在顶栏选好分店(没选分店时点新增会报「未选择分店」)。
  2. 点 + 新增方案。这一步当场就落库:系统取号、生成方案编号、按默认名「新方案」建一张未审核的空单,提示 已新增方案,编号 27xxxxxx,并弹出组合方案窗。
  3. 把 方案名称 从「新方案」改成有意义的名字,例如 早餐A 吐司+牛奶+蛋挞 15元。
  4. 填 开始日期、结束日期,方案摘要 写用途。
  5. 点 保存(保存只写表头这五项)。
  6. 点 编辑 让明细可写 → 点 添加物料,在「选择组合物料」窗里多选要进组合的商品,确定。
  7. 逐行改 单位数量 与 现价,例如三行的现价填 5 / 5 / 5。
  8. 看统计行:总件数:3、原价金额 是三个原价合计、现价金额:15.00元。
  9. 点 审核 → 确认「确定审核该方案吗?」→ 提示 已审核,列表 审核状态 变「已审核」,总金额 落定。

明细的增、删、改是即时落库的:选完物料就写进去了,改一个单元格失焦就提交并提示 已保存,不需要再点【保存】。工具栏的 保存 只管表头五项。

改一张已审核的组合 ​

已审核的单不能直接动。先点 审核 反审核(确认「确定反审核该方案吗?」,提示 已反审核(未审核)),再 编辑 改内容,改完重新审核。反审核期间收银端就查不到这个组合了,尽量放在非营业时段做。

停用与删除 ​

  • 停用 = 反审核(fStopSign 置 1),单据还在,切到 未生效 标签能找到它,随时能重新审核。
  • 删除 = 逻辑删除(确认「确定删除该方案及其全部明细吗?删除后不可恢复。」),主表和明细一起打删除标志。网页端没有回收站、没有还原入口,删完四个过滤标签都查不到它。要恢复只能回客户端 ERP 处理原表。

检索一张老单 ​

过滤 默认停在 未过期,过了结束日期的单不在里面,先切 全部。

注意 关键字只匹配方案名称:输入框虽然写着「方案编号/名称」,但按编号搜是搜不出东西的。

关键字填方案编号 27101926、匹配方式包含、过滤未过期,列表返回共 0 条与暂无数据

要按编号找,就把 方案名称 填进关键字,或者切 全部 后翻页人肉找;也可以从促销效果一类的账表反查。

四、字段与规则详细说明 ​

表头字段 ​

字段落库列可编辑规则
方案编号fCaseNo否系统生成,见下方编号规则
方案名称fCaseName是默认「新方案」;空名过不了审核
开始日期fBeginDay是必填
结束日期fEndDay是必填,保存表头时会归到当天 23:59:59;新增那一张空单存的是「新增时刻 + 1 年」,所以列表里能看到开始与结束带着同一个时分
方案摘要fCaseRemark是自由文本,最长 200
提交人fPostManID否建单时取当前操作员
提交日期fPostDay否建单时刻
审核状态fStopSign否列表列显示 未审核 / 已审核 / 删除
总金额明细汇总否Σ(现价 × 单位数量),只算未停用的明细行

表头校验原文:方案名称不能为空、开始日期不能晚于结束日期、开始/结束日期不能为空。

明细字段 ​

列落库列可编辑规则
编号 / 条码 / 名称 / 单位fInvID、fUnitID否由「选择组合物料」带出;选择器只放有基础单位的商品
单位数量fInputQty是新增行默认 1;填负数或非数字提示 请输入非负数字
基础数量fQty否= 单位数量 × 该单位换算率;选择器限基础单位,所以实际多与单位数量相等
原价fSprice否取该单位的售价,加行时写入
现价fSpecialSprice是组合内单价,新增行默认等于原价;允许填 0
总金额计算列否= 现价 × 单位数量
行号fLine否追加时为当前最大行号 + 1

同一物料在一个组合里不能重复:选择器里勾了已在表里的商品,会提示 跳过 N 个已存在物料。

方案编号怎么来的 ​

27 + 类型标志 1 + 补零的方案 ID + EAN 校验位。例:ID 192 → 27 1 0192 → EAN8 校验位 6 → 27101926。ID 超过 9999 时改用 9 位补零 + EAN13 校验位。方案 ID 与客户端的赠品单共用同一个取号器,所以编号会跳号,这是正常的。

收银端与外卖平台认的组合条码是 set + 方案编号,例如 set27101926。

审核时校验什么 ​

点 审核 会先做完整性检查,任一条不过就整条拒绝:

提示原文触发条件
审核失败:方案名称不能为空名称还是空的
审核失败:开始/结束日期不能为空少填一个日期
审核失败:结束日期不能早于开始日期日期填反
审核失败:组合明细为空,请先添加物料一张明细都没有
审核失败:N 行明细无效(物料/数量/现价)有行的物料为空、单位数量 ≤ 0,或现价为负

反审核不做任何校验,随时能退回去。

四个过滤标签的真实口径 ​

标签实际条件
未过期未删除 且 结束日期 ≥ 今天
有效未过期 且已审核
未生效未过期 且未审核
全部不加任何条件,含已过期的、含已删除的

「未生效」不等于「日期还没到」,它筛的就是未审核的单——和「有效」加起来正好等于「未过期」。想让一张已审核的组合停止生效,只能等结束日期过掉或者反审核,过滤标签本身不改变单据状态。

五、下发与收银端表现 ​

固定组合不走促销方案的快照下发,它随云 POS 商品目录以 setMeals 契约下发。一张单要出现在收银端,四个条件同时成立:

  1. 已审核(fStopSign = 0);
  2. 今天在日期窗口内——判定按天取整比较,不看时分;
  3. 主表与明细都没打删除标志;
  4. 至少有一行在用明细——空壳单不下发,明细行自己也能停用。

所以「审核了但收银台搜不到」通常是今天已经出了日期窗口,或者明细行全被停用了。

下游怎么用这张单
收银端按整体识别,子件固定,顾客不做选择;与套餐促销的「分组任选」相对
外卖平台组合作为可售商品并进商品列表;平台侧扩展码含 set 时按 set + 方案编号 拆套,子行数量按基础数量展开
券池(月饼券等)券类型管理的兑换产品选类别「套餐」时,来源就是固定组合;已停用或已删除的组合不能选,选了报 套餐不存在或已停用
券核销落单核销时展开成「券行 + 子件留痕行」;组合停用报 {券号}:套餐已停用,没有在用子件报 {券号}:套餐无有效子件,无法核销

金额口径有两套,别混 ​

位置用哪个数量
网页端统计行 原价金额 / 现价金额、列表 总金额单位数量
收银端目录的套餐标准价 / 组合价、券池里的原价基础数量

选择器限定基础单位时两者相等,看不出差;一旦组合行用的是换算率不为 1 的单位(历史数据、客户端建的单),网页上显示的金额和收银端算的就不是一个数。核对以基础数量那套为准。

六、典型使用场景 ​

早餐固定组合:内容写死、全天有效 ​

背景:早餐客要的是「一个价拿走一套」,不需要挑,排队时越快越好。 路径:新增方案 → 名称「早餐A 吐司+牛奶+蛋挞 15元」→ 三行商品现价 5/5/5 → 审核。 注意:固定组合没有分店范围,一张单对所有门店生效。只想在几家店跑早餐组合,就得改用套餐促销。

中秋礼盒:绑茶和刀叉成一个价 ​

背景:礼盒要和配件绑成一个整体卖。 路径:新增方案 → 礼盒、茶、刀叉三行 → 现价按整套定价 → 结束日期卡到节前。 注意:要区分直营与加盟、要卡「节前两周的下午」这类条件,固定组合做不到,首选套餐促销;固定组合只能靠日期粗控。

月饼券的奖品挂固定组合 ​

背景:一张券提走一个固定礼盒。 路径:先把组合配好并审核,再到券类型管理的 兑换产品 里选类别「套餐」挂上它。 注意:组合一旦被反审核或删除,券在核销时会被 套餐已停用 直接拦下——发出去的券还在有效期内就不要动这张组合单。

七、权限控制与前置条件 ​

  • 需要「促销管理」的菜单权限;固定组合与促销方案共用同一个权限模块,能看到促销方案基本就能看到它。
  • 组合里的每个商品必须已建档、有基础单位、有售价;选择器只放有基础单位的商品。
  • 新增方案前顶栏要先选好分店,否则报「未选择分店」。
  • 网页端与客户端读写同一张 SCtrl_SaleSetCase;客户端建的组合单在网页端能不能改,以门店实测为准。促销方案那条「只有网页端建的单能回网页端编辑」的规则不套在这里。
  • 折扣金额由收银端按下发的目录在本地计算,网页端只做配置。

八、常见问题 ​

审核提示「审核失败:组合明细为空,请先添加物料」。 原因:点了新增方案、改了名称日期,但一张物料都没加就审核。 处理:编辑 → 添加物料 选商品 → 再审核。

列表里一堆默认名「新方案」、总金额 0.00 的单。 原因:新增方案当场就建单,不是保存才建。开了窗没填内容就 返回,空单已经留在库里了。 处理:逐张打开,确认不是别人正在配的,改好名称与明细,或者直接 删除。空壳单不会下发到门店,但会长期污染检索。

按方案编号搜不到。 原因:关键字只匹配 方案名称,输入框的「方案编号/名称」提示名不副实。 处理:用名称搜;或切 全部 后翻页找。

过滤选了「有效」却一条都没有。 原因:所有单都还没审核。「有效」= 未过期 且已审核,未审核的单在 未生效 标签里。 处理:切 未生效 找到它,打开审核后回 有效。

改了明细但表头还是旧值 / 点了保存没反应。 这是设计如此:明细的增删改即时落库,工具栏的 保存 只写表头五项。 处理:改完明细直接看统计行,数字已经变了;只有名称、日期、摘要需要点【保存】。

提示「方案已审核,请先反审核再编辑」。 原因:已审核的单锁了,表头、明细、加行、删行、删除全都拦。 处理:先 审核 按钮反审核,再改。反审核期间收银端查不到这个组合。

列表看不到某张单,切了「全部」才出现,审核状态是「删除」。 原因:这张单被逻辑删除过。「全部」不加任何条件,所以能把已删除的捞出来看。 处理:网页端没有还原按钮,要恢复只能回客户端 ERP 处理,或者重新建一张。

组合在收银端搜不到。 按第五节的四个条件依次核对:审核状态、今天是否落在起止日期内、明细有没有在用行、有没有误删。日期判定按天取整,结束日期填哪天就到哪天收盘。

同一张组合想给不同门店定不同的价。 固定组合做不到——它没有分店维度。改用套餐促销,或者按门店各建一张单再靠日期窗口错开(不推荐,容易互相覆盖)。