PDA

View Full Version : سوال: نحوه بدست آوردن سال با تقسيم تعداد ماه‌ها بر 12 ؟



Profesorjd
دوشنبه 22 فروردین 1390, 21:33 عصر
با سلام
در امور پرسنلي ماه‌هاي خدمتي مثبت و منفي فرد به منظور بدست آوردن سنوات خدمتي از هم كم مي‌شود . خوب طبيعتاً چون عددها به ماه هستند ممكن است نتيجه درستي بدست نيايد . مثلاً اگر سنوات مثبت 24 ماه و سنوات منفي 12 ماه باشد نتيجه محاسبه 12 ماه و تقسيمش 1 سال ميشود . اگر در همين مثال سنوات منفي 5 ماه يا 7 ماه باشد نتيجه محاسبه 19 يا 17 ماه ميشود كه با تقسيم بر 12 1.416333 يا 1.58333 ميشود كه از نظر سال معني درستي ندارد .
چگونه ميشود :
1- نتيجه 1 سال و 7 ماه يا 1 سال 5 در آورد ؟
2- اگر سنوات منفي بيشتر بود و طبيعتاً نتيجه منفي ميشود ، تقسيم هم منفي در آيد كه از سال اصلي كم شود نه اضافه ؟

mehdi_fiz
سه شنبه 23 فروردین 1390, 01:53 صبح
سلام دوست عزیز
من برای این کار خودم از کد زیر استفاده می کنم امیدوارم به درد شما هم بخوره
Public Function doreh_s(A)

Dim sal
Dim Month As String

sal = a \ 12
Month = a Mod 12

If Month < 10 Then
Month = "0" & Month
Else

If Month > 9 Then
Month = Month
End If

End If

If Month > 0 Then
doreh_s = sal & "/" & Month
Else
doreh_s = sal
End If

End Function

موفق باشید

Profesorjd
سه شنبه 23 فروردین 1390, 22:02 عصر
با سلام و تشكر
به نظرم اين تابع شما نتواند مشكل مرا حل كند ( البته استنباطم اين است ) ضمن اينكه محل استفاده از آن را با توجه به مشكلم متوجه نشدم .
در سيستم پرسنلي هر فرد ممكن است سنوات مثبت يا منفي داشته باشد فرمول كلي من اين است كه ابتدا Left سال ورود را ميگيرم و از سال جاري ( مثلاً 90 ) كم ميكنم . ماه ورود را با استفاده از Mid بدست مي‌آورم و آن را هم از ماه جاري كم مي‌كنم ( البته با همان روشي كه شما بيان كرديد و مثلاً مي‌شود 5 ) سنوات مثبت را از سنوات منفي كم ميكنم عدد بدست مي‌آيد مثلاً 15 . اگر اين 15 را با 5 جمع و تقسيم بر 12 كنم نتيجه درست نيست . البته امروز كه تست ميكردم ديدم بعضي سنوات منفيشان از سنوات مثبتشان بيشتر است كه جواب منفي در مي‌آيد و راه چاره‌اي براي آن بنظرم نرسيد . ضمن اينكه من اين موارد را براي كوئري مي‌خواهم و فرم مد نظرم نيست .
البته به نظرم متوجه منظورتان هنوز نشده‌ام .

Profesorjd
پنج شنبه 25 فروردین 1390, 23:12 عصر
با سلام
هنوز منتظر پاسخ هستم

mehdi_fiz
پنج شنبه 25 فروردین 1390, 23:33 عصر
سلام دوست عزیز
منظورتون رو دقیقا متوجه نمی شو مگه میشه کسی کار کنه و سنوات منفی داشته باشه !!!!
شما می خواهید اختلاف دو تاریخ را به سال و ماه بدست بیارید؟ اگه اینطوری بگید که یه کد دارم که سن رو محاسبه می کنه ولی به سال و ماه و روز که باید خودتون با توجه به نیازتون اصلاحش کنید
موفق باشید.

