Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Raport z rachunkowości podwójnego zapisu

W nadziei, że tego właśnie szukasz, że to wystarczy:

  • tylko INSERT LedgerTransaction ... dla każdej rzeczywistej transakcji księgi rachunkowej

Jeśli szukasz czegoś więcej, oznacza to, że potrzebujesz podstaw rachunkowości, na które nie ma odpowiedzi tutaj. Sprawdź bezpłatne samouczki dostępne w Internecie.

SQL • Widok

Zaktualizowałem widok z połączonego pytania, aby uzyskać TotalCredit &TotalDebit kolumny, dla wszystkich Transakcji od pierwszego dnia poprzedniego miesiąca.

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 • Koniec miesiąca • Wstaw AccountStatement

W pierwszym dniu nowego miesiąca pomysł polega na zamknięciu poprzedniego miesiąca, datowanego na 1 dzień nowego miesiąca. Używamy powyższego widoku, który uzyskuje TotalCredit &TotalDebit kolumny dla wszystkich Transakcji od pierwszego dnia poprzedniego miesiąca.

To tylko jedno zadanie w zadaniu Koniec miesiąca, pierwszego dnia miesiąca. Normalnie byłby uruchamiany w kolejce wsadowej, dla wszystkich Accounts ,z odpowiednimi limitami kontroli transakcji (np. SET ROWCOUNT 500 ) itp.

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"

To samo dotyczy aktualizacji LedgerStatement .

Nie. Podczas gdy interfejs GUI jest online, aplikacja o rozsądnej złożoności musi uruchamiać zadania na serwerze zaplecza. Np. Koniec miesiąca; Codzienne kopie zapasowe; Podsumowania dziennika transakcji; itp. Generalnie na serwerze jest skonfigurowana do tego konfiguracja, w przeciwnym razie musisz ją napisać.

Będzie wiele Zadań, które składają się na Koniec Miesiąca. To tylko jedno z tych zadań. Jest limit tego, co możesz zrobić w PHP i nie marzyłbym o robieniu tego w PHP. Ze względów technicznych i modularności umieściłbym kod dla tego zadania i wszystkich innych zadań na koniec miesiąca w przechowywanej procedurze Account_MonthEnd_btr .

Nie możesz tego zrobić za pomocą przycisku, ponieważ:

  • rozłączy się z GUI do czasu zakończenia zadania na koniec miesiąca, co może trwać dłużej niż kilka minut (w zależności od liczby Accounts , LedgerAccounts itp.).

  • spowoduje to zniszczenie dziennika transakcji (jeśli liczba Ledgers) lub Accounts jest w ogóle duży). Ta kontrola również musi znajdować się z tyłu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę tymczasowo wyłączyć ograniczenie klucza obcego w MySQL?

  2. MySQL, Błąd 126:Nieprawidłowy plik klucza dla tabeli

  3. Dołączanie i wykluczanie MySQL?

  4. mysql.h brakuje .... (Ruby on Rails, OSX)

  5. Dlaczego moja procedura składowana zgłasza błąd „Brak danych — pobrano, wybrano lub przetworzono zero wierszy”, gdy w instrukcji znajduje się WHERE?