Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Статус оплачен и частично оплачен. Как оформить? / 15 сообщений из 15, страница 1 из 1
20.10.2011, 11:30
    #37490297
DSFC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
Всем доброго дня!
Задача следующая в системе есть такое понятие как счет, который выставляют различным клиентам. И пользователям БД важно отслеживать какие счета были оплачены полностью, какие нет, а какие частично и если частично, то должна быть указана частичного платежа.
Первое что приходит в голову, так это следующий вариант реализации:
Таблица Account
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
IdAccount (P.K.)
IdClient (F.K.)
PeriodSince  - начало периода, за который выставлен счет
PeriodTill  - конец периода, за который выставлен счет
DateCreate - дата выставления счета.
Sum - сумма к оплате
StatusPay - оплачен или неоплачен счет полностью
SumPart - частично оплачен

Насколько это рационально? Или лучше сделать отдельную таблицу счетов и отдельную таблицу частичных оплат, типа:
Таблица AccountPartPay
Код: plaintext
1.
2.
3.
4.
IdAccountPartPay (P.K.)
IdAccount (F.K.)
Sum  - частично оплаченная сумма
DatePay - когда эта сумма была частично внесена.
NumPayDoc - Номер платежки

Последние два поля как бы предполагают, что по одному счету может быть несколько частичных оплат, хотя пока такого функционала никому не надо - отслеживать даты предоплат.

Хотелось бы узнать: сталкивался ли кто-нибудь с подобными задачами и как решали?
Может быть кинете пример из общепризнанной практики - буду благодарен.
...
Рейтинг: 0 / 0
20.10.2011, 11:41
    #37490322
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
Показывайте % оплат. Делов то...
...
Рейтинг: 0 / 0
20.10.2011, 11:49
    #37490340
DSFC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
LSV, т.е.?
Где показывать процент оплаты?
В таблице Accounts вместо поля SumPart ввести поле ProcentPay, а про вторую таблицу вообще забыть? Я Вас правильно понял?
...
Рейтинг: 0 / 0
20.10.2011, 12:12
    #37490399
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
DSFCПоследние два поля как бы предполагают, что по одному счету может быть несколько частичных
оплат

А как ты собирался полностью оплатить счёт одной частичной оплатой? Не хочешь держать
отдельный список оплат - добавь поле "сумма, проплаченная к текущему моменту".
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.10.2011, 13:11
    #37490522
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
Плановые платежи (договора) + Фактические оплаты = в реальности всегда M:M. "Разноска" либо ручная либо автоматичски (запросами, процедурами).
...
Рейтинг: 0 / 0
20.10.2011, 13:50
    #37490605
Cane Cat Fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
Программист-ЛюбительПлановые платежи (договора) + Фактические оплаты = в реальности всегда M:M. "Разноска" либо ручная либо автоматичски (запросами, процедурами).

+1. Совершенно разные потоки информации.

Если ты скажешь клиенту: "Вы оплатили счет только частично", он сразу спросит "как же так? я оплачивал в 10 порций, вот и номера квитанций... Вы, наверное, какой-то платеж потеряли, давайте сверимся... и т.д." А ты в ответ что скажешь? "Вы нам еще должны, потому что у меня компьютерный телевизор так показывает".

Так что документы платежей хранить отдельно. А статус счета - по вкусу, для удобства. Теоретически, можно всегда вообще на лету вычислять, если не лень. Или поле статуса ввести: 0 - Не было оплаты, 1 - была частичная, 2 - оплачено полностью.
...
Рейтинг: 0 / 0
20.10.2011, 16:20
    #37490949
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
Cane Cat FisherПрограммист-ЛюбительПлановые платежи (договора) + Фактические оплаты = в реальности всегда M:M. "Разноска" либо ручная либо автоматичски (запросами, процедурами).

+1. Совершенно разные потоки информации.

Если ты скажешь клиенту: "Вы оплатили счет только частично", он сразу спросит "как же так? я оплачивал в 10 порций, вот и номера квитанций... Вы, наверное, какой-то платеж потеряли, давайте сверимся... и т.д." А ты в ответ что скажешь? "Вы нам еще должны, потому что у меня компьютерный телевизор так показывает".

Так что документы платежей хранить отдельно. А статус счета - по вкусу, для удобства. Теоретически, можно всегда вообще на лету вычислять, если не лень. Или поле статуса ввести: 0 - Не было оплаты, 1 - была частичная, 2 - оплачено полностью.
И наоборот - накопить счетов и сделать общий платеж. И включить в него "долг" по предыдущему неполностью оплаченному счету. И переплатить в конце года, чтобы полностью освоить бюджет под будущие поставки.
...
Рейтинг: 0 / 0
20.10.2011, 18:15
    #37491194
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
DSFC StatusPay - оплачен или неоплачен счет полностью
SumPart - частично оплаченПлохое решение, денормализованное, т.е. у вас всегда есть риск десинхронизации. Перевешивает ли этот риск затрат на просчет "на лету", решать вам.
Второй вариант честнее - вы храните в базе только факт - такого-то числа, такой-то платежкой, была оплачена такая-то сумма, а интерпретацией этого факта (расчета процента оплат, определение статуса клиента и т.п.) занимается приложение.
...
Рейтинг: 0 / 0
20.10.2011, 18:57
    #37491261
DSFC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
Спасибо!
Все-таки я тоже склоняюсь к тому, чтобы вести отдельную таблицу, когда оплаты были сделаны. А статус оплачен, неоплачен дело второе. Главное, чтобы всем можно было увидеть сколько платежек было сделано.
...
Рейтинг: 0 / 0
27.10.2011, 23:33
    #37501737