Profesorjd
جمعه 26 فروردین 1390, 00:29 صبح
با سلام و تشكر
دوست گرامي در ادارات دولتي سنوات منفي وجود دارد !! . مثلاً برابر قانون براي خانم‌ها باردار در صورت وضع حمل 6 ماه مرخصي زايمان داده مي‌شود حال اگر اين خانم بجاي شش ماه از 7ماه و بيشتر استفاده كند بيش از شش ماه به عنوان سنوات منفي محاسبه مي‌شود يا كسي مرخصي بدون حقوق بگيرد . اينها جزء سنوات خدمتي حساب نمي‌شوند و به اصطلاح منفي تلقي مي‌شوند . حال اگر بخواهيم سنوات خدمتي فرد را محاسبه كنيم بايد اين سنوات منفي را از سال ورودش كم كنيم . مثلاً اگر كسي 80/01/01 وارد اداره شود تا الان سنوات خدمتيش مي‌شود 10 سال و يك ماه . حالا اگر 5 ماه مرخصي بدون حقوق بگيرد سنوات خدمتيش مي‌شود 9 سال و 8 ماه . در برنامه براي اين فرد 5 ماه سنوات منفي درج شده است . من براي محاسبه سنوات خدمتي با Left 80 را بدست مي‌آورم از 90 كم ميكنم مي‌شود 10 . با استفاده از Mid ( يا هر راهي ديگر) 01 بدست مي‌آورم از ماه جاري كه 02 است كم ميكنم مي‌شود 1 از 5 كم كنم جواب -4 مي‌شود . اين منفي 4 را چطوري محاسبه كنم ؟ بروشي كه شما گفتيد يا با استفاده از توابع محاسبه تاريخ براي يك نفر در ركورد جاري ميشود . حالا اگر 1000 ركورد داشته باشي و بخواهي براي همه اين 1000 نفر سنوات خدمتي را بدست آوري چكار بايد كرد ؟ مثلاً بداني از اين 1000 نفر 100 نفر 29 سال و چندماه سابقه دارند و بازنشستگيشان نزديك است . ضمن اعلام به فرد بايد اعتبار بازنشستگي را از دولت دريافت كرد يا كلاً آمار وضعيت سنواتي پرسنل را بدست آورد . بعبارتي من بايد با استفاده از كوئري يا مشابه آن اين كار را كنم . يكي از دوستان با استفاده از Spss اينكار را كرده بود ولي من نه Spss بلد هستم و نه مي‌خواهم از آن استفاده كنم .

Profesorjd
یک شنبه 28 فروردین 1390, 06:48 صبح
با سلام
هنوز منتظر پاسخ هستم

mehdi_fiz
دوشنبه 29 فروردین 1390, 08:35 صبح
سلام دوست عزیز
شما برای این کار از اکتویکس آقای پیروز مهر استفاده کنید که توابع آن کامل می باشد و از تابع کم کردن تاریخ استفاده کنید همچنین فایل راهنمای آن کامل توابع را توضیح داده است
موفق باشید

Profesorjd
دوشنبه 29 فروردین 1390, 13:19 عصر
با سلام
1- اگر به تاپيك آقاي پيروز مهر در خصوص همان اكتيوايكس مراجعه نماييد مي‌بينيد كه بنده اعلام كردم كه نميتوانم از اين اكتيو ايكس استفاده كنم .
2- توابع آقاي آزادي ،‌ توابع آقاي ميداني و ... چنين تابع تعيين اختلاف تاريخ را دارند ولي اگر دقت فرماييد من اختلاف تاريخ نمي‌خواهم بدست بيآورم .
3- يه عدد داريم مثبت و يه عدد داريم منفي از هم كم كنيم يا جواب مثبت است يا منفي . حال اين عدد بر عدد ديگري تقسيم مي‌شود نتيجه هرچه باشد بايد تقسيم به سال شود . يعني عدد جديد تقسيم بر 12 اگر عدد تقسيم شد و باقيمانده صفر كه خوب ولي اگر باقيمانده داشت ، باقيمانده اعشاري نبايد شود . توضيح بيشتر اينكه در مثال عدد1 26 عدد2 10 باشد نتيجه 16 ميشود ميخواهم بعد از تقسيم بر 12 شود 1 و 4 در صورتيكه در تقسيم عدد مي‌شود 1.3333 . ضمن آنكه اگر بر عكس بود باقيمانده منفي 1 و 4 شود .

