sql >> Databasteknik >  >> RDS >> Mysql

Rapport från dubbel bokföring

I hopp om att detta är vad du söker, att detta kommer att räcka:

  • bara INSERT LedgerTransaction ... för varje redovisningstransaktion i verkligheten

Om du söker mer än så betyder det att du behöver redovisningsgrunderna, som inte kan besvaras här. Kolla efter de kostnadsfria handledningarna som finns tillgängliga på webben.

SQL • Visa

Jag har uppgraderat vyn från den länkade frågan för att få TotalCredit &TotalDebit kolumner, för alla transaktioner sedan den 1:a dagen i föregående månad.

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 • Infoga kontoutdrag

Den 1:a dagen i den nya månaden är tanken att stänga föregående månad, daterad den 1:a i den nya månaden. Vi använder ovanstående vy för att erhålla TotalCredit &TotalDebit kolumner för alla transaktioner sedan den 1:a dagen i föregående månad.

Detta är bara en uppgift i månadsslutet, den första dagen i månaden. Det skulle normalt köras i batchkön för alla Accounts , med korrekta transaktionskontrollgränser (t.ex. SET ROWCOUNT 500 ), etc.

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"

Det är samma sak för att uppdatera LedgerStatement .

Nej. Medan det grafiska gränssnittet är online måste en app av rimlig komplexitet köra jobb på baksidans server. T.ex. Månadsslut; Dagliga säkerhetskopior; Transaktionsloggar roll-ups; etc. I allmänhet finns det en inställning på servern för att göra det, annars måste du skriva en.

Det kommer att finnas många uppgifter som omfattar månadsavslutning. Detta är bara en av dessa uppgifter. Det finns en gräns för vad du kan göra i PHP, och jag skulle inte drömma om att göra detta i PHP. Av tekniska och modulära skäl skulle jag placera koden för den uppgiften, och alla andra månadsslutuppgifter, i en lagrad proc Account_MonthEnd_btr .

Du kan inte göra det från en knapp eftersom:

  • det kommer att lägga på GUI tills månadsslutsuppgiften är klar, vilket kan ta mer än några minuter (beror på antalet Accounts , LedgerAccounts osv.).

  • det kommer att blåsa transaktionsloggen (om antalet Ledgers). eller Accounts är överhuvudtaget stor). Den kontrollen måste också finnas i den bakre delen.




  1. Returnera alla inaktiverade begränsningar i SQL Server (T-SQL-exempel)

  2. mySQL-undantag:Det går inte att ansluta till någon av de angivna MySQL-värdarna. genom C#

  3. PHP MySQLI Förhindra SQL-injektion

  4. Effekten av query_post_execution_showplan Extended Event i SQL Server 2012