php - 复式会计报告
问题描述
我的声誉不足以评论这篇文章:复式记账的关系数据模型
对于来自链接问题的数据模型,任何人都可以解释 AccountStatement 上的期末余额的计算,任何示例 SQL 吗?
- 还有一个小小的说明,如果我错了,请纠正我。对于每月第一天的期末余额的计算,我有一个在我的模块上触发的按钮来计算它?
解决方案
任何人都可以向我解释总帐交易表是如何工作的
希望这就是您所寻求的,这就足够了:
- 仅
INSERT LedgerTransaction ...
针对每个现实世界的账本交易
如果您寻求的不止于此,则意味着您需要会计基础知识,此处无法回答。检查网络上提供的免费教程。
还用于计算 AccountStatement 上的期末余额的任何示例 sql?
SQL • 查看
自上个月的第一天以来,我已从链接的问题中升级了视图,以获取所有交易的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
在新月的第一天,这个想法是关闭上个月,日期为新月的第一天。我们使用上面的 View 来获取自上个月第一天以来的所有 Transactions的TotalCredit
&列。TotalDebit
这只是月末作业中的一项任务,在该月的第一天。它通常会在批处理队列上运行,对于所有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
.
如果我错了,请纠正我,为了计算下个月第一天的期末余额,我有一个按钮可以在我的模块上触发。计算吗?
不可以。虽然 GUI 界面是在线的,但任何合理复杂性的应用程序都需要在后端服务器上运行作业。例如。月末; 每日备份;事务日志汇总;等等。通常在服务器上有一个设置来做到这一点,否则你必须写一个。
将有许多任务构成月末。这只是其中一项任务。你可以在 PHP 中做的事情是有限制的,我不会梦想在 PHP 中这样做。出于技术和模块化的原因,我会将该任务以及所有其他月末任务的代码放在存储的 procAccount_MonthEnd_btr
中。
您不能通过按钮执行此操作,因为:
它会挂断 GUI,直到月末任务完成,这可能会超过几分钟(取决于 , 等的数量
Accounts
)LedgerAccounts
。它会破坏事务日志(如果
Ledgers
或数量Accounts
很大)。该控件也必须在后端。
推荐阅读
- c# - ABP实时通知系统UserId为空
- django - Django Serializer 未显示相关字段
- spring - How to redirect from @Controller to a flow
- python - 如何在 Python 中打开大型 twitter 文件(30GB+)?
- sugarcrm - 从 controller.php 重新加载一个字段
- c# - XUnit HttpStatusCode 不包含应该的定义
- python - Find intersections of dictionary keys and combine them
- sql-server - Unable to script users
- javascript - 如何为所有实例设置相同的子组件动态宽度?网页组件
- wordpress - Styling Hubspot Forms with css - Oceanwp theme - Elementor pro