stabesh
دوشنبه 29 فروردین 1390, 13:27 عصر
با سلام
براي تقسيم از چه عملگري استفاده ميكنيد
فكر ميكنم \ استفاده كنيد فقط عدد صحيح برميگرداند و mod باقيمانده
http://zo-d.com/blog/archives/programming/vba-integer-division-and-mod.html
http://www.bettersolutions.com/vba/VNN529/LM646334512.htm
http://www.bettersolutions.com/vba/VNN529/SO914113332.htm

Zero Defect
دوشنبه 29 فروردین 1390, 18:45 عصر
سلام

مشکل جواب آقای فیض آبادی کجاست ؟

این مشکل مطرح شده از سوی شما مشکلی نیست که کسی نتونه اون رو جواب بده تا این لحظه هم اگر کسی نتونسته , تنها برمیگرده به گنگ بودن خود سئوال

ورودیش بر حسب ماهه , احتلاف تاریخ رو بر حسب ماه بدست بیارید و حاصل رو به عنوان ورودی این تابع ارسال کنید

ممکنه فقط شما بخواید یک تغییر روش بدید و اون هم در این بخشه


doreh_s = sal & "/" & Month

توضیح : کلیت ظاهری تابع آقای فیض آبادی باید خروجی درست رو به شما بده ( تست بفرمایید )

موفق باشید

Profesorjd
دوشنبه 29 فروردین 1390, 21:15 عصر
با سلام و تشكر
1- به نظر مي‌رسد استفاده از كلمه سال اين را تداعي كرده باشد كه منظورم تاريخ است و اگر از اين بابت است به نظر گنگ مي‌آيد .
2- سئوال بنده مانند جمع ساعت ( مثلاً ساعت اضافه كار ) است نه تعيين ساعت . مي‌دانيد كه جمع ساعات تا 24 مي‌شود يك روز . حالا اگر مثلاً بخواهيد 100 را به روز بدست آوريد مي‌بايد اين 100 را به 24 تقسيم كنيد جواب چند مي‌شود ؟ ميشود 4.166666 در صورتيكه جواب مورد نياز مي‌شود 4 روز و 4 ساعت . سئوال من هم همين است 100 ماه چند سال است ؟ 8.33333 سال !! خير من مي‌خواهم جواب بشود 8 سال و 4 ماه
3- آيا مي‌شود با استفاده از تابع آقاي فيض‌آبادي يا توابع ديگر و حتي اكتيوايكس شما اختلاف تاريخ را بدست آورد كه جوابش بشود هماني كه من مي‌خواهم؟
4- در مورد بخش اول سركار خانم تابش جواب را دادند ( آدرس آن سايتها و نمونه مثالهاي ذكر شده ) و اما بخش دوم كه اختلاف سال ورود و سال جاري را مي‌خواهم ولي با اين شرط سال و ماه را بدهد . اما با سواد بنده فقط ركورد جاري را توانستم مشخص كنم ولي من 10000 ركورد دارم كه فيلدي بنام تاريخ ورود دارد بصورت 991231 (روزماه‌سال) حالا با يك شرط ( يا هر چيز ديگر) ميخواهم براي تمام ركوردها تعيين كنم كه چند سال و چند ماه از تاريخ ورودشان گذشته است .
5- بخش سوم تركيب بخش اول با بخش دوم سئوال است كه حالا كه مشخص شده است فرد چندسال و چند ماه سنوات مثبت يا منفي دارد با مدت سال و ماه از ورودش به سازمان جمع شود ( يعني اگر حاصل جمع سنوات مثبت و منفيش عدد مثبتي شد جمع و اگر حاصل جمع سنوات منفي و مثبتش منفي شد از آن كم شود ) مثال : شخصي در تاريخ 800901 وارد سازمان شده است . اين فرد 20 ماه در اداره X كار مي‌كرده كه به مدت سنوات خدمت دولتي است اضافه مي‌شود . اين فرد 40 ماه هم مرخصي بدون حقوق گرفته است . در بخش اول ما بايد 20 ماه را از 40 ماه كم كنيم حاصل 20 ماه مي‌شود ، تقسيم بر 12 ميكنيم حاصل 1 سال و 8 ماه منفي مي‌شود . در بخش دوم اين فرد در تاريخ 900201 ، 9 سال 7 ماه سابقه كار در سازمان جديد را دارد براي احتساب بازنشستگيش بايد با بخش اول جمع كنيم كه جواب 7 سال و 11 ماه مي‌شود . منطقش اين است كه چون بخش اول به ماه است بخش دوم را هم به ماه تبديل و بعد از محاسبه به سال تبديل كرد .
حالا شما اساتيد گرامي بفرماييد من چگونه عمل كنم ؟ البته چون بنده كم سواد و بي‌سواد هستم خيلي ممنون ميشوم اگر جواب با نمونه باشد

