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

كيف تتحول الأرقام إلى كتابة


hogoz

Recommended Posts

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

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

يوجد لدي الرقم 99 درجة أريده أن يتحول في حقل جواره إلى ( تسعة وتسعون درجة )هكذا

وأشكر القائمين على المنتدى وخاصة الأستاذ أسامه على جهوده.

رابط هذا التعليق
شارك

اخي الكريم
تحويل الارقام الى كتابة تعتمد على مبدأ تحليل الرقم نفسه واظن الاخوان طرحوا امثلة تفصيلية بهذا الموضوع ولكن هنا سوف نستعرض الشرح بطريقة تسهل فهمها
فاستخدام الفورميلا هي الاساس فأنت تخرج اجمالي رقم
وتقوم بارسال الرقم او قيمة الحقل الرقمي وبعد ذلك يستدعي فانكشن تحويل الارقام حيث يتم تجزئة الرقم لمعرفة اكبر خانة عشرات او مئات او الوف ينتمي اليها الرقم بعد ذلك يتم تحويل هذه الخانات وحسب خانة الرقم
لو فرضنا اننا ادخلنا الرقم 129 فسوف يتم استدعاء الفانكشن الخاصة بالتحويل ومعرفة هل يوجد بها خانات عشرية ام لا ويتم ذلك بضرب الرقم ب 100 ثم عمل TRUNC له وهي فانكشن تستخدم للقطع
ثم يقوم باستدعاء الفانكشن NUMBER_DESC وهي فانكشن نحن نقوم بعملها وهي تحتوي على
المعادلات لتقسيم هذا الرقم حيث الرقم موجود بخنة المئات والعشرات والاحاد
مرفق تقرير او مثال عملي
واي استفسار ممكن استعراضه بنفس الموضوع
طبعا اول ما تشغل التقرير يطلب يوزر نيم وباسوورد ادخل اي يوزر نيم عندك
بعدها اعمل رن وادخل الرقم المراد تحويله




واستخدم خاصية البحث

CON_REP.zip

رابط هذا التعليق
شارك

أخي العزيز اليك هذا الاجراء انا كتبته:-

FUNCTION read_number(p_no number) RETURN char IS
ln number;
v_desc varchar2(100);
v_desc1 varchar2(100);
v_desc2 varchar2(100);
begin
ln:=length(to_char(p_no));
if ln=1 then
select decode(p_no,
1,'واحد',
2,'إثنان',
3,'ثلاثة',
4,'أربعة',
5,'خمسة',
6,'ستة',
7,'سبعة',
8,'ثمانية',
9,'تسعة'
) into v_desc from dual;
elsif ln=2 and p_no<20 then
select decode(p_no,
10,'عشرة',
11,'أحد عشر',
12,'إثنا عشر',
13,'ثلاثة عشر',
14,'أربعة عشر',
15,'خمسة عشر',
16,'ستة عشر',
17,'سبعة عشر',
18,'ثمانية عشر',
19,'تسعة عشر'
) into v_desc from dual;
elsif ln=2 then
select decode(p_no,
20,'عشرون',
30,'ثلاثون',
40,'أربعون',
50,'خمسون',
60,'ستون',
70,'سبعون',
80,'ثمانون',
90,'تسعون',
null
) into v_desc from dual;
if v_desc is null then
v_desc1:=read_number(to_number(substr(to_char(p_no),2,1)));
v_desc2:=read_number(to_number(substr(to_char(p_no),1,1)||'0'));
v_desc:=v_desc1||' و '||v_desc2;
end if;
elsif ln=3 then
select decode(p_no,
100,'مائة',
200,'مائتان',
300,'ثلاثمائة',
400,'أربعمائة',
500,'خمسمائة',
600,'ستمائة',
700,'سبعمائة',
800,'ثمانمائة',
900,'تسعمائة',
null
) into v_desc from dual;
if v_desc is null then
v_desc1:=read_number(to_number(substr(to_char(p_no),2,2)));
v_desc2:=read_number(to_number(substr(to_char(p_no),1,1)||'00'));
v_desc:=v_desc2||' و '||v_desc1;
end if;
elsif ln=4 then
select decode(p_no,
1000,'ألف',
2000,'ألفان',
3000,'ثلاثة آلاف',
4000,'أربعة آلاف',
5000,'خمسة آلاف',
6000,'ستة آلاف',
7000,'سبعة آلاف',
8000,'ثمانية آلاف',
9000,'تسعة آلاف',
null
) into v_desc from dual;
if v_desc is null then
v_desc1:=read_number(to_number(substr(to_char(p_no),2,3)));
v_desc2:=read_number(to_number(substr(to_char(p_no),1,1)||'000'));
v_desc:=v_desc2||' و '||v_desc1;
end if;
elsif ln=5 then
v_desc1:=read_number(to_number(substr(to_char(p_no),1,2)))||' ألف ';
v_desc2:=read_number(to_number(substr(to_char(p_no),3,3)));
v_desc:=v_desc1||' و '||v_desc2;
elsif ln=6 then
v_desc1:=read_number(to_number(substr(to_char(p_no),1,3)))||' ألف ';
v_desc2:=read_number(to_number(substr(to_char(p_no),4,3)));
v_desc:=v_desc1||' و '||v_desc2;
elsif ln=7 then
select decode(p_no,
1000000,'مليون',
2000000,'مليونان',
3000000,'ثلاثة ملايين',
4000000,'أربعة ملايين',
5000000,'خمسة ملايين',
6000000,'ستة ملايين',
7000000,'سبعة ملايين',
8000000,'ثمانية ملايين',
9000000,'تسعة ملايين',
null
) into v_desc from dual;

