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

برامج و حلول محاسبية ب SQL SERVER

مغلقرائج
بدأه PATCH DEVELOPER في 26 مارس 2005 · 125 رد · 60,279 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أخواني الكرام أعضاء هذا المنتدى إني قد تأثرت جداً بما قاله الأخ خالد جزاه الله خيراً رغم إن عتابه و الله كان شديداً على النفس فياليتك أمسكت بسيف أخي الكريم ربما كان أرحم

و الله ما أكره أكثر من الأستخفاف بالعقول و ما فتحت هذا الموضوع إلى لأني أحس أنه قد تم الأستخفاف بعقولنا نحن المسلمين في يوم من الأيام و لكن أخي الكريم الموضوعية التنظيم تنقصنا فأنا فتحت موضوعاً و ما أغلقته و الدليل على ذلك أني أوجدت بديل لذلك و هو موقعي و قررت كتابة كل ما أتوصل إليه إن شاء الله و لكن بما قرأت في رسالتك قررت أن أكون أكثر موضوعية و أكثر تنظيماً من ذي قبل

فسوف أستمر إن شاء الله كتابة و تلخيص ما سوف نستخلصه في هذا الموضوع من تجاربنا و خبراتنا و سوف يكون هذا الموضوع بإذن الله هو المختبر الخاص بنا حتى أني تخيرت أسم أخر للموضوع حتى يلفت نظر من هم مختصين

أخواني

الموضوع تصميم نظام محاسبي بما يسمى مشاريع اكسس التي تحتوى على خلفيات أس كيو أل

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

و لنتوكل على الله

و أنا أسف جدأ و أعتذر منكم مرة أخرى و لا يسعني إلا أن أقول أستغفرك ربي و أتوب أليك

أخوكم

itasmallbanner.png
#2

CHART OF ACCOUNTS OR HIERARCHY OF ACCOUNTS

خريطة الحسابات أو هيكل الحسابات

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

و هذا هو التعريف المحاسبي أما التعريف من وجهة نظر مصممي قواعد البيانات فهو كالأتي :

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

و الأن نعود إلى السؤال المهم و موضوع هذا المقالة ، كيف نصمم قواعد بيانات للتعبير عن الهياكل الهرمية (هيكل الحسابات في حالتنا هذه ) ؟

لكي نجاوب على هذا السؤال هنا سوف نقول إنه في قواعد البيانات ما يسمى بــ HIERARCHIES أو الهياكل الهرمية و الحقيقة عندما قرأت عن الهياكل الهرمية لفت نظري تعبير غريب في مقال و هو :

“DBAs DEALING WITH HIERARCHIES EVERY DAY “

ومن هنا وجدت أن أقوى النماذج المستخدمة في تصميم هياكل البيانات هو نموذج يسمى NESTED_SETS MODEL أو نموذج المجوعات المتداخلة و هذا هو الرسم التوضيح (شكل 1-1) لهذا النموذج :

الشكل (1-1)

2303Drow_2632005745330.3348505.jpg

و الشكل 1-2 يوضح خريطة حسابات بسيطة جداً بها المجموعات التي تم رسمها في الشكل 1-1

الشكل (1-2)

2303AccTbl_2632005747560.5656397.jpg

هذا و كما هو واضح من الرسوم التوضيحية السابقة و كما في الشكل 1-2 تم وضع ثلاثة حقول هم LeftExtent أو الأمتداد الأيسر و RightExtent أو الأمتداد الأيمن و هما يعبران عن الحدود الخاصة بالحساب و أخيراً ParentAccount_Node و هو يعبر عن الحساب الأب (العقلة) و تصنف الحسابات تحت هذا الترتيب الهرمي إلى الأتي

1- حساب مجموعة و هو حساب أب وليس له أب له أطفال

2- حساب مجموعة و هو حساب أب و يعتبر أبن و له أطفال

3- حساب أبن

و لكي يتضح هذا التقسيم أليكم أمثلة على الجدول السابق:

أولاً : حساب مجموعة و هو حساب أب و ليس له أب و له أطفال و مثال ذلك كما هو واضح في الجدول فالحساب رقم (1) حساب ليس له أب و بذلك كانت قيمة الحقل ParentAccount_Node = Null أي ليس له قيمة أما بالنسبة للنطاق أو المدى فإن المدى = 1 : 999 أي أرقام الحسابات من الحساب رقم 1 و هو نفسه الحساب المعني إلى نهاية المدى و هو 999 و نلاحظ هنا إفتراض مهم في التصميم هو أن المعادلة دائماً و أبداً هي

LeftExtent = AccountID

(LeftExtent - RightExtent) > 0

ثانياً : حساب مجموعة و هو حساب أب و يعتبر أبن و له أطفال و مثال ذلك الحساب رقم (2) و تكون قيمة الحقل ParentAccount_Node = (1) و تطبق المعادلة المدرجة سابقاً و هي :

LeftExtent = AccountID

(LeftExtent - RightExtent) > 0

و يكون المدي هو من (2) و هو رقم الحساب نفسه إلى (499) و هو بذلك يعبر عن مجموعة

ثالثاً : حساب أبن و مثال ذلك الحساب رقم (4) و نلاحظ لأن هذا الحساب ليس له أبناء فأن المدى الخاص به يكون الحساب نفسه و تطبق المعادلة التالية

RightExtent-LeftExtent=0

في الشكل 1-1 نلاحظ إن العلاقة بين الكيانات المرسومة هي علاقة جزئية و لكن من الممكن أن يحدث لبث في حالة أن تكون العلاقة علاقة تقاطعية و في أعتقادي إن ذلك من الممكن إحكامه جيداً على جدول الحسابات .

و الأن سوف أدرج مجموعة تصميمات الجداول الأولية التي سوف نعمل عليها إن شاء الله .

الشكل (1-3)

table1.jpg

الشكل (1-4)

table2.jpg

الشكل (1-5)

table3.jpg

الشكل (1-6)

2303Diagram_2632005755320.677807.jpg

و سوف نكمل الحديث في وقت لاحق إن شاء الله

itasmallbanner.png
#3

اخي الكريم - حميد

انا آسف جداً جداً ... ويعلم الله كم بكيت دماً عندما قرأت مقالتك السابقة وأنا اعتذر ولكن ارجو فهم ايضاحاتي التالية :

1 - المشاركات سوف تاتي تباعاً ان شاء الله من الجميع ولكن اصبر حتى تكتمل الصورة لدى البعض فمنهم المتردد بالمشاركة ومنهم المشغول ومنهم ينتظر حتى ستكمل مشروع اخر ومنهم الجاهزون للمشاركة مثلي ومثلك ومنهم من يظن انه لابد من فهم المحاسبة حتى يشارك

2- عتابي كان شديدا لاني متحمس للموضوع ويعلم الله كم انا فرحان عندما رايت مقالاتك واعجبت فكرتك فهي نفس الفكرة التي في راسي ولكن لا اعرف من اين ابدا ومن اين انتهي .

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

4- اخي الكريم تعلمت ( استنتجت )من قراءتي لمقالاتك ان كلمة فشل أو احباط أو ... أو لا تتواجد الا في قاموس الفاشلين .

5- اخي الكريم يكفيك لو شخص واحد يتابع معاك .

