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

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

بدأه red_scorpion1 في 8 فبراير 2013 · 15 رد · 6,132 مشاهدة · في تصميم وبرمجة التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

اعلم ان الموضوع قد يكون مكرر ولكن للأسف لم أصل إلى حل حتى الأن


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

 

التقرير يتم تعبئته عن طريق بارمتر يحتوى على اسم الفرع

 

ويظهر التقرير بعملاء هذا الفرع فقط وهناك 2 تكست فى التقرير واحد به الرقم والأخر هو ما اريد تفقيط الرقم فيه ولا ادرى كيف يمككنى تفقيط القيمة داخل التقرير عن طريق ملف DLL 


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

 

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

#2

وعليكم السلام 

اهلا اخي red_scorpion1

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

 

https://www.dropbox.com/s/4fzwuwq8e40j45x/Arabic_Text.rar

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#3

قد يفيدك هذا المرفق ولكن لم اجربة كثير واعتقد به اخطاء مجرد فكره

No2ArabicTxt.rar

#4

السلام عليكم

 

وفقنى الله تعالى ووجدت دالة SQL تقوم بالتفقيط كما يجب ولكنى لا أعرف كيف يمكن أن أستدعيها داخل تقرير كريستال ومن خلال بحثى وجدت ان الحل يكمن فى عمل SQL Expression Field ؟؟؟

 

اولا الدالة لكى يستفيد الجميع

 

USE [Emplo]
GO
/****** Object:  UserDefinedFunction [dbo].[Tafkeet]    Script Date: 10/02/2013 01:05:33 ص ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[Tafkeet] (@TheNo  numeric(18,2))
returns varchar(1000) as 
begin
if @TheNo <= 0   return 'zero'
declare @TheNoAfterReplicate varchar(15)
set @TheNoAfterReplicate = right(replicate('0',15)+cast(floor(@TheNo) as varchar(15)),15)
declare @ComWithWord varchar(1000),@TheNoWithDecimal as varchar(400),@ThreeWords as int
set @ThreeWords=0
set @ComWithWord  = ' فقط '
declare   @Tafket TABLE (num int,  NoName varchar(100))
INSERT INTO @Tafket VALUES (0,'')  
INSERT INTO @Tafket VALUES (1,'واحد')
INSERT INTO @Tafket VALUES (2,'اثنان')
INSERT INTO @Tafket VALUES (3,'ثلاثة')
INSERT INTO @Tafket VALUES (4,'اربعة')
INSERT INTO @Tafket VALUES (5,'خمسة')
INSERT INTO @Tafket VALUES (6,'ستة')
INSERT INTO @Tafket VALUES (7,'سبعة')
INSERT INTO @Tafket VALUES (8,'ثمانية')
INSERT INTO @Tafket VALUES (9,'تسعة')
INSERT INTO @Tafket VALUES (10,'عشرة')
INSERT INTO @Tafket VALUES (11,'احدى عشر')
INSERT INTO @Tafket VALUES (12,'اثنى عشر')
INSERT INTO @Tafket VALUES (13,'ثلاثة عشر')
INSERT INTO @Tafket VALUES (14,'اربعة عشر')
INSERT INTO @Tafket VALUES (15,'خمسة عشر')
INSERT INTO @Tafket VALUES (16,'ستة عشر')
INSERT INTO @Tafket VALUES (17,'سبعة عشر')
INSERT INTO @Tafket VALUES (18,'ثمانية عشر')
INSERT INTO @Tafket VALUES (19,'تسعة عشر')
INSERT INTO @Tafket VALUES (20,'عشرون')
INSERT INTO @Tafket VALUES (30,'ثلاثون')
INSERT INTO @Tafket VALUES (40,'اربعون')
INSERT INTO @Tafket VALUES (50,'خمسون')
INSERT INTO @Tafket VALUES (60,'ستون')
INSERT INTO @Tafket VALUES (70,'سبعون')
INSERT INTO @Tafket VALUES (80,'ثمانون')
INSERT INTO @Tafket VALUES (90,'تسعون')
INSERT INTO @Tafket VALUES (100,'مائة')
INSERT INTO @Tafket VALUES (200,'مائتان')
INSERT INTO @Tafket VALUES (300,'ثلاثمائة')
INSERT INTO @Tafket VALUES (400,'أربعمائة')
INSERT INTO @Tafket VALUES (500,'خمسمائة')
INSERT INTO @Tafket VALUES (600,'ستمائة')
INSERT INTO @Tafket VALUES (700,'سبعمائة')
INSERT INTO @Tafket VALUES (800,'ثمانمائة')
INSERT INTO @Tafket VALUES (900,'تسعمائة')
INSERT INTO @Tafket  SELECT FirstN.num+LasteN.num,LasteN.NoName+' و '+FirstN.NoName
FROM (SELECT * FROM @Tafket WHERE num BETWEEN 20 AND 90) FirstN CROSS JOIN (SELECT * FROM @Tafket WHERE num BETWEEN 1 AND 9) LasteN
INSERT INTO @Tafket  SELECT FirstN.num+LasteN.num,FirstN.NoName+' و '+LasteN.NoName
FROM (SELECT * FROM @Tafket WHERE num BETWEEN 100 AND 900) FirstN CROSS JOIN (SELECT * FROM @Tafket WHERE num BETWEEN 1 AND 99) LasteN
 if left(@TheNoAfterReplicate,3) > 0
    set @ComWithWord = @ComWithWord + ISNULL((select NoName  from  @Tafket where num=left(@TheNoAfterReplicate,3)),'')+  ' ترليون' 
 if left(right(@TheNoAfterReplicate,12),3) > 0 and  left(@TheNoAfterReplicate,3) > 0
	set @ComWithWord=@ComWithWord+ ' و '
 if left(right(@TheNoAfterReplicate,12),3) > 0
    set @ComWithWord = @ComWithWord +ISNULL((select NoName from @Tafket where num=left(right(@TheNoAfterReplicate,12),3)),'') +  ' بليون'
 if left(right(@TheNoAfterReplicate,9),3) > 0
begin
    set @ComWithWord=@ComWithWord + case  when @TheNo>999000000  then ' و'  else '' end 
 set @ThreeWords=left(right(@TheNoAfterReplicate,9),3)
       set @ComWithWord = @ComWithWord + ISNULL((select case when   @ThreeWords>2 then NoName end  from @Tafket  where num=left(right(@TheNoAfterReplicate,9),3)),'')  + case when  @ThreeWords=2 then ' مليونان' when   @ThreeWords between 3 and 10 then ' ملايين' else ' مليون' end
end
if left(right(@TheNoAfterReplicate,6),3) > 0
begin
    set @ComWithWord=@ComWithWord + case  when @TheNo>999000  then ' و'  else '' end 
    set @ThreeWords=left(right(@TheNoAfterReplicate,6),3)
    set @ComWithWord = @ComWithWord + ISNULL((select case when  @ThreeWords>2 then NoName  end from @Tafket where num=left(right(@TheNoAfterReplicate,6),3)),'')+ case when  @ThreeWords=2 then ' الفان' when @ThreeWords between 3 and 10 then ' الاف'  else ' الف' end 
end
  if right(@TheNoAfterReplicate,3) > 0
  begin
	if round(@TheNo,0)>999 
	begin
	set @ComWithWord=@ComWithWord + ' و'
	end
  end
 set @ThreeWords=right(@TheNoAfterReplicate,2)
 set @ComWithWord =  @ComWithWord  +   ISNULL((select  NoName  from @Tafket where  num=right(@TheNoAfterReplicate,3)),'')
 -- set @ComWithWord =  @ComWithWord  +   ISNULL((select  NoName  from @Tafket where @ThreeWords>2 AND num=right(@TheNoAfterReplicate,3)),'')
set @ComWithWord = @ComWithWord +' '+ case when  @ThreeWords=2 then ' جنيهان' when @ThreeWords between 3 and 10 then ' جنيهات'  else ' جنيه' end 
if right(rtrim(@ComWithWord),1)=',' set @ComWithWord = substring(@ComWithWord,1,len(@ComWithWord)-1)
 if  right(@TheNo,len(@TheNo)-charindex('.',@TheNo)) >0 and charindex('.',@TheNo)<>0
	begin
		set @ThreeWords=left(right(round(@TheNo,2),2),2)
		SELECT @TheNoWithDecimal=  ' و' + ISNULL((SELECT NoName from @Tafket where num=left(right(round(@TheNo,2),2),2)  AND @ThreeWords >2),'')
		set @TheNoWithDecimal = @TheNoWithDecimal+  case when  @ThreeWords=2 then ' قرشان' when @ThreeWords between 3 and 10 then ' قروش'  else '  قرش' end 
set @ComWithWord = @ComWithWord + @TheNoWithDecimal 
END
set @ComWithWord = @ComWithWord + ' مصرى لا غير'
return  rtrim(@ComWithWord)
end

 

 

ثانيا: كيف يمكننى الإستفادة من تلك الدالة داخل تقرير كريستال حيث تقوم هى بالتفقيط ؟؟؟

#5

وعليكم السلام 

اخي هل شوفت المثال الى عملتو ليك 

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

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

بعدان بتعمل حفظ للاجمالى النص فى قاعدة البيانات كا حقل نص عادى ومن ثم تقوم بعرض حقل التفقيط فى الكريستال ريبورت وتطبع الاجمالى بالتفقيط كما يجب  :lol:

 

بالتوفيق 

تم تعديل هذه المشاركة بواسطة Develooper في 10 فبراير 2013 في 02:42

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#6
Develooper كتب:

وعليكم السلام

اخي هل شوفت المثال الى عملتو ليك

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

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

بعدان بتعمل حفظ للاجمالى النص فى قاعدة البيانات كا حقل نص عادى ومن ثم تقوم بعرض حقل التفقيط فى الكريستال ريبورت وتطبع الاجمالى بالتفقيط كما يجب :lol:

بالتوفيق

اخي العزيز مثالك ممناز وقد استفدت منه ولكني اود انا اعلم كيفية استدعاء الدالة داخل التقرير

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

#7

أخي الفاضل

يتم استدعاء الدالة كالتالي

 

Select dbo.Tafkeet(9875)

لاحظ تفقيط الرقم المكتوب ما بين القوسين ... حاول كتابة اي رقم آخر ما بين القوسين وسيتم تفقيطة

 

أما بخصوص استخدامها داخل التقرير فستقوم بكتابة الجملة بالشكل التالي في سكريبت التقرير

 

 

Select dbo.Tafkeet(اسم الحقل)

 

اي تقوم باستبدال الرقم ما بين القوسين باسم الحقل المراد تفقيطة

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 10 فبراير 2013 في 08:11

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8
محمد فؤاد تركي كتب:

أخي الفاضل

يتم استدعاء الدالة كالتالي

 

Select dbo.Tafkeet(9875)

لاحظ تفقيط الرقم المكتوب ما بين القوسين ... حاول كتابة اي رقم آخر ما بين القوسين وسيتم تفقيطة

 

أما بخصوص استخدامها داخل التقرير فستقوم بكتابة الجملة بالشكل التالي في سكريبت التقرير

 

 

Select dbo.Tafkeet(اسم الحقل)

 

اي تقوم باستبدال الرقم ما بين القوسين باسم الحقل المراد تفقيطة

 

جزيل الشكر أستاذى الفاضل محمد فؤاد تركى

 

ولكن سامحنى هل من توضيح اكثر لطريقة إستخدامها داخل التقرير من فضلك ؟

 

لأننى قمت بعمل الأتى قمت من داتا اكسبرت بإدراج الوظيفة الخاصة بالتفقيط فى التقرير ووجدتها فى ستورد بروسيدجر بالرغم من انها فى الSQL موجودة بالوظائف ووجدت ان الكريستال ريبورت قام بإدراج البارامتر خاص بها تلقائيا وهو   @TheNo ثم قمت بالدخول إلى الفورميولا وكتبت السطر التالى:

 

{?@TheNo}=Select dbo.Tafkeet({Alex_Mid.tot_wt})

 

إلا أنه تظهر لى الرسالة التالية

 

OChHC.jpg

 

عذرا لجهلى اخى محمد ولكن ارجوا منك مساعدتى ولك جزيل الشكر

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 10 فبراير 2013 في 19:41

#9

السلام عليكم 

اخي محمد فؤاد رجاء توضيح كيفية استخدام ال Function داخل التقرير 

لان حدث معي نفس المشكلة 

 

ولك جزيل الشكر 

تم تعديل هذه المشاركة بواسطة Develooper في 5 مارس 2013 في 01:59

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#10

لا تستخدم وظائف السكول في التقارير ولكن تستخدم داخل عناصر السكول مثل الاستعلام والاجراء المخزن ثم يسخدم العنصر في التقرير علي ما اعتقد

#11

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

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#13

السلام عليكم 

شكرا اخى كريم على متابعة الموضع والمساعده 

ولكن اناكنت عايز  استخدم ال function من داخل ال report

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

 

https://www.dropbox.com/s/4fzwuwq8e40j45x/Arabic_Text.rar

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#14

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

#15

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

يتم عمل Farmula fields

ويتم تمرير لها القيمة بالتفقيط وعرضها بالتقرير وهنا مش حنعمل حفظ فى قاعدة البيانات ولكن لو الطريقة الخاصة بعمل function يتم تنفيذها فى التقرير والعرض هتريح كتير 

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#16

الاستاذ كريم   السلام عليكم

انا عملت بالمثال بتاع حضرتك وكويس تمام بس المشكلة في  الحقل الرقم

انا لما اكتب   من  1 إلى 999   يطلع كويس

المشكلة في ايه

لما اكتب  1000    بيطلع  بالحروف  عشرة الاف   ولما اكتب  10000 يطلع مائة الف

يعني بيذيد  صفر 

فيه مشكلة في الكود

ياريت حضرتك تشوفها

انا باقي على هذه الخطوط ومتوقف من المشروع عليه

لاني باعمل بفيجوال بيسك 6  وكريستال ريبورت 10     قاعدة  بيانات اكسس

 

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

 

المثال في الاعلى

دا اسمه

تم تعديل هذه المشاركة بواسطة mashal2013 في 31 مارس 2013 في 11:58

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

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

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

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

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