if v_desc is null then
v_desc1:=read_number(to_number(substr(to_char(p_no),2,6)));
v_desc2:=read_number(to_number(substr(to_char(p_no),1,1)||'000000'));
v_desc:=v_desc2||' و '||v_desc1;
end if;
elsif ln=8 then
v_desc1:=read_number(to_number(substr(to_char(p_no),1,2)))||' مليوناً ';
v_desc2:=read_number(to_number(substr(to_char(p_no),3,6)));
v_desc:=v_desc1||' و '||v_desc2;
elsif ln=9 then
v_desc1:=read_number(to_number(substr(to_char(p_no),1,3)))||' مليون ';
v_desc2:=read_number(to_number(substr(to_char(p_no),4,6)));
v_desc:=v_desc1||' و '||v_desc2;
elsif ln=10 then
select decode(p_no,
1000000000,'مليار',
2000000000,'ملياران',
3000000000,'ثلاثة ملايارات',
4000000000,'أربعة ملايارات',
5000000000,'خمسة ملايارات',
6000000000,'ستة ملايارات',
7000000000,'سبعة ملايارات',
8000000000,'ثمانية ملايارات',
9000000000,'تسعة ملايارات',
null
) into v_desc from dual;
if v_desc is null then
v_desc1:=read_number(to_number(substr(to_char(p_no),1,1)||'000000000'));
v_desc2:=read_number(to_number(substr(to_char(p_no),2,9)));
v_desc:=v_desc1||' و '||v_desc2;
end if;
elsif ln=11 then
v_desc1:=read_number(to_number(substr(to_char(p_no),1,2)))||' مليار ';
v_desc2:=read_number(to_number(substr(to_char(p_no),3,9)));
v_desc:=v_desc1||' و '||v_desc2;
elsif ln=12 then
v_desc1:=read_number(to_number(substr(to_char(p_no),1,3)))||' مليار ';
v_desc2:=read_number(to_number(substr(to_char(p_no),4,9)));
v_desc:=v_desc1||' و '||v_desc2;
end if;
if substr(v_desc,length(v_desc)-3+1,3)= ' و 'then
v_desc:=substr(v_desc,1,length(v_desc)-3);
end if;

return v_desc;
exception when others then
return 'not define ';
end;
---------------------------
وهذه الدالة نستدعيها من الدالة التالية:-

Function CF_READ_AMOUNTFormula return Char is
INT_NUMBER NUMBER(10):=TRUNC(:CHECK_AMOUNT);
FRC_NUMBER NUMBER(5,2):=(:CHECK_AMOUNT - INT_NUMBER)*100;
begin
IF FRC_NUMBER IS NULL OR FRC_NUMBER=0 THEN
RETURN 'فقط '||READ_NUMBER(INT_NUMBER)||' ريال'||' لا غير';
ELSE
RETURN 'فقط '||READ_NUMBER(INT_NUMBER)||' ريال و '||FRC_NUMBER||' هللة'||' لا غير';
END IF;
end;

رابط هذا التعليق
شارك

السلام عليكم
هذه اول مشاركة لي و اشكر كل القائمين على المنتدي
و اشكر كل المشاركين و الذين ينفعون الناس بعلمهم و لا يبخلون عليهم به
و كان لي رأي في موضوع تحويل الاعداد الى حروف منطوقة او مكتوبة
و قد عملتها بعدة اشكال و لكن هناك طريقة سهلة و بسيطة
و هي انشاء جدول نخزن به الرقم و مدلوله بالحروف ليس كل الارقام طبعا و لكنها تقريبا مثل ما فعل conector
من 1 إلى 10 و من 11 إلى 20 و 30و 40 و50و .........90 ثم
100و200 و هكذا
و لا داعي من استعمال 1000 لانني سوف استعمل نفس الطريقة مع كتابة رقم الف بجانب الارقام الموجودة في الافات
و مليون و ستكون ان شاء الله بسيطة و سهلة
اذا اردت ان تعرفوا الطريقة و الكود بالشرح المفصل فانا تحت امركم لعل الله يجعله في ميزان حسناتي

رابط هذا التعليق
شارك

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

ومرحبا بك بيننا مرة اخرى
http://www.araboug.org/ib/index.php?showtopic=13959

اخوك
اسامة

رابط هذا التعليق
شارك

  • بعد 4 شهور...
  • بعد 11 سنة...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية