الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إستخراج فارق التوقيت بين حقلي داتا بيز بلغة ASP

مغلق
بدأه Almonzer في 20 سبتمبر 2006 · 3 رد · 457 مشاهدة · في منتدى تصميم صفحات الويب
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

إخواني لدي جدول قد أنشئ بـ SQL 2000 Server أخزن فيه حركات دخول وخروج الموظفين

لكني واجهت مشكلة في التقارير وهي كيفية عدم معرفة عدد ساعات الدوام التي داومها كل موظف في يوم واحد؟؟؟؟

سيتضح المثال لو فتحت ملف الإكسل المرفق

وأود منكم -فضلا لا أمراً- إرشادي الى كود في الـ ASP لإستخراج صافي ساعات الدوام الفعلية في هذا اليوم

أرجوا أن أجد ضالتي عندكم بعد أن عجزت من استخراج النتائج في الـ SQL

وجزاكم الله خير

_________________.zip

#2

السلام عليكم

اخي الكريم علي حسب الجدول الذي ارسلت

اقتباس
أرجوا أن أجد ضالتي عندكم بعد أن عجزت من استخراج النتائج في الـ SQL

عمات لك function يعيد لك عدد ساعات والدقائق الذي عملها الموظف في يوم معين

ملاحظة :

لنفرض ان موظف داوم الساعة العاشرة مساءا وخرج ثاني يوم الساعة الثانية صباحا فانا اعتبرت ان السجلين سيكونا كالتالي

66 , ADMN-01 , 9/12/2006 , in , 9/12/2006  10:30:00 PM ,dfsdf,sdfsdf
67 , ADMN-01 , 9/12/2006 , in , 9/13/2006  02:00:00 AM ,dfsdf,sdfsdf

اي ان التاريخ سيتغير في حقل ال TrxTime

ALTER function dbo.getHours
	(@EmpNumbr nchar(50) , @date datetime)
returns float
as
	begin
	/*
	 declare  @TrxType_Enter nvarchar(4)
	 declare @TrxType_Exit nvarchar(4)
	 set @TrxType_Enter='دخول'
	 set @TrxType_Exit='خروج'
	*/
 declare @hCount int ,@mCount int


 declare Curs cursor for 
   select  TrxTime  from  moves where 
		   EmpNumbr=@EmpNumbr and [date]=@date order by TrxTime
 open Curs
 declare @TrxType nvarchar(4)
 declare @TrxTime datetime
 declare @states int
 declare @_h int,@_m int,@_d int
 declare @h int,@m int,@d int
 declare @workH int , @workM int
 set @hCount =0
 set @mCount =0
 set @states=0

fetch next from Curs into /*@TrxType ,*/ @TrxTime 
while @@Fetch_Status = 0
begin
  if @states = 0
	 begin
	   set @_d =datepart(d,@TrxTime)   
	   set @_h =datepart(hh,@TrxTime)
	   set @_m =datepart(n,@TrxTime) 
	   set @states=1
	 end  
  else 
	 begin
	   set @d =datepart(d,@TrxTime)   
	   set @h =datepart(hh,@TrxTime)   
	   set @m =datepart(n,@TrxTime)
	   if @d>@_d   -- if finished next day
		  set @h=@h+24

	   set @workH = @h - @_h	  
	   set @workM = @m - @_m
	   if @workM < 0
		  begin
			set @workH = @workH - 1
			set @workM = 60 +@workM
		  end   

		set @hCount = @hCount + @workH
		set @mCount = @mCount + @workM 
		set @states=0  
	 end   
  fetch next from Curs into /*@TrxType ,*/  @TrxTime  
End
 if @mCount>59
	begin
	   set @hCount= @hCount + cast(@mCount/60 as int)
	   set @mCount= @mCount % 60
	end
close  Curs
DeAllocate Curs
return @hCount +(cast(@mCount as decimal)/100)
end

جربها وأخبرني هل هذا طلبك

ملاحظة :

انا اهملت الدخول والخروج غلى اعتبار ان مستحيل الموظف يدخل وبعدها يدخل ايضا

اي دخول ثم خروج ثم دخول ثم خروج وهكذا

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 22 سبتمبر 2006 في 02:14

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#3

جزاك الله خير أخي الحبيب على اهتمامك وتعبك

أقدر لك جهدك الجبار

لكن عندما أقوم بتعريف الفانكشن يعطيني رسالة خطأ

invaled Object name dbo.getHours

???

#4

السلام عليكم

جرب ضع الأسماء داخل []

alter function [dbo].[getHours]
 (@EmpNumbr nchar(50) , @date datetime)

او اعمل فنكشن جديد زي ما بتسوي عادة

وأنسخ ال body تاع الفنكشن اللي في الأعلى للفنكشن الجديد

مع ملاحظة اظافة tow parameters

(@EmpNumbr nchar(50) , @date datetime)

وال returns type يكون float

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 23 سبتمبر 2006 في 23:18

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…