اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

الردود الموصى بها

قام بنشر

السلام عليكم اخزاني الاعزاء .  في البدء اود ان اشير باني قد تعلمت البرمجة من خلال منتداكم 

واتمنى ان اجد الحل عندكم كما عوتمونا 

احتاج الى انشاء استعلام يقوم بجلب بيانات من جدول الاجازات ويدرجها بشكل اعمدة على ايام الشهر 

وقد ارفقت قاعدة بيانات مع ملف نصي اشرح فيها مشكلتي وادعو الله ان اجد الحل عندكم 

اجازات.rar

اجازات.txt

قام بنشر (معدل)

السلام عليكم:  لقد  قمت بتعبئة بيانات ا الجدول حسب طلب احد الاخوان وقمت كذلك بارفاق ملف اكسيل يبين شكل النموذج الشهري بالبيانات  اتمنى ان اجد الحل عندكم 

 

اجازات.rar

اجازات.txt

نموذج تقرير شهري.rar

تم تعديل بواسطه صباح حسين
قام بنشر

السلام عليكم اخواني الاعزاء هل انا طرحت الموضوع بشكل مخالف لتعليمات المنتدى ام ان الحل  غير ممكن 

اخواني لست الح في طلبي ولكني محتاج اليه لاكمل القاعدة او احاول ايجاد طريقة اخرى 

قام بنشر

اولا

بهذه الطريقة يلزم لتطبيق الفكرة اكثر من عملية

تبدأ من معرفة نهاية الاجازة ثم حصر الايام  واستخراجها ثم تحويل البيانات من الوضع الرأسي الى الافقي

فالعملية تحتاج الى وقت ويد خبيرة  فعليك بالصبر 

وثانيا

ما رأيك بالمتبع عموما ؟

غالب ما اطلعت عليه من البرامج  تعرض تاريخ بداية الاجازة  وتاريخ نهايتها والمدة بالايام  وقد يزيد بعضهم فيدرج تاريخ العودة

قام بنشر

شكرا لك اخي ابو خليل  لتجاوبك معي . النموذج الشهري هو نموذج متبع منذ فترة بموقع العمل ولكنني كنت استخدم اكسيل للحصول على النتيجة والمطلوب مني الان التحول الى استخدام اكسس لبناء  قاعدة بيانات لشوؤن الموظفين 

وقد وفقت في عدد من الامور مثل ( المكافات, معلومات شخصية , ترقيات , دورات , الموقف اليومي  .....) واجهتني هذه المشكلة في التقرير الشهري لدوام الموظفين . وكنت امل بالحصول غلى طريقة معينة للحصول عليه .

وانا لست على عجلة من امري .   اذا كانت هنالك امل في الحصول عليه  .بل انت اصحاب فضل علينا نحن المبتدئين .واعلم ان البرمجة تحتاج الى  الصبر . ولك ولجميع الاخوان الف تحية وتقدير 

قام بنشر

فالعملية تحتاج الى وقت ويد خبيرة



اقصد من هذه العبارة حث اخواني الخبراء على المساعدة والمحاولة

عن نفسي حاولت مع عدة ابواب ولكنها استعصت وتوصلت الى انه يمكنني تطبيق الفكرة على شخص واحد فقط
فمثلا يتم اختيار السنة ثم الشهر ثم الاسم لتخرج بيانا بالايام مرقمة خلال هذا الشهر
اذا كان هذا يفي بالحاجة فلعلي اجد الوقت الكافي لتحقيقه
وان كنت ترى طريقة اخرى فالمجال مفتوح

ايضا الموضوع مفتوح امام الاخوة الكرام ليدلوا  بدلوهم
قام بنشر

شكرا لجميع الاخوة . وبالاخص للاخوان ( احمد و ابو خليل) لتجاوبهما مع الموضوع 

سوف اطلع على موضوعك اخي احمد وان شاء الله يكون هو المطلوب 

تحياتي للجميع 

قام بنشر

الف الف شكر لك اخي احمد . وطريقة اكثر من رائع ومدهش . اخي العزيز اذا امكن ان تشرح لي  جملة الاستعلام sSQL  والطريقة الذي استطيع زيادة الاعمدة المنقولة بالاستعلام على سبيل المثال (departmen) 

 واود ان استعمل الكود في مجالات اخرى لانه كما ذكرت رائع بكل معنى الكلمة

قام بنشر

شكرا للاستاذ احمد عبد الناصر على المداخلة  ومد يد المساعدة

ومن فرج عن مؤمن كربة فرج الله عنه كربة من كرب يوم القيامة

حل رائع وهو ما يبحث عنه السائل

ولكن الحل لم يخرج من بيئة إكسل

والاستاذ صباح  ذكر في طلبه :

والمطلوب مني الان التحول الى استخدام اكسس لبناء  قاعدة بيانات لشوؤن الموظفين 
قام بنشر

شكرا لك  استاذ  أبو خليل

 
ومن فرج عن مؤمن كربة فرج الله عنه كربة من كرب يوم القيامة

 

اللهم اجعلنا منهم ,آمين يا رب

 

ولكن الحل لم يخرج من بيئة إكسل

 

الحل يعتمد علي اكواد sql لاستخراج البيانات المطلوبة بشكل دقيق و سريع ثم يترك الباقي للاكسيل و vba  بمرونته ليكمل المهمة  .

 

ربما لو كان تصميم البيانات بشكل اخر لاختلف الامر , ربما امكن استخراج التقرير باستخدام sql فقط  و الله اعلم.

 

