إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

كيف أستخدم function التفقيط ?


15 رد (ردود) على هذا الموضوع

#1 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 16 February 2004 - 05:47 PM

هذا الكود منقول من منتديات الفريق العربى للبرمجة عن الاخ أرنب وهو كود التفقيط
--------------------------------------------------------------------------------------
بداية أريد أن اوضح ان هذا الكود يتم أنشائة على الداتابيز ومن الممكن ان يتم أنشائة من Procedure Builder ولكن الكود الموجود خاص بانشائة على sql plus
وقد قمت باخذ نسخة(copy) من الكود المرفق وعلمت (past) على الداتابيز(sql plus)
واعطانى ما يفيد بانه قد تم أنشاء ال(function) بنجاح

وسؤالى هنا هو
------------------
1- كيف أستخدم هذا ال(function) على أى فورم فى مشروعى يكون بها حقل مثل
(المرتبات, الاسعار, قيمة فاتورة, وهكذا) أى أذا أردت أن أعرضها فى (display item) بجانب الحقل الاساسى المعروض فيه سعر او مرتب
وكذلك لو أردت أظهارها فى الحقل الرئيسى بدلا من الارقام

2- كيف أنفذ هذا الكود على
أ- sql plus
ب- pl/sql ---->Procedure Builder

3- كيف أعرض كل ال(procedures ) و ال (functions)
الموجودة على الداتابيز مثل عرض كل الجداول الموجودة على الداتابيز
select * from tab;
desc table emp;
------------------------------------------------------------------------------------------
نص الموضوع كما جاء فى كلام الاخ أرنب
---------------------------------------------
أتمنى من الجميع الأستفادة من هذا الكود فلقد اجتهدت في عمله حتى يمكن استخدامة في جميع الامكان
فهو يتعامل مع اربع باروميترات وهي الرقم و العملة و اسم جزء العمله و حالة إظهار الكسور واللغة
فشكل الوظيفة على النحو التالي
Num_ar( A,B,C,D,F)1

A = الرقم وهو من 123456789123456789- إلى 12345678912345679
B= اسم العملة ريال سعودي أو دينار او جنيه وإذا لم يتم وضعها سوف تأخذ قيمة ريال يمني
C=اسم جزء العملة والقيمة الافتراضية قرش
D= كيفية إظهار الكسور رقماُ او تفنيط ويأخذ المعامل 1 للتفنيط أو 0 للرقم والقيمة الافترصية 0
F= تمثل لغة الاخراج وحتى الآن تدعم لغتان العربية والانجليزية وإذا لم تضع تـأخذ ا لغة العربية

أتمنى من الجميع تجربته وأخباري في حالة وجود مشاكل على الايميل u4_13@hotmail.com
وأعتذر عن حجم الكود فلقد حاولة تصغيرة قدر الامكان ولكن جمع الكثير من الوظائف جعله يطول
ولا تنسو دعوه صالحة لأخيكم تنفعه في يوم لا ينفع فيه مال ولا بنون
-----------------------------------------------------------------------------------
الكود
------

create or replace function Num_ar (P_inp_num in NUmber,v_ce in varchar2 DEFAULT 'ريال يمني',v_de in varchar2 DEFAULT 'قرش',v_det in number DEFAULT 0,v_lan in varchar2 DEFAULT 'AR') 
return Varchar2 as 
-- Functions called : D3_To_Word 
L_Return Varchar2(1000); 

m Number := 0; 

V_inp_Num Number := 0; 
V_inp_Int Number := 0; 
V_inp_dec Number := 0; 
V_Char Varchar2(100); 
V_Temp Number := 0; 

Type LionArray is table of Varchar2(500); 
In_str LionArray := LionArray ( '', 
' آلف ', ' مليون ' , ' مليار ' , ' ترليون ' ,' فرليون ' , ' سرسليون ' , ' تسرسليون ' , ' فيمتون ' ); 

-- ENGLSH VARIBLE 
eL_Return Varchar2(1000); 

em Number := 0; 

eV_inp_Num Number := 0; 
eV_inp_Int Number := 0; 
eV_inp_dec Number := 0; 
eV_Char Varchar2(100); 
eV_Temp Number := 0; 