6 - انظر الى قراءات الموضوع السابق منذ لحظة كتابتك للموضوع وانظر الان سوف ترى الاستنتاج رغم قله المشاركات

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

8- انت قلت انه ينقصنا الموضوعية والتنظيم ... الله اخي الكريم كم انت شخصت المرض الذي لدينا وبالتالي انظر الى المشاركة الثانية عندما قدمت بتنظيم الاشياء فبدات بالفكرة ثم المشكلة التي نحن بصددها فالقارى او المشارك لن يجد صعوبة في المتابعة .

واخيراً وليس آخرا اكرر اعتذاري وشكري عما بدر مني ويعلم الله اني متاثر جدا والنفسية تعبانه جدا من هذا الموضوع( وبعدين طول بالك علينا )

#4

:s :s :s

:blink: :blink: :blink:

علامات استفهام كبيرة جدا

اقتباس
تم وضع ثلاثة حقول هم LeftExtent أو الأمتداد الأيسر و RightExtent أو الأمتداد الأيمن و هما يعبران عن الحدود الخاصة بالحساب

لماذا تم وضع هذه الحدود و ما فائدتها أرجو اعطاء أمثلة واقعية بدلا من الأب و الأبن و العم و الخال :rolleyes:

فكرة الحقل الأب مفهومة أما الامتدادات و فائدتها فهي غير واضحة بالنسبة لي بالمرة

#5

إستكمالاً للمقال رقم 1

أخواني الأعزاء

سوف نعدل إن شاء الله الفرضيات الخاصة بالجداول المدرجة في المقال الأول و سوف يكون الأدخال بالجدول Accounts كالتالي :

2703Accounts.jpg

و نلاحظ هنا الفرضيات الأتية :

1- الحقل ParentAccount_Node = AccountId في حالة أكبر حساب أو أول حساب و أعلاها مرتبة في الشجرة

2- الحقل LeftExtent = AccountId دائماً و أبداً

3- الحقل RightExtent أكبر من LeftExtent

4- في حالة أن يكون الحساب حساب طفل أو children أو كما يسمى أيضاً ورقة (ورقة شجرة) leave يكون LeftExtent-RightExtent =0 و بمعنى أخر LeftExtent=RightExtent

5- أنه يجب أن لا يحدث تداخل بين النطاقات التي تتكون منها الحسابات الأجمالية أو العامة ( أي التي يندرج تحتها حسابات فرعية)

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

2703Drow.jpg

و منطقة التقاطع كما هي واضحة في الجانب الأيسر باللون الأخضر :

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

و نرجع مرة أخرى إلى تعديل التصميمات الخاصة بـــ GL و سوف تكون الجداول كالتالي :

2703Acc.jpg

2703JVH.jpg

2703TransDetail.jpg

2703TempoA.jpg

2703Diagram.jpg

و الأن ماذا أضفنا إلى تصميمنا السابق ؟

أضفنا الحقل Indicator (مرشد) و هذه حيلة سوف نستخدمها هنا للأستفادة منها

السؤال الأخر : ما هي فائدة الرابط في جدول Accounts بين الحقل AccontId و ParentAccount_Node ؟

الجواب : فرض التكامل المرجعي بحيث أنه لا يمكن إدخال رقم حساب في الحقل ParentAccount_Node لم يدخل قبل ذلك في الحقل AccountId

و السؤال الأن : لماذا وضعنا هاتين الحقلين LeftExtent و RightExtent ؟

و الجواب : أن هاتين الحقلين هما كافة الأستعلامات التي سوف يتم عملها و التي سوف تلخص العمليات المالية التي تمت في كل الأشكال

كيف ؟

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

الحساب الفرعي : RightExtent-LeftExtent = 0

الحساب التجميعي :RightExtent-LeftExtent > 0

و سوف نستغل ذلك في الأستعلامات و الأجراءات المخزنة و الوظائف مستقبلاً

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

الجواب : هو أضافة قادح أو Trigger إلى الجدول Accounts و سوف يكون كالتالي :

IF EXISTS (SELECT name 
	   FROM sysobjects WHERE name = N'ExtentCheckerIns' AND type = 'TR')
    DROP TRIGGER ExtentCheckerIns
GO

CREATE TRIGGER ExtentCheckerIns ON dbo.accounts
FOR  INSERT , UPDATE

AS set nocount on declare @account as int, @parentacc as int ,@leftextent as int ,@rightextent as int
declare @pleftextent as int , @prightextent as int ,@chrpleftextent as varchar(50),@chrprightextent as varchar(50)
declare @gpaccount as int , @gprightextent as int , @gpleftextent as int ,@chrgpleftextent as varchar(50),@chrgprightextent as varchar(50)
declare @accountcr as int , @parentacccr as int , @leftextentcr as int , @rightextentcr as int
select @account = accountid from inserted select @parentacc = parentaccount_node from inserted where accountid=@account
select @leftextent = leftextent from inserted where accountid=@account
select @rightextent = rightextent from inserted where accountid=@account
select @pleftextent = leftextent from accounts where accountid=@parentacc
select @prightextent = rightextent from accounts where accountid = @parentacc
select @gpaccount = parentaccount_node from accounts where accountid=@parentacc
select @gpleftextent = leftextent from accounts where accountid=@gpaccount
select @gprightextent = rightextent from accounts where accountid=@gpaccount
set @chrpleftextent = convert(varchar,@pleftextent)
set @chrprightextent = convert(varchar,@prightextent)
set @chrgpleftextent = convert(varchar,@gpleftextent)
set @chrgprightextent = convert(varchar,@gprightextent)


/******************* FIRST TEST *******************************/

if @leftextent = @account and @rightextent < @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent>@leftextent
begin update accounts 
set indicator = 'OK' 
WHERE accountid = @account
end
else
if @leftextent = @account and @rightextent < @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent<@leftextent
begin update accounts 
set indicator = 'LEFT EXTENT BIGGER THAN RIGHT EXTENT' 
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
end
else
if @leftextent = @account and @rightextent < @prightextent and (@pleftextent-@prightextent)=0 and @rightextent>@leftextent
begin update accounts 
set indicator = 'THE PARENT ACCOUNT IS NOT A NODE IT IS LEAVE  ' 
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent = @account and @rightextent < @prightextent and (@pleftextent-@prightextent)=0 and @rightextent<@leftextent
begin update accounts 
set indicator = 'THE PARENT ACCOUNT IS NOT A NODE IT IS LEAVE AND LEFT EXTENT BIGGER THAN RIGHT EXTENT ' 
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent <> @account and @rightextent < @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE LEFT EXTENT IS NOT EQUAL THE ACCOUNT ID THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
end
else
if @leftextent <> @account and @rightextent < @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE LEFT EXTENT IS NOT EQUAL THE ACCOUNT ID THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
end
else
if @leftextent <> @account and @rightextent < @prightextent and (@pleftextent-@prightextent)=0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND THE LEFT EXTENT IS NOT EQUAL THE ACCOUNT ID THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent <> @account and @rightextent < @prightextent and (@pleftextent-@prightextent)=0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND THE LEFT EXTENT IS NOT EQUAL THE ACCOUNT ID THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent = @account and @rightextent > @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE RIGHT EXTENT IS MORE THAN THE PARENT RIGHT EXTENT THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set rightextent = @prightextent-1
WHERE accountid = @account
end
else
if @leftextent = @account and @rightextent > @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE RIGHT EXTENT IS MORE THAN THE PARENT RIGHT EXTENT THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set rightextent = @prightextent-1
WHERE accountid = @account
end
else
if @leftextent = @account and @rightextent > @prightextent and (@pleftextent-@prightextent)=0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND THE RIGHT EXTENT IS MORE THAN THE PARENT RIGHT EXTENT THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent = @account and @rightextent > @prightextent and (@pleftextent-@prightextent)=0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND THE RIGHT EXTENT IS MORE THAN THE PARENT RIGHT EXTENT THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent <> @account and @rightextent > @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent>@leftextent
begin update accounts
set indicator = 'NEITHER THE LEFT EXTENT AND THE RIGHT EXTENT IS WRONG THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent = @prightextent-1
WHERE accountid = @account
end
else
if @leftextent <> @account and @rightextent > @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND NEITHER THE LEFT EXTENT AND THE RIGHT EXTENT IS WRONG THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent = @prightextent-1
WHERE accountid = @account
end
else
if @leftextent <> @account and @rightextent > @prightextent and (@pleftextent-@prightextent)=0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND NEITHER THE LEFT EXTENT AND THE RIGHT EXTENT IS WRONG THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent <> @account and @rightextent > @prightextent and (@pleftextent-@prightextent)=0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND NEITHER THE LEFT EXTENT AND THE RIGHT EXTENT IS WRONG THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end

