录入销售时,您创建的是什么
在 Skyline Nexus 中,一笔销售是 transactions 表中类型为 sell 的一行记录,加上一组销售明细行,再加上零条或多条收款记录。三者被有意分开。发票是对客户的债权;明细行是离开货架的商品;收款是到账的钱。人们在 ERP 中处理销售时的大部分困惑,都源于把这三者当成同一件事——因为在门店柜台上,它们通常发生在同一秒。
对会计而言,它们并不是同一事项。发票形成收入和一笔应收账款;明细行减少存货并形成销售成本;收款结清应收账款并带来现金变动。如果是赊销,收款在几周后才发生,其间应收账款挂在资产负债表上。如果收取了定金,钱在发票出现之前就已到账。系统对所有这些情况都进行了建模,因为它们都真实地发生在企业中。
因此,录入销售时的实际问题不只是按哪些按钮,而是:我此刻正在创建这三者中的哪一个,又有意暂不创建哪一个?答案几乎完全取决于表单上的一个字段——“状态”字段,下文将详细说明。
通往同一种单据的三扇门
左侧菜单中有一个名为“销售”的下拉菜单。其下有若干入口,最终写入的都是同一种单据,区别只在于表单展示多少内容、完成起来有多快。
无论通过哪扇门进入,完成的单据都列在“全部销售”(/sells)下。草稿和报价单有各自的列表——“草稿列表”(/sells/drafts)和“报价单列表”(/sells/quotations)——因为它们还不是真正的发票,不应挤进销售列表。POS 小票也单独列在“POS 列表”(/pos)下。
有一个值得了解的实现细节,因为它能解释某些行为:“添加销售”表单与 POS 界面提交到同一个控制器。它们是同一套保存程序的两个前端。正因如此,无论从哪个界面开始,税务规则、存货规则和总账过账都完全相同;也正因如此,您不应指望账务会区别对待一张 POS 小票和一张通过“添加销售”开具的发票。
- “POS”(/pos/create)是以触控为先的柜台界面。一位客户、一个商品网格、一个收款面板,几秒钟即可完成。它适合零售、餐饮以及任何柜台交易。
- “添加销售”(/sells/create)是完整的发票表单。所有字段都可见:发票方案、币种、付款期限、运费、自定义字段、多行收款。它适合 B2B 发票、基于送货的销售,或任何带信用期的交易。
- “直销”(/sells/direct/create)是“添加销售”的简化版,用于简单直接的发票。
- “添加草稿”(/sells/create?status=draft)和“添加报价单”(/sells/create?status=quotation)仍是同一张表单,只是打开时已预设状态,因此不会误将其定稿。
- “添加销售订单”(/sells/create?sale_type=sales_order)用于记录日后再开票的客户订单。只有在 POS 设置中启用了销售订单时,它才会出现。
填写“添加销售”界面
第一张卡片是“销售详情”。“选择地点”为必填项,而且并非装饰:它决定销售扣减哪里的存货、使用哪一个发票编号序列、提供哪些付款账户;如果您在提交电子发票,它还决定这笔销售是否会被提交,因为电子发票是按地点启用的。“发票方案”控制发票获得的编号。“销售日期”是单据的会计日期,默认为当前时间。“发票币种”和“兑 SAR 汇率”仅在配置了外币销售时才会出现。
“发票编号”被刻意设计得不易触及。它只对拥有编辑发票编号权限的用户显示,而且仅在单据为草稿时显示,并附有提示文字“留空将自动生成”。这是正确的设计。收银员可以随意改写的发票编号不能称为序列,而断号正是税务稽查人员首先注意到的问题。
“客户”卡片用于选择联系人并填写“付款期限”,以数字加“月”或“天”为单位录入。该界面没有单独的到期日字段:到期日由付款期限推算;若留空,则使用该客户自身的默认付款期限。正因如此,在客户档案而非每张发票上设置付款期限,值得花那五分钟。
状态几乎决定一切
“添加销售”中的“状态”字段提供“最终”“草稿”“报价单”和“形式发票”四个选项。它是表单上影响最大的字段,因为几乎所有后续行为都以它为前提。
草稿规则有一个刻意设置的例外,最好在它让您吃惊之前就了解。POS 设置下有一项业务设置,名为“草稿发票扣减库存”,它使纯草稿在保存时即扣减存货,并像一笔已完成的现金销售一样计入销售、利润、销售成本和现金流量报表。该设置默认关闭,产品中的帮助文字也说得很明白。只有当您确实把草稿当作拣货单使用时才开启它,并且要明白,此后草稿在财务上就成了真实的交易。
实用规则是:如果货物已经发出而客户欠您钱,状态就是“最终”。其他任何状态,您记录的都只是一个意向,而非一笔交易。不要把“草稿”当作回避某个您担心的错误的办法,因为一张永远没有定稿的草稿,就是一笔永远不会在任何地方出现的销售。
- “最终”是一张真正的发票。它扣减存货、接受收款、符合过入总账的条件;在启用了电子发票的情况下,还会提交给税务机关。
- “草稿”是尚在进行中的工作。它不过入总账,也不接受收款:对于状态为草稿、报价单或形式发票的销售,保存程序拒绝写入收款记录。默认情况下,它也不影响存货。
- “报价单”是一份报价。什么都不变动:不动存货、不入总账、不收款。
- “形式发票”是一份预开发票性质的单据。与报价单一样,它不引起任何变动。
销售税额如何计算
税额可以在两个层级进入销售,两者的区别很重要。行税是附加在单个商品行上的税率。订单税是对整张单据统一适用的单一税率,在商品网格下方的“订单税”字段中选择。多数企业只用其中一种。在同一张单据上两者并用,正是别处的系统容易出问题的地方,而 Skyline Nexus 正是为防止这一特定错误而设计的。
订单税的计税基础不包括已带有自身行税的明细行。自身税率与表头税率相同的明细行,对表头计税基础的贡献为零。简单地说:系统不会在增值税之上再征增值税,也不会对已按单据税率征税的明细行重复征税。这是发票合计程序中的一条计算规则,而不是需要您记得勾选的设置。
价格是含税还是不含税,是商品的属性,而不是发票的属性。商品表单上有一个名为“销售价格税务类型”的字段,选项为“含税”和“不含税”。明细行随后会同时存储两个数字——税前单价和含税单价——因此发票无需重新计算即可显示任意一种。销售表单上的逐行税率选择器,只有在企业启用了行内税时才会出现;若未启用,税额取自商品和订单税字段。
舍入是一项业务设置,而不是每张发票单独的决定。默认做法是以全精度求和,并在最后对整张发票舍入一次,而不是先对每一行舍入再将舍入后的数字相加。在一张很长的发票上,两种方法相差几个最小货币单位,对客户无关紧要,对必须与总账核对一致的增值税申报却至关重要。
收款是独立于发票的记录
表单底部的“添加付款”卡片是可选的。每一行收款需填写“金额”“付款日期”“付款方式”和“付款账户”,另有可选的“付款备注”。“添加付款行”可让您把一张发票拆分为多种支付方式,适用于客户部分付现金、部分刷卡的情形。收款行下方显示“总应付款”“付款合计”“找零”和“余额”。
如果是赊销,请勾选“赊销 — 全额未付”。这会将收款金额清零、隐藏收款行,并告知保存程序完全跳过创建收款记录。发票照常开出,应收账款成立,款项日后再收。这才是记录赊销的正确方式;录入一行金额为零的收款则不是。
单据上的付款状态是推算出来的,而不是手工填写的。收到的总额不低于发票总额时为已付,已收到部分但未收齐时为部分付款,分文未收时为未付。每次新增、编辑或删除收款时都会重新推算,这正是您应通过销售列表中的“添加付款”(/payments/add_payment/{id})收取后续款项,而不是去编辑发票的原因。为了让数字对上而编辑发票,是一种错误的本能,关于取消和更正交易的指南对此有专门说明。
销售对存货的影响
销售以“最终”状态保存时,每一行都会减少该商品规格在该营业地点的可用数量。不做存货管理的商品会被跳过:对于关闭了存货管理的商品,扣减程序不做任何处理——这就是您可以通过同一界面销售服务和人工而不产生负库存的原因。
随后还会运行第二个步骤,人们很少看到,却应当了解。每一件售出的数量都会被分配到它所来自的具体采购明细行上,而这种分配关系会被保存下来。正是这种对应关系,使销售成本成为真实数字而非估算:系统知道是哪一次、以什么成本采购的货物供应了哪一笔销售。它也是执行批次和有效期规则的依据,并使软件能够在不允许超卖的情况下拒绝超卖。
由于这种分配是在销售发生那一刻建立的,一笔迟了几周才录入、而相关存货在此期间已有变动的销售,其分配结果会与当时录入的不同。这不是缺陷,而是算术使然;这也是“销售当天就录入”最有力的实际理由。
过入总账的内容
一笔“最终”状态的销售会触发一个内部事件,会计模块会监听该事件。如果一切配置到位,该监听程序就会写入一笔会计分录:借记应收账款控制账户,金额为发票全额;贷记收入,金额为不含税金额;贷记销项增值税,金额为税额。如果商品分类设有各自的收入账户,收入会按分类拆分,因此同时销售商品和服务的企业无需任何手工分析,就能在损益表中分别看到两者。
必须同时满足三个条件才会过账;在断定总账出了问题之前,值得把这三个条件都检查一遍。第一,销售必须为“最终”状态。草稿、报价单和形式发票按设计会被跳过。第二,企业必须在 /accounting/settings 的会计设置中开启“自动过账销售交易”。第三,账户必须完成映射:在 /accounting/settings/mapping 中配置应收账款账户、收入账户和销项增值税账户。缺少映射不会损坏任何数据,只会拒绝过账。
还有第四道关口,常在月末让人措手不及:销售日期所在的会计期间必须处于开启状态。如果该期间已关闭或锁定,过账会被拒绝,而不是悄悄倒记到已关闭的月份。这是正确的行为,也正是关闭期间的全部意义所在;但这意味着,日期落在已锁定月份的销售,需要重新开启该期间或更正日期,才能进入总账。
电子发票(适用时)
在沙特阿拉伯,销售以“最终”状态保存时,电子发票模块会自动生成并提交发票。它按营业地点启用,而不是对整个企业启用,因此公司可以让一个地点纳入电子发票制度,而另一个地点尚未注册。配置位于 /zatca/configuration。
提交具有幂等性:系统会记录哪些发票已经提交,不会将同一张发票提交两次。如果提交失败,销售仍会保存。这是有意为之,因为仅仅因为税务机关的接口无法访问就丢失一笔销售,要比晚几分钟提交糟糕得多。提交失败的发票可以从该销售本身重新发送。
发票一经提交,即被锁定不得编辑。系统给出的提示很明确:该发票已经提交,无法再编辑;如需更正,必须开具贷项通知单或借项通知单。这不是软件故意为难。已提交的发票是税务机关现已持有的单据,唯一合法的更改方式就是另开一张单据。
保存之后
该销售会出现在“全部销售”中,显示发票编号、客户、总额、付款状态,以及在适用时的电子发票状态。在行菜单中,您可以查看、打印、添加付款、查看付款,或据此发起退货。位于 /sells/show/{id} 的详情视图在一个页面中显示明细行、税额明细和收款历史;当有人问起某张发票究竟发生了什么时,就应打开这个界面。
销售之后,客户余额会重新计算,因此应收账款会立即显示在客户明细账和应收账款账龄中。如果启用并配置了总账过账,同样的数字也会通过会计模块出现在试算平衡表和资产负债表中。如果两者不一致,通常原因是上述三道过账关口之一,而不是算术错误。
简短核对清单
- 地点是否正确?它决定存货、编号、付款账户和电子发票。
- 状态是否为“最终”?其他任何状态都还不是一笔销售。
- 销售日期是否为销售实际发生的日期,而不是您录入的日期?
- 如果客户尚未付款,是否勾选了“赊销 — 全额未付”,而不是录入一行零金额收款?
- 如果是赊销,是否设置了付款期限,使发票能正确计算账龄?
- 保存之前(而不是之后),合计栏中的税额是否看起来正确?
常见问题
销售中的草稿与报价单有什么区别?
报价单是向客户提出的报价,不引起任何变动:不动存货、不生成总账分录、不收款。草稿是尚未完成的发票,同样不过入总账,也不接受收款。实际中的唯一区别是,名为“草稿发票扣减库存”的业务设置可以让草稿扣减存货并计入销售和利润报表,而报价单永远不会。
为什么我无法为销售添加收款?
只有状态为“最终”的销售才接受收款。对于草稿、报价单或形式发票,保存程序拒绝写入收款记录,因为这些单据并不构成应收账款。将状态改为“最终”,收款部分即可使用。
销售会自动过入总账吗?
只有同时满足三个条件时才会:销售为“最终”状态;会计设置中已开启“自动过账销售交易”;应收账款、收入和销项增值税账户均已映射。月末还有第四道关口:销售日期所在的会计期间必须处于开启状态。只要缺少其中任何一项,销售仍会正确保存,只是不会进入总账。
如果商品已有税率,税额如何计算?
订单税的计税基础不包括已带有自身税额的明细行,而税率与单据税率相同的明细行对单据计税基础的贡献为零。这意味着税上永远不会再加税,同一明细行也永远不会按同一税率被征两次税。价格含税还是不含税,是在商品的“销售价格税务类型”字段中设置的。
发票提交电子发票后还能编辑吗?
不能。发票一经提交即被锁定不得编辑,系统也会明确提示这一点。更改它的正确方式是针对该发票开具贷项通知单或借项通知单,对于税务机关已持有的单据,这是唯一合法的更正方式。
本指南为一般性信息,不构成税务、会计或法律建议。各国规定不同,且会随时间变化;在采取任何行动之前,请向您所在地的税务机关或合格顾问确认最新情况。
准备好在单一工作区上运营您的业务了吗?