Type eLionArray is table of Varchar2(500); 
eIn_str eLionArray := 
eLionArray ( '', 
'Thousand ' , 
'Million ' , 
'Billion ' , 
'Trillion ' , 
'Quadrillion ' , 
'Quintillion ' , 
'Sextillion ' , 
'Septillion ' , 
'Octillion ' , 
'Nonillion ' , 
'Decillion ' , 
'Undecillion ' , 
'Duodecillion '); 

-- Function 
function D3_To_Wordar (P1_number in number) 
return varchar2 as 
-- Pass only three digits 
-- This function return word equivalent to its number 
-- Accepted values are 0 to 999 

L1_Return2 varchar2(500) := NULL; 

n1 Number := 0; 
i1 Number := 0; 
j1 Number := 0; 
k1 Number := 0; 
V1_inp_Number Number := 0; 
V1_temp Varchar2(50) := NULL; 

type OneArray is table of varchar2(50); 
type TenArray is table of varchar2(50); 
type hanArray is table of varchar2(50); 

OneStr OneArray := OneArray('واحد', 'إثنان ', 'ثلاثة', 'أربعة', 'خمسة', 'ستة', 'سبعة', 'ثمانية', 'تسعة', 'عشرة', 'إحدىعشر', 'إثناعشر', 'ثلاثة عشر', 'أربعة عشر', 'خمسة عشر', 'ستة عشر', 'سبع عشر', 'ثمانية عشر', 'تسع عشر'); 
TenStr TenArray := TenArray('', 'عشرون', 'ثلاثون', 'أربعون' , 'خمسون', 'ستون', 'سبعون','ثمانون', 'تسعون'); 
hanStr hanArray := hanArray('مائة', 'مائتان', 'ثلاثمائة' , 'أربعمائة', 'خمسمائة', 'ستمائة','سبعمائة', 'ثمانمائة','تسعمائة'); 

BEGIN 

V1_inp_Number := P1_Number; 
if V1_inp_number > 999 then 
V1_inp_number := 0; 
end if; 

V1_temp := LPAD(to_char(V1_inp_number),3,0); 


-- Find Hundredth position 
n1 := to_number(substr(V1_temp,1,1)); 

if n1 > 0 then L1_Return2 := hanStr(n1); 
end if; 



i1 := to_number(substr(V1_temp,2,2)); 
j1 := to_number(substr(V1_temp,2,1)); 
k1 := to_number(substr(V1_temp,3,1)); 

if n1>0 AND (j1>0 OR k1>0) then L1_Return2 := L1_Return2 ||' و'; 
End if; 

if i1 > 0 and i1 < 20 then L1_Return2 :=L1_Return2 || OneStr(i1); 
END IF; 



if j1 >= 2 then 

if k1 > 0 then 
L1_Return2 := L1_Return2|| OneStr(k1)|| ' و'; 
end if; 

L1_Return2 := L1_Return2 || TenStr(j1); 

end if; 
if V1_inp_number=0 Then L1_Return2:='صفر'; 
End If; 

Return L1_Return2; 


END D3_To_Wordar; 
-- another function 

function Digits3_To_Word (P_number in number) 
return varchar2 as 
-- Pass only three digits 
-- This function return word equivalent to its number 
-- Accepted values are 0 to 999 
-- 
L_Return2 varchar2(500) := NULL; 

i Number := 0; 
j Number := 0; 
k Number := 0; 

V_inp_Number Number := 0; 
V_temp Varchar2(50) := NULL; 

type OneArray is table of varchar2(50); 
type TenArray is table of varchar2(50); 
OneStr OneArray := OneArray('One ', 
'Two ', 
'Three ', 
'Four ', 
'Five ', 
'Six ', 
'Seven ', 
'Eight ', 
'Nine ', 
'Ten ', 
'Eleven ', 
'Twelve ', 
'Thirteen ', 
'Fourteen ', 
'Fifteen ', 
'Sixteen ', 
'Seventeen ', 
'Eighteen ', 
'Nineteen '); 
TenStr TenArray := TenArray('', 
'Twenty ', 
'Thirty ', 
'Forty ' , 
'Fifty ', 
'Sixty ', 
'Seventy ', 
'Eighty ', 
'Ninety '); 

BEGIN 

V_inp_Number := P_Number; 
if V_inp_number > 999 then 
V_inp_number := 0; 
end if; 

V_temp := LPAD(to_char(V_inp_number),3,0); 

-- Find Hundredth position 
i := to_number(substr(V_temp,1,1)); 
if i > 0 then 
L_Return2 := OneStr(i)||'Hundred '; 
end if; 

