Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Учет операций с деньгами (приход \ расход \ перемещение) - на проверку / 9 сообщений из 9, страница 1 из 1
17.08.2015, 03:44
    #39030480
Riken
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
Уважаемые, эта задача учебная, можно строго не судить.

Нужно вести учет операций в деньгами (приход \ расход \ перемещение) и считать остаток по счетам.
Попробовал спроектировать и на минимальном уровне представить на суд.

Итак, есть

accounts - СЧТЕА (места храниения денег)
idname1Пластик Сбербанк2Р/С Уралсиб

doctypes - ТИПЫ ДОКУМЕНТОВ
idname1РАСХОД2ПРИХОД3ПЕРЕМЕЩЕНИЕ

paydocs - ОПЕРАЦИИ С ДЕНЬГАМИ
iddatedoctypeparentidopercodefrom_accountto_accountamount115.08.20152null1null110000217.08.20153null0125000317.08.201512-11null5000417.08.2015121null25000

С операциями ПРИХОД и РАСХОД вопросов не возникло, а с ПЕРЕМЕЩЕНИЕМ пришлось помучаться (и то не уверен, что правильно) так как оно (перемещение) - это 3 строки в paydocs:
1. Перемещение с opercode = "0"
1. Приход с opercode = "1" и parentid = id_перемещения
2. Расход с opercode = "-1" и parentid = id_перемещения

На удивление оно работает и я могу получить такие отчеты:

idopercodenamedateНа счетС счетаamount11ПРИХОД15.08.2015Пластик Сбербанк --1000020ПЕРЕМЕЩЕНИЕ17.08.2015Р/С Уралсиб Пластик Сбербанк5000

Отчет выше я получаю вот таким запросом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT pd.id, pd.opercode, dt.name, pd.date, ISNULL(a.name, '--') AS [На счет], 
	ISNULL(a1.name, '--') AS [С счета], pd.amount
  FROM
  paydocs pd Inner JOIN doctypes dt ON pd.doctype = dt.id
  LEFT JOIN accounts a ON a.id = pd.to_account
  LEFT JOIN accounts a1 ON a1.id = pd.from_account
  WHERE pd.parentid IS NULL
  ORDER BY pd.date



Подскажите, пойдет ли такая структура БД для этой задачи?
...
Рейтинг: 0 / 0
17.08.2015, 11:50
    #39030630
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
При такой структуре возможны коллизии в данных - в записи "перемещение" указаны одни счета, в дочерних - другие.
В этом плане лучше моделировать перемещение не тремя записями, а двумя (у прихода ссылка на расход).
...
Рейтинг: 0 / 0
17.08.2015, 16:55
    #39030955
Riken
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
Кот Матроскин, т.е. фактически документа Перемещения не будет вообще, но не понятно, как вывести список всех документов перемещения (список шапок доков), ведь один документ с doctype='Перемещение' я разобью на 2 с doctype='1' и '2' Приход и Расход ...
...
Рейтинг: 0 / 0
17.08.2015, 17:26
    #39030996
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
RikenКот Матроскин, т.е. фактически документа Перемещения не будет вообще, но не понятно, как вывести список всех документов перемещения (список шапок доков), ведь один документ с doctype='Перемещение' я разобью на 2 с doctype='1' и '2' Приход и Расход ...

Это будет список всех приходов, у которых заполнена ссылка на расход, that easy (с приджойненным расходом, чтобы было откуда взять "счет откуда").
Да, отборочный запрос будет чуть сложнее - 4 таблицы вместо 3, и условие чуть более хитрое.
...
Рейтинг: 0 / 0
17.08.2015, 17:46
    #39031015
Riken
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
Кот Матроскин, большое спасибо за подсказку.
...
Рейтинг: 0 / 0
17.08.2015, 19:59
    #39031097
Riken
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
Кот Матроскин, немного не понятно, что делать с Типом документа? В первоначальной структуре для документа я выбирал соответствующий элемент из справочника Типы документов, соответственно у Прихода doctype = 2, Расхода = 1, Перемещения = 3. В моем случае это помогало вывести список всех документов с названиями типов.
Как теперь выводить такой список в одно время для Прихода и Расхода брать названия из справочника, а для Перемещения указывать динамически, или вообще отказаться от справочника?

Операция Дата Номер ...Приход 01.08.2015 221 ...Расход 01.08.2015 931 ...Приход 02.08.2015 222 ...Перемещение 04.08.2015 148 ...Расход 05.08.2015 932 ...

Вероятно, структура не правильная в корне ... Вызывает слишком много вопросов (для новичка).
...
Рейтинг: 0 / 0
17.08.2015, 21:01
    #39031125
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
RikenКот Матроскин, немного не понятно, что делать с Типом документа? В первоначальной структуре для документа я выбирал соответствующий элемент из справочника Типы документов, соответственно у Прихода doctype = 2, Расхода = 1, Перемещения = 3. В моем случае это помогало вывести список всех документов с названиями типов.
Как теперь выводить такой список в одно время для Прихода и Расхода брать названия из справочника, а для Перемещения указывать динамически, или вообще отказаться от справочника?

Я бы Ваш кусок
Код: sql
1.
...Inner JOIN doctypes dt ON pd.doctype = dt.id


заменил бы на
Код: sql
1.
...Inner JOIN doctypes dt ON  CASE WHEN pd.ParentID is not null then 3 else pd.Doctype end = dt.id



RikenВероятно, структура не правильная в корне ... Вызывает слишком много вопросов (для новичка).
Она не то чтобы неправильная - она просто очень упрощенная. Для такого уровня абстракции - нормальное решение.
...
Рейтинг: 0 / 0
17.08.2015, 21:06
    #39031127
Riken
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
Кот Матроскин, все понял, спасибо.
...
Рейтинг: 0 / 0
18.08.2015, 12:51
    #39031525
dma_caviar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
Riken,

Не пойму, почему перемещение нельзя делать одной проводкой?
from_account = 1
to_account = 2
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Учет операций с деньгами (приход \ расход \ перемещение) - на проверку / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]