Zero Defect
دوشنبه 29 فروردین 1390, 21:35 عصر
سلام


- آيا مي‌شود با استفاده از تابع آقاي فيض‌آبادي يا توابع ديگر و حتي اكتيوايكس شما اختلاف تاريخ را بدست آورد كه جوابش بشود هماني كه من مي‌خواهم؟

در بسیاری مواقع مطمئن هستم که بسیاری دوستان از کنار موضوعات به سادگی و بدون توجه میگذرند !

PDC دو تابع تفاضل تاریخ داره , یکی DDiff و دیگری DDiffToText با عملکردهایی متفاوت

تابع DDiffToText موجود در داخل PDC خواسته شما رو جواب میده

ولی شما فرمودید از اکتیو ایکس نمیتونید استفاده کنید , پس ...

موفق باشید

Profesorjd
دوشنبه 29 فروردین 1390, 21:52 عصر
با سلام و تشكر
جناب پيروزمهر !
بنده بدلايلي كه در آن تاپيك استفاده از اكتيو ايكس توضيح دادم نمي‌توانم از اكتيوايكس استفاده كنم . آيا معنيش اين است كه پس ... يعني راه ديگري نيست ؟
ضمناً مجدداً يادآوري مي‌كنم شايد كار نهايي محاسبه تاريخ باشد ولي اصل قضيه اصلاً تاريخ نيست !
شما يك عدد داريد كه مي‌خواهيد تبديل به سال و ماه شود همين ! اگر اين عدد تقسيم به 12 شود جواب تا حدي بدست مي‌آيد ولي من بي‌سواد نمي‌دانم چطوري ؟
يك سئوال فرعي: چطوري دو رقم وسط يك عدد شش رقمي را بدست آورم ؟ ( البته مربوط به اصل ايجاد اين تاپيك مي‌شود )

Zero Defect
دوشنبه 29 فروردین 1390, 22:07 عصر
سلام

بردار من خدمتتون عرض کردم , تابعی که آقای فیض آبادی نوشتند جواب میده

تابع رو توی یک ماژول کپی کنید

و بدین شکل استفاده کنید


doreh_s(36)
doreh_s(47)

نتیجه ها رو ببینید

در خصوص اون قسمت دوم سئوالتون تابع mid رو استفاده کنید


mid(123456,3,2)=34