-- Find last 2 digits 
i := to_number(substr(V_temp,2,2)); 
j := to_number(substr(V_temp,2,1)); 
k := to_number(substr(V_temp,3,1)); 
if i > 0 and i < 20 then 
L_Return2 := L_Return2 || OneStr(i); 
end if; 
if j >= 2 then 
L_Return2 := L_Return2 || TenStr(j); 
if k > 0 then 
L_Return2 := L_Return2|| OneStr(k); 
end if; 
end if; 

Return L_Return2; 

END Digits3_To_Word; 



Begin 

IF v_lan ='AR' Then 
V_inp_Num := ABS(P_inp_Num); 
V_inp_Int := Trunc(V_inp_Num); 
V_inp_Dec := V_inp_Num - V_inp_Int; 

-- To abort to 100 
if V_inp_Dec > 0 then 
V_inp_dec := V_inp_dec * 100; 
V_inp_Dec := to_number(substr(to_char(V_inp_Dec),1,2)); 
end if; 


V_char := to_char(V_inp_Int); 

for m in 1..In_Str.Count Loop Exit when V_char is NULL; 

V_Temp := To_Number(Substr(V_char,(Length(V_char)-2), 3)); 

if V_temp > 0 then 
L_Return := D3_To_WordAR(V_Temp) || In_str(m)||' و' || L_Return; 
end if; 

V_char := Substr(V_char,1,(Length(V_Char)-3)); 

End Loop; 

L_return :=Substr(L_return,1,(Length(L_return)-1)); 

IF P_inp_num>=1000 and P_inp_num<2000 Then L_return:=Substr(L_return,5,Length(L_return)); 
End if; 

IF P_inp_num>=2000 and P_inp_num<3000 Then L_return:='الفان'||Substr(L_return,11,Length(L_return)); 
End if; 

IF P_inp_num>=3000 and P_inp_num<=10000 Then 

L_return:=Substr(L_return,1,(INSTR(L_return,'آلف')-1)) || 'الآف' || Substr(L_return,(INSTR(L_return,'آلف')+3),Length(L_return)); 

End if; 

if v_det=1 then 
if V_inp_Dec > 0 then 
L_return := L_return ||v_ce||' و' || to_char(V_inp_Dec)||v_de; 
ELSE L_return := L_return ||' '||v_ce; 
end if; 
Else 
if V_inp_Dec > 0 then 
L_return := L_return ||v_ce||' و' ||D3_To_WordAR(V_inp_Dec)||' '||v_de; 
ELSE L_return := L_return ||' '||v_ce; 
end if; 
End if; 

if V_inp_Int > 0 then 
L_Return := L_Return; 
elsif V_inp_Int = 0 then 
L_return := '==='; 
end if; 
Return L_return; 

ELSE 
if P_inp_num < 0 then 
eV_inp_Num := (P_inp_Num * -1); 
else 
eV_inp_Num := P_inp_Num; 
end if; 
eV_inp_Int := Trunc(eV_inp_Num); 
eV_inp_Dec := eV_inp_Num - eV_inp_Int; 
if eV_inp_Dec > 0 then 
eV_inp_dec := eV_inp_dec * 100; 
eV_inp_Dec := to_number(substr(to_char(eV_inp_Dec),1,2)); 
end if; 

eV_char := to_char(eV_inp_Int); 

for em in 1..eIn_Str.Count Loop 
exit when eV_char is NULL; 
eV_Temp := To_Number(Substr(eV_char,(Length(eV_char)-2), 3)); 

if eV_temp > 0 then 
eL_Return := Digits3_To_Word(eV_Temp) || eIn_str(em) || eL_Return; 
end if; 

eV_char := Substr(V_char,1,(Length(eV_Char)-3)); 

End Loop; 

if eV_inp_Int > 0 then 
eL_Return := v_ce||' '||eL_Return ||' and '; 
elsif eV_inp_Int = 0 then 
eL_return := v_ce||' Zero and '; 
end if; 

-- Concatenate the word for decimal digits 

if v_det=1 then 
if eV_inp_Dec > 0 then 
eL_return := eL_return || Digits3_To_Word(eV_inp_Dec) ||' '||v_de; 
elsif eV_inp_Dec = 0 then 
eL_Return := eL_return ||' Zero '||v_de; 
End if; 

ELSE 
if eV_inp_Dec > 0 then 
eL_return := eL_return || to_char(eV_inp_Dec) ||' '||v_de; 
elsif eV_inp_Dec = 0 then 
eL_Return := eL_return ||' Zero '||v_de; 
End if; 
END if; 

Return eL_return; 

End IF; 
END Num_AR; 
/

تم التعديل بواسطة khaled, 17 February 2004 - 10:45 AM.


#2 developer

developer

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 315 مشاركة
  • الاسم الأول:M
  • اسم العائلة:Almuflehi
  • البـلـد: Country Flag

تاريخ المشاركة 17 February 2004 - 01:10 AM

اخي الفاضل راجع الرابط التالي

http://www.araboug.o...hl=ê‎‏يّ
...... بالتوفيق ...

#3 salama11433

salama11433

    عضو نشط

  • الأعضــاء
  • 356 مشاركة

تاريخ المشاركة 17 February 2004 - 03:54 AM

مشكور يا اخى
لا تبكى على ماضى لا يعود
salama ayad
samy32@msn.com
semsem11433@yahoo.com
Egypt - cairo

#4 arab20002000

arab20002000

    عضو نشط

  • الأعضــاء
  • 257 مشاركة

تاريخ المشاركة 17 February 2004 - 09:59 AM

مشكور على الكود

#5 khaled

khaled

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 251 مشاركة

تاريخ المشاركة 17 February 2004 - 11:06 AM

شكراً اخي على الكود
اما بخصوص اسئلتك

1- استخدام الـ function في الـform ؟
في الـform قم باضافة display item وضعه في المكان المناسب ثم اعمل له الخصائص الاتية
- calculation mode =formula
- في الخاصية formula ضع اسم الفنكشن مثلاً num_ar ثم مرر له البارمترس
- لا تنسى ان تغير الـdata type الى الـdata type المناسب حسب الـreturn value الخاص بالـfunction .

2- استخدام الـfunction في الـsql
يكون كالتي
select num_ra(73636) from dual

3-التعرف على الـfunctions او الـprocedures الموجوده في الـdatabase يكون باستخدام الـquery الاتي

select object_name from user_objects where object_type IN ('FUNCTION','PROCEDURE')

خالد مبارك العوبثاني
اليمن-حضرموت
Email :Aboanter84@hotmail.com

#6 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 17 February 2004 - 05:06 PM

شكرا يا أســــــــــتاااااااااااااذ خالد على الرد
ولكن لى أستفسار
أذا كان ال(function) او ال(proc) على الداتا بيز
وأردت ان أستخدمهم من خلال فورم بدون ان أضعهم على الفورم
ويكون أستخدامهم من خلال trigger وليكن هذا التريجر على مستوى الفورم وهو مثلا
post-insert or post_update
وليكن أسم ال(function) او ال(proc) -------> تفقيط (TAFKEET)
فما هى الاعدادت المراد عملها أذا أردت أن أنفذ هذا ال (FUNCTION) على أكثر من حقل موجودين على أكثر من بلوك فى الفورم
ولنفترض اننى عندى فورم تحتوى على 2 بلوك
1 - الموظفين(EMP)
2- المشتريات(ITEM)
أريد ان تعمل ال(FUNCTION) على حقل المرتب فى بلوك الموظفين وكذلك على حقل البريس فى بلوك المشتريات
مع العلم ان FUNCTION RETURN VARCHAR2

وأسف على الاطالة

#7 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 19 February 2004 - 02:47 AM

يا أخوان حد يرد على
اذا كان function التفقيط على الداتابيز
كيف أستخدمه فى display item
لقد عملت الاتى
1-عملت display item واعطيتها الاسم calcu وغيرت الاتى فى خصائصة
أ- database no
ب- data type char لان الفنكشن ترجع حروف مع العلم أن اسم الفنكشن tafkeet وهى الفنكشن الذى وضعها الاخ الاستاذ عمر باعقيل
ج- calculation mode formula
د- ولكن لا أدرى ماذا اكتب فى formula
هل أكتب أسم الفنكشن دوت اسم الحقل أم ماذا

#8 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 19 February 2004 - 03:57 AM

شكرا أخى developer على الرابط

#9 khaled

khaled

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 251 مشاركة

تاريخ المشاركة 19 February 2004 - 09:43 AM

