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

عرض حقل بالتقرير لعدة مرات

بدأه halo all في 22 أكتوبر 2009 · 10 رد · 1,856 مشاهدة · في قواعد بيانات Visual FoxPro
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

اتمنى ان اجد طريقة في التقرير

يعرض حقل لعدة مرات

وكل مرة يعتمد على حقل معين

وهو عرض وقت حضور موظف 31مرة وكل مرة يعتمد على يوم الشهر اذا واحد واذا ثنين يعرضة بالعمود الثاني

بختصار..............

اريد تقرير فيه 31عمود يمثل شهر كامل

تحت كل واحد يعرض وقت دخول الموظف في اليوم المحدد اعلاه

كيف اضع شرط داخل الحقل المعروض في 31المرة بأن لايعرض

الاا اذا كان يوم الشهر في هذا اليوم

اي يكون لكي عرض حقل حسب حقل اخر

#2

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

بصراحة استفسارك حيرني قليلاً.... وما فهمته أنك تريد:

- تجهيز تقرير تعرض فيه أوقات حضور الموظفين خلال ايام الشهر

- عرض عدد أيام الشهر بواسطة 31 عمود في تقرير واحد

- وضع شرط لكل خانة في هذا التقرير ( ووالله أعلم بكم شرط تنوي أن ترهق التقرير )

أقترح عليك التالي:

قم بانشاء جدول مؤقت Cursor يحتوي على 31 عمود

Create Cursor crsDetails (EmpNo n(4))
For II = 1 TO 31
		  theDay='MyDay'+ALLTRIM(STR(II))
		  Alter Table crsDetails ADD &theDay n(10)
next
select crsDetails
appen blank

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

For II = 1 TO 31
		  MyValue=ALLTRIM(STR(II))
		  lcField = 'MyDay'+ MyValue
		  Replace (lcField) with II
next

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

عسى أن يفيدك هذا

مع التحية

أستغفر الله العظيم و أتوب إليه

#3

شكراً لك اخي الكريم

اخي الكريم جدا جدا

اتصور ان هذا الموضوع ايفيدني وبارك الله فيك

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

المطلوب هو تقرير لشؤون العاملين مأخوذ من جهاز بصمة الاصبع

وقد ربط البرنامج بالجهاز

ليسجل ساعة دخول وخروج كل موظف لدينا في الشركة

المطلوب في هذا التقرير :

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

لهذا سوف يصبح عدد اعمدة الحضور 31عمود حسب عدد ايام الشهر مع العلم هو تابع لحقل واحد في قاعدة البيانات

وقد ارفقت ايظا لك قاعدة البيانات

في ملف اكسس

وطلب اخر منك لدي برنامج تنفيذي بالفوكس واحتاج السورس كود لهذا البرنامج

ممكن ان ترسل لي باث لموقع فيه Decompiler

للفوكسبرو

1FINGER.rar

post-95785-1256449322_thumb.jpg

#4

السلام عليكــم ورحمـة الله وبركاتــه ،،

أخي الكريم..

مرفق نموذج لما طلبت..... يجب أن تضعه في نفس ملف قاعدة البيانات الخاصة بك ( Finger ) مع مراعاة تسميتها Finger وليس 1Finger

كل ما عليك هوتجهيز التقرير.... ووضع الافكار الخاصة بك FINGER.rar

بالنسبة للـ Decompiler.....من ناحيتي ريح بالك وانسى الموضوع...

مع التحية

أستغفر الله العظيم و أتوب إليه

#5

استاذ استاذ ابحق

شكرا جزيلا على الفكرة الي اكثر من رائعة

ولكن بعد ان قمت بتصميم التقرير

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

او عرض ما في الكرد على التقرير

الذي تعلمته هو وضع داتا انفايرومنت لسحب بينات جدول ما الى تقرير

ولكن في حالتي كرد او كيرسر لاتوجد لدي معلومات

:ty:

#6

العفو يا أخي الكريم،،

بالنسبة لتصميم التقرير قم بانشاء جدول بنفس المواصفات المطلوبة لاستخدامه بشكل مؤقت لتصميم التقرير

ثم قم بحذف الجدول من Data Environment للتقرير ثم حذفه فعليا.

ولا يختلف أمر انشاء جدول دائم عن الجدول المؤقت سوى بكلمة Table

create TABLE crsDetails (BadgeNo c(6))
for II = 1 to 31
	theDay='D'+alltrim(str(II))
	alter table crsDetails add &theDay c(15)