دو رقم وسط یک عدد شش رقمی یعنی رقمهای سوم و چهارم پس از تابع میخواید از سومین کاراکتر شروع کنه و دو تا رو جدا کنه

Profesorjd
دوشنبه 29 فروردین 1390, 22:52 عصر
با سلام و تشكر
البته من قبلاً تابع آقاي فيض‌آبادي را تست كرده بودم ارور مي‌داد . امشب كه اصرار شما را ديدم كنترل كردم ديدم در مواقعي كه تابع روي عددي كه منفي و بخش پذير نيست و باقيمانده دارد اجرا شود ، ارور 13 را مي دهد . يعني اگر اختلاف سنوات منفي و مثبت عدد -12 يا -24 يا .. باشد مشكلي ندارد ولي اگر عدد -13 يا -25 و ... باشد اين ارور را مي‌دهد .
براي اين موارد بايد چكار كنم ؟
(نكات داخل پرانتزي :
1- تابع Mid را چون چند نفر خصوصي پرسيده بودند خواستم در اين تاپيك مطرح كنم كه با جواب شما ( موضوع آموزش توابع كه ادامه پيدا نكرده!!) به جوابشان برسند .
2- 36 و 47

1
2
doreh_s(36)
doreh_s(47)

را كه شما اشاره كرديد براي آيندگاني كه جستجو مي‌كنند نامفهموم است!)

Profesorjd
سه شنبه 30 فروردین 1390, 00:23 صبح
با سلام
براي اتمام مباحث مطرح شده نمونه فايل پيوست آنچه را كه مشكل بوده و حل شده است را ارسال مي‌نمايم
در كوئري نمونه پيوست هم از ماژول جناب فيض‌آبادي استفاده شده است و هم از مثال سركار تابش
البته توضيحات جناب پيروزمهر مكمل رفع ابهامات بنده و افراد مشابه است . از دوستان فوق تشكر ويژه دارم . (البته هر وقت گذارم به مشهد مقدس و قزوين افتاد انشاءالله )

Zero Defect
سه شنبه 30 فروردین 1390, 07:04 صبح
سلام


36 و 47 را كه شما اشاره كرديد براي آيندگاني كه جستجو مي‌كنند نامفهموم است!)

به خدا نامفهوم نیست البته اگر دقت کنید چرا که قبلا براتون به صورت کامل نوشتم ( پست شماره 11 رو ملاحظه بفرمایید ) :


ورودیش بر حسب ماهه , احتلاف تاریخ رو بر حسب ماه بدست بیارید و حاصل رو به عنوان ورودی این تابع ارسال کنید

پس اون عددها در واقع عددهای نمایی هستند فرضا 36 ماه و 47 ماه چند سال میشه و ...


تابع Mid را چون چند نفر خصوصي پرسيده بودند خواستم در اين تاپيك مطرح كنم كه با جواب شما ( موضوع آموزش توابع كه ادامه پيدا نكرده!!) به جوابشان برسند .

ادامه پیدا میکنه , نگران نباشید , ولی تا حسی وجود نداشته باشه مطلبی هم نوشته نمیشه چون اونجوری اشتباه توی اون رخ میده

Profesorjd
سه شنبه 30 فروردین 1390, 22:31 عصر
با سلام و تشكر


36 و 47 را كه شما اشاره كرديد براي آيندگاني كه جستجو مي‌كنند نامفهموم است!



البته توضيح آقاي پيروز مهر تكميل كننده است ولي براي توضيح بيشتر عرض كنم كه :
ماژول آقاي فيض‌آبادي مبتني بر آرايه نوشته شده است كه اين آرايه مي‌تواند عدد بصورت مستقيم بگيرد ( مانند 36 يا 47 ) يا مانند مثالي كه بنده ارسال كرده‌ام روي يك فيلد

(dore_s([Mah_sal])) در كوئري عمل كند .

fazl11
چهارشنبه 31 فروردین 1390, 20:56 عصر
دوست عزیز ببین به دردت میخوره یا نه