اخي ابو تركي خطواتك صحيحه مئه بالمئه

1-عملت display item واعطيتها الاسم calcu وغيرت الاتى فى خصائصة
أ- database no
ب- data type char لان الفنكشن ترجع حروف مع العلم أن اسم الفنكشن tafkeet وهى الفنكشن الذى وضعها الاخ الاستاذ عمر باعقيل
ج- calculation mode formula
د- ولكن لا أدرى ماذا اكتب فى formula

الان في الـformula فقط اكتب اسم الفنكشن ومرر له البارمترس
مثلا اذا كان اسم الفنكشن هي TAFKEET واسم الحقل الذي به القيمه الرقمية sal , سوف تكون الفنكشن في الـformula كلاتي
TAFKEET(:SAL)
اما اذا كانت الفنكشن داخل PACKAGE اكتب اسم الPACKAGE ثم نقطه و اسم الFUNCTION ثم البارمتر
اتمنى ان تكون وضحت الفكره .
خالد مبارك العوبثاني
اليمن-حضرموت
Email :Aboanter84@hotmail.com

#10 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 19 February 2004 - 04:15 PM

الله يعطيك العافية يا أستاذ خالد
الف الف شكر ---- مشكور على سرعة الاستجابة

#11 عبدالحميد النهدي

عبدالحميد النهدي

    عضو

  • الأعضــاء
  • 28 مشاركة

تاريخ المشاركة 23 March 2006 - 08:53 PM

شكرا جزيلا يا طارق الحماد وبارك الله فيك

#12 AAHS2004

AAHS2004

    عضو

  • الأعضــاء
  • 10 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 03 March 2007 - 11:50 AM

أخواني الكرام :)
لقد طبقت دالة التفقيط بنجاح و لكن لدي مشكلة في طريقة تمثل البيانات داخل القاعدة
عند تحميل أوراكل إعتمدت AR8MSWIN1256 و لكن عند الإستعراض البيانات المدخلة في القاعدة بواسطة النماذج أو صفحة الويب http://localhost/isqlplus تكون البيانات على هيئة علامات السؤال و لا أدري ما السبب
و الأفضع من ذلك عند إستخدام الـتوريد imp أو الـتصدير exp تتحول كل الكلمات العربية في دالة التفقيط إلى علامات سؤال

أنا بحاجة ماسة إلى المساعدة لإكمال عملي :)

#13 algadal

algadal

    مشترك

  • الأعضــاء
  • 95 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 02 July 2007 - 11:34 AM

اذا كان لدي حقلين واحد للجمع والاخر لاظهار نفس القيمة باستخدام دالة التفقيط من الحقل الاول ..كيف سيكون شكل الproc
(وَمَا أُوتِيتُمْ مِنْ الْعِلْمِ إِلاَّ قَلِيلاً)

#14 MuhammadYassein

MuhammadYassein

    عضو نشط

  • الأعضــاء
  • 304 مشاركة
  • الاسم الأول:Muhammad
  • اسم العائلة:Yassein
  • البـلـد: Country Flag
  • الاهتمامات:Oracle
    SOA
    BPM
    ADF
    Java
    Forms
    Reports
    Analysis
  • المنصب الحالي:Senior Oracle SOA BPM Specialist

تاريخ المشاركة 10 July 2007 - 11:06 AM

جزاك الله خيرا ........................
جزاك الله خيرا ........................
جزاك الله خيرا ........................
جزاك الله خيرا ........................
جزاك الله خيرا ........................
جزاك الله خيرا ........................

اللهم اني احبك ... و احب من يحبك ... و احب كل عمل يقربني الى حبك ... اللهم أني أسألك رضاك و عفوك وجنة الفردوس

 
 
public void myInfo{

String myName    = "محمد ياسين" ;
String myCountry = "مصر ام الدنيا" ;
String MyGod     = "لا اله الا الله"; 
String myProphet = "محمد رسول الله";
String MyBook    ="القرآن العظيم";
String myGoal    ="جنة الفردوس";
boolean stillLife = true;


while(stillLife){
        System.out.println("لا اله الا الله محمد رسول الله");
}

}

 

979213111.jpg

 

 

Contact me now ..

 

 - Facebook - Linkedin - Youtube  - Twitter


#15 tanto

tanto

    عضو

  • الأعضــاء
  • 37 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 14 September 2008 - 11:57 PM

و الله أكثر من رائع