इस आशा में कि आप यही खोज रहे हैं, कि यह पर्याप्त होगा:
- सिर्फ
INSERT LedgerTransaction ...
प्रत्येक वास्तविक दुनिया के लिए लेजर लेनदेन
यदि आप इससे अधिक की तलाश कर रहे हैं, तो इसका मतलब है कि आपको लेखांकन मूल बातें चाहिए, जिसका उत्तर यहां नहीं दिया जा सकता है। वेब पर उपलब्ध निःशुल्क ट्यूटोरियल देखें।
एसक्यूएल • देखें
मैंने 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
पिछले महीने के पहले दिन से सभी लेन-देन के लिए कॉलम।
महीने के पहले दिन, मंथ एंड जॉब में यह सिर्फ एक टास्क है। यह सामान्य रूप से सभी 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 में ऐसा करने का सपना नहीं देखूंगा। तकनीकी और प्रतिरूपकता कारणों से, मैं उस कार्य के लिए कोड, और अन्य सभी महीने के अंत कार्यों को एक संग्रहित खरीद में रखूंगा Account_MonthEnd_btr
।
आप इसे एक बटन से नहीं कर सकते क्योंकि:
-
यह माह समाप्ति कार्य समाप्त होने तक GUI को लटकाएगा, जो कुछ मिनटों से अधिक हो सकता है (
Accounts
की संख्या पर निर्भर करता है) ,LedgerAccounts
, आदि)। -
यह लेन-देन लॉग को उड़ा देगा (यदि
Ledgers
याAccounts
बिल्कुल बड़ा है)। वह नियंत्रण भी पिछले छोर पर होना चाहिए।