|
|
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Прошу помощи по организации структуры БД. Задача состоит в учете начислений и оплат студентов-договорников. Исходные сущности вроде простые: студенты и их оплаты. Для каждого студента заводится карточка студента (таблица с карточками). Потом студенты начинают платить. Запоминаем оплаты в таблице оплат. Но затруднения вызывают учет таких доп. ситуаций: - сумма по договору за год обучения изменяется (1 раз в год) - студент переходит с 1-го на 2-й курс и т.д., т.е. курс обучения 1, 2, ... - может изменится группа в которой он учится - студент может уйти в академ-отпуск, быть отчисленным (приказ задним числом) Т.о. сейчас получается что есть таблица карточек и уже некоторое подобие журнала операций (вместо журнала оплат), куда гамузом вносится, по уникальному коду студента, сумма договора на год, сумма/дата оплаты, состояние: учится/отпуск/отчислен. В то время когда студент в академ-отпуске ему не нужно начислять 1/12 от стоимости договора и не считать его должником. Платежи поступают то с задержкой то с авансом. Отчеты должны строиться такого вида: список должников, список оплат, рачет начислений (за текущ. месяц, за выбранный месяц, за период) Какие есть соображения? Может уйти от этой сводной таблицы журнала... Также смущает как при отчете за несколько месяцев исключить начисления если студент в академ-отпуске (наложение интервалов). Не хочется изобретать велосипед, возможно есть типовой подход Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2010, 14:45 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, Оплаты не надо мешать с перемещениями по курсам. Лучше под это отдельную таблицу выделить, например: Карточка студента Id студентаИмяФамилияОтчество... Журнал оплат Id оплатыid студентадатаразмер Журнал движения студента ID студентаДатаСтарая группастарый курсНовая группановый курссумма оплата ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 09:04 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
lLocust, спасибо! Ок, если студент уходит в академ-отпуск, то это состояние где лучше учитывать чтобы не начислять ему ежемесячную оплату за обучение и не ожидая от него денег не переводить его в должники? В карточке или в таблице движения студента? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 10:30 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, В таблице движения. Например, в моем случае, во время обчения это бы выглядело так: ))) Журнал движения студента ID студента Дата Старая группа старый курс Новая группа новый курс сумма оплата10 01-01-1995 null null РПД-11 1 010 01-01-1996 РПД-11 1 РПД-13 2 010 01-01-1997 РПД-11 2 РПД-15 3 010 01-01-1998 РПД-11 3 РПД-17 4 010 01-01-1999 РПД-11 4 РПД-19 5 010 10-05-1999 РПД-11 5 null null 010 01-01-2001 null null РПД-111 6 0 т.е. 10-05-1999 меня отчислили (академ), а со следующего года я восстановился. Только лучше хналить не курс, а семестр. Это логичнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 10:41 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, азы бухгалтерии .... каждая проводка состоит из 2 операций. т.е. в твоем случае нужно опредилиться за какой период будет производиться оплата, мес, семестр и т.д. и перед каждым периодом делать дебитовую операцию на счет студента, которая будет закрываться его платежкой ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 10:49 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
Пасиб, вникаю.. Думаю... :) А как лучше учесть академ-отпуск с 10-05-1999, если мне надо построить отчет об оплатах например за 3 года 1999-2001 ? Заранее благодарю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 10:57 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
_хехx-citizen, азы бухгалтерии .... каждая проводка состоит из 2 операций. т.е. в твоем случае нужно опредилиться за какой период будет производиться оплата, мес, семестр и т.д. и перед каждым периодом делать дебитовую операцию на счет студента, которая будет закрываться его платежкой ..... _xex. Честно говоря, в бухгалтерии не силен, но тут есть нюанс. Отдел бухгалтерии производит начисления каждый месяц, равные 1/12 от годовой суммы договора по каждому студенту. Эти ежемесячные начисления как бы ожидаемая сумма поступлений от студентов. Но студенты могут платить по-всякому: кто-то в сентябре заплатил за весь год авансом, кто-то ходит до мая в должниках (да, в целом по итогу за год он не должник, но с учетом того, что мы ждем от него оплату 1/12 суммы каждый месяц долг накапливается) Пока не соображу как это всё учесть. Еще и начисления производить - как их лучше: вычислять или завести табличку и каждый месяц по каждому студенту туда добавлять записи.. С уважением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 11:05 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, авторкаждый месяц долг накапливается сие назывется сальдо опреация начисления идет со знаком "-", платежки "+" .... и сумма рулит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 11:11 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
_хехx-citizen, ... сие назывется сальдо опреация начисления идет со знаком "-", платежки "+" .... и сумма рулит Точно, спасиб Я кажись обозвал у себя это "Балансом". Но не суть... Меня беспокоит как удобнее в отчетах за 1, 2 или 3 года в общих суммах учитывать академ-отпуска? Бегать по всем карточкам и записям движений студентов или как-то накладывать интервалы когда он учился/не_учился и так по всем студентам.. С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 11:23 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen_хехx-citizen, азы бухгалтерии .... каждая проводка состоит из 2 операций. т.е. в твоем случае нужно опредилиться за какой период будет производиться оплата, мес, семестр и т.д. и перед каждым периодом делать дебитовую операцию на счет студента, которая будет закрываться его платежкой ..... _xex. Честно говоря, в бухгалтерии не силен, но тут есть нюанс. Отдел бухгалтерии производит начисления каждый месяц, равные 1/12 от годовой суммы договора по каждому студенту. Эти ежемесячные начисления как бы ожидаемая сумма поступлений от студентов. Но студенты могут платить по-всякому: кто-то в сентябре заплатил за весь год авансом, кто-то ходит до мая в должниках (да, в целом по итогу за год он не должник, но с учетом того, что мы ждем от него оплату 1/12 суммы каждый месяц долг накапливается) Пока не соображу как это всё учесть. Еще и начисления производить - как их лучше: вычислять или завести табличку и каждый месяц по каждому студенту туда добавлять записи.. С уважением Вообще-то со студентом заключается договор, в котором прописано как он будет производить оплату, например: за год, за семестр, помесячно, по индивидуальному плану, и на основе этого и должны производиться начисления. Отсюда возможные варианты решения: Можно создать отдельную таблицу с планом начислений и при смене семестра производить ее заполнение. (для всего, кроме индивидуального плана, заполнение можно производить автоматом, для индивидуального плана - ручками) Тогда в карточку студента надо добавить поле "периодичность начисления". Теперь необходимо бухгалтерии, начиная рабочий день(неделю(месяц)), формировать документы начислений (тут небольшая процедурка, которая пробегается по табличке планов, и по студентам формирует эти начисления) Далее есть журнал оплат. (хотя правильнее - журнал операций) в который заносятся эти начисления (со знаком "-"), и если студет произвел платеж, то и он (со знаком "+"). Теперь про отчеты. Что именно нужно увидеть за эти 3 года? Все начисления и проплаты? все будующие начисления? и то и другое? в первом случае - это таблица журнал во-втором - таблица планов в третьем - их объединение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 11:45 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
lLocust, спасибо за развернутый ответ! Все же пахнет введением этой таблицы ежемесячных начислений... Гм... Не хотелось её вводить, потому как для каждого студента за весь срок обучения это 12*5 (а может и 6 лет) = 60 записей. Просто ради "нераздувания" объема, да и знаю же что в месяц всегда начисляется 1/12 от годовой суммы договора. Вот сумма по договору за год - да, она может меняться, а график начислений всегда 1/12. Вот и решил в начале что не будет таблицы начислений, а будет таблица карточек, таблица оплат и таблица движений студентов с суммой договора на каждый год. А начисления будут вычисляемыми, но для меня при этом затык при отчетах когда студент ушел в отпуск на семестр...Тогда расчитанные (а не выбранные из таблицы начислений, её ж пока нет) начисления хоть за месяц, хоть за год должны учитывать отпуска через таблицу движений студента/ов, а это и есть трудность для меня. А вот в случае если ввести таблицу начислений и заполнять ее (то ли руками то ли автоматом) каждый месяц, то для тех студентов которые в отпуске можно просто не добавлять туда запись. С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 12:20 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, 1) Я тогда немного не понимаю, как работает ваша бухгалтерия. В моем понимании даже если студент ушел в академ в середине семетра, то заплатать он должен за весь этот семестр! т.к. В начале семестра формируется план и зарплата преподавателям, которая расчитывается из общего количества студентов*часов (вроде). Т.е. это вина студента, что он не справился с планом обучения, а не преподавателя (который всем давал одинакого)! Тогда просто не надо учитывать этих дат. 2) Количество записей: 12 записей в год * 5000 студентов = 60000 записей в год вообще-то это мало.... у некоторых это количество записей за день или даже за час... и нормально, работает. При грамотных индексах - быстро работает. А какая у вас СУБД? 3) И все же Вы можете не хранить план начислений, но храните сами начисления. у Вас могут измениться какие-нибудь условия расчета, и тогда все старые начисления то же перерасчитаются, а это не правильно) и зачем все это расчитывать каждый раз - это лишняя нагрузка на сервер. 4) ну если все-таки очень хочется, то в зависимости от СУБД есть разные функции для работы с датами. Для построения запросо ножно знать СУБД. (и конкретный вопрос задавать уже в нужной ветке) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 12:45 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
lLocust, 1) Бухгалтерия очень лояльная :) Студентов не обязывают платить посеместрово. И даты могут понадобиться если будет возврат денег за неполный обученный семестр. Поэтому, для оценки зарплат преподов, используется ежемесячное начисление. Бывает так, что приказ об январском академе приносят в марте...%) При этом начисления ранее переданные в бухгалтерию за январь и февраль нельзя менять... Т.о. наверное вычисленные начисления нельзя использовать, а то не понятно какую дату приказа вносить чтобы отчеты за прошлые 2 месяца не "ломались", а были такие же. 2) В принципе согласен что 60000 записей в год это не много, сейчас инфа о порядка 3000 студентов. Это все - которые текущие и которые уже закончили, примерно получается с 2001 года... Те которые закончили мы им в таблице движения ставим признак об окончании или в карточке? БД MySQL, крутится на нетбуке, он только под MySQL+Apache (системник+монитор+бесперебойник в одном флаконе, пока удобно) :) 3) Там-то того плана начислений только следующий месяц. :) Т.е. основа - это предыдущие начисления для расчета сальдо за любой заданный период. И по сальдо уже смотрим должников, "авансовиков", отчет за месяц/год по списку студентов, по курсам, по группам. 4) Да, функции работы с датами есть, но меня пугает что в случае расчитываемых начислений надо "ловить" вхождение периодов их пересечение и т.д. В общем благодаря обсуждению, с Вашей помощью и помощью всех участников, всё сильнее склоняюсь к таблице начислений... А уж тем более что всегда надо за прошлые периоды показывать те же самые начисления какие были в тот момент переданные в бухгалтерию, не смотря на изменения по приказам и т.д. С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 13:32 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, Бухгалтерия-то лояльная, а преподы?? у них, вдруг, в середине семестра студентов не осталось, поотчисляли всех))) И зарплата тю-тю )) (ну это отступление) А что студен закончил обучение (сам или отчислили) отметку можно ставить и в карточке и в журнале (а лучше и там и там), триггером. в журнал заносим запись вида: 10 01-01-2002РПД-1116nullnull0 и, если у записи с максимальной датой новая группа = null, то студент не учится, и при вставке этой записи триггером проверять значение и апдейтить карточку. Если null то не учится, иначе учится. А что может быть с перечечение периодов? можете привести пример? а то не совсем понятно что Вы имеете в виду.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 13:49 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
А вот возьмем для примера ваш журнал движения: lLocust Журнал движения студента ID студента Дата Старая группа старый курс Новая группа новый курс сумма оплата10 01-01-1995 null null РПД-11 1 010 01-01-1996 РПД-11 1 РПД-13 2 010 01-01-1997 РПД-11 2 РПД-15 3 010 01-01-1998 РПД-11 3 РПД-17 4 010 01-01-1999 РПД-11 4 РПД-19 5 010 10-05-1999 РПД-11 5 null null 010 01-01-2001 null null РПД-111 6 0 т.е. 10-05-1999 меня отчислили (академ), а со следующего года я восстановился. Только лучше хналить не курс, а семестр. Это логичнее. Допустим стоимость вашего обучения 12000 руб/год (1000 руб/мес). Журнал оплат у нас есть, это свершившиеся факты, хочется узнать сальдо за 3 года: 1999-2001 включительно, учитывая что с 05-1999 по 01-2001 был академ и начислений делать не нужно. Берем вариант без таблицы месячных начислений, т.е. автоматом за месяц начисляем 1/12 от годовой суммы. Запрос какого вида получится? (в общих чертах если можно, т.е. как учесть даты прихода/ухода студента) Спасибо! С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 14:46 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, Немного изменим таблицу под логику: S_IDDTGR_OLDLEV_OLDGR_NEWLEV_NEWMONEY1001.01.1995РПД-11101001.01.1996РПД-111РПД-132120001001.01.1997РПД-132РПД-153120001001.01.1998РПД-153РПД-174120001001.01.1999РПД-174РПД-195120001010.05.1999РПД-195120001001.01.2000РПД-19501001.01.2001РПД-195РПД-1116120001001.01.2002РПД-111612000 1-ая строка - сумма 0 (т.к. студента только зачислили, деньги брать не за что) 6-ая строка - 10-05-1999 студента отчислили (годовая мзда 12000) 7-ая строка 01-01-2000 студента восстановли (за этот промежуток он не учился и поэтому сумма=0) и т.д. С MySql у меня не очень.., но на Оракле я бы сделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. На выходе С 01-01-1999 ПО 31-12-2001: DT_FROMDT_TOAMMOUNT01.01.199909.05.1999400010.05.199931.12.1999001.01.200031.12.20001200001.01.200131.12.200112000 На выходе С 01-04-1999 ПО 10-11-2001: DT_FROMDT_TOAMMOUNT01.01.199909.05.1999100010.05.199931.12.1999001.01.200031.12.20001200001.01.200131.12.200110000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 17:06 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
lLocust, спасибо! Думаю, пробую, дерзаю :) С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 19:06 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
lLocust, Зачем хранить поля "Старая группа", "Старый курс"? Они же равны значения полей "Новая группа", "Новый курс" предыдущей записи студента. Лучше ID записи добавить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2010, 10:48 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
kink, Ну, вообще-то и не надо.... )) я это... что-то... сглупил... (хотя изначально все это писал скорее для наглядности) ID, как раз, не обязательно, там дата есть. А уникальность должна осуществляться по полям IDстудента, Дата. И, тогда уж, что бы совсем конкретно доколебаться до своего кода, то Сумма оплаты у меня в запросе относится к предыдущему периоду, а должна относиться к следующему! x-citizen, Кстати, а бухгалтерия не учитывает, что учеба фактически длится не 12 месяцев в году, а всего 9?? и что фактически нужно ежемесячно начислять не 1/12 годовой суммы, а 1/(кол-во учебных месяцев) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2010, 11:18 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, И начислять не 12 месяцев, соответственно, а лишь в учебный год. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2010, 11:19 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
LLocust, неа, бухгалтерия не учитывает этого. Тупо берут 1/12 от годовой суммы. Может потому что надо ЗП платить преподам 12 месяцев в году... :) С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2010, 17:37 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
Сколько будет ровно 1/12 от 1001 рубля ? А оно же, вычисленное и просуммированное 12 раз ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2010, 17:53 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
Программист-Любитель, А программерам на что жить?? Вот из этого и набирается зарплата программистам )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2010, 17:55 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительСколько будет ровно 1/12 от 1001 рубля ? А оно же, вычисленное и просуммированное 12 раз ? Если ровно то 1001:12=83,416(6) :) В таблице держу 4 знака после запятой в виде DECIMAL(10,4). Вероятно правильнее держать годовую сумму договора, а в расчеты подставлять 1/12 ... С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2010, 22:35 |
|
||
|
Проектирование БД учета начислений/оплат
|
|||
|---|---|---|---|
|
#18+
x-citizen, Это не правильно. годовой контракт: 1001 в таблице хранится: 1001/12=83,4167 бухгалтерсая проводка после округления: 83,42 начисления бухгалтерии за 12 месяцев: 83,42*12=1001,04 Студенты не простят! А должно быть как минимум за первые 11 месяцев 83,42, а за последний 1001-83,42*11=83,38 Или каждый месяц учитывать остаток ок предидущего, тогда: 1-й: 83,416(6); округляем:83,42; переначислено 0,00(3) 2-й: 83,416(6)-0,00(3)=83,413(3); округляем:83,41; недоначислено 0,00(3) 3-й: 83,416(6)+0,00(3)=... и.т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2010, 11:03 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36701299&tid=1542651]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
147ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 468ms |

| 0 / 0 |