او كما نوهت حضرتك في المشاركة رقم 7  بان هناك طرق متبعة يمكن البناء عليها .

 

تحياتي

قام بنشر

السلام عليكم 

 

استاذ صباح 

 

هذا شرح مبسط لاجزاء للكود عامتا 

 

Sub dahmour_go()
Application.ScreenUpdating = False
'هذه الفقرة لمحو البيانات القديمة ان وجدت و تعديل عدد ايام الشهر
x = Cells(Rows.Count, 1).End(xlUp).Row
If x > 5 Then Range("a6:ag" & x).ClearContents
Range("ad5:ag5").ClearContents
m = Day(DateSerial([b2], [b3] + 1, 0))
For x = 28 To m
Cells(5, x + 2) = x
Next
'هذه الفقرة للاستعلام من الاكسيس و استخراج كود الموظف و اسمه بدون تكرار بشرط ان اجازاته تقع في الشهر المراد الاستعلام عنه
Dim rsData As ADODB.Recordset
Dim sConnect As String
Dim sSQL As String
sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ActiveWorkbook.Path & "\" & [b1] & ".mdb;Persist Security Info=True "
sSQL = "select distinct x.emb_id,emb_name from ejazat as x,nformation as y where x.emb_id=y.emb_id and month(from_day)=" & [b3] & " and year(from_day)=" & [b2] & "  or (x.emb_id=y.emb_id and month(from_day)<" & [b3] & " and month(from_day+moda_ejaza)>=" & [b3] & "  and year(from_day)=" & [b2] & " )  or (x.emb_id=y.emb_id and month(from_day)>" & [b3] & " and month(from_day+moda_ejaza)>=" & [b3] & "  and year(from_day)<" & [b2] & "  and year(from_day+moda_ejaza)=" & [b2] & " )   order by x.emb_id"
Set rsData = New ADODB.Recordset
rsData.Open sSQL, sConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText
If Not rsData.EOF Then
[a6].CopyFromRecordset rsData
'هذه الفقرة لاستخراج كود الموظف و اسمه و نوع الاجازة و  تاريخ البداية و عدد الايام و تاريخ النهاية
'بشرط ان اجازاته تقع في الشهر المراد الاستعلام عنه
' و هذه البيانات مؤقتة لحساب التقرير و تمحى في اخر الكود
sSQL = "select x.emb_id,emb_name,ejaza_type,from_day,moda_ejaza,from_day+moda_ejaza from ejazat as x,nformation as y where x.emb_id=y.emb_id and month(from_day)=" & [b3] & " and year(from_day)=" & [b2] & "  or (x.emb_id=y.emb_id and month(from_day)<" & [b3] & " and month(from_day+moda_ejaza)>=" & [b3] & "  and year(from_day)=" & [b2] & " )  or (x.emb_id=y.emb_id and month(from_day)>" & [b3] & " and month(from_day+moda_ejaza)>=" & [b3] & "  and year(from_day)<" & [b2] & "  and year(from_day+moda_ejaza)=" & [b2] & " )   order by x.emb_id,from_day"
Set rsData = New ADODB.Recordset
rsData.Open sSQL, sConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText
If Not rsData.EOF Then
[ah6].CopyFromRecordset rsData
rsData.Close
End If
'********************************************************
'هنا كود لتحويل البيانات الي شكل التقرير النهائي
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
 For n = 6 To Cells(Rows.Count, "ah").End(xlUp).Row
 If Cells(i, 1) = Cells(n, 34) Then
  For Each c In Range("c5:ag5")
  If Not IsEmpty(c) Then
  If DateSerial([b2], [b3], c.Value) >= Cells(n, 37) And DateSerial([b2], [b3], c.Value) <= Cells(n, 39) Then
  Cells(i, c.Column) = Cells(n, 36).Value
  End If
  End If
  Next
 End If
 Next
Next
'*************************************************************
Range("ah6:am" & Cells(Rows.Count, "ah").End(xlUp).Row).Clear
End If
Application.ScreenUpdating = True
End Sub

 

اولا يمكن زيادة عمود departmen لكن سيلزم التعديل في باقي اجزاء الكود .

 

ثانيا بالنسبة لجملة sql فتعتمد علي استخراج البيانات ان كان تاريخ بداية الاجازة في الشهر الحالي و السنة الحالية 

او  تاريخ بداية الاجازة في شهر سابق و في السنة الحالية  و تاريخ نهاية الاجازة  اكبر من او يساوي الشهر الحالي 

او تاريخ بداية الاجازة في سنة سابقة و  تاريخ نهاية الاجازة يقطع الشهر الحالي للسنة الحالية 

 

 

ملاحظة الشهر الحالي اي الشهر المراد البحث بدللالته .

 

تحياتي

قام بنشر

السلام عليكم . اخي العزيز احمد ارجو ان لااثقل عليك بطلبي الاخير وهو اضافة ( department )   الى ناتج الاستعلام لكون التقرير النهائي سوف يطبع لكل قسم على حدى ومن جانبي سوف احاول ان اتعمق بالكود وان اصل الى نتيجة التي اتمناها. واذا لم اتمكن من الحل  . ارجو نتواصل هنا بعد يومين . 

  تحياتي للجميع . وادعو الله العلي القدير ان يجازيكم على صالح اعمالكم وارشادكم لنا نحن المبتدئين .

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information