PDA

View Full Version : نوشتن دستور کد iif



shahla60
سه شنبه 03 اردیبهشت 1392, 08:13 صبح
سلام
من میخوام یک دستور بنویسم ولی اررود میده اگه میشه درستشا بهم بگید
مثلا میخوام بگم اگه ساعت ورود یک نفر از 8 بیشتر بود بیا از 8 کمش کن و بگو چقدر دیر اومده و اگر زودتر از 8 اومد بود کاری نکنه
من اینا نوشتم

sum(8-[saat vorod])
تو اینجا ساعت ورود به صوردت دستی داده میشه ولی با این کد که نوشتم قبل از ساعت 8 حساب میکنه
مثلا اگه یکی ساعت 7.30 بیاد میاد به ما میکه نیم ساعت زود اومده و اگر یه روز 8.30 بیاد میگه نیم ساعت دیر اومده و جمع اینا میشه صفر که نیخوام اینطوری باشه

mosaArabi
چهارشنبه 04 اردیبهشت 1392, 07:58 صبح
دوست گرامی بهتر بود نمونه میذاشتی . حالا : شما برای این کار دستور زیر را اجرا کن :

[iif ([saat vorod]-8>0;([saat vorod]-8;"0") <-----[LTR_INLINE][/LTR_INLINE

shahla60
پنج شنبه 05 اردیبهشت 1392, 12:00 عصر
این اشتباهه کار
اینم برانمم ببیند میتونید کمکم کنید
http://uploadkon.ir/?file=shahla.rar
تو ریپورتش این کدا نوشتم

mosaArabi
شنبه 07 اردیبهشت 1392, 10:56 صبح
دوست محترم
فایل شما اصلاح شد (کوری 1 ستون Expr1)

shahla60
سه شنبه 10 اردیبهشت 1392, 11:55 صبح
ممنون آقا موسی اگه اشتباه نگفته باشم اسمدونا
من یه اشتباه کرده بودم تو برنامه و تایما از نوع تکست گذاشتم الان برداشتم ساعت ورودا کردمش نوعشا تایم و برنامه کار نمیده چیکارش کنم
ببیندی اینا
ممنون کمکم میکنید

shahla60
پنج شنبه 12 اردیبهشت 1392, 12:27 عصر
:ناراحت:
کمک کنید

Abbas Amiri
پنج شنبه 12 اردیبهشت 1392, 20:34 عصر
:ناراحت:
کمک کنید

سلام
اولا جهت تاریخ شمسی دیتاتایپ بایستی یا Number ویا ازنوع Text یاشد ، چون دربعضی تاریخها به مشکل برمیخورید .
درثانی شما هنوز فیلدهای شروع وپایان مرخصی رو ازنوع تکست دارید . مثلا مقدار 16.3 یعنی چی ؟

shahla60
پنج شنبه 12 اردیبهشت 1392, 20:54 عصر
103617
سلام
اولا جهت تاریخ شمسی دیتاتایپ بایستی یا Number ویا ازنوع Text یاشد ، چون دربعضی تاریخها به مشکل برمیخورید .
درثانی شما هنوز فیلدهای شروع وپایان مرخصی رو ازنوع تکست دارید . مثلا مقدار 16.3 یعنی چی ؟

سلام
ببینید من همه چیزا را حذف کردم فقط یه ساعت ورود داریم
میخوام بگم اگه بعد از 8 اومد بگه چقدر دیر اومده فقط همین
آقای osaArabi (http://barnamenevis.org/member.php?54785-mosaArabi) یه کمکی کردن و یه کد نوشتن ولی من دیتا تایپ ساعت ورودا به date/time تبدیل کردم ولی بهم کدشون جواب نداد

mosaArabi
شنبه 14 اردیبهشت 1392, 10:22 صبح
سلام
فایل شما اصلاح شد
یک مازول اضافه شد که در اینده در خصوص جمع ساعت هم حتما به کار شما می آید
در تیبل شما هم فرمت تاریخ و ساعت را اصلاح کردم
در کوری 1 ستون Expr1 محاسبه عددی است و Expr2 محاسبه ساعت

موفق باشید

shahla60
دوشنبه 16 اردیبهشت 1392, 12:34 عصر
ممنون از شما اساتید گرامی
آقای Abbas Amiri یه کد گفتند
Expr1: Format(CDate(IIf([saat vorod]-#08:00:00 ق.ظ#>0;[saat vorod]-#08:00:00 ق.ظ#;0));"Short Time")
این کد خیلی راحت تره از این کد که شما آقای mosaArabi گفتید
ولی بازم ممنون از کمکدون
یه سوال دیگه داشتم من اومدم یه ساعت خروجم اضاف کردم که کدش طبق بالا نوشتم

pr3: Format(CDate(IIf( #16:30# -[saat khoroj]> 0; #16:30#-[saat khoroj];0));"Short Time")
این کد میاد میگه چقدر زودتر از 16:30 رفتی حالا مثلا اگه ساعت خروج ساعت 11:00 باشه طبق این کد میاد میگه 5:30 زود رفتی ولی من میخوام بین بازه 12تا13 حساب نکنه و بگه 4:30 زود رفته باید چیکار کنم؟؟
ممنون میشم کمکم کنید

Abbas Amiri
سه شنبه 17 اردیبهشت 1392, 00:34 صبح
از کد زیر استفاده کنید:


Expr2: Format(CDate(IIf(#04:30:00 PM#-[saat khoroj]>0;#04:30:00 PM#-[saat khoroj]-IIf([saat khoroj]<#12:00:00 PM#;#01:00:00 AM#;0)-IIf([saat khoroj]>=#12:00:00 PM# And [saat khoroj]<=#01:00:00 PM#;#01:00:00 PM#-[saat khoroj];0);0));"Short Time")

shahla60
سه شنبه 17 اردیبهشت 1392, 12:10 عصر
ببخشید چطوری میتونم این زمان ها را که بهم میده را با هم جمع کنم؟؟؟
از قسمت total اکسس که میخوام sum انتخاب کنم غیر فعال و فقط count داره باید چی بنویسم که اینا را جمع کنه با هم؟؟؟؟؟
ممنون میشم از راهنمایی هادون

>جواب سوالما پیدا کردم از کد زیر باید استفاده بکنیم<



=Sum(Minute([saat vorod])) Mod 60
=Sum(Hour([saat vorod]))+Sum(Minute([saat vorod]))\60

shahla60
چهارشنبه 18 اردیبهشت 1392, 18:49 عصر
سلام به استاتید محترم
من به این برنامه که به اینجا رسید و اساتید محترم کمک کردن یه فیل به نام ایام هفته اضافه کردم
و طبق این ایام هفته میخوام بگم ساعت خروج چه زمانیه
یعنی این کد که آقای Abbas Amiri (http://barnamenevis.org/member.php?189381-Abbas-Amiri) زحمت کشیدند که به صورت زیر است


Expr2: Format(CDate(IIf(#04:30:00 PM#-[saat khoroj]>0;#04:30:00 PM#-[saat khoroj]-IIf([saat khoroj]<#12:00:00 PM#;#01:00:00 AM#;0)-IIf([saat khoroj]>=#12:00:00 PM# And [saat khoroj]<=#01:00:00 PM#;#01:00:00 PM#-[saat khoroj];0);0));"Short Time")

کد بالا ساعت خروجا به ما میگه ساعت 16:30 و هر چی زودتر بره تعجیل است و من میخوام بگم که همه روز هفته این نباشه و پنج شنبه ها ساعت خروج 15:30 حساب کن و بقیه روزا را 16:30
یعنی اگ از فیلد ایام هفته تو فرم روز پنج شنبه را انتخاب کردیم تو قسمت Expr2 که به ما تعجیلا میگه از زمان 15:30 حساب کنه
امیدوارم درست بیان کرده باشم منظورما
ممنون میشم کمک کنید


اینم نمونه برنامم

Abbas Amiri
چهارشنبه 18 اردیبهشت 1392, 19:02 عصر
شما باید ازتوابع تاریخ فارسی که در آن تابعی جهت برگرداندن روز هفته است ، استفاده کنید . فرض نام تابع مورد نظر WeekDayNum است و جهت روز پنجشنبه مقدار 5 را برمیگرداند ، در آن صورت بصورت زیر تغییر دهید:



Expr2: Format(CDate(IIf(#04:30:00 PM#-[saat khoroj]>0;#04:30:00 PM#-[saat khoroj]-IIf([saat khoroj]<#12:00:00 PM#;#01:00:00 AM#;0)-IIf([saat khoroj]>=#12:00:00 PM# And [saat khoroj]<=#01:00:00 PM#;#01:00:00 PM#-[saat khoroj];0)-IIf(WeekDayNum ([tarikh])=5;#01:00:00 AM#;0);0));"Short Time")

shahla60
پنج شنبه 19 اردیبهشت 1392, 10:20 صبح
شما باید ازتوابع تاریخ فارسی که در آن تابعی جهت برگرداندن روز هفته است ، استفاده کنید . فرض نام تابع مورد نظر WeekDayNum است و جهت روز پنجشنبه مقدار 5 را برمیگرداند ، در آن صورت بصورت زیر تغییر دهید:



Expr2: Format(CDate(IIf(#04:30:00 PM#-[saat khoroj]>0;#04:30:00 PM#-[saat khoroj]-IIf([saat khoroj]<#12:00:00 PM#;#01:00:00 AM#;0)-IIf([saat khoroj]>=#12:00:00 PM# And [saat khoroj]<=#01:00:00 PM#;#01:00:00 PM#-[saat khoroj];0)-IIf(WeekDayNum ([tarikh])=5;#01:00:00 AM#;0);0));"Short Time")



ببخشید من متوجه نشدم چکار باید بکنم و این توابعی که گفتیدا بلد نیستم میشه رو برنامه خودم درست کنید واسم؟؟؟؟؟

Abbas Amiri
جمعه 20 اردیبهشت 1392, 21:43 عصر
ببخشید من متوجه نشدم چکار باید بکنم و این توابعی که گفتیدا بلد نیستم میشه رو برنامه خودم درست کنید واسم؟؟؟؟؟

به آدرس تاپیک ماژول کامل تاریخ شمسی در اکسس با VBA (http://barnamenevis.org/showthread.php?322266-%D9%85%D8%A7%DA%98%D9%88%D9%84-%DA%A9%D8%A7%D9%85%D9%84-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AF%D8%B1-%D8%A7%DA%A9%D8%B3%D8%B3-%D8%A8%D8%A7-VBA&highlight=%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8% B3%D9%86%D8%AC%DB%8C+%D8%AA%D8%A7%D8%B1%DB%8C%D8%A E+%D8%B4%D9%85%D8%B3%DB%8C) بروید و اولین فایل ضمیمه رو دانلود کنید و از ماژول آنرا در فایل خودتون ایمپورت کنید . از تابع DayWeekNo باکمی تغییرات استفاده کنید

بجای خط اول در کد های فوق مقدار خط دوم رو جایگزین کنید



WeekDayNum ([tarikh])
DayWeekNo(Replace([tarikh],"/",""))

نتیجه
Expr2: Format(CDate(IIf(#04:30:00 PM#-[saat khoroj]>0;#04:30:00 PM#-[saat khoroj]-IIf([saat khoroj]<#12:00:00 PM#;#01:00:00 AM#;0)-IIf([saat khoroj]>=#12:00:00 PM# And [saat khoroj]<=#01:00:00 PM#;#01:00:00 PM#-[saat khoroj];0)-IIf(DayWeekNo(Replace([tarikh];"/";""))=5;#01:00:00 AM#;0);0));"Short Time")


ضمنا نوع دیتای مربوط به تاریخ رو به عدد و تکست تغییر بدهید چون با فرمتی که فعلا ذخیره شده ، تابع شماره روزهفته ایجاد خطا خواهد کرد(01/01/1391)

mosaArabi
شنبه 21 اردیبهشت 1392, 08:30 صبح
سلام
من در پست 9 روی نمونه شما یک ماپول گذاشتم . البته با روش دوستمون آقای امیری فرق میکنه ولی نتیجه یکی است . اتصال دو روش یه کمی ممکنه سردرگمی ایجد کنه . باز نمونه خودتون را تا اونجا که ساعت خروج و ... را انجام دادید ضمیمه کنید

shahla60
شنبه 21 اردیبهشت 1392, 13:00 عصر
سلام
من در پست 9 روی نمونه شما یک ماپول گذاشتم . البته با روش دوستمون آقای امیری فرق میکنه ولی نتیجه یکی است . اتصال دو روش یه کمی ممکنه سردرگمی ایجد کنه . باز نمونه خودتون را تا اونجا که ساعت خروج و ... را انجام دادید ضمیمه کنید


این اخرین تغییراتیه که تو برنامم دادم

shahla60
شنبه 21 اردیبهشت 1392, 13:01 عصر
به آدرس تاپیک ماژول کامل تاریخ شمسی در اکسس با VBA (http://barnamenevis.org/showthread.php?322266-%D9%85%D8%A7%DA%98%D9%88%D9%84-%DA%A9%D8%A7%D9%85%D9%84-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AF%D8%B1-%D8%A7%DA%A9%D8%B3%D8%B3-%D8%A8%D8%A7-VBA&highlight=%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8% B3%D9%86%D8%AC%DB%8C+%D8%AA%D8%A7%D8%B1%DB%8C%D8%A E+%D8%B4%D9%85%D8%B3%DB%8C) بروید و اولین فایل ضمیمه رو دانلود کنید و از ماژول آنرا در فایل خودتون ایمپورت کنید . از تابع DayWeekNo باکمی تغییرات استفاده کنید

بجای خط اول در کد های فوق مقدار خط دوم رو جایگزین کنید



WeekDayNum ([tarikh])
DayWeekNo(Replace([tarikh],"/",""))

نتیجه
Expr2: Format(CDate(IIf(#04:30:00 PM#-[saat khoroj]>0;#04:30:00 PM#-[saat khoroj]-IIf([saat khoroj]<#12:00:00 PM#;#01:00:00 AM#;0)-IIf([saat khoroj]>=#12:00:00 PM# And [saat khoroj]<=#01:00:00 PM#;#01:00:00 PM#-[saat khoroj];0)-IIf(DayWeekNo(Replace([tarikh];"/";""))=5;#01:00:00 AM#;0);0));"Short Time")


ضمنا نوع دیتای مربوط به تاریخ رو به عدد و تکست تغییر بدهید چون با فرمتی که فعلا ذخیره شده ، تابع شماره روزهفته ایجاد خطا خواهد کرد(01/01/1391)


ممنون بازم از راهنماییدون ولی راستش بازم نمیدونم چکار کنم
اگه میشه واسم درست کنید فایل خودما از کدا زیاد چیزی سر در نمیارم:ناراحت:

Abbas Amiri
شنبه 21 اردیبهشت 1392, 22:47 عصر
فایل اصلاح شده زیر شامل تغییراتی در نوع فیلدها و اصلاح تاریخ ها است .

shahla60
یک شنبه 22 اردیبهشت 1392, 10:58 صبح
فایل اصلاح شده زیر شامل تغییراتی در نوع فیلدها و اصلاح تاریخ ها است .
سلام
ممنون از لطفدون
این برنامه تا تاریخا میزنم روز هفته را اشتباه میزنه.من زدم 1392/02/22 روزشا میزنه یه چیزی به غیر از یکشنبه
گفتم شاید مال تاریخ سیستم که اشتباه میزنه اونم 2013/05/12 و درسته ولی اشتباه میزنه.مشکل چیه؟؟
و اگر تاریخ سیستم اشتباه باشه این برنامه هم اشتباه میزنه؟؟؟
یه مشکل دیگه هم تو آمار eroor میده به این کد
DoCmd.OpenReport "Query1", acViewPreview, , strFilter

Abbas Amiri
یک شنبه 22 اردیبهشت 1392, 20:02 عصر
سلام
مورد اول مربوط به دورقمی بودن تاریخ بوذ
و دومی هم مربوط به نوع تاریخ که عدد بود ونه تکست .
فایل اصلاح شد

shahla60
سه شنبه 24 اردیبهشت 1392, 12:09 عصر
ببخشید چرا من این برنامه را باز میکنم یعنی فرم ورود اطلاعات یا Query باز میکنم برنامه اکسس هنگ میکنه و این Modules(DateShamsi) پاک کنم درست میشه و هنگ نمیکنه
مال چیه این؟؟؟
میخوام یه کار دیگه هم بکنه این برنامه که اگه درست بشه این مشکلم میگم سوال بعدیما
ممنون

Abbas Amiri
سه شنبه 24 اردیبهشت 1392, 20:42 عصر
ببخشید چرا من این برنامه را باز میکنم یعنی فرم ورود اطلاعات یا Query باز میکنم برنامه اکسس هنگ میکنه و این Modules(DateShamsi) پاک کنم درست میشه و هنگ نمیکنه
مال چیه این؟؟؟
میخوام یه کار دیگه هم بکنه این برنامه که اگه درست بشه این مشکلم میگم سوال بعدیما
ممنون

در فرم ورود اطلاعات در رکوردسورس روزهفته جایگزین کنید :
=IIf(ValidDate("13" & [tarikh]);DayWeek("13" & [tarikh]);"")
بعد از این تغییر در فایل پست 22 این اتفاق نباید رخ دهد

shahla60
شنبه 28 اردیبهشت 1392, 13:32 عصر
ممنون درست شد

یه سوال دیگه
به فرم ورود اطلاعتمون یه ساعت ابتدا مرخصی ساعتی و ساعت پایان مرخصی ساعتی اضاف کردم
که با کم کردن اینا به ما میگه چند ساعت مرخصی رفته طبق این کد

morokhasi:format(cdate([saat payan morokhasi saati]-[saat ebteda morokhasi saati]);"short time")

حالا ما میخوایم بین بازه زمانی ساعت 12تا 13 مثل قبل حساب نکنه.
چه کدی باید بنویسم؟؟
ممنون میشم کمک کنید
اینم نمونه برنامه

Abbas Amiri
شنبه 28 اردیبهشت 1392, 18:14 عصر
ممنون درست شد

یه سوال دیگه
به فرم ورود اطلاعتمون یه ساعت ابتدا مرخصی ساعتی و ساعت پایان مرخصی ساعتی اضاف کردم
که با کم کردن اینا به ما میگه چند ساعت مرخصی رفته طبق این کد

morokhasi:format(cdate([saat payan morokhasi saati]-[saat ebteda morokhasi saati]);"short time")

حالا ما میخوایم بین بازه زمانی ساعت 12تا 13 مثل قبل حساب نکنه.
چه کدی باید بنویسم؟؟
ممنون میشم کمک کنید
اینم نمونه برنامه

اگر کمی درکدها کنکاش کنید میتوانید ازآنها الگو بگیرید .

com12151337
شنبه 28 اردیبهشت 1392, 20:38 عصر
سلام جناب امیری عزیز و کلیه دوستان
در این برنامه شروع به کار را ساعت 8 است به توجه به فصل کار در تابستان و زمستان اگر بخواهیم بدون دستکاری در سورس برنامه در کوئری یا دستوری دیگر چه روشی را جنابعالی پیشنهاد میکنید که ساعت 8 بفرض 7 شود که بشود ساعت شروع کار و اتمام کار قانونی را اغلام کنیم
ممنون

shahla60
یک شنبه 29 اردیبهشت 1392, 17:48 عصر
اگر کمی درکدها کنکاش کنید میتوانید ازآنها الگو بگیرید .

این کدا من نوشتم ولی کار نمیده یعنی بازم حساب میکنه مشکلش چیه یعنی؟؟




morakhasi:format(cdate( [saat payan morokhasi saati]-[saat ebteda morokhasi saati])- iif([saat ebteda morokhasi saati]>=#12:00:00 # And [saat ebteda morokhasi saati]<=#01:00:00#and[saat payan morokhasi saati]>=#12:00:00#and[saat payan morokhasi]<=#01:00:00#;#01:00:00#-([saat payan morokhasi saati]-[saat ebteda morokhasi saati]);0);"short time")

shahla60
چهارشنبه 01 خرداد 1392, 19:21 عصر
آقای امیری میشه کمکم کنید

Abbas Amiri
پنج شنبه 02 خرداد 1392, 17:22 عصر
سلام
با استفاده از تابعی که در Module1 است چنانچه ساعات وارده درمحدوده 12-13 باشد آن را کم خواهد کرد

shahla60
شنبه 04 خرداد 1392, 11:36 صبح
ممنون از لطفدون ولی باز مثل سری قبل برنامه هنگ میکنه.تا یه ساعت وارد میکنم بعد میخوام کوئری را باز کنم هنگ میکنه و مجبورم ببندمش و خودش یه بکاپ درست میکنه و میره سر خونه اول
مشکل چیه این؟؟؟

Abbas Amiri
شنبه 04 خرداد 1392, 21:40 عصر
ممنون از لطفدون ولی باز مثل سری قبل برنامه هنگ میکنه.تا یه ساعت وارد میکنم بعد میخوام کوئری را باز کنم هنگ میکنه و مجبورم ببندمش و خودش یه بکاپ درست میکنه و میره سر خونه اول
مشکل چیه این؟؟؟

فایل خودتون رو آپلود کنید .

shahla60
یک شنبه 05 خرداد 1392, 11:33 صبح
فایل خودتون رو آپلود کنید .

نمیدونم چرا هنگ میکنه.راهنماییم کنید که چرا اینطوریه؟؟(هنگ کردنا فکر کنم اگه چنتا کوئری بنویسیم حل میشه)


یه مشکل دیگه هم هست قرار شد پنج شنبه ها را ساعت خروج 15:30 باشه یعنی یک ساعت زودتر بقیه روزا شما کدی نوشتید ولی کار نمیکنه این کد و بازم طبق این کد اگه پنج شنبه ساعت 15:30 خروج باشه میزنه تعجیل 1 ساعت


shortage: Format(CDate(IIf(#04:30:00 ب.ظ#-[saat khoroj]>0;#04:30:00 ب.ظ#-[saat khoroj]-IIf([saat khoroj]<#12:00:00 ب.ظ#;#01:00:00 ق.ظ#;0)-IIf([saat khoroj]>=#12:00:00 ب.ظ# And [saat khoroj]<=#01:00:00 ب.ظ#;#01:00:00 ب.ظ#-[saat khoroj];0)-IIf(DayWeekNo(Replace([tarikh];"/";""))=5;#01:00:00 ق.ظ#;0);0));"Short Time")



و یه مشکل دیگه شما طبق کدی که نوشتید قرار شد بین ساعت 12:00تا13:00 برای مرخصی ساعتی حساب نکنه ولی کد اشتباه کار میکنه
یعنی اگه قبل از 12 بره درسته کد ولی اگه بین 12تا13 بره مشکل داره کد مثلا اگه ساعت 12:01 بره تا 13:00 میگه 00:58 و عجبه و یا خود 12 تا 13 یک ساعت میزنه و متناوب اگه ساعت 12:02 تا 13:00 باشه میگه 00:56


Function TimeInLunchHour(t1 As Date, t2 As Date) As Date
Dim t As Date
If t1 < #12:00:00 PM# And t2 > #1:00:00 PM# Then
t = #1:00:00 AM#
Else
If t2 >= #12:00:00 PM# And t2 <= #1:00:00 PM# Then
t = t2 - #12:00:00 PM#
End If
If t1 >= #12:00:00 PM# And t1 <= #1:00:00 PM# Then
t = t - (#1:00:00 PM# - t1)
End If
End If
TimeInLunchHour = t
End Function

اینم فایلم که درست کردم که مشکل هنگ کردن حل کرده ولی اینا نه

Abbas Amiri
یک شنبه 05 خرداد 1392, 18:54 عصر
سلام

اول در مورد مشکل هنگ کردن که بعلت خالی بودن تاریخ هاست که برای حل آن باید شرط دزست بودن تاریخ گنجانده شود .

ودر مورد ساعت ناهار تابع عملش را بطور صحیح انجام میده . چرا که از دو پارامتر وارده باید استفاده کند و نتیجه آن مقدار زمانی است که بین دو زمان وارده مربوط به ساعت ناهار می شده است .

shahla60
یک شنبه 05 خرداد 1392, 19:12 عصر
سلام


ودر مورد ساعت ناهار تابع عملش را بطور صحیح انجام میده . چرا که از دو پارامتر وارده باید استفاده کند و نتیجه آن مقدار زمانی است که بین دو زمان وارده مربوط به ساعت ناهار می شده است .
ببخشید متوجه این نشدم یعنی چی??یعنی نباید بین 12تا 13وارد کنیم اصلا??

Abbas Amiri
یک شنبه 05 خرداد 1392, 20:52 عصر
تابع TimeInLunchHour یک اصلاحیه کوچک نیاز داره :



Function TimeInLunchHour(t1 As Date, t2 As Date) As Date
Dim t As Date
If t1 < #12:00:00 PM# And t2 > #1:00:00 PM# Then
t = #1:00:00 AM#
Else
If t2 >= #12:00:00 PM# And t2 <= #1:00:00 PM# Then
t = t2 - #12:00:00 PM#
Else
t = #1:00:00 PM#
End If
If t1 >= #12:00:00 PM# And t1 <= #1:00:00 PM# Then
t = t - (t1 - #12:00:00 PM#)
End If
End If
TimeInLunchHour = t
End Function

shahla60
یک شنبه 05 خرداد 1392, 22:56 عصر
تابع که واسه روز 5شنبه نوشتید و. کار نمیکنه را چیکار کنم??

Abbas Amiri
دوشنبه 06 خرداد 1392, 19:27 عصر
تابع که واسه روز 5شنبه نوشتید و. کار نمیکنه را چیکار کنم??

مشکل مربوط به توابع تاریخ است که حتما باید سال آن 4رقمی باشد . در قسمتی از کد که مربوط به DayWeekNo است بجای tarikh عبارت
"13" & tarikh قرار بدهید.

shahla60
سه شنبه 07 خرداد 1392, 12:11 عصر
مشکل مربوط به توابع تاریخ است که حتما باید سال آن 4رقمی باشد . در قسمتی از کد که مربوط به DayWeekNo است بجای tarikh عبارت
"13" & tarikh قرار بدهید.

این کارا کردم اما یه مشکل پیش اومد تابع shortage با این کد اگه بازه زمانی ما بین 15:30تا16:30 باشه باید صبر به ما بده دیگه ولی این کارا نمیکنه و مثلا اگه ساعت خروج 15:31 باشه به ما میگه shortage=00:01 یا ساعت خروج 16:29 باشه shortage=00:59 ولی اگه ساعت 15:30 یا از 16:30 بزنیم صفر به ما میده
مشکل چیه این؟؟؟



shortage: Format(CDate(IIf(#04:30:00 ب.ظ#-[saat khoroj]>0;#04:30:00 ب.ظ#-[saat khoroj]-IIf([saat khoroj]<#12:30:00 ب.ظ#;#01:00:00 ق.ظ#;0)-IIf([saat khoroj]>=#12:30:00 ب.ظ# And [saat khoroj]<=#01:30:00 ب.ظ#;#01:30:00 ب.ظ#-[saat khoroj];0)-IIf(DayWeekNo(Replace("13" & [tarikh];"/";""))=5;#01:00:00 ق.ظ#;0);0));"Short Time")



و یه سوال دیگه من میخوام بگم بعد ساعت 16:30 هر کی دیر تر بره بشه اضافه کاری و طبق کد فقط علامت < به > تغییر دادم در ابتدای کار و کار میکنه ولی واسه روز پنج شنه برعکس مشکل بالا را داره یعنی بین بازه 15:30 تا 16:30 صفر میزنه و بعد درست میشه یعنی اگه 16:31 ساعت خروج باشه میزنه 01:01 اضافه کاری ولی قبلشا صفر میزنه




shortage2: Format(CDate(IIf(#04:30:00 ب.ظ#-[saat khoroj]<0;#04:30:00 ب.ظ#-[saat khoroj]-IIf([saat khoroj]<#12:30:00 ب.ظ#;#01:00:00 ق.ظ#;0)-IIf([saat khoroj]>=#12:30:00 ب.ظ# And [saat khoroj]<=#01:30:00 ب.ظ#;#01:30:00 ب.ظ#-[saat khoroj];0)-IIf(DayWeekNo(Replace("13" & [tarikh];"/";""))=5;#01:00:00 ق.ظ#;0);0));"Short Time")




اینم برنامه جدید با یکمی تغییرات

Abbas Amiri
سه شنبه 07 خرداد 1392, 21:51 عصر
سلام
تابع قبلی بصورت زیر تصحیح شد:


Function TimeInLunchHour(t1 As Date, t2 As Date) As Date
Dim t As Date
If t1 < #12:00:00 PM# And t2 > #1:00:00 PM# Then
t = #1:00:00 AM#
ElseIf Not (t2 < #12:00:00 PM# Or t1 > #1:00:00 PM#) Then
If t2 >= #12:00:00 PM# And t2 <= #1:00:00 PM# Then
t = t2 - #12:00:00 PM#
Else
t = #1:00:00 PM#
End If
If t1 >= #12:00:00 PM# And t1 <= #1:00:00 PM# Then
t = t - (t1 - #12:00:00 PM#)
End If
End If
TimeInLunchHour = t
End Function



برای محاسبه اضافه کار چه پارامترهایی را درنظر می گیرید؟

shahla60
سه شنبه 07 خرداد 1392, 23:19 عصر
مشکل کد پست قبلیا چیکار کنم???(shortage)اضافه کاری فقط بعد ساعت 16:30به ما میگه چقدر بوده

Abbas Amiri
سه شنبه 07 خرداد 1392, 23:50 عصر
مشکل کد پست قبلیا چیکار کنم???(shortage)اضافه کاری فقط بعد ساعت 16:30به ما میگه چقدر بوده

تابع برای اضافه کاری با احتساب پنجشنبه .


Const StartTime As Date = #8:00:00 AM#, EndTime As Date = #4:30:00 PM#, ThursDayEndTime As Date = #3:30:00 PM#
Const StartLunch As Date = #12:30:00 PM#, EndLunch As Date = #1:00:00 PM#


Function OverTime(tExit As Date, tarikh) As Date
If EndTime < tExit - IIf(DayWeekNo(CLng(tarikh)) = 5, #1:00:00 AM#, 0) Then
OverTime = EndTime - tExit - IIf(DayWeekNo(CLng(tarikh)) = 5, #1:00:00 AM#, 0)
End If
End Function



ضمنا با این همه مثال ونمونه به جای اینکه همه مسایل رو با جزئیات بپرسید ، سعی کنید با الگو گیری و آزمایش وخطا به نتیجه برسید و الا تا ابد باید برای هر مسئله ای پست بزنید .

shahla60
چهارشنبه 08 خرداد 1392, 12:31 عصر
ببخشید باز من سوال کردم ولی این تابع که شما نوشتید کار نمیده نمیدونم چرا و اضافه کاریا بهم نمیده
خودمم بلد نیستم خوب:گریه:
یه مشکل جدید دیگه واسه مرخصی(morokhasi) تابعی که نوشتید واسم درست عمل میکنه ولی اگه ساعت مرخصی ساعت ابتدا 12:01 و پایان 13:01 باشه باید طبق تابع Luch فقط بگه 00:01 ولی میگه 11:59 رفته مرخصی نمیدونم چرا
و مشکل تابع shortage هم حل نشد که تو پست قبلم گفتم میشه یه نگاه دیگه خوددون بکنید به این عیب ها و رو برنامه واسم درست کنید

بازم ببخشید انقدر سوال میکنم واقعا خودم بلد نیستم خیلیم گشتم ولی چیزی نتونستم یاد بگیرم که بتونم مثل شما استاد کد بنویسم
اگه زحمتی نیست این مشکلاتا واسه من حل کنید

فقط یه خواهش دیگه ساعت ناهار بین 12:30 تا 13:30 بگیرید

بازم ببخشید از این همه سوالم:ناراحت:
دوست دارم برنامه به انتها برسه البته همه زحمت این برنامه گردن شما افتاده

shahla60
جمعه 10 خرداد 1392, 11:58 صبح
اقای امیری منتظر جواب و کمکدون هستم

shahla60
چهارشنبه 15 خرداد 1392, 17:33 عصر
اقای امیری کدی که برای من نوشتیدا نمیخواهید اصلاح کنید??حداقل جواب بدید این همه ازت خواهش کردم

aimaz23
یک شنبه 20 بهمن 1392, 08:04 صبح
سلام
یه سوال در مورد استفاده از IIF میخوام توی خروجی گزارش اگر مقدار فیلد مثلاً X زیر 200باشه ریپورت1 باز بشه اگر کمتر باشه ریپورت 2 بازشه میشه راهنمایی کنید

RESMAILY
یک شنبه 20 بهمن 1392, 20:08 عصر
به نام خدا
با سلام. مي بخشيد البته! ولي گفته اند كه سوال، نصف جواب است. شما نوشته اي

ش اگر مقدار فیلد مثلاً X زیر 200باشه ریپورت1 باز بشه اگر کمتر باشه ریپورت 2 بازشه میشه راهنمایی کنید
خب اين يعني چي؟ زير 200 كه زير 200 است. كمتر از آن يعني چقدر است ، مثلا؟

aimaz23
چهارشنبه 23 بهمن 1392, 10:09 صبح
به نام خدا
با سلام. مي بخشيد البته! ولي گفته اند كه سوال، نصف جواب است. شما نوشته اي

خب اين يعني چي؟ زير 200 كه زير 200 است. كمتر از آن يعني چقدر است ، مثلا؟

من یه فرم دارم به 300 ورودی که از شون گزارش تهیه می کنم می خوام وقتی گزارش های بین 1تا200 رو باز می کنم ریپروت یک باز بشه واز 201 به بعد ریپروت2 باز بشه.......

aimaz23
شنبه 26 بهمن 1392, 08:49 صبح
من یه فرم دارم به 300 ورودی که از شون گزارش تهیه می کنم می خوام وقتی گزارش های بین 1تا200 رو باز می کنم ریپروت یک باز بشه واز 201 به بعد ریپروت2 باز بشه.......

انشالله جواب دارد

aimaz23
پنج شنبه 08 اسفند 1392, 14:10 عصر
انشالله جواب دارد
حالا جواب نشد
راهنمایی کنید....