как хранить остатки по счетам за день

iceman

говнокодер
как хранить остатки по счетам за день?

т.е. есть счет - за 1 день я могу подсчитать обороты по нему.(-дебет+кредит=оборот)

мне нужно выводить вх. остаток (это исх. остаток за прошлый день), обороты, и исходящий остаток (вх. остаток + обороты, это вх остаток на след день)

какие есть алгоритмы агрегирования таких данных, способ хранения и подсчета?

все должно быть в бд.
 

untied

Сдвинутый новичок
Храни так: id_счета, дата, дебит, кредит
В чем проблема-то? Как обрабатывать эти данные тебе подскажут в бухгалтерии.
 

iceman

говнокодер
нужно еще дать возможность устанавливать входящий остаток на счете на определенную дату, и дальше в отчетах вести расчеты относительно данных заданных пользователем.
 

untied

Сдвинутый новичок
Дай эту возможность. Веди.
Ну, может, понадобится еще одна-другая таблица и что такого.
 

whirlwind

TDD infected, paranoid
Зависит от того, как реализована двойная запись. Если журналы счетов обособлены, то нарушается целостность. Мы используем журнал проводок, который фиксирует любое движение как проводку со счета на счет. Выглядит табличка так:
PHP:
+----------------------+------------------+------+-----+---------+----------------+
| Field                | Type             | Null | Key | Default | Extra          |
+----------------------+------------------+------+-----+---------+----------------+
| id                   | bigint(20)       | NO   | PRI | NULL    | auto_increment |
| entry_id             | bigint(20)       | NO   |     | NULL    |                |
| entry_time           | datetime         | NO   |     | NULL    |                |
| entry_date           | date             | NO   |     | NULL    |                |
| operation            | bigint(20)       | NO   | MUL | NULL    |                |
| account              | int(10) unsigned | NO   | MUL | NULL    |                |
| corr_account         | int(10) unsigned | NO   |     | NULL    |                |
| debit                | decimal(16,2)    | YES  |     | NULL    |                |
| credit               | decimal(16,2)    | YES  |     | NULL    |                |
| comment              | varchar(255)     | NO   |     |         |                |
| is_debit             | int(11)          | NO   |     | NULL    |                |
| аналитика1           | bigint(20)       | YES  | MUL | NULL    |                |
| аналитика2           | bigint(20)       | YES  | MUL | NULL    |                |
| аналитика3           | bigint(20)       | YES  | MUL | NULL    |                |
+----------------------+------------------+------+-----+---------+----------------+
Этот журнал максимальной детализации хозопераций. Типовой отчет =СНД,СНК,ДО,КО,СКД,СКК выполняется в два запроса: один на начальное сальдо, другой на период от начального до конечного.

Для ускорения/архивирования эта табличка просто сворачивается до нужного уровня детализации. Например, для твоего случая, если предположить что синтетики на счетах нету, то останется:
PHP:
+----------------------+------------------+------+-----+---------+----------------+
| Field                | Type             | Null | Key | Default | Extra          |
+----------------------+------------------+------+-----+---------+----------------+
| id                   | bigint(20)       | NO   | PRI | NULL    | auto_increment |
| entry_date           | date             | NO   |     | NULL    |                |
| account              | int(10) unsigned | NO   | MUL | NULL    |                |
| corr_account         | int(10) unsigned | NO   |     | NULL    |                |
| debit                | decimal(16,2)    | YES  |     | NULL    |                |
| credit               | decimal(16,2)    | YES  |     | NULL    |                |
| is_debit             | int(11)          | NO   |     | NULL    |                |
+----------------------+------------------+------+-----+---------+----------------+
Тут главное просечь фишку: в бухучете по сути на счете не может быть сухого остатка, так как весь бух учет это двойная запись - движение средств, а не остатки.

PS. Да, еще немного про табличку. Каждая проводка дублируется: записывается движение для первого и второго счета. entry id - это номер проводки.
 
Сверху