/**************** SECOND TEST ****************/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TempoA]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[TempoA]


CREATE TABLE [dbo].[TempoA] (
	[AccountID] [int] NULL ,
	[ParentAccount_Node] [int] NULL ,
	[LeftExtent] [int] NULL ,
	[RightExtent] [int] NULL 
) ON [PRIMARY]

insert into dbo.tempoa (accountid,parentaccount_node,leftextent,rightextent)
select accountid,parentaccount_node,leftextent,rightextent from accounts where parentaccount_node = @parentacc and accountid<>@account and leftextent<>rightextent

declare tempoa_crsr cursor
forward_only
keyset
for select accountid,parentaccount_node,leftextent,rightextent from dbo.tempoa open tempoa_crsr
fetch next from tempoa_crsr into @accountcr,@parentacccr,@leftextentcr,@rightextentcr while (@@fetch_status<>-1)
begin if (@@fetch_status<>-2)
begin if @leftextent > @leftextentcr and @rightextent >= @rightextentcr
begin update accounts
set rightextent = @account
where accountid =@account
end
fetch next from tempoa_crsr into @accountcr,@parentacccr,@leftextentcr,@rightextentcr end
end
close tempoa_crsr
deallocate tempoa_crsr

و أخيراً أخواني الكرام نبدأ في اللغة الجميلة و مظاهر القوة هنا تظهر أنه التلاعب بالبيانات و تدويرها و تحويرها و الأتيان بها من محاور و مناظير لا يمكن الأتيان بها في الأحوال العادية

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

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

ستجدون أسفل المشاركة رابطين الأول يتضمن قاعدة البيانات في شكل MDF ممكن أن ترفقوها بــ ATTACH DATABASE و الثاني SCRIPT به كافة أكواد قاعدة البيانات

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

و أشكركم

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

270305ATACH.zip

2703Trigger.pdf

itasmallbanner.png
#6

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

أخواني

رأيت أن أوضح لكم نموذج لهيكل حسابات بالعربي لكي يتم تطبيقه على الجدول ACCOUNTS بعد أن تم برمجة قادح لضبط المدى به

2803CAOA1.jpg

و هذا هو الجزء الثاني

2803CAOA2.jpg

و أنا في أنتظار ردودكم و لن نخطوا أي خطوة أخرى إن شاء الله إلا بعد أن نناقش ما تم كتابته قبل ذلك و أتمنى أن تجد لديكم هذه المقالات المتخصصة صدى و أن تنتفعوا بها

و أنا أقول لكم أنه ما بقى لنا في نظام اليومية العامة ليس بالقليل و لكن ما بعد ذلك بإذن الله سوف يكون ميسر بحول الله فكما رأيتم هناك جدولين مخصصين لإدخال قيود اليومية مصممين و جاهزين و أنا في المقال السابقة لم أوضح صراحة كل شئ لأن ما يحتويه المقال لن تجيب عليه إلا أسألتكم أنتم

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

بل أني أتخيل الأن كيف أنه و لأول مرة على هذا المنتدى سوف يكون تصميم نظام محاسبي على الأس كيو إل سيرفر ... في الحقيقة !!!!!!!!!!!

لن أكمل إلا أن يشاء الله عز و جل و عندما يتم ذلك بإذن الله

أخوكم

itasmallbanner.png
#7

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

أخى العزيز

فى البداية مش عاوز أجاملك - رغم أنك تستحق كل الإطراء والمجاملة - لكن جهد متميز وأكثر من رائع

لأنه واضح أنك تعرض فكرة أنت مستخدمها واقعيا وعايشها، ربنا يبارك لك ويفتح لك أبواب العلم والرزق ويرضى عنك ويرضيك

وجعلها فى ميزان حسناتك

أما بعد:

فى مشاركتك قلت

اقتباس
2- الحقل LeftExtent = AccountId دائماً و أبداً

وسؤالى هنا:

وما فائدتها إذا كانت هى هى دائما وأبدا؟

ألا يمكن أن نستبدل LeftExtent بـ AccountId ونوفره؟

ومن ناحية أخرى:

سمعت عن فكرة أخرى أيضا فى التعامل مع شجرة الحسابات - فى رأيى أنها ممتازة فى الأغراض التحليلية - تسمى الأبعاد Dimentions وهى فى الغالب حقول أخرى تضاف على الجدول ليتم تجميع البيانات على أساسها، كأن تعطى بعد مثلا للرواتب لتعرف نصيب البند من الرواتب أو المصاريف الثابتة إجمالا أو تفصيلا حسب عمق التقارير المطلوبة وهكذا

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

( أحب الناس إلى الله أنفعهم ، وأحب الأعمال إلى الله عز وجل سرور تدخله على مسلم ، أو تكشف عنه كربة ، أو تقضي عنه دينا ، أو تطرد عنه جوعا ، ولأن أمشي مع أخي المسلم في حاجة أحب إليّ من أن اعتكف في المسجد شهرا ، ومن كف غضبه ستر الله عورته ، ومن كظم غيظا ، ولو شاء أن يمضيه أمضاه ، ملأ الله قلبه رضا يوم القيامة ، ومن مشى مع أخيه المسلم في حاجته حتى يثبتها له ، أثبت الله تعالى قدمه يوم تزل الأقدام ، وإن سوء الخلق ليفسد العمل كما يفسد الخل العسل )

رواه الطبراني في الكبير

#8

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

أخي أيمن

قلت في رسالتك الأتي

اقتباس
وسؤالى هنا:

وما فائدتها إذا كانت هى هى دائما وأبدا؟

ألا يمكن أن نستبدل LeftExtent بـ AccountId ونوفره؟

أخي الكريم فائدة الحدود سوف تظهر جلية في التقارير فمن غير الحدود لا يمكن إن جاز التعبير تلخيص البيانات

