PDA

View Full Version : راهنمایی درباره طراحی جدول سیستم حضور و غیاب



micro_bhk
دوشنبه 11 دی 1391, 09:35 صبح
سلام
من دارم رو یه سیستم حضور و غیاب تحت وب کار میکنم.

من یه جدول دارم به اسم UserWorkSetting که اطلاعات ورود هر فرد برای هر روز رو نگهداری میکنه که شامل، ساعت ورود و خروج، روز تعطیل (مثلا برای ما جمعه ها)، مقدار تاخیر مجاز و ...
یه جدول دارم به اسم UserAttendance که به ازای هر روز که کاربر ورود بزنه یه رکورد ثبت میشه که شامل فیلدهای ID کاربر، تاریخ اونروز، ... هست.
یه جدول دیگه دارم به اسم UserInOut که ساعت های ورود و خروج رو نگهداری میکنه. در واقع کاربر یه ساعت ورود و خروج ثابت داره (شیفت کاری)، و ممکنه چند تا ورود و خروج بین ساعت کاریش داشته باشه برای مرخصی های ساعتی.

من طبق اطلاعات این جدول ها، توی یک بازه تاریخ که معمولا هر ماه هست، اطلاعاتی نظیر غیبت، اضافه کار، مرخصی، تعطیل کار و ... رو نمایش میدم.

مشکل من الان نحوه نگهداری اطلاعات جدول UserWorkSetting بعد از هر ویرایش هست. چون ممکنه اطاعات ورود و خروج هر کاربر در طول ماه تغییر کنه (احتمالش پایینه ولی وجود داره و باید در نظر گرفته شه).

حالا فرض کنید، توی ماه مهر، روز 10 اطلاعات جدول UserWorkSetting ویرایش میشه و روز مثلا 25 دوباره ویرایش میشه این اطلاعات. من برای اینکه بخوام محاصبات رو انجام بدم، باید از 1 تا 10 رو جدا داشته باشم، از 11 تا 25 و از 26 تا 30 رو جدا.

به نظر شما چطور میتونم اینکار رو انجام بدم:
راههایی که به نظر من میرسه اینه که به ازای هر تغییر، تغییرات رو آرشیو کنم، و موقع خوندن اطلاعات کل جدول کاری تو اون بازه رو بخونم و واسه هر روز اطلاعات رو از اونجا بررسی کنم. اینکار خیلی پیچیده هست و احتمال خطا هم توش هست
راه دوم اینکه، به ازای هر روز وررود و خروج که میزنه، اطلاعات روز کاری اون روز، تاخیرمجاز و نوع تعطیلی (هفتگی یا رسمی) رو توش بزارم، که این کار باعث ثبت فیلدهای تکراری تو جدول میشه ولی محاصباتش خیلی راحته. این خالت باز یه مشکلی که ایجاد میکنه اینه که من باز باید برای بررسی مرخصی های روزانه و غیبت ها، تعطیل کاری ها باید ساعت های ورود و خروج رو داشته باشم که تو جدول UserWorkSetting دخیره شده.

خلاصه این بود مشکل ما تو طراحی این بخش.

می خواستم نظرات دوستان رو تو این ضمینه بدونم (چند تا فکر بهتر از یه فکره)

با تشکر

zarifcomputer
دوشنبه 11 دی 1391, 11:31 صبح
سلام
پیشنهاد بنده (شبیه سازی گردش اطلاعات در دنیای واقعی) :

1- موجودیت ها را بر اساس دسته بندی اطلاعات انجام بدهید . ابتدا اطلاعات پرسنلی تمام افراد را در یک جدول ثبت کنید و به هر کدام یک PersonID یونیک بدهید. سپس فرض کنید در دنیای واقعی بدون کامپیوتر اطلاعات چگونه دسته بندی میشود. مثلا کارت های ثبت اطلاعات ورود و خروج را تصور کنید . اگر بخواهید این کارت ها را بهینه سازی کرده و برایش جدولی ایجاد کنید بهتر است که خط زمان را ترسیم کرده و نقاط ورود و خروج را روی خط زمان در یک روز برای هر فرد علامت بزنید. در این حالت برای نگهداری زمان ورود و خروج نیاز به دو فیلد ندارید. جدولی با سه فیلد بسازید : فیلد اول تاریخ روز فیلد دوم PersonID و فیلد سوم زمان که این زمان یا ورود است یا خروج . اما نیازی نیست که نوع ورود یا خروج را نگهداری کنید . پیش فرض سیستم را طوری در نظر بگیرید که اولین زمان ثبت شده برای هر فرد در هر روز به معنای ورود است و زمان های بعدی که در این جدول در یک روز برای یک فرد ثبت میشوند به ترتیب به صورت یکی در میان خروج و ورود مجدد خواهند بود. در این حالت محدودیتی برای تعداد ورود و خروج نخواهید داشت
2- اطلاعات روز های کاری را طبق تقویم کاری تعیین کنید . روز های تعطیل غیر جمعه که شامل مناسبت های خاص و یا تعطیلات خارج از تقویم که ممکن است به هر دلیلی بوجود آیند نیز در این جدول قابل ثبت و ویرایش خواهند بود. این جدول فقط یک فیلد تاریخ تعصیلات دارد . شاید نیازی به ایجاد یک جدول هم نباشد ولی نگهداری این اطلاعات برای الحاق با جداول دیگر مفید خواهد بود. ویرایش این جدول فقط یک بار در سال اتفاق خواهد افتاد .
بقیه اش را هم بعدا میگم فعلا باید برم

micro_bhk
دوشنبه 11 دی 1391, 12:17 عصر
سلام
پیشنهاد بنده (شبیه سازی گردش اطلاعات در دنیای واقعی) :

1- موجودیت ها را بر اساس دسته بندی اطلاعات انجام بدهید . ابتدا اطلاعات پرسنلی تمام افراد را در یک جدول ثبت کنید و به هر کدام یک PersonID یونیک بدهید. سپس فرض کنید در دنیای واقعی بدون کامپیوتر اطلاعات چگونه دسته بندی میشود. مثلا کارت های ثبت اطلاعات ورود و خروج را تصور کنید . اگر بخواهید این کارت ها را بهینه سازی کرده و برایش جدولی ایجاد کنید بهتر است که خط زمان را ترسیم کرده و نقاط ورود و خروج را روی خط زمان در یک روز برای هر فرد علامت بزنید. در این حالت برای نگهداری زمان ورود و خروج نیاز به دو فیلد ندارید. جدولی با سه فیلد بسازید : فیلد اول تاریخ روز فیلد دوم PersonID و فیلد سوم زمان که این زمان یا ورود است یا خروج . اما نیازی نیست که نوع ورود یا خروج را نگهداری کنید . پیش فرض سیستم را طوری در نظر بگیرید که اولین زمان ثبت شده برای هر فرد در هر روز به معنای ورود است و زمان های بعدی که در این جدول در یک روز برای یک فرد ثبت میشوند به ترتیب به صورت یکی در میان خروج و ورود مجدد خواهند بود. در این حالت محدودیتی برای تعداد ورود و خروج نخواهید داشت
2- اطلاعات روز های کاری را طبق تقویم کاری تعیین کنید . روز های تعطیل غیر جمعه که شامل مناسبت های خاص و یا تعطیلات خارج از تقویم که ممکن است به هر دلیلی بوجود آیند نیز در این جدول قابل ثبت و ویرایش خواهند بود. این جدول فقط یک فیلد تاریخ تعصیلات دارد . شاید نیازی به ایجاد یک جدول هم نباشد ولی نگهداری این اطلاعات برای الحاق با جداول دیگر مفید خواهد بود. ویرایش این جدول فقط یک بار در سال اتفاق خواهد افتاد .
بقیه اش را هم بعدا میگم فعلا باید برم


درمورد قسمت اول باید بگم که این سیستم پیاده سازی شده، و در حال کار هست. مشکل من فقط اون بخش خاص که ذکر کردم هست.
من هیج محدودیتی توی ورود و خروج ندارم. ورود و خروج من به دو دسته تقسیم میشه، 1. شیفت کاری 2. ورود و خروج بین شیفت کاری (Break)
من اطلاعات پرسنلی رو جدا دارم، جدول UserAttendance که تاریخ روز کاری، ID کاربر و فیلدی برای تایید اطلاعات این روز توسط مدیر بخش هست و جدول UserInOut که ورود و خروج ها و نوع رو ثبت میکنه و با جدول UserAttendance ارتباط داره.

مشکل حالتی که گفتید این هست که، اگر کاربر Shift In رو بزنه، بین شیفت کاری یه Break Out بزنه و کلا فراموش کنه (مواردی که توی سیستم اتفاق افتاده) که Break In و Shift Out رو بزنه. اونوقت بر اساس این حالت، سیستم به اشکال میخوره....

برای تعطیلات، من یه جدول دارم، یه موردی که باید ذکر کنم اینه که این سیستم به طور همزمان بین دفاتر 4 کشور در حال کاره که دارای ساعت های جدا و تقویم جدا هستن که برای هر سال اطلاعات اون سال به جدول اضافه میشه.


مشکل سر نحوه نگهداری اطلاعات جدول UserWorkSetting هست، به ازای هر تغییر.
مثلا یک حالت که بخوام بگم، کاربری از دفتر چین 2 هفته ماموریت میاد ایران یا بالعکس، اونوقت اینجا، ساعت کار، TimeZone، تقویم برای 2 هفته برای این کاربر تغییر میکنه، که من باید این رو داشته باشم و دوباره بر میگرده به چین. یعنی 3 ویرایش که به ازای هر بازه زمانی، من باید بر اساس اون محاصبات رو انجام بدم.

لازم به ذکره که نتیجه این محاصبات برای فیش حقوقی کاربر استفاده میشه

micro_bhk
چهارشنبه 13 دی 1391, 15:37 عصر
از دوستان کسی نظری نداره؟