2

之前已经被问过很多次......并且没有模式的答案。

有人可以分享会计数据库架构吗?我已经阅读了许多有关复式会计和会计关系数据库的相关文章。但是对于完整的解决方案的外观没有完整的解释。

以下是我发现对我有用的文章:

1) http://homepages.tcp.co.uk/~m-wigley/gc_wp_ded.html(资金流动原则,日记账)
2) http://compasspointmedia.wordpress.com/2010/04/12/sqldatabase-与会计相关的结构/(对交易记录、发票和付款的更深入解释)

这是我仍然不清楚的问题之一:

我们以信用方式向客户销售产品。借记 AR 账户和贷记销售账户。后来我们收到了客户的付款。其金额高于应付金额。我该如何处理这个未使用的金额?

4

1 回答 1

6

我制作了一个名为Open Accounting的开源会计包。这就是它的架构部分的样子:

CREATE TABLE account (id BINARY(16) NOT NULL, orgId BINARY(16) NOT NULL, inserted BIGINT UNSIGNED NOT NULL, updated BIGINT UNSIGNED NOT NULL, name VARCHAR(100) NOT NULL, parent BINARY(16) NOT NULL, currency VARCHAR(10) NOT NULL, `precision` INT NOT NULL, debitBalance BOOLEAN NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB;

CREATE TABLE transaction (id BINARY(16) NOT NULL, orgId BINARY(16) NOT NULL, userId BINARY(16) NOT NULL, date BIGINT UNSIGNED NOT NULL, inserted BIGINT UNSIGNED NOT NULL, updated BIGINT UNSIGNED NOT NULL, description VARCHAR(300) NOT NULL, data TEXT NOT NULL, deleted BOOLEAN NOT NULL DEFAULT false, PRIMARY KEY(id)) ENGINE=InnoDB;

CREATE TABLE split (id INT UNSIGNED NOT NULL AUTO_INCREMENT, transactionId BINARY(16) NOT NULL, accountId BINARY(16) NOT NULL, date BIGINT UNSIGNED NOT NULL, inserted BIGINT UNSIGNED NOT NULL, updated BIGINT UNSIGNED NOT NULL, amount BIGINT NOT NULL, nativeAmount BIGINT NOT NULL, deleted BOOLEAN NOT NULL DEFAULT false, PRIMARY KEY(id)) ENGINE=InnoDB;

解释一下:您有一个帐户表。这些将保存您的资产、负债、权益、收入和费用账户。您有一个代表每个会计日记帐分录的交易表。您有一个名为拆分的表,其中包含日记帐分录中的各个借方和贷方。

我将在上面使用您的示例。

1) 赊销给客户:

借方资产:应收账款 100 美元
贷方收入:销售额 100 美元

我们在事务表中插入一行。我们在引用 transactionId 的拆分表中插入两行。第一个拆分将具有 Assets:Accounts Receivable 的 accountId 和 10000(以便士为单位)的金额。第二个拆分将具有收入的 accountId:Sales 和金额 -10000。为了使交易有效,拆分必须加起来为 0。这使基本会计等式保持平衡。(资产 = 负债 + 权益 + 收入 - 费用)。

2) 客户多付:

借方资产:支票账户 $120
贷方资产:应收账款 $120

3) 您现在欠客户 20 美元的多付款项退款。(您也可以将其识别为收入,但这可能违反公认会计惯例)。

借方资产:应收账款 $20
贷方资产:支票账户 $20

如果您将其视为收入,您将执行以下操作:

借方资产:应收账款 20 美元
贷方收入:多付 20 美元

于 2018-11-29T16:50:19.350 回答