و الأهم من كل هذا كيف سوف أعرف الحل المحاسبي الذي أصممة أن الأرباح = الأيرادات - المصاريف

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

هذه الأداة أخواني و هو أضافة المدى الأيمن و الأيسر مهمة جداً و لا يمكن معرفة قوتها إلى عندما ندخل في مرحلة الأستعلامات إي مخرجات الحل المحاسبي

و إليك مثال أخر سوف نذكره هنا

لو قلت لك مثلا إن الأيرادات هي من الحساب رقم 3000 إلى الحساب 3600

و إن المصاريف هي من الحساب 3400 إلى الحساب 3999

فهل هذه الفرضية منطقية ؟ و الجواب لا لأنه هنا توجد منطقة تقاطع ... و أين تقع منطقة التقاطع ؟

هي من الحساب رقم 3400 إلى الحساب 3600 أي ما يعادل مائتان حساب لا يعرف جنسهم هل هم مصنفون تحت الأيرادات أم تحت المصاريف إذا .....

عندما وضعنا حدوداً عليا و دنيا أو يمنى و يسرى أي كان المسمى لديكم و فرضنا قواعد للتحقق من صحة التداخلات بفرض قادح أو Trigger هو للأطمئنان لسلامة هيكل الحسابات و عدم تداخل الأختصاصات الخاصة بكل حساب

أما بالنسبة لما قلته عن ...

اقتباس
سمعت عن فكرة أخرى أيضا فى التعامل مع شجرة الحسابات - فى رأيى أنها ممتازة فى الأغراض التحليلية - تسمى الأبعاد Dimentions وهى فى الغالب حقول أخرى تضاف على الجدول ليتم تجميع البيانات على أساسها، كأن تعطى بعد مثلا للرواتب لتعرف نصيب البند من الرواتب أو المصاريف الثابتة إجمالا أو تفصيلا حسب عمق التقارير المطلوبة وهكذا

نعم توجد أداة تسمى Ananlyses Manager و هي خاصة بالتحليلات المالية و تعطى أبعاداً للبيانات المسطحة لتجعلها متعددة الأبعاد و لكن على ماذا تعتمد هذه التقنية

هذه التقنية تعتمد على مايسمى مخازن البيانات و يتم أستيراد البيانات الأساسية من الجداول التي تنشأها في حلولك ثم بعد ذلك يتم التعامل معها من خلال ananlyses manager أو أيضاً من خلال أكسيل و لكن المقام هنا هل نحن كمصممي قواعد بيانات سوف نلزم المستخدم بأن يتعلم ما معنى مخازن بيانات و كيفية أضافة أبعاد ؟

الجواب لا

إذا ماذا نفعل هنا نحاول أن نصممم حلولا لمستخدم عادي محاسب عادي ليس لديه غير المهارات المطلوبة في أستخدام الحلول المالية و في حقيقة الأمر ما أريد أن أقوله أيضاً إن الأداة analyses manager إداة أكثر من رائعة و هي موضوعة بشكل أساسي لخدمة القطاع المالي في التحليلات المالية المعقدة

و لكن لا تستهين أخي الكريم بقدرات T.SQL و إذا ما قارننا بين برمجة قواعد البيانات و analyses manager فأن الأولى تهتم بالمدخلات و المخرجات و الأخيرة تهتم فقط بالمخرجات و على مخازن يجب أن تحدث كلما تم أضافة بيانات جديدة

هذا و الله أعلم ... فأنا فقط حاولت مرة أستخدام الأداة ananlyses manager و لكني وجدتها غير عملية في تصميم الحلول و لكن قوتها تكمن في أستخدام واجهة analyses manager فقط أو أستخدام أتصال بين اكسيل و بين المكعب المنشأ

هذا و الله أعلم مرة أخرى فهذا ما عندي فمن عنده أي أضافة فليتفضل و سوف أكون شاكراً له

و شكراً

itasmallbanner.png
#9

كنت بدر على موضوع زي ده من زمان

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#10

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

أخواني المجاهدون في سبيل الله في طلب العلم

أريد أن أنتقل إلى المرحلة التالية و اريد أن أتأكد أن كل ما سبق فهم تماماً فكيف لي ذلك ؟

على كلاً سوف أنتقل أن شاء الله في القريب العاجل إلى المرحلة التالية و هي مهمة جداً فسوف نطور التصميم المبدئي الذي وضعناه و للأسف حتى الأن لم أجد المناقشات التي أتمناها حوله .

و لي تلميح فقط أريد أن أوجهه إلى القائمين على المنتدى

" يا أخواني لن يتعلم الشباب إلا بالممارسة يجب أن نمارس و نضع لأنفسنا أهداف وهمية للتدريب و هذا ما نفتقده هنا فقليل هي المواضيع التي تقوم على تدريبات و ممارسات لحالات عملية

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

نعم عباقرة لم تظهر موهبتهم لأنه ليس لديهم أدوات هذا النوع من قواعد البيانات

و التلميح قبل الأخير أيضاً

قواعد بيانات أس كيو إل سيرفر من قواعد البيانات الغنية و التي لها العديد من الصلات بكثير من لغات برمجة الواجهات فهل من الممكن أن نعمل شئ من الأعلان بين أقسام هذا المنتدى عن مميزات أستخدام قواعد بيانات أس كيو إل سيرفر و ما هي فوائدها لكي نجذب أكثر عدد من المهتمين بهذا النوع من قواعد البيانات أو غير المهتمين الذين يبحثون عن شئ يساعدهم في بناء قواعد بياناتهم

أخيراً أشكر مشرفي القسم على مجهودهم المحمود و أرجو أن يستمروا و أن يستمروا على نفس الدرب و لكن بشرط أن نخفف المجاملات الزائدة فيما بيننا لأنني صراحة وجدت هذه العادة في هذا المنتدى و هي عادة الأمتداح لأنه لا أمتداح على واجب علي و عليكم و يجب أن نساعد أنفسنا على السير للأمام لا أن نقف فنشغل أنفسنا بالمديح و أعوذ بالله من شر أنفسنا

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

و أن جاء يوم لم أستمر في الكتابة فأن بريدي الألكتروني مسجل في هذا المنتدى

على كلاً أرجو لكم التوفيق

itasmallbanner.png
#11

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

أخواني الكرام طلبت من السادة مشرفي القسم المساعدة في توضيح الأكود المدرجة في المشاركة رقم 5 و لكن إلى الأن لم يجد طلبي صدى و أنا في الحقيقة لم أطلب هذا الطلب إلا لأتفرغ للمراحل التالية من تصميم هذه الحلول و لكنني قادر على شرحها و الحمد لله و لكن المشكلة دائما تكمن في الوقت

و أيضاً لم يسأل إي أحد ما هذا الكود الذي أدرجته ، حتى أني وقفت في هذا المنتدى و أخذت أبحث هل أنا في منتدى أس كيو إل سيرفر أم أني دخلت منتدى أخر بالخطأ

حتى أني لم أجد أحداً يقول لي أنك أخطأت ، و لم أجد أحداً يقول لي أنا لا أعرف سوى أخين كريمين و هما ياسر و أيمن

و لكني على كل حال سوف أحاول شرح الكود السابق في المشاركات القادمة لعل و عسى أحداً من الزوار أن ينتفع به ..... لعل و عسى