seggun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
если даты и части не важны, то 2 поля - сумма всего и сумма уже оплачено
если нужны даты платежей и все суммы, то отдельная таблица - ид договора, ид платежа, дата, сумма
...
Рейтинг: 0 / 0
01.11.2011, 12:37
    #37506595
Pavel Kurakin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
DSFC Все-таки я тоже склоняюсь к тому, чтобы вести отдельную таблицу, когда оплаты были сделаны. А статус оплачен, неоплачен дело второе. Главное, чтобы всем можно было увидеть сколько платежек было сделано.
И это правильно. Вообще в реальной жизни клиент может и просто так денег перечислить, в счет будущих поставок. При Вашем первом варианте оплату вообще некуда ввести будет.
...
Рейтинг: 0 / 0
02.11.2011, 16:38
    #37509030
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
DSFCПервое что приходит в голову, так это следующий вариант реализации:
Ну давайте подумаем. В первую очередь нам нужны две сущности: Счёт (с полем сумма счёта) и Платёжка (с полем сумма платежа). Это непосредственное отображение важных реальных объектов, поэтому они нужны в любом случае и неприкосновенны.

Счёт может быть оплачен одной или несколькими платёжками, платёжка может оплачивать один или несколько счетов. Это правда жизни. Многие ко многим. Что самое скверное, бывает, что платёжка от контрагента А контрагенту Б оплачивает счёт, выставленный контрагентом В контрагенту Г. Это тоже правда жизни.

Состояние счёта (оплачен/не оплачен/частично оплачен) определяется соотношением 0 <= оплаченная сумма <= сумма счёта. "Оплаченную сумму" довольно естественно хранить денормализованно, как ещё одно поле в сущности "счёт".
...
Рейтинг: 0 / 0
03.11.2011, 08:02
    #37509912
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
softwarerНу давайте подумаем. В первую очередь нам нужны две сущности: Счёт (с полем сумма счёта) и Платёжка (с полем сумма платежа). Это непосредственное отображение важных реальных объектов, поэтому они нужны в любом случае и неприкосновенны.


Вообще-то лучше не отрываться от бухгалтерии.
Должен быть счет контрагента (дебет,кредит) (можно реализовать для каждой счета-фактуры свой)
Есть Счет-фактура - документ (данность - выставленный счет)
Есть платежи (Платежки, приходные кассовые ордера и т.д.)
Дальше реализовываете проводки и разнос сумм по счетам.

softwarerСчёт может быть оплачен одной или несколькими платёжками, платёжка может оплачивать один или несколько счетов. Это правда жизни. Многие ко многим. Что самое скверное, бывает, что платёжка от контрагента А контрагенту Б оплачивает счёт, выставленный контрагентом В контрагенту Г. Это тоже правда жизни.


Ага. Всякое бывает. В этом вся и прелесть :-)

softwarerСостояние счёта (оплачен/не оплачен/частично оплачен) определяется соотношением 0 <= оплаченная сумма <= сумма счёта. "Оплаченную сумму" довольно естественно хранить денормализованно, как ещё одно поле в сущности "счёт".

Оплаченная сумма определяется состоянием счета
...
Рейтинг: 0 / 0
03.11.2011, 10:29
    #37510035
LexNext
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
И еще момент. Сам скоро должен столкнуться с подобным заданием, вот пример реализации как я вижу себе его:
Таблица account (счета)
Код: plaintext
1.
2.
3.
4.
5.
6.
account_id (p.k.)
person_id (f.k.)
date_since 
date_till 
account_sum
comment

Таблица payment (платежи)
Код: plaintext
1.
2.
3.
4.
5.
6.
payment_id (pk)
person_id (fk)
payment_in_out (тип ENUM) - это поле фиксирущее выплата, входящая (т.е. клиент заплатил), или исходящая (оплата поставщикам к примеру)
payment_sum
payment_date
comment


И еще одна таблица, которая определяет какая оплата к какому счету относится и за какие заказы это оплата прошла.
payment_document
Код: plaintext
1.
2.
3.
4.
payment_document_id (p.k.)
payment_id (fk) номер оплаты таблица payemnt
order_id (fk) номер заказа, за которое последовала оплата
document_id (fk) номер счета, либо оплата сотруднику

Пример:
организация оказала 5 услуг (order_id: 1, 2, 3, 4, 5) контрагенту в течении месяца, выставила счет (account_id=1), а он оплатил её частями (payment_id 1,2,3).
все эти оплаты фиксируются в таблице payment и payment_document, причем в таблице payment_document будет в таблице несколько раз фиксироваться один и тот же номер счета (document_id) и номер заказа (order_id), но с различными номерами платежек (payment_id)

Примерно так.
...
Рейтинг: 0 / 0
03.11.2011, 17:34
    #37510959
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Статус оплачен и частично оплачен. Как оформить?
mad_nazgulВообще-то лучше не отрываться от бухгалтерии. Должен быть счет контрагента (дебет,кредит) Есть Счет-фактура - документ (данность - выставленный счет)
Бухгалтерия - отдельный (и очень большой) вопрос. Я в данном случае говорю про документ. Отрываться может быть и не стоит, но в решении данной конкретной задачи бухгалтерия никак не участвует. Также напомню, что топикстартера интересовало не полностью расписанное решение, а принцип.

mad_nazgulОплаченная сумма определяется состоянием счета
Я, пожалуй, готов согласиться с меткостью данного афоризма, но не готов принимать его как руководство к проектированию.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Статус оплачен и частично оплачен. Как оформить? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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