Mysql
 sql >> база данни >  >> RDS >> Mysql

Отчет от Двойно счетоводство

С надеждата, че това е, което търсите, че това ще бъде достатъчно:

  • просто INSERT LedgerTransaction ... за всяка реална транзакция в главната книга

Ако търсите повече от това, това означава, че имате нужда от основи на счетоводството, на които не може да се отговори тук. Проверете за безплатните уроци, налични в мрежата.

SQL • Преглед

Надстроих изгледа от свързания въпрос, за да получа TotalCredit &TotalDebit колони за всички транзакции от 1-во число на предходния месец.

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 • Insert AccountStatement

На 1-ви ден от новия месец идеята е да се затвори предходният месец с дата 1-во число на новия месец. Използваме горния изглед, който получава TotalCredit &TotalDebit колони за всички транзакции от 1-во число на предходния месец.

Това е само една задача в края на месеца, на 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 .

Не. Докато GUI интерфейсът е онлайн, приложение с всякаква разумна сложност трябва да изпълнява задачи на задния сървър. напр. Край на месеца; Ежедневно архивиране; Сборни дневници на транзакциите; и т.н. По принцип има настройка на сървъра за това, в противен случай трябва да напишете такава.

Ще има много задачи, които включват края на месеца. Това е само една от тези задачи. Има ограничение за това, което можете да правите в PHP и не бих мечтал да правя това в PHP. Поради технически и модулни причини, бих поставил кода за тази задача и всички останали задачи в края на месеца в съхранена процедура Account_MonthEnd_btr .

Не можете да го направите от бутон, защото:

  • той ще затвори графичния интерфейс, докато приключи задачата в края на месеца, което може да отнеме повече от няколко минути (в зависимост от броя на Accounts , LedgerAccounts и др.).

  • той ще издуха дневника на транзакциите (ако броят на Ledgers или Accounts изобщо е голяма). Този контрол също трябва да е в задния край.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам like in where условие в sequelize, node js

  2. Как да вмъкна данни от csv файл в mysql база данни

  3. Направете една таблица в mysql само за четене

  4. Ред за изпълнение на MySQL заявка/клауза

  5. mysql, utf-8 колона:как да изберете само регистри и малки букви?