أيها الأخوة كل ما أتمناه من هذا الموضوع هو أن نتعلم سوياً..!!! . نعم نتعلم سوياً كيف !!!؟؟ و أنا أكتب أكواد مثل التي في المشاركة رقم 5 ؟

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

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

و من هنا يتوجب أن تكون الروح العلمية الأنتقادية متوافرة و يجب أن يكون النقد بناءاً لا نقداً فقط للنقد أو للظهور

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

هل تقولون أن هذا الرجل يبالغ إذا قلت لكم عشرات الألاف من الدراهم تباع و أحياناً مئات الألاف ، و لكن بالطبع المتقن منها ، بل أفاجئكم المفاجأة الكبرى ، فأحياناً عندما يكون المدير المالي أو رئيس الحسابات ليس له دراية كافية بهذه التقنيات صدقوني حتى لو أن الحل هذا غير متقن و به الكثير من الـ bugs صدقون يباع أيضاً

شئ غريب أليس كذلك ؟؟؟

يا أخوة أريدكم أن تنتفعوا فهبوا و أبحثوا و أقرأوا المقالات و الكتب و الأراء و شاركونا برأيكم ، فأنا و لله الحمد و المنة لم أتي هنا إلا لكم

و أشكركم

itasmallbanner.png
#12

أخي الكريم PATCH DEVELOPER

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

لقد تحدثتم في المشاركات السابقة عن Nested_sets modul

و لكن ماذا أفعل لكي أقول ان هذا البيان الابن تابع لهذا البيان الأب

بمعني عندي شركة تسمي التوحيد و هذا هو الحساب الأب أما الحساب الأبن فهو الخزينة

فما هي جملة الاستعلام التي تستخرج تلك النتيجة

#13

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

الأخ / ياسر

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

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

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

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

هذا و الله أعلم

تابع معي سوف أكتب مشاركة أخرى

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

itasmallbanner.png
#14

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

الأن أخواني حللنا مشكلة إدخال الحسابات و التحكم بها بالكود المذكور سابقا في المشاركة رقم 5 و لكن سوف نتابع هنا سلسلة المشاكل التي تتطلب حل منا

بادئ ذي بدء يجب علينا في حلنا أن نحدد محددين أساسين

أولا : هل سنعتمد نظام أقفال سنوي بشكل مبرمج ؟

ثانيا : هل سنعتمد أستراتيجية للترحيل الحسابي و الأرشفة ؟

هاتين هما المحددات التي يجب أن نحددهما

فإلى مشاركة أخرى بإذن الله

تنبيه : جدول القيود الحسابية جاهز للعمل

أريد أن أرى مقترحاتكم

و كلمة إلى أخي ياسر

لا تقلق من ناحية هذه الحقول فسوف تتضح لنا أهميتها من عدمه مستقبلاً ولا تقلقوا جميعاً من الأستعلامات لأن هذا الأمر الحمد لله معتاد عليه و لي خبرة فيه

أتمنى أن تنتفعوا من ذلك و أن أرى حلولكم و برامجكم المحاسبية في السوق عن قريب

أخوكم

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

itasmallbanner.png
#15

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

أخواني هل تحسون بهذا الأحساس الذي أحسه ؟

أننا الأن أمام عديد من المشاكل التي فتحت أمامنا و المطلوب لها حل .. فهل ترون روعة ذلك؟ ..هل أحسستم هذا الأحساس الرائع ؟

أنا في أنتظار قرائتكم لهذا الموضوع الذي سوف تتضح قوته في المشاركات القادمة إن شاء الله

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

فأنا أعتبر أيها الشباب هذا الموضوع هو باب من أبواب الرزق فتحه لنا الله عز و جل

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

أخوكم

itasmallbanner.png
#16

بسم الله الرحمن الرحيم

أخي الكريم PATCH DEVELOPER

أولاً : أشكرك على هذا الموضوع المهم جـداً

أنا أقوم الأن بكتابة برنامج حسابات بالفيجوال بيسك مستخدماً sql server (لأول مرة) لإني كنت أعمل على الأكسيس

الفرق كبير ... و أنا مازلت تائه من جراء تحولي إلى الsql server

مازلت أحاول أن أتعرف على الإجراءات المخزنة

و سؤالي لك .. هل بكتابة إجراء مخزن داخل sql server أستطيع عمل تحديد للمدخلات داخل برنامجي بالفيجوال بيسك

أعرف أن هذا السؤال ليس هذا مكانه

و لكني قرت داخلى أنا أحترف الsql server إن شاء الله و أرجوا منك المساعدة

و شكراً :rolleyes:

سبحان الله و بحمده سبحان الله العظيم

أبو كريم و مازن و نور

vb.net - c# - asp.net - oracle - sql server

manager@tm-center.com

00966508268649

#17

نعم يمكنك من ادخال Input Parameter لل Stored Procedure

احتاج شرح وافى لكل من trigger و stored procedure,

كيف ادخل أكثر من متغير الى Stored Procedure

كيف يمكن تنفيذ Stored Procedure على جملة إستعلام من نوع Parameter Query

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#18

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

الأخ egyman

لقد رد عليك الأخ طارق بما قل و دل عن ما أردته و لكن لي تلميح على شئ أخر

يمكنك أستخدام كافة عبارات الأستعلام مع vb6 و كافة العبارات التنفيذية لتنفيذ إي إجراء مخزن و لكن أحكي لك فقط عن تجربتي لعلك تستفيد منها بشئ

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

كنت أبحث عن برمجة قواعد بيانات و قد كنت محتاراً و أعني ببرمجة قواعد البيانات هنا هو التلاعب بالصفوف و الحقول و الجمل الشرطية و القرارات و المتغيرات فهذه هي مقومات أي لغة برمجية ثم وقفت أمام حائط عالي و كنت أبحث عن الحلول و أخذت أشتري الكتب و أقرأ عن ما يستخدمه بكثرة مبرمجي الفيجوال بيسك و هو برمجة dao و حديثاً برمجة ado و هي أمكانيات تعطي التلاعب بالبيانات و لكني أحسست بجمود اللغة و بأنه عند كتابة أكواد معقدة و هذا ما كنت أحتاجه فإن نسيان علامة فاصلة على سبيل المثال من الممكن أن تتعبني كثيراً و هكذا كانت عندي معلومات بسيطة عن التقنية التي أستخدمتها شركة أوراكل و أختراعها لغة تقابل ado و doa و هي pl/sql و قد كنت مشدوها لمدى أكتفاء أوراكل الذاتي في تصميم تطبيقات تعتمد على قواعد البيانات فهم حتى أخذوا في الحسبان الواجهات و صمموا ما يسمى أوراكل ديفيلوبر و تتكون من شقين الشق الأول يهتم بالفورم و الشق الثاني يهتم بالتقارير أو الريبورت و من هنا وجدت و أنا أبحث عن تقنية تكون فعالة تكون لمايكروسوفت فإذا بي وجدت أكسس بروجيكت و كانت هذه هي البداية فوجدت شئ يماثل أوراكل بل يتفوق عليها في تصميم الواجهات كيف ؟

في أكسس بروجكت يمكنك الأتي تصميم كافة الواجهات و التقارير و النماذج بإستخدام vba و أيضا تستفيد من القوة الضاربة الغير طبيعية لأمكانيات أس كيو إل