next

ويوجد حل آخر وهو تثبيت الجدول بشكل دائم، واستخدامه في التقرير والنموذج بدل الــ Cursor

مع التحية

أستغفر الله العظيم و أتوب إليه

#7

طبقت فكرة التقرير وبدات اضيف لمساتي على الكود

فأثناء تكوين كيرسور employees

اضفت حقول اخرى لعرضها فأضفت الكود التالي

* Create Cursor to hold the Employees #:

select distinct (BadgeNo) as BadgeNo , (badgename) as badgename , (empno) as empno from CrsAttend into cursor crsEmployees

الى حدث تحميل الفورم ليضهر الكرد فيه حقلين اخرين

واضفت الى كوماند العرض اثناء اضافة badgeno

ايضا هاذين الحقلين

ولكن عرض الكرد بالنهيائة يظهر بهذه الطريقة

الصورة المرفقة

والبرنامج بعد التعديل بالمرفق

post-95785-1256712971_thumb.jpg

Shadowz.rar

#8

هذا طبيعي...فأنت تقوم بعمل اضافة لكل من الاسم ورقم الشارة ورقم الموظف كل على حدى

عليك اضافة الثلاثة بيانات مجتمعة...على النحو التالي

Insert into crsDetails (BadgeNo, badgename, empno) values (lcBadgeNo, Icbadgename, Icempno)

بدلا من

insert into crsDetails (BadgeNo) values (lcBadgeNo)
insert into crsdetails (badgename) values (Icbadgename)
insert into crsdetails (empno) values (Icempno)

أستغفر الله العظيم و أتوب إليه

#9

السلام عليكــم ورحمـة الله وبركاتــه ،،

الان بعد هذه التعديلات الجميلة منك استاذي

اريد اضافة المجموع الكلي للدوام الاضافي لكلك موظف خلال هذا الشهر

واسم الحقل overtime

وقد استعملت هذه الطريقة

select sum(overtime) as overtime from crsSelectedMonthly where alltrim(BadgeNo)=lcBadgeNo into cursor crsovertime order by tday

select crsovertime

go top

scan

select crsovertime

IcOvertime=crsovertime.overtime

select crsdetailss

replace (IcOvertime) with crsdetailss.overtime

endscan

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

سوؤال اخر في عبارة لم افهمه في الكود هي

scan

select crsJunk

lcField = 'D'+ alltrim(str(crsJunk.tDay))

select crsDetailss

replace (lcField) with crsJunk.InOutTime

endscan

Shadowz.rar

تم تعديل هذه المشاركة بواسطة halo all في 1 نوفمبر 2009 في 07:43

#10

السلام عليكــم ورحمـة الله وبركاتــه ،،

في النموذج يتم فرز بيانات كل موظف في الجدول crsJunk

لذا يكفينا اجراء عملية جمع بسيط للوقت الاضافي، كما في المرفق

بالنسبة للجزء الذي سألت عنه:

يوجد لدينا جدولين الأول crsJunk وفيه بيانات الموظف مرتبة بشكل عامودي

أما الجدول crsDetailss ( ولغايات اظهار التقرير بالشكل الذي تريده ) فالبيانات التي فيه مرتبة بشكل أفقي بحيث أن اسم الحقل عبارة عن حرف الـ D + رقم من 1 الى 31 تمثل عدد أيام الشهر

والاجراء عبارة عن اختصار لكثير من الشروط واختصار للتعامل مع أسماء الحقول بشكل مباشر

فبدلا من أن نأخذ اسم الحقل وقيمته ونخزنها بشكل مباشر، نقوم باخذ رقم اليوم الموجود في crsJunk ونضيفه لحرف الــ D كما يظهر في السطر الثالث من الاجراء اللاحق ونخزن قيمة الناتج للمتغير lcField

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

scan
	 select crsJunk
	 lcField = 'D'+ alltrim(str(crsJunk.tDay))
	 select crsDetailss
	 replace (lcField) with crsJunk.InOutTime
endscan

ملاحظة :

- اذا كنت ستستخدم جدول دائم crsDetailss فلا داعي لانشاء جدول جديد في كل مرة انما تستطيع استخدام نفس الجدول

- تم تغيير حقل overtime ليصبح N10.3

مع التحية

Shadowz.rar

أستغفر الله العظيم و أتوب إليه

#11

مشكورة مشكورة مشكورة

وممتنة جداجدا يا استاذ يامبدع

جزاك الله خيرا وادخلك الجنة

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