不必一个字段一个字段地拼出发票,可以直接从工作本身开始。创建发票接受一批选中的任务或时间记录,算出它们属于哪个客户,然后打开已经填好的新建发票表单。
操作在哪里
入口有两类,而每一类都出现在不止一个位置。
从任务出发:
从已记录时间出发:
- 时间跟踪列表——选中若干条记录,批量工具栏就会给出创建发票。
- 同一列表的行内操作,一次处理一条记录。
没有单独的“为运行中的计时器开票”这项操作。入口始终是一批选中的任务或时间记录。运行中的记录会与其余记录一同列出,所以它可以是选中范围的一部分;它的小时数按你操作的那一刻计算。
一行发票明细开的是一项任务
这是最容易让人措手不及的一点:一行明细开的是一项任务,绝不是秒表上的读数。
从任务列表出发,每个选中的任务变成一行。从时间跟踪出发,选中的记录会先按任务分组——分散在三个任务上的十条记录变成三行,小时数各自加总——而这些记录本身绝不会出现在发票上。
关联到多个任务的记录,会把它的完整时长计入其中每一个任务,这和 Ceum 其他地方按任务统计的算法一致。因此各明细行加起来的小时数可能多于你实际投入的时间,这也是对话框逐行列出小时数、而不是只给一个总数的原因。确认之前请先核对。
哪些无法开票
任务只能通过一个有客户的项目来开票。这一条规则带来三种把选中行排除在外的理由:
- 没有客户——该任务不在任何项目中,或只在没有客户的项目中。没有任何对象可以开票。
- 没有任务——没有关联任务的时间记录。没有可以计费的对象,因此所有这类记录会折叠成一行,说明有多少条被排除。
- 属于另一个客户——该行完全可以开票,只是不能开给你选定的这个客户。换一个客户,它就会和那些随之变成别人工作的行互换位置。
被排除的行始终会显示出来,以灰色呈现并写明原因,绝不会被悄悄丢掉。它们无法被恢复,因为再怎么点击也无法把它们放进这张发票。这与你自己移除的行不同,后者仍可恢复。
点击之后会发生什么
选中范围有三种解析结果。
只有一个客户,且没有任何一项被排除。 对话框会被跳过,预填好的表单直接打开。对单行操作通常就是这种结果,因为一项任务一般只对应一个客户。
涉及多个客户,或有内容被排除。 会先打开一个对话框。它带有一个开票对象选择器(只涉及一个客户时则是一个普通标签)、一张列出每一行及其客户、已记录小时数与原因的表格,以及每行的移除/恢复操作。表格下方是明细行数、已记录时间总计、你移除的行数,以及永远无法进入这张发票的行数——刻意分成几个独立的数字。只有在每一行都有价格时才会出现预估总额;只要有一行没有价格,预估就会隐藏,而不是给出错误的数字。创建发票用于确认。
没有任何可开票的内容。 该操作显示为灰色,悬停时给出原因,而不是把它藏起来。
表单打开时带着什么
- 描述——任务名称。
- 数量——已记录的小时数,四舍五入到两位小数。没有记录时间的任务同样会有一行,数量为 1,由你定价。
- 单价——解析出的小时费率。当链条中各层级都没有设置费率时,单价与行金额会留空由你填写,而不是写成零——零是一个真实的费率,含义是“不计费”。费率如何解析,参见小时费率。
- 税率——你在品牌发票中的默认税率,如果设置了的话。
- 货币——为整张发票解析一次,而不是逐行解析,因为一张发票以单一货币开具。
- 客户——其名称、电子邮件与地址会被带过来。
- 项目——只有当所有开具的明细行共用同一个项目时才填入。
- 发票编号——从不自动生成。表单打开时该字段是空的。
在你保存之前什么都不会写入
这只是一个预填流程,仅此而已。确认对话框会带你跳转到已填好字段的新建发票表单——它不会创建发票、不会更改任务,也不会碰任何时间记录。不保存就离开表单,工作区会和之前完全一样,而那些任务或记录仍在你来的那个页面上保持选中。
方案限制
以这种方式创建发票,和其他任何创建途径一样计入你方案的发票上限。达到上限后该操作会显示一把锁,点击会打开方案页面,而不是表单。参见方案与账单。
提示与边界情况
- 在表单上更换客户会清除任务关联。 那些明细行是按属于原客户项目的任务定价的,因此这些关联会被移除,而不是指向错误的对象;项目也会随之清空。单独更换项目同样会清除任务关联——重新选中已经选定的那个项目则不会。
- 覆盖值在降级后继续生效。 无论你使用哪个方案,解析都会读取各层级已保存的值;只有设置客户或项目的覆盖值才是付费操作。
- 已记录时间加载失败时流程仍会继续。 会有提示说明这一点,明细行到达时小时数由你手动填写,而不是让操作直接失败。
- 切换客户时移除记录会重置。 在你第一次选择下属于另一个客户的行,在第二次选择下可能变成可开票,因此对话框会重新开始记录被移除的行,而不是藏起一行你从未移除过的内容。