powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
9 сообщений из 9, страница 1 из 1
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #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
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #39030630
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При такой структуре возможны коллизии в данных - в записи "перемещение" указаны одни счета, в дочерних - другие.
В этом плане лучше моделировать перемещение не тремя записями, а двумя (у прихода ссылка на расход).
...
Рейтинг: 0 / 0
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #39030955
Riken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин, т.е. фактически документа Перемещения не будет вообще, но не понятно, как вывести список всех документов перемещения (список шапок доков), ведь один документ с doctype='Перемещение' я разобью на 2 с doctype='1' и '2' Приход и Расход ...
...
Рейтинг: 0 / 0
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #39030996
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RikenКот Матроскин, т.е. фактически документа Перемещения не будет вообще, но не понятно, как вывести список всех документов перемещения (список шапок доков), ведь один документ с doctype='Перемещение' я разобью на 2 с doctype='1' и '2' Приход и Расход ...

Это будет список всех приходов, у которых заполнена ссылка на расход, that easy (с приджойненным расходом, чтобы было откуда взять "счет откуда").
Да, отборочный запрос будет чуть сложнее - 4 таблицы вместо 3, и условие чуть более хитрое.
...
Рейтинг: 0 / 0
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #39031015
Riken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин, большое спасибо за подсказку.
...
Рейтинг: 0 / 0
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #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
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #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
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #39031127
Riken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин, все понял, спасибо.
...
Рейтинг: 0 / 0
Учет операций с деньгами (приход \ расход \ перемещение) - на проверку
    #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]