بل أني في حلي الأخير قللت من دور النماذج لأقصى حد بالطبع لأنني لست محترفاً لبرمجة فيجوال بيسك و لكن أيضاً لأني لست في حاجة لها ، فأنا لا يعنيني أن يضئ الذر أما يطفو و هذا الهراءات التي هي أساساً غير موجودة في الحلول الأجنبية التي تعاملت معه

و السؤال الذي يطرح نفسه في هذا المقام لماذا لا تستفيد من أمكانيات فيجوال بيسك 6 في عمل برامج مستقلة يمكن عمل سيت أب لها بشكل مستقل ... و الجواب هل مايكروسوفت تركت هذا بشكل عشوائي بالطبع لا

أخي الكريم لقد صمموا نسخة من الأوفيس تسمي office developer edition هي تساعدك على عمل تطبيقات مستقلة تماما بحيث أنها تعمل على الكمبيوتر حتى بدون أن تثبت الأوفيس ... لماذا هذا ؟

أنها المنافسة ،، أنهم يخططون إلى منافسة أوراكل ديفيلوبر بــ أوفيس ديفيلوبر و أمكانيات أس كيو إل سيرفر

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

الرقابة الفعالة على المخزون و منع القيم السالبة التي من الممكن أن تظهر نتيجة للإدخالات الخطأ و عدم صرف أو أستلام بضاعة بدون طلب شراء و متابعة أوامر شراء العملاء و تحديد أي الأوامر قد تأخر و متابعة أوامر شراء الموردون و تحديد أي الأوامر قد تأخر

و العديد من الأستعلامات القوية جداً أخري لن يسعفني الحديث عنها حتى لا تعتبروا أن هذا أعلاناً عن منتج

و أخيراً أخي الكريم نصيحتي لك

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

حاول بقدر الأمكان أستخدام أكسس بروجيكت للبعد عن عيوب البرمجة BUGES

لا تبيع برنامجك أن كنت في مصر بأقل من خمسة ألاف جنيه مصري و هذا تواضعاً منك و تكرماً و أن كنت في دول الخليج لا تبعه بأقل من خمسة ألاف درهم أو ما يعادلها

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

أجتهد فنحن في حاجة لمبدعين في هذا المجال و يكفي أن نشاهد تجربة الهند و باكستان في مجال البرمجيات الجاهزة

فأنا على أقل تقدير كل شهر يجتمع معي أحد المبرمجين ليريني عمله لكي أشتري منه هذه الحلول

و أخيراً أشكر الأخ طارق و لي رجاء و اجد فقط عنده

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

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

أخوكم

itasmallbanner.png
#19

أخواني الكرام

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

سوف أتوقف قليلاً عند الكود الموضوع في المشاركة رقم 5 إن شاء الله لكي أوضحه و ذلك بأضافة تعليق على الكود نفسه حتى نفهم فهذا هو الغرض نفهم لا أن نستخدم أكواد لا نعلم كيف وضعت و أيضاً لكي نعلم ما هي قوة أس كيو إل ،

الكود الموضوع هو كود لعمل قادح يندرج تحته مؤشر أي أنكم من خلال هذا الكود سوف تتعرفون على قوة القوادح و قوة المؤشرات و بشكل ضمني ايضاً الأجراءات المخزنة

و إلى لقاء في مشاركة أخرى

و أشكركم

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

itasmallbanner.png
#20

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

ها نحن رجعنا مرة أخرى إلى مختبرنا هنا لتشريح هذا الكود المكتوب في المشاركة رقم 5

و سوف أبدأ الأن بالقسم الأول من الكود الذي هو كود لعمل قادح

فائدة هذا القادح

مراقبة التداخل الذي من الممكن أن يحدث بين مجموعات الحسابات و مثال ذلك كما أوضحت سابقاً

اقتباس
لو قلت لك مثلا إن الأيرادات هي من الحساب رقم 3000 إلى الحساب 3600

و إن المصاريف هي من الحساب 3400 إلى الحساب 3999

فهل هذه الفرضية منطقية ؟ و الجواب لا لأنه هنا توجد منطقة تقاطع ... و أين تقع منطقة التقاطع ؟

هي من الحساب رقم 3400 إلى الحساب 3600 أي ما يعادل مائتان حساب لا يعرف جنسهم هل هم مصنفون تحت الأيرادات أم تحت المصاريف إذا .....

إذاً هذه هي المشكلة التي من أجلها وضع هذا القادح و يسألني أحدكم لماذا لم ما يسمى Constraint أو قاعدة التحقق من الصحة للحقول المراد كبحها أو تحديدها

الحقيقة أن جميع خبراء تصميم قواعد البيانات ينصحون بأستخدام قواعد التحقق من الصحة و الأفتراضيات أو constraints or defaults و لكن أخواني هذا ليس مقام أستخدامهما لأن هذا النوع من تحديد البيانات يتطلب أستراتيجية معينة لا يمكن تطبيقها بأستخدام constraint أو default و التفريع و الشرط و القرار و أيضاً هنا التنقل بين السجلات

فلنرجع مرة أخرى إلى هذا الكود و كما هو موضح أسفل هذا الكلام مباشرة هذا الجزء الأول من الكود الخاص بالقادح المنشأ

/* الخطوة التالية مهمة جداً في بداية أي كود سكريبت يتم عمله بشكل منفصل و خاصة عند أستخدام الأداة query analyzer و التي يتم من خلالها أختبار الأكواد بشكل منفصل و طبعا هي تؤكد عدم دخول هذا الكائن الذي نصممه في زمرة كائنات قواعد البيانات التي يتداولها أس كيو أل سيرفر و يفرض هنا أختبار و هو إن كان الكائن الذي أسميناه نحن ExtentCheckerIs  ضمن كائنات قواعد البيانات فأحذفه و إن لم يكن فلا ردة فعل تتخذ بل تسير الأمور كما هو مخطط و نتجه إلى الحزمة الثانية من الكود و التي بها سوف ننشأ قادح أسمه ExtentCheckerIns و يجب فقط أن أنوه هنا أنه ما يفصل حزمة برمجية أو Patch  عن أخرى الكلمة go  يجب أن تضعوا ذلك في أعتباركم */
IF EXISTS (SELECT name 
	   FROM sysobjects WHERE name = N'ExtentCheckerIns' AND type = 'TR')
    DROP TRIGGER ExtentCheckerIns
GO

/* هذه هي بدايتنا و هي إنشاء القادح */

CREATE TRIGGER ExtentCheckerIns ON dbo.accounts
FOR  INSERT , UPDATE
/* كما هو واضح الكود هنا للتحديثات و الأدخالات */

AS set nocount on /* هذه الجزئية التي في أعلى set nocount on لكي أطمأن إنه عند أضافة حقل أو حذف أو تحديث لا تأتي ردة فعل أس كيو إل الطبيعية و الرسائل التي تؤكد بأضافة صف أو تعديل أو حذف فإن كنت لا تريد هذه الرسائل بالطبع أستخدم هذا التعبير set nocount  و أجعل قيمته on */


/* مرحلة التصريح عن المتغيرات و هذه هي بداية نقاط القوة في البرمجة الخاصة بقواعد البيانات */

declare @account as int, @parentacc as int ,@leftextent as int ,@rightextent as int
declare @pleftextent as int , @prightextent as int ,@chrpleftextent as varchar(50),@chrprightextent as varchar(50)
declare @gpaccount as int , @gprightextent as int , @gpleftextent as int ,@chrgpleftextent as varchar(50),@chrgprightextent as varchar(50)
declare @accountcr as int , @parentacccr as int , @leftextentcr as int , @rightextentcr as int
select @account = accountid from inserted select @parentacc = parentaccount_node from inserted where accountid=@account
select @leftextent = leftextent from inserted where accountid=@account
select @rightextent = rightextent from inserted where accountid=@account
select @pleftextent = leftextent from accounts where accountid=@parentacc
select @prightextent = rightextent from accounts where accountid = @parentacc
select @gpaccount = parentaccount_node from accounts where accountid=@parentacc
select @gpleftextent = leftextent from accounts where accountid=@gpaccount
select @gprightextent = rightextent from accounts where accountid=@gpaccount
/* الأكواد التالية أستخدمتها لكي أحول القيم التي هي من النوع int أي عدد صحيح  إلى varchar أو نصية لكي أستخدمها في الإشارة أو حقل indicator لكي تكون علامة لي عن وجود خطأ معين */
set @chrpleftextent = convert(varchar,@pleftextent)
set @chrprightextent = convert(varchar,@prightextent)
set @chrgpleftextent = convert(varchar,@gpleftextent)
set @chrgprightextent = convert(varchar,@gprightextent)
/* أخواني يجب عليكم مراجعة كافة التفاصيل الخاصة بالدوال بالتفصيل من الأداة book online  */

و نأتي بعد ذلك بعد مرحلة التصريح عن المتغيرات و أفتتاح كود القادح إلى مرحلة الشرط و القرار هنا و هذه المرحلة مهمة فأنا هنا عددت 16 حالة من الممكن أن تحدث فكيف ذلك و كيف لي أن أحصيتها أنها ستة عشرة حالة هذا صراحة استنبطه من قوانين الأحتمالات التي أخذناها سابقاً في الثانوية العامة فأنا عندي هنا جوابين فقط هما نعم أم لا و اربع أختبارات إذا ما هي الأحتمالات التي سوف تكون كرد لهذه الأختبارات سوف تكون 2^4 أو 2 أس 4 = 16 حالة فإن كانت أقل من ذلك أو أكثر فأن ذلك يعتبر مؤشر على وجود خطأ في الكود

و الأختبارات هي :

1-@leftextent = @account

هل الحد الأيسر يساوي رقم الحساب - فهذه هي قاعدة أساسية من القواعد التي فرضناها سابقاً

2-@rightextent < @prightextent

هل الحد الأيمن أقل من الحد الأيمن للحساب الأب - للتأكد أن المدى لن يمتد لأبعد من المدى المخصص للحساب الأب

3-pleftextent-@prightextent <>0

هل الحد الأيمن للأب - الحد الأيسر للأب لا يساوي صفر و هذا طبعا للتأكد من أن هذا الحساب ليس حساب طفل أو فرع

4- @rightextent>=@leftextent

هل الحد الأيمن أكبر من أو يساوي الحد الأيسر ( يجب أن أنوه أن علامة يساوي في الكود المدرج في المشاركة رقم 5 لم تدرج )

إذا هذه هي الأربع أختبارات الأولية و سوف يكون الكود كالتالي

/******************* FIRST TEST *******************************/

if @leftextent = @account and @rightextent < @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent>=@leftextent
begin update accounts 
set indicator = 'OK' 
WHERE accountid = @account
end
else
if @leftextent = @account and @rightextent < @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent<@leftextent
begin update accounts 
set indicator = 'LEFT EXTENT BIGGER THAN RIGHT EXTENT' 
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
end
else
if @leftextent = @account and @rightextent < @prightextent and (@pleftextent-@prightextent)=0 and @rightextent>@leftextent
begin update accounts 
set indicator = 'THE PARENT ACCOUNT IS NOT A NODE IT IS LEAVE  ' 
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent = @account and @rightextent < @prightextent and (@pleftextent-@prightextent)=0 and @rightextent<@leftextent
begin update accounts 
set indicator = 'THE PARENT ACCOUNT IS NOT A NODE IT IS LEAVE AND LEFT EXTENT BIGGER THAN RIGHT EXTENT ' 
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent <> @account and @rightextent < @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE LEFT EXTENT IS NOT EQUAL THE ACCOUNT ID THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
end
else
if @leftextent <> @account and @rightextent < @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE LEFT EXTENT IS NOT EQUAL THE ACCOUNT ID THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
end
else
if @leftextent <> @account and @rightextent < @prightextent and (@pleftextent-@prightextent)=0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND THE LEFT EXTENT IS NOT EQUAL THE ACCOUNT ID THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent <> @account and @rightextent < @prightextent and (@pleftextent-@prightextent)=0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND THE LEFT EXTENT IS NOT EQUAL THE ACCOUNT ID THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent = @account and @rightextent > @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE RIGHT EXTENT IS MORE THAN THE PARENT RIGHT EXTENT THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set rightextent = @prightextent-1
WHERE accountid = @account
end
else
if @leftextent = @account and @rightextent > @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE RIGHT EXTENT IS MORE THAN THE PARENT RIGHT EXTENT THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set rightextent = @prightextent-1
WHERE accountid = @account
end
else
if @leftextent = @account and @rightextent > @prightextent and (@pleftextent-@prightextent)=0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND THE RIGHT EXTENT IS MORE THAN THE PARENT RIGHT EXTENT THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent = @account and @rightextent > @prightextent and (@pleftextent-@prightextent)=0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND THE RIGHT EXTENT IS MORE THAN THE PARENT RIGHT EXTENT THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent <> @account and @rightextent > @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent>@leftextent
begin update accounts
set indicator = 'NEITHER THE LEFT EXTENT AND THE RIGHT EXTENT IS WRONG THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent = @prightextent-1
WHERE accountid = @account
end
else
if @leftextent <> @account and @rightextent > @prightextent and (@pleftextent-@prightextent)<>0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND NEITHER THE LEFT EXTENT AND THE RIGHT EXTENT IS WRONG THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent = @prightextent-1
WHERE accountid = @account
end
else
if @leftextent <> @account and @rightextent > @prightextent and (@pleftextent-@prightextent)=0 and @rightextent>@leftextent
begin update accounts
set indicator = 'THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND NEITHER THE LEFT EXTENT AND THE RIGHT EXTENT IS WRONG THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end
else
if @leftextent <> @account and @rightextent > @prightextent and (@pleftextent-@prightextent)=0 and @rightextent<@leftextent
begin update accounts
set indicator = ' AND LEFT EXTENT BIGGER THAN RIGHT EXTENT AND THE PARENT ACCOUNT IS NOT NODE IT IS LEAVE AND NEITHER THE LEFT EXTENT AND THE RIGHT EXTENT IS WRONG THE EXTENTION MUST BE BETWEEN '+ @CHRPLEFTEXTENT +' and '+ @CHRPRIGHTEXTENT
WHERE accountid = @account
update accounts
set leftextent = @account
WHERE accountid = @account
update accounts
set rightextent=@account
where accountid = @account
update accounts
set parentaccount_node=@gpaccount
where accountid = @account
end

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

الحساب 1001 الحد الأيسر 1001 الحد الأيمن 1020 لا يهم في هذا الحساب تحديد الحساب الأب له

الحساب 1004 الحساب الأب 1001 الحد الأيسر 1004 الحد الأيمن 1010 ------> 1

الحساب 1011 الحساب الأب 1001 الحد الأيسر 1011 الحد الأيمن 1015 ------> 2

الحساب 1013لحساب الأب 1001 الحد الأيسر 1013 الحد الأيمن 1016 ------> 3

الأن لاحظوا معي السطر رقم 3 هنا و تعالوا نطبق عليه الأختبارات السابق ذكرها الأربعة

1-هل الحد الأيسر = رقم الحساب الجواب نعم

2-هل الحد الأيمن للحساب الذي هو 1016 أقل من الحد الأيمن للحساب الأب الذي هو 1020 و الجواب نعم

3- هل الحد الأيمن للأب الذي هو 1020 - الحد الأيسر للأب الذي هو 1001 لا يساوي صفر و الجواب نعم

4- هل الحد الأيمن للحساب الذي هو 1016 أكبر من أو يساوي الحد الأيسر للحساب الذي هو 1013 و الجواب نعم

إذاً كانت نتيجة الأختبارات الأولى أيجابيه كلها بالنسبة للسطر رقم 3 و لكن المشكلة هنا أن السطر رقم 3 غير صحيح منطقياً كيف ؟

الجواب

هناك تداخل بين الحد الأيسر و الايمن للحسابان 1011 و 1013 فالحسابان مجموعتان و لكن المدى لكل مجموعة غير متداخل و لكنه متداخل و المنطقة المشتركة هي الحسابات من 1013 إلى 1015

و هنا كان لزاماً علينا أن نمر على كل سجل مجموعة مثل السجلات في السطر 1 و 2 لكي نتأكد من أن الحد الأيسر للحساب أقل من الحد الأيسر للسجل المؤشر عليه و أن الحد الأيمن أقل من الحد الأيمن

و الأن الأختبار عندما يكون الحد الأيسر للحساب المدخل أكبر من الحد الأيسر للحساب المؤشر عليه و الحد الأيمن المدخل أكبر من أو يساوي الحد الأيمن للحد المؤشر عليه إذن الجواب إجعل الحد الأيمن يساوي رقم الحساب المدخل

و كان هذا الكود الخاص بالمؤشر و الذي تم فتح جدول أسميته TempoA (على فكرة التيمبو مصطلح شطرنجي )

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

والأن الكود كما هو مبين أسفل

/**************** SECOND TEST ****************/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TempoA]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[TempoA]


CREATE TABLE [dbo].[TempoA] (
	[AccountID] [int] NULL ,
	[ParentAccount_Node] [int] NULL ,
	[LeftExtent] [int] NULL ,
	[RightExtent] [int] NULL 
) ON [PRIMARY]

insert into dbo.tempoa (accountid,parentaccount_node,leftextent,rightextent)
select accountid,parentaccount_node,leftextent,rightextent from accounts where parentaccount_node = @parentacc and accountid<>@account and leftextent<>rightextent

declare tempoa_crsr cursor
forward_only
keyset
for select accountid,parentaccount_node,leftextent,rightextent from dbo.tempoa open tempoa_crsr
fetch next from tempoa_crsr into @accountcr,@parentacccr,@leftextentcr,@rightextentcr while (@@fetch_status<>-1)
begin if (@@fetch_status<>-2)
begin if @leftextent > @leftextentcr and @rightextent >= @rightextentcr
begin update accounts
set rightextent = @account
where accountid =@account
end
fetch next from tempoa_crsr into @accountcr,@parentacccr,@leftextentcr,@rightextentcr end
end
close tempoa_crsr
deallocate tempoa_crsr

طبعا أوجه نظركم فقط إلى المتغير العمومي @@fetch_status هو عبارة عن أداة من أدوات مراقبة المؤشرات حيث أني أقول طالما لم تفشل العملية fetch و إذا كان الصف المجلوب غير موجود إذن أذهب للسطر الذي يلي

و تكون قيم @@fetch_status = 0 إذن العملية fetch كانت ناجحة

@@fetch_status =-1 فشلت العملية fetch

@@fetch_status =-2 الصف المجلوب غير موجود

فأرجوا أن تكونوا قد أستفدتم من هذا الشرح المبسط الذي يفتح المجال أمامكم للبحث الموسع في هذه اللغة حيث أني لم أشرح أنواع المؤشرات و أيضاً تقنية المؤشرات المتداخلة فإن هذا ليس هو المجال للتكلم عنه و أيضاً العديد من قواعد اللغة المتضمنه ها هنا و لكني أنصح كل شخص أن لا يترك هذا المجال للسؤال عن ما لم يعرفه

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

و أخيراً هناك الكثير من النقاط أتمنى من القارئين مناقشتي فيها فأنا أعرف نقاط الضعف و القوة في هذا الكود و أوجه القصور

و أخيراً فأن الخطوة التالية إن شاء الله سوف تكون مهمة فأرجوا منكم متابعتي في هذا المقال المهم

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

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

itasmallbanner.png
#21

مرحبا بالجميع واكثر من رائع يا اخ حميد

صراحة انا كنت مشغول جدا هاليومين ومن تجربتي في ادخال الحسابات مبدئياً لاحظت اثناء تطبيق الافتراضات والشروط التي وضعتها أن هناك شرط اساس وهو أن

ParentAccount_Node<=AccountId دائماً وابداً

#22

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

الكلام الذي أدرجته سابقا يا أخ خالد صحيح و ملاحظتك مضبوطة

و أرجو من الأخوة الكرام المحاسبين خاصة مراجعة مراجعهم الخاصة و قراءة كل شئ عن كشف التدفق النقدي لأننا سوف نضيف بعض التعديلات و التوسعات على النظام السابق لكي يتناسب و المهام الموكلة إليه و هي معالجة القيود المحاسبية و أستخراج حسابات النتيجة و الميزانية العمومية

و أشكركم جزيلاً

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

itasmallbanner.png
#23

الى الاخ خالد والاخ حميد

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

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

#24

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

أخي الكريم الفهد البرونزي

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

أنهض و أنفض الغبار من على رأسك ، أنهض و أحضر الورقة و القلم ، أنهض و أقرأ في الكتب ، أنهض لأن في نهضتك هذه عزة و كرامة

أخي الفهد البرونزي لا تطلب من أحد أن يصنع لك شيئاً فأنت لا ينقصك شئ

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

و أشكرك و أرجو منك متابعة هذا الموضوع لأن ما هو أتٍ بإذن الله يحتاج إلى التركيز الشديد

و أشكركم

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

itasmallbanner.png
#25

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

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

التقارير المالية - أسس الإعداد و العرض و التحليل وفقا لأحدث الإصدارات و التعديلات في معايير المحاسبة الدولية و الأمريكية و البريطانية و العربية و المصرية

تأليف/ الدكتور طارق عبدالعال حماد - كلية التجارة جامعة عين شمس

الناشر / الدار الجامعية -الأسكندرية

فأرجوا منكم الأستعداد جيداً لأن الحل الخاص بنا سوف تطويره في المرحلة القادمة إن شاء الله

و أشكركم

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

itasmallbanner.png

هذا الموضوع مغلق.

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