powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Статус оплачен и частично оплачен. Как оформить?
15 сообщений из 15, страница 1 из 1
Статус оплачен и частично оплачен. Как оформить?
    #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
Статус оплачен и частично оплачен. Как оформить?
    #37490322
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показывайте % оплат. Делов то...
...
Рейтинг: 0 / 0
Статус оплачен и частично оплачен. Как оформить?
    #37490340
DSFC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSV, т.е.?
Где показывать процент оплаты?
В таблице Accounts вместо поля SumPart ввести поле ProcentPay, а про вторую таблицу вообще забыть? Я Вас правильно понял?
...
Рейтинг: 0 / 0
Статус оплачен и частично оплачен. Как оформить?
    #37490399
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSFCПоследние два поля как бы предполагают, что по одному счету может быть несколько частичных
оплат

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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


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