复式会计报告
Report from Double Entry Accounting
我的声誉不足以对此发表评论post:
对于链接问题中的 data model,任何人都可以解释 AccountStatement 上期末余额的计算,任何示例 SQL?
- 还有一个小小的说明,如果我错了请纠正我。为了计算每月第一天的期末余额,我有一个按钮可以触发我的模块来计算它?
can any body explain to me how the general ledger transaction table works
希望这就是您正在寻找的,这就足够了:
- 对于每个真实世界的账本交易仅
INSERT LedgerTransaction ...
如果您的要求不止于此,则意味着您需要会计基础知识,此处无法解答。查看网络上是否提供免费教程。
also for the calculation of the closing balance on the AccountStatement any sample sql?
SQL • 查看
我已经升级了链接问题的视图,以获得自上个月 1 日以来所有交易的 TotalCredit
和 TotalDebit
列。
CREATE VIEW Account_Current_V
AS
SELECT
AccountNo,
Date = DATEADD( DD, -1, GETDATE() ), -- show previous day
ClosingBalance,
TotalCredit = (
-- TotalCredit_Subquery
SELECT SUM( Amount )
FROM AccountTransaction
WHERE AccountNo = @AccountNo
AND XactTypeCode_Ext IN ( "AC", "Dp" )
-- this month
AND DateTime >= CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
),
TotalDebit = (
-- TotalDebit_Subquery
SELECT SUM( Amount )
FROM AccountTransaction
WHERE AccountNo = @AccountNo
AND XactTypeCode_Ext NOT IN ( "AC", "Dp" )
AND DateTime >= CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
),
CurrentBalance = ClosingBalance +
<TotalCredit_Subquery> -
<TotalDebit_Subquery>
FROM AccountStatement -- 1st day of this month
WHERE Date = CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
SQL • MonthEnd • 插入 AccountStatement
在新月的第一天,想法是关闭上个月,日期为新月的第一天。我们使用上面的视图来获取自上个月第一天以来所有交易的 TotalCredit
和 TotalDebit
列。
这只是每月 1 号月末作业中的一项任务。对于所有 Accounts
,具有适当事务控制限制(例如 SET ROWCOUNT 500
)等的批处理队列,它通常是 运行,等等
INSERT AccountStatement
SELECT AccountNo,
-- Date: 1st day of this month
CONVERT( CHAR(6), GETDATE(), 2 ) + "01",
ACV.CurrentBalance,
ACV.TotalCredit,
ACV.TotalDebit
FROM Account_Current_V ACV
JOIN AccountStatement ASS
ON ACV.AccountNo = ASS.AccountNo
-- AccountStatements that are not yet MonthEnd-ed
-- get single row that is newest
WHERE ASS.Date = (
SELECT MAX( Date )
FROM AccountStatement
WHERE AccountNo = ASS.AccountNo
)
-- that is not 1st day of this month
AND ASS.Date != CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
更新LedgerStatement
也是一样。
correct me if im wrong, for the calculation of the closing balance for every first day of the next month, i have a button that trigger on my module to. calculate it?
没有。虽然 GUI 界面在线,但任何合理复杂度的应用程序都需要在后端服务器上完成 运行 作业。例如。月末;每日备份;交易日志汇总;等等。一般服务器上都有一个设置,否则你必须写一个。
月末会有很多任务。这只是其中一项任务。在 PHP 中你可以做的事情是有限的,我做梦也不会在 PHP 中这样做。出于技术和模块化原因,我会将该任务和所有其他月末任务的代码放在存储过程 Account_MonthEnd_btr
.
中
您不能通过按钮执行此操作,因为:
会挂掉GUI直到月末任务完成,这可能会超过几分钟(取决于Accounts
,LedgerAccounts
,等)。
它会破坏事务日志(如果 Ledgers
或 Accounts
的数量很大)。该控件也必须在后端。
我的声誉不足以对此发表评论post:
对于链接问题中的 data model,任何人都可以解释 AccountStatement 上期末余额的计算,任何示例 SQL?
- 还有一个小小的说明,如果我错了请纠正我。为了计算每月第一天的期末余额,我有一个按钮可以触发我的模块来计算它?
can any body explain to me how the general ledger transaction table works
希望这就是您正在寻找的,这就足够了:
- 对于每个真实世界的账本交易仅
INSERT LedgerTransaction ...
如果您的要求不止于此,则意味着您需要会计基础知识,此处无法解答。查看网络上是否提供免费教程。
also for the calculation of the closing balance on the AccountStatement any sample sql?
SQL • 查看
我已经升级了链接问题的视图,以获得自上个月 1 日以来所有交易的 TotalCredit
和 TotalDebit
列。
CREATE VIEW Account_Current_V
AS
SELECT
AccountNo,
Date = DATEADD( DD, -1, GETDATE() ), -- show previous day
ClosingBalance,
TotalCredit = (
-- TotalCredit_Subquery
SELECT SUM( Amount )
FROM AccountTransaction
WHERE AccountNo = @AccountNo
AND XactTypeCode_Ext IN ( "AC", "Dp" )
-- this month
AND DateTime >= CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
),
TotalDebit = (
-- TotalDebit_Subquery
SELECT SUM( Amount )
FROM AccountTransaction
WHERE AccountNo = @AccountNo
AND XactTypeCode_Ext NOT IN ( "AC", "Dp" )
AND DateTime >= CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
),
CurrentBalance = ClosingBalance +
<TotalCredit_Subquery> -
<TotalDebit_Subquery>
FROM AccountStatement -- 1st day of this month
WHERE Date = CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
SQL • MonthEnd • 插入 AccountStatement
在新月的第一天,想法是关闭上个月,日期为新月的第一天。我们使用上面的视图来获取自上个月第一天以来所有交易的 TotalCredit
和 TotalDebit
列。
这只是每月 1 号月末作业中的一项任务。对于所有 Accounts
,具有适当事务控制限制(例如 SET ROWCOUNT 500
)等的批处理队列,它通常是 运行,等等
INSERT AccountStatement
SELECT AccountNo,
-- Date: 1st day of this month
CONVERT( CHAR(6), GETDATE(), 2 ) + "01",
ACV.CurrentBalance,
ACV.TotalCredit,
ACV.TotalDebit
FROM Account_Current_V ACV
JOIN AccountStatement ASS
ON ACV.AccountNo = ASS.AccountNo
-- AccountStatements that are not yet MonthEnd-ed
-- get single row that is newest
WHERE ASS.Date = (
SELECT MAX( Date )
FROM AccountStatement
WHERE AccountNo = ASS.AccountNo
)
-- that is not 1st day of this month
AND ASS.Date != CONVERT( CHAR(6), GETDATE(), 2 ) + "01"
更新LedgerStatement
也是一样。
correct me if im wrong, for the calculation of the closing balance for every first day of the next month, i have a button that trigger on my module to. calculate it?
没有。虽然 GUI 界面在线,但任何合理复杂度的应用程序都需要在后端服务器上完成 运行 作业。例如。月末;每日备份;交易日志汇总;等等。一般服务器上都有一个设置,否则你必须写一个。
月末会有很多任务。这只是其中一项任务。在 PHP 中你可以做的事情是有限的,我做梦也不会在 PHP 中这样做。出于技术和模块化原因,我会将该任务和所有其他月末任务的代码放在存储过程 Account_MonthEnd_btr
.
您不能通过按钮执行此操作,因为:
会挂掉GUI直到月末任务完成,这可能会超过几分钟(取决于
Accounts
,LedgerAccounts
,等)。它会破坏事务日志(如果
Ledgers
或Accounts
的数量很大)。该控件也必须在后端。