许多 IT 项目都延期、超出预算,并且在开发过程中会发生重大变更。这使得为这些项目开具发票成为 IT 中最具挑战性的活动之一。这很有压力——它涉及处理歧义、利益冲突和人为错误。更糟糕的是,项目期间做出的每一个决定都会影响您可以收取的费用。当销售人员错误地吹嘘您的软件“包含此功能”时,您将无法为构建该功能的时间开具发票。当支持人员承认某件事是一个错误,而不是一个不精确的规范时,您将无法为此收费。
本教程解释了一种方法和一个工具来简化此过程。它们共同帮助减少挫折感,改善客户关系,并实现更高的可计费工时百分比。该工具是免费的、开源的,并且可以应用于广泛的组织——从个体 IT 人员到数百万美元的软件业务。
如果您决定成为个体经营者或成立一家初创公司,本文还可以作为如何处理财务任务的指南。它不涵盖项目管理或类似学科;我在这里只关注发票。本文的第一部分描述了开票方法,而第二部分向您展示如何在 ]project-open[(或简称 ]po[ )中应用该方法。
一般开票流程
无论您使用什么工具,都有一个通用的开票流程。一些组织在某些步骤中可能更加或更少正式,但所有基于项目的企业都遵循相同的基本流程

图 1. 开票流程(Frank Bergmann,CC BY-SA 4.0)
分配合同类型
从发票的角度来看,项目最重要的属性是合同类型。您可以按固定价格(时间和其它超支的风险 100% 由您承担)、时间和材料(您按小时收费,客户承担超支的风险)或两者混合(您指定一些具有固定价格的交付物,但合同的其它部分按时间和材料收费)来为服务开具发票。有时,开票与某些目标(里程碑开票)或时间段(定期开票)相关联,但这些只是上述两种合同类型的变体。
敏捷项目往往更多地基于时间和材料,因为每个用户故事的规范(以及因此的工作量)在项目过程中会发生变化。经典的瀑布项目往往更多地基于固定价格,但这取决于项目和谈判地位。以下信息适用于所有合同类型。
定义您的项目
项目定义通常是在执行开始之前的一个单独步骤。如果您想获得报酬,您必须从这里开始,并使用严密的交付物来定义您的项目范围。否则,如果以后出现歧义,您将受制于客户的善意,让他们放你一马。

图 2. 初始项目定义甘特图(Frank Bergmann,CC BY-SA 4.0)
上面的甘特图显示了一个示例 ]po[ 项目。要定义一个具有明确交付物的项目
- 将项目定义为要处理的任务列表。每个任务都必须有一个明确的交付物,以便很容易判断任务是否完成。
- 创建完成任务所需时间的估计值(“工作量”列)。这有助于您跟踪时间超支。第二列“可计费工时”允许您说明不可计费的时间(例如,在售前活动中花费的时间通常不可计费)。
- 如果您对不同任务类型收取不同的费率,请为每个任务定义一个“物料”。例如,您可能对项目管理收取每小时 100 美元,而数据库管理费用为每小时 60 美元。
- 可选:将“资源”分配给每个任务以指定谁应该完成工作。
以这种方式输入信息可以很容易地在以后生成发票和状态报告。
管理项目变更请求、错误和问题
由于无法预见的问题、客户的新想法和许多其它原因,项目往往会在其过程中发生变化。这些变化中的大多数意味着您需要进行额外的工作。重要的是要跟踪这项工作是有偿的还是无偿的。客户扩展请求或范围增加通常是有偿的,而错误或其它问题往往是无偿的。
有不同的方法可以跟踪变更请求 (CR)
- 合同上:将变更请求正式记录为电子邮件或签署的 CR 文档,以便在开票时不存在歧义。
- 操作上:您可能想将 CR 作为任务添加到您的项目中。这就像创建初始任务列表一样。您可能想将其它任务分组在摘要任务下,以表明它们不在原始范围内。
- 错误跟踪器:保留质量问题和错误(通常是非可计费变更)的单独日志也可能很有用。
无论您使用哪种方法,请确保以某种方式将工作标记为任务与错误,以提醒您在以后开具发票时以不同的方式对待它们。
发布定期状态报告
客户希望您提供有关其项目进度的定期信息。这是因为 IT 项目通常会延期并超出预算。这可能是一项令人不快的职责,特别是如果您必须报告超支,但它具有良好的商业意义。
每周状态报告通常包含以下部分
- 您正在处理的任务列表,可以选择包含完成状态
- 您在本报告期内开始处理的任务列表
- 您在本报告期内完成的任务列表
- 您完成上述任务花费这么长时间的原因
获得客户的签字认可
在您可以开具发票之前,您通常需要客户的批准,确认所有交付物都已完成。这可能是整个项目中最困难的阶段,因为它通常涉及协商您在项目中遇到的任何超支的责任。
我建议您在第一次定义项目时就开始考虑这个阶段,以便每个任务都与明确定义的交付物相关联,并且完成状态不会引起争议。您还可以在项目定义期间定义明确的验收标准,以避免歧义。在项目执行期间与客户协商任务的详细信息时,请记住记录所有决定,以便您在尝试获得签字认可时可以轻松找到此文档。
发票
获得签字认可后,开具发票就相对容易了。您只需要将可计费工时乘以约定的每小时或每天的费率
- 查看所有可计费任务,并确定计划工时、可计费工时和实际工时。
- 您可以向客户收取超支工时的费用吗?如果是这样,您可能必须解释为什么客户应该为此付费,以及合同上在哪里约定了这一点。
- 将可计费工时乘以相应服务类型的每小时费率。
计算出最终金额后,您可能需要根据当地法规添加税款,具体税款因您的企业所在的国家、州、县甚至城市而异。最后,将计算结果输入到标准化发票文档中,然后将其发送给客户。
跟踪应收账款和付款
将发票发送给客户后,您必须跟踪银行帐户中的付款并将它们连接到相应的发票。如果您的客户延迟付款,您可能还需要向他们发送提醒。
做损益和事后分析
完成所有工作后,您会想看看从项目中赚了多少钱。如果工作涉及领薪员工、外部顾问、与其它项目共享的努力、差旅费等,这可能会非常容易或非常复杂。最后,您将获得一份损益表,其中包含发票金额减去您的所有成本。
这也可能是一个全面审查您的项目(称为事后分析)特别是您的估算过程的好时机。将估计时间与实际花费的时间以及项目期间的各种决策和事件如何影响平衡进行比较。这应该为您的下一个项目的销售和报价流程提供信息。
使用 ]project-open[ 创建发票
现在您了解了该流程,让我们看看如何使用免费的开源工具 ]po[ 来实现它。
下载、安装和配置 ]po[
只需几分钟即可在您的计算机上运行 ]po[ 。您可以从 ]po[ 网站获取各种 Linux 版本或 Windows 的 本机安装程序(以及帮助和说明)。
安装 ]po[ 后,请按照配置向导操作,并选择“其它/全部”和“完整/完全安装”选项以启用所有系统选项。在简化配置中,项目开票已禁用。
定义项目
要创建新项目,请使用“项目 -> 新建项目”并选择“甘特图项目”或其子类型之一。 ]po[ 甘特图编辑器包含设置项目所需的一切。您可以使用“摘要任务”以分层方式构建项目,或者将其保留为平面列表。右侧的甘特图时间线对于开票流程是可选的。它仅用于跟踪项目执行期间的进度。
有用于下面描述的所有任务属性的列。“物料”和“可计费工时”列默认在 ]po[ 中不可见。要使它们可见,请单击每个列标题右侧的 v 按钮并启用该列。您可以通过拖放来更改列顺序

图 3. 带有项目定义和状态的甘特图(Frank Bergmann,CC BY-SA 4.0)
- 任务:这是任务的名称。
- 工作量:输入完成任务的估计工时。
- 可计费工时(可选):如果可计费时间与工作量不同,则允许您指定可计费时间。
- 完成百分比:项目经理输入完成任务的进度。
- 物料:这是任务的服务类型,例如项目管理或前端开发。您可以在“主数据 -> 物料”中编辑物料列表。这些服务类型与费率列表(见下文)相关联,以定义不同类型的工作或不同资源的价格。
- 资源:要将资源分配给任务,您首先必须使用
项目 -> <项目名称> -> 成员 Portlet,用于向项目添加资源。重新加载页面后,这些资源将在甘特编辑器中可用,您可以在其中将它们分配给资源列中的任务。 - 注意: 此字段不可用作列。双击任何任务之前的图标以打开任务属性面板,其中包含一个用于记录备注的大型自由文本区域。
如果您已定义任务的工时和资源,]po[ 将自动计算任务的持续时间(设置结束日期)。同样,它将根据其子任务计算摘要任务(具有多个子任务的父任务)的持续时间。您可以使用鼠标拖放来创建任务之间的依赖关系。
记录您的工时
使用时间表菜单进入日历页面。单击特定日期的记录工时。

图 3. 工时表日历(Frank Bergmann, CC BY-SA 4.0)
您将看到您是成员的所有项目的列表。在那里,您可以记录工时并添加有关您所做工作的评论。

图 4. 记录工时 (Frank Bergmann, CC BY-SA 4.0)
添加问题和变更请求
您可以在项目的任何时间向甘特编辑器添加新任务,以反映变更请求。
您还可以向您的项目添加一个错误跟踪器。从项目的左侧,找到项目 -> 管理项目 -> 创建一个子项目。然后创建一个名为
报告您的状态
]po[ 甘特编辑器也可以用作可视化的状态报告。基本上,红线(“今天”)左侧的所有任务都应在完成 % 列中显示 100%。

图 5. 项目状态甘特图 (Frank Bergmann, CC BY-SA 4.0)
查看图 5 中的主数据导入任务
- 任务是否准时? 甘特条中的黑色条代表完成%列中的 40%。矩形结束于代表今天的红线左侧,表明任务已延误。
- 任务是否在预算范围内? 甘特条中的红色矩形是红色的。它表示已记录工时占工时的百分比。我们可以看到团队已经花费了计划的 56 小时中的 48 小时,但任务只完成了 40%。如果像这样继续下去,完成任务需要 120 小时(= 48 小时 / 40%)。如果 已记录工时 < 工时 * 完成%,则条的颜色会变为蓝色。
]po[ 包括其他更高级的状态报告工具,包括挣值分析 (EVA)、里程碑趋势分析和各种专门报告。该文档提供了有关这些工具的更多信息。
获得签署
]project-open[ 不包含让您的客户签署项目的特定支持。但是,附加到每个任务的详细信息(您在开始时记录的)将非常有助于证明一切都已按照您和您的客户共同做出的决定进行。记下任何困难,并在定义下一个项目时考虑它们。
手动创建发票
这是创建发票的最简单和最灵活的方式,适用于非常小的或固定价格的项目。使用

图 6. 手动创建发票 (Frank Bergmann, CC BY-SA 4.0)
发票抬头中的字段
- 发票编号: 这是用于税务报告目的的发票标识。此编号是自动创建的,并按月编号。可以使用其他编号方案。
- 发票日期: 这是您创建发票的日期(用于税务报告目的)。
- 付款条件: 这是发票到期前的天数。
- 付款方式: 这是客户应如何付款。您可以在管理 -> 类别 -> Intranet 发票付款方式中修改可用的付款选项。
- 发票模板: 这是一个将呈现发票的 LibreOffice 模板。管理 -> 发票模板显示可用模板的列表。您也可以在此处下载模板并上传修改后的版本。
- 发票状态: 已创建是新创建的发票。其他选项用于跟踪付款过程。您可以在管理 -> 类别 -> Intranet 成本状态中配置发票状态。
- 发票类型: 客户发票是默认的发票类型。
- 客户: 您可以在 主数据 -> 公司 -> 新公司 或 ]po[ 的 CRM 部分中设置新客户。
- 发票地址: 一个客户可能有多个营业地点,因此请输入您希望将此发票发送到的地址。
- 联系人: 输入应该收到发票的人员。 ]po[ 可以直接以电子邮件形式发送发票。
- 备注: 输入与发票相关的任何备注。
- 增值税: 大多数国家/地区都使用增值税 (VAT)。您还可以为某些国家/地区配置增值税类型(而不是数值)。
- 税: 一些国家/地区会在发票上添加第二种税。如果您不需要,可以在管理 -> 参数 -> intranet-invoices 中禁用此字段。
发票行中的字段
- 行: 这是一种对发票行项目进行排序的方式。
- 描述: 输入项目的描述。
- 单位: 输入您开具发票的内容的单位(例如,多少小时、天等)。
- 计量单位: 这代表计量单位,它可以是小时数、天数或仅单位。
- 费率: 这是使用默认货币的每单位价格。您可以在 主数据 -> 汇率 中配置货币,并在 管理 -> 参数 -> DefaultCurrency 中定义默认货币。
如果您的计算机上安装了文本处理器(Microsoft Word 或 LibreOffice Writer),单击使用模板预览链接将启动它。您现在可以在将发票发送给客户之前对其进行编辑。

图 7. 发票打印预览 (Frank Bergmann, CC BY-SA 4.0)
半自动创建发票
]po[ 还有一个向导,可以将记录的工时“自动”转换为您的发票行项目。此过程适用于固定价格、时间和材料以及定期开票类型。
使用

图 8. 发票向导 (Frank Bergmann, CC BY-SA 4.0)
屏幕的主要部分(在上面的图像中标记为 (1))显示了每个任务的五种不同类型的工时。这有点像报告,但让您可以使用提供的用户界面元素执行操作
- 计划工时: 任务的估计工时,如在项目规划期间在甘特编辑器中指定的
- 可计费工时: 类似于计划工时,但您可以手动修改它以考虑不可计费的时间
- 所有报告的工时: 任何人曾经记录的所有工时表工时
- 间隔中的报告工时: 在屏幕顶部的过滤器 (2) 中的开始日期和结束日期之间记录的工时
- 所有未开票的工时: 未包含在使用此向导创建的任何先前发票中的工时。在执行定期开票时,此数字对于查看过去开票运行中是否“遗漏”了工时非常有用。
第一列中的复选框 (3) 允许您手动取消选择某些任务。聚合工时复选框 (4) 允许您创建每个任务的发票行(取消选中时)或每个材料的发票行(选中时)。如果您的项目中有许多任务,请选择聚合;否则,您的发票可能会变得很长。
您的结果是一张类似这样的发票

图 8. 开票向导 (Frank Bergmann, CC BY-SA 4.0)
这与手动创建的发票类似,但包含其他信息
- 发票行是从上一个屏幕中选择的任务复制的。排除摘要任务是因为否则小时数会被重复。
- 费率列包含任务的最佳匹配费率(见下文)。
选择创建客户发票按钮以完成该过程。但在这样做之前,您可能需要检查价格是否正确。
检查价目表和参考价格
上图中的参考价格部分解释了如何为六个发票行中的每一个确定最佳匹配费率(这就是为什么同一行重复六次的原因)。
此数据的来源是公司工时表价格 Portlet。

图 10. 公司时间表价格 Portlet(Frank Bergmann,CC BY-SA 4.0)
此示例包含一行,其中Hour 作为计量单位 (UoM),75.00 欧元作为费率;所有其他字段为空。我们可以将其翻译为:“此客户的所有小时费用为 75.00 欧元。” 如果您想保持简单,这是一个合适的“默认费率”定义。
使用价格查找算法
不幸的是,现实往往很复杂。考虑下面的例子。它定义了 TCL 编程时间的折扣,但仅适用于特定项目“电机开发(2016_0019)”。

图 11. 特定项目中的价格条目(Frank Bergmann,CC BY-SA 4.0)
价格查找算法将为新发票的每一行选择最合适的费率,方法是选择具有最多匹配字段的费率,并丢弃那些具有硬性不匹配的费率。 参考价格部分将列出所有候选费率条目,从最佳匹配到最差匹配。
但最终,修改建议的费率取决于您。 这种手动干预的选项旨在处理最不寻常的情况。
下一步
编写发票后,还有许多步骤。详细说明这些步骤将超出本教程的范围。但是,该功能作为 ]po[ 社区版的一部分提供。
- 应收账款: 财务 -> 应收账款部分允许您跟进发票并向客户发送提醒。
- 采购和应付账款: ]po[ 包括一个基于项目的采购和供应商管理系统。
- 损益: 您会想知道您的项目是否盈利。
- 经验教训: 您可能想要进行事后回顾,以审查项目并了解下次应该做些什么不同的事情。
- 现金流预测: 从您当前的银行账户余额、您的发票和您的 CRM 销售渠道开始,这将计算出您的公司何时会耗尽资金。
- 管理会计: 这包含许多报告,这些报告将直接解答有关您业务的大多数问题。 这里有一个关于如何编写自己的报告的教程。
- 税务报告: ]po[ 捕获了服务公司进行税务报告几乎需要的一切。 这里有各种会计软件包的导出界面。
您在客户开具发票时遇到的最大挑战是什么? 请在评论中分享您的痛点。
评论已关闭。