delphi4arab منتديات دلفي للعرب

نسخة كاملة : تحويل الأرقام الى حروف في فاست ريبورت
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
أوجه الشكر وتحياتنا الخالصة الى أساتذتنا المشرفين على هذا الموقع وإلى أصدقائنا المشتركين...
لدي سؤال وهو كيفية تحويل الأرقام الى حروف في فاست ريبورت وشكرا جزيلا.
المكونات والوحدات كثيرة ومختلفة ومتنوعة و هذه وحدة تفعل ذلك


كود :
unit Unit2; interface uses SysUtils,StrUtils; Function words(Number : Double; F1 : String = 'دينار'; F2 :String = 'دينارين' ; F3 : String = 'دنانير' ; D1 : String = 'درهم' ; D2 : String = 'درهمين'; D3: String = 'دراهم'; SayJust : Boolean = True) : String; implementation Function words(Number : Double; F1 : String = 'دينار'; F2 :String = 'دينارين' ; F3 : String = 'دنانير' ; D1 : String = 'درهم' ; D2 : String = 'درهمين'; D3: String = 'دراهم'; SayJust : Boolean = True) : String; Var   P,P1,P2,P3,P4,w,w1,w2,w3,N,n1 : String;   SD : Int64; (*------------------------------------------------------------------------*)   Function Swords(N, U1, U2, U3 : String) : String;   Type     TF = array[0..2,0..9] of String;   Const     FNO : TF = (('','واحد','إثنان','ثلاثة','أربعة','خمسة','ستة','سبعة','ثمانية','تسعة'),               ('','عشر','عشرون','ثلاثون','أربعون','خمسون','ستون','سبعون','ثمانون','تسعون'),               ('','مائة','مائتين','ثلاثمائة','أربعمائة','خمسمائة','ستمائة','سبعمائة','ثمانمائة','تسعمائة'));   Var     s: array[1..3] of Byte;     PU : array[0..2] of String;     A : Tf;     w1,w2,f : String;     E : integer;   Begin     A := FNO;     Pu[0] := '';     PU[1] := U1 ;     Pu[2] := U2 ;     E := StrToInt(N);     If E < 3 then  Swords := pu[E]     Else       Begin         N := leftstr('000',3-length(n)) + N ;         For E := 1 to 3 Do S[E] := StrToInt(n[4-E]);         If (s[2] = 0) or (s[1] = 0) Then W2 := '' Else W2 := ' و ';         If (s[3] = 0) Or (s[1]+S[2] = 0) Then W1 := '' Else W1 := ' و ';         If S[2] = 1 Then           Begin             A[0,1] := 'أحد ';             A[0,2] := 'إثنا ' ;             W2 := ' ';           End;         Case strToInt(n[2]+n[3]) of           0 : Begin                 A[2, 2] := 'مائتا ';                 F := U1;               End;           3..10 :    F := U3;           1,2, 11..99 : F := U1;         end;         swords := A[2, S[3]] + w1 + A[0, S[1]] + w2 + A[1, S[2]] + ' ' + F;       End;   End; (*------------------------------------------------------------------------*) Begin   If Number > 0 Then     Begin       Sd := Trunc(Number);       p := Swords(inttostr(round((Number-sd)*100)),D1,D2,D3);       N := leftstr('000000000000',12-length(floattostr(Sd))) + floattostr(Sd) ;       P1 := Swords(Copy(N, 10, 3), F1, F2, F3);       P2 := Swords(Copy(N, 7, 3), 'ألف', 'ألفان', 'آلاف');       P3 := Swords(copy(N, 4, 3), 'مليون', 'مليونان', 'ملايين');       P4 := Swords(copy(N, 1, 3), 'مليار', 'ملياران', 'مليارات');       If (P4 = '') Or (P1 + P2 + P3 = '') Then w3 := '' Else w3 := ' و ';       If (P3 = '') Or (P1 + P2 = '') Then w2 := '' Else w2 := ' و ';       If (P2 = '') Or (P1 = '') Then w1 := '' Else w1 := ' و ';       If P1 = '' Then P1 := ' ' + F1;       If P = '' Then w := '' Else w := ' و ';       if Sd = 0 then       N :=  P       else       N := P4 + w3 + P3 + w2 + P2 + w1 + P1 + w + P;       If SayJust Then words := 'فقط ' + N + ' لاغير'Else Words := N;     end; End; end.

ستحتاج الى اضافة متغير في الفاست ريبورت وتمرر له القيمة المطلوبة بالحروف
اذا لم تكن تعرف كيف تضيف متغير او تمرر له قيمة قل وسوف اوضح لك
جزاك الله خيرا أخي الفاضل...
(16-12-2020, 04:34 PM)Delphi4Us كتب : [ -> ]ستحتاج الى اضافة متغير في الفاست ريبورت وتمرر له القيمة المطلوبة بالحروف
اذا لم تكن تعرف كيف تضيف متغير او تمرر له قيمة قل وسوف اوضح لك

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

طريقة للتفقيط داخل fast report

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

Using Custom Functions in a Report

اما انشاء متغير وتمرير قيمة له راجع حالا ان شاء الله وسوف اضيفها ليس عندي دلفي او فاستريبورت ولا احفظ اماكن الاشياء
بالنسبة لاضافة متغير من القائمة Preport نختار Variable 


[صورة: attachment.php?aid=4412]

ومن النافذة الخاصة بالـ Variable ننشئ مجلد جديد وننشئ فيه متغير جديد
بعدها نعود الى مصمم التقارير ومن التويب Variable نجد المتغير الذي أنشأناه

[صورة: attachment.php?aid=4413]


 نقوم باسقاطه بالمكان المطلوب بالتقرير

[صورة: attachment.php?aid=4414]

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

[صورة: attachment.php?aid=4415]

وفي الحدث نقوم بالتاكد من اسم المتغير ونضع له القيمة المطلوب فربما يكون لدينا اكثر من متغير
فنكتب لو كان المتغير اسمه كذا اجعل قيمته تساوي كذا

[صورة: attachment.php?aid=4416]
كل الشكر لك استاذي الكريم على هذا الشرح

تتمة لموضوع فاست ريبورت

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

كود :
frxReport1.LoadFromFile('c:\1.fr3'); frxReport1.SaveToFile('c:\2.fr3');

في مكون التقارير ومن نافذة الخصائص تجد كل الخصائص التي تريد تركها للمستخدم منها فتح وحفظ التقرير والتعديل عليه او تصديره
وبخصوص تصدير التقرير الى صورة او PDF مثلا يجب ان تضع مكوناتها على النموذج
اسقطها فقط على النموذج وسيظهر خيار تصدير ما اسقطت بمستعرض التقارير
[صورة: 111203126.gif]
الصفحات : 1 2