اذهب الي المحتوي
أوفيسنا

حساب رصيد مجموعة حسابات في شجرة الحسابات


graysky81699

الردود الموصى بها

السلام عليكم

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

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

 Acc1 فمثلا عند الضغط على الموجودات أريد حساب كامل أرصدة الموجودات ضمن النموذج 

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

Tree.rar

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

السلام عليكم أخي

 

رجاء تعبئة برنامجك ببيانات مميزه ، ثم اخباري:

اي نموذج استعمل

اين انقر

ما النتيجة التي تريدها (وتعطيني مثال او مثالين بعملية الجمع مع ارقام من قاعدة البيانات حتى استطيع المقارنة)

 

 

جعفر

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

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

أي الأموال الجاهزة يجب أن تظهر 30000
الموجودات المتداولة يجب أن تظهر   108750
الموجودات   108750 
وهكذا

Tree.rar

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

شكرا على التوضيح :rol:

 

انا مب محاسب ، فصدقني ما اعرف شئ عن برامج المحاسبة وكيفية عملها!!

 

لوسمحت تخبرني:

لما انقر على الموجودات ، او الموجودات المتداولة ، في نموذج Tree ،

اي جدول ، واي الحقول اللي فيها المعلومات المطلوبة ، يعني كيف توصلت للرقم 108750 ؟

 

سبب سؤالي هو ، على حسب جوابك اعمل لك البرمجة ان شاء الله:rol:

 

جعفر

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

tran  في جدول  debit credit هذا الرقم وصلت له بجمع قيم  

Account_idمن خلال حقل  Accounts  وهو مرتبط بجدول 

 

 عبارة عن شجرة وليس حساب منفصل  Accounts جدول 

Father الحساب له مجموعة حسابات أب له محددة في خانة 

وقد يكون له جد أو أعلى من ذلك

ففي الشجرة في الصورة الصندوق الأول أبوه هو الأموال الجاهزة وجده الموجودات المتداولة ووالد جده الموجودات

حساب المهندس محمود والمهندس خالد والدهم الموجودات المتداولة وجدهم الموجودات

 

فالموجودات المتداولة مثلا رصيدها  108750 

لأن مجموع رصيد أبناءه وأحفادة هو هذا الرقم

 

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

 

مع قبول فائق الشكر 

5.jpg

تم تعديل بواسطه graysky81699
رابط هذا التعليق
شارك

اخي الكريم

سؤالك هو شبح المبرمجين ومنوة المحاسبين !

ولكن قبل مشاركة اخي جعفر هناك ملاحظة : وجود العمود c&n في الجدول وهو يمكن ان يكون محسوب ويستغنى عنه ولتوفير جهد كبير في الادخال !

استفسار : هل عمود code  هو المرجع لتكويد الحسابات ولن يكون فارغ او به خطأ في التكويد ؟ مع العلم انني وجدتك معتمدا على id  وال father  في تعبئة التري ! بمعنى لو عمود code  سيكون دقيقا في التكويد  ساستخدمه لما طلبت وبطريقة سهلة جدا بل مرنة لمعرفة اجمالي ابناء كل حساب !

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

نرجع للموضوع وبالتحديد حول الملاحظة والاستفسار !

تحياتي

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

 Idربط الحسابات يتم عن طريق عمود  

ممكن ان يتغير حسب موقع الحساب في الشجرة Code وذلك لان

اما بالنسبة لكلمة رصيد ام اجمالي فطبعا اقصد اجمالي 

مع جزيل الشكر للجميع

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

السلام عليكم :rol:

 

18 ساعات مضت, رمهان said:

سؤالك هو شبح المبرمجين

.

ايه والله ، صار لي من امس وانا احاول فيه ، لكن الحمدلله :rol:

 

النتيجة:

273.gif.7623da914a6529f0b29801b3d6209f7e

 

 

والكود:

Option Compare Database
Option Explicit

Public Add_Them As String


Private Sub TreeView1_nodeClick(ByVal node As Object)
On Error GoTo err_TreeView1_nodeClick

 Dim Pos As Integer
 
 If node.Index > 1 Then
 Dim tt As String
  tt = Split(node.Key, ";")(0)
  

 
  TempVars.add "Acc1", Mid(tt, 2)
'  DoCmd.OpenForm "acc1", acNormal
    End If
 
 Pos = InStr(1, TreeView1.SelectedItem, "..") - 1
 If Pos > 0 Then
   If Left(TreeView1.SelectedItem, Pos) = "1299999" Then
'     DoCmd.OpenForm "Form1"
   End If
 End If
 
 
    Dim Parent_and_Children As String
    Dim mySQL As String
    Dim rst As DAO.Recordset
    
    Parent_and_Children = node.Key
    
'Call TraverseChildren(node)

    Add_Them = ""
    'get the insert the Parent node, and ask for the Childern nodes
    Parent_and_Children = Add_Them & ";" & node.Key & ";" & TraverseChildren(node)
    'Remove the 1st A, the the node key is something like this: A385
    Parent_and_Children = Mid(Parent_and_Children, 2)
    'Remove the extra ;
    Parent_and_Children = Replace(Parent_and_Children, ";;", ";")
    'Remove the "A"s
    Parent_and_Children = Replace(Parent_and_Children, "A", "")
    'prepare the results a Criteria for the WHERE condition
    Parent_and_Children = "[Account_ID] = " & Replace(Parent_and_Children, ";", " Or [Account_ID] = ")
    'Debug.Print Parent_and_Children
    
    'do a Recordset to get the results
    mySQL = "SELECT Sum(nz([CREDIT],0)) AS C, Sum(nz([DEBIT],0)) AS D, Sum(nz([CREDIT],0)-nz([DEBIT],0)) AS B"
    mySQL = mySQL & " FROM Trans"
    mySQL = mySQL & " WHERE " & Parent_and_Children
    'Debug.Print mySQL
    Set rst = CurrentDb.OpenRecordset(mySQL)
    MsgBox "Credit=" & rst!C & vbCrLf & _
           "Debit=" & rst!D & vbCrLf & _
           "Balance=" & rst!B

Exit Sub
On Error Resume Next
Debug.Print "node.Child; " & node.Child
Debug.Print "node.Children; " & node.Children
Debug.Print "node.Expanded; " & node.Expanded
Debug.Print "node.FirstSibling; " & node.FirstSibling
Debug.Print "node.FullPath; " & node.FullPath
Debug.Print "node.Index; " & node.Index
Debug.Print "node.Key; " & node.Key
Debug.Print "node.LastSibling; " & node.LastSibling
Debug.Print "node.Next; " & node.Next
Debug.Print "node.Parent; " & node.Parent
Debug.Print "node.Previous; " & node.Previous
Debug.Print "node.Root; " & node.Root
Debug.Print "node.Selected; " & node.Selected
Debug.Print "node.Sorted; " & node.Sorted
Debug.Print "node.Tag; " & node.Tag
Debug.Print "node.Text; " & node.Text
Debug.Print "----------------------"
 
 
err_TreeView1_nodeClick:

    If Err.Number = 3075 Then
        'only one condition, remove the extra bits
        Parent_and_Children = Replace(Parent_and_Children, " Or [Account_ID] = ", "")
        mySQL = "SELECT Sum(nz([CREDIT],0)) AS C, Sum(nz([DEBIT],0)) AS D, Sum(nz([CREDIT],0)-nz([DEBIT],0)) AS B"
        mySQL = mySQL & " FROM Trans"
        mySQL = mySQL & " WHERE " & Parent_and_Children
        'Debug.Print mySQL
        Set rst = CurrentDb.OpenRecordset(mySQL)
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If

End Sub
 
Function TraverseChildren(node As MSComctlLib.node)

'
'from http://www.access-programmers.co.uk/forums/showpost.php?p=589097&postcount=5
'modified by jjafferr 21-11-2015
'
'  writes the text of each child node to the debug window
'  or a message if no child nodes exist
   Dim n As MSComctlLib.node
   Dim i As Integer
   

   'using the 'Child' property of the node, get the first child
   Set n = node.Child
   'traverse the children using the 'Children' property of the node
   For i = 1 To node.Children
      'display the text of the child node
      
      'Debug.Print n.Key & vbTab & n.Text
      Add_Them = Add_Them & ";" & n.Key
    
      'to affect recursion, uncomment this line
      TraverseChildren n
      'using the 'Next' property of the current child, get the next child
      Set n = n.Next
   Next i
   'indicate no children
   If i = 0 Then Debug.Print "Node has zero children"

    TraverseChildren = Add_Them
    
End Function

.

انا تركت لك في الكود بعض الاوامر اللي قد تفيدك في عملية الشجرة ،

واعتقد بإمكانك ان تستعمل النتائج في المكان اللي تريد ، فانا عملت لك النتيجة على هيئة Recordset:

Set rst = CurrentDb.OpenRecordset(mySQL)
    MsgBox "Credit=" & rst!C & vbCrLf & _
           "Debit=" & rst!D & vbCrLf & _
           "Balance=" & rst!B

 

جعفر

273.1.Tree.accdb.zip

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

صباح الورد اخوي جعفر

Private Sub TreeView1_nodeClick(ByVal node As Object)
On Error GoTo 10:
MsgBox (CurrentDb.OpenRecordset("select sum(nz(credit,0))-sum(nz(debit,0)) from trans where account_id in(" & CurrentProject.AccessConnection.Execute("select id from accounts where code like '" & Left(node.Text, InStr(1, node.Text, ".") - 1) & "%'").GetString(, , , ",") & ")")(0))
10:
End Sub

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

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

تحياتي :: مبرمجين ومحاسبين واعضاء

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

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

 

وبذلك تكون قد أتممت معروفك

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

 

 

273.1.Tree.rar

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

شكرا جزيلا أخي الكريم على هذه اللفته الجميلة منك :rol:

 

اما بالنسبة لطلبك ، فتلاحظ اننا عملنا استعلام بهذه الاسطر:

mySQL = "SELECT Sum(nz([CREDIT],0)) AS C, Sum(nz([DEBIT],0)) AS D, Sum(nz([CREDIT],0)-nz([DEBIT],0)) AS B"
    mySQL = mySQL & " FROM Trans"
    mySQL = mySQL & " WHERE " & Parent_and_Children

.

وعلى اساس حاجة الاستعلام ، ذللنا Parent_and_Children وجعلنا نتيجتها تخدم الاستعلام بهذه الخطوات:

'Remove the 1st A, the the node key is something like this: A385
    Parent_and_Children = Mid(Parent_and_Children, 2)
    'Remove the extra ;
    Parent_and_Children = Replace(Parent_and_Children, ";;", ";")
    'Remove the "A"s
    Parent_and_Children = Replace(Parent_and_Children, "A", "")
    'prepare the results a Criteria for the WHERE condition
    Parent_and_Children = "[Account_ID] = " & Replace(Parent_and_Children, ";", " Or [Account_ID] = ")

.

فنعم ، يمكنك تغيير هذا الاستعلام الى ما شئت ، وعليه يجب تغيير Parent_and_Children لتتناسب قيمه مع المطلوب :rol:

 

 

جعفر

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

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

273.2.Clipboard01.jpg.f451b638072ad53e90

.

وعملت تقرير على اساس هذا الاستعلام ، فاصبحت النتيجة:

273.2.Clipboard02.jpg.2802c621b47cb2772d

.

والكود اصبح:

Option Compare Database
Option Explicit

Public Add_Them As String


Private Sub TreeView1_nodeClick(ByVal node As Object)
On Error GoTo err_TreeView1_nodeClick

 Dim Pos As Integer
 
 If node.Index > 1 Then
 Dim tt As String
  tt = Split(node.Key, ";")(0)
  

 
  TempVars.add "Acc1", Mid(tt, 2)
'  DoCmd.OpenForm "acc1", acNormal
    End If
 
 Pos = InStr(1, TreeView1.SelectedItem, "..") - 1
 If Pos > 0 Then
   If Left(TreeView1.SelectedItem, Pos) = "1299999" Then
'     DoCmd.OpenForm "Form1"
   End If
 End If
 
 
    Dim Parent_and_Children As String
    Dim mySQL As String
    Dim rst As DAO.Recordset
    
    Parent_and_Children = node.Key
    

    Add_Them = ""
    'get the insert the Parent node, and ask for the Childern nodes
    Parent_and_Children = Add_Them & ";" & node.Key & ";" & TraverseChildren(node)
    'Remove the 1st A, the the node key is something like this: A385
    Parent_and_Children = Mid(Parent_and_Children, 2)
    'Remove the extra ;
    Parent_and_Children = Replace(Parent_and_Children, ";;", ";")
    'Remove the "A"s
    Parent_and_Children = Replace(Parent_and_Children, "A", "")
    The_Value = Parent_and_Children
'1
    'prepare the results a Criteria for the WHERE condition
'    Parent_and_Children = "[Account_ID] = " & Replace(Parent_and_Children, ";", " Or [Account_ID] = ")
    'Debug.Print Parent_and_Children
    

    'do a Recordset to get the results
'    mySQL = "SELECT Sum(nz([CREDIT],0)) AS C, Sum(nz([DEBIT],0)) AS D, Sum(nz([CREDIT],0)-nz([DEBIT],0)) AS B"
'    mySQL = mySQL & " FROM Trans"
'    mySQL = mySQL & " WHERE " & Parent_and_Children
    'Debug.Print mySQL
'    Set rst = CurrentDb.OpenRecordset(mySQL)
'    MsgBox "Credit=" & rst!C & vbCrLf & _
           "Debit=" & rst!D & vbCrLf & _
           "Balance=" & rst!B
           
           
'OR
'2
    The_Value = Replace(The_Value, ";", ",")
    DoCmd.OpenReport "rpt_Sum_Children", acViewPreview
    
Exit Sub
On Error Resume Next
Debug.Print "node.Child; " & node.Child
Debug.Print "node.Children; " & node.Children
Debug.Print "node.Expanded; " & node.Expanded
Debug.Print "node.FirstSibling; " & node.FirstSibling
Debug.Print "node.FullPath; " & node.FullPath
Debug.Print "node.Index; " & node.Index
Debug.Print "node.Key; " & node.Key
Debug.Print "node.LastSibling; " & node.LastSibling
Debug.Print "node.Next; " & node.Next
Debug.Print "node.Parent; " & node.Parent
Debug.Print "node.Previous; " & node.Previous
Debug.Print "node.Root; " & node.Root
Debug.Print "node.Selected; " & node.Selected
Debug.Print "node.Sorted; " & node.Sorted
Debug.Print "node.Tag; " & node.Tag
Debug.Print "node.Text; " & node.Text
Debug.Print "----------------------"
 
 
err_TreeView1_nodeClick:

    If Err.Number = 3075 Then
        'only one condition, remove the extra bits
        Parent_and_Children = Replace(Parent_and_Children, " Or [Account_ID] = ", "")
        mySQL = "SELECT Sum(nz([CREDIT],0)) AS C, Sum(nz([DEBIT],0)) AS D, Sum(nz([CREDIT],0)-nz([DEBIT],0)) AS B"
        mySQL = mySQL & " FROM Trans"
        mySQL = mySQL & " WHERE " & Parent_and_Children
        'Debug.Print mySQL
        Set rst = CurrentDb.OpenRecordset(mySQL)
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If

End Sub
 
Function TraverseChildren(node As MSComctlLib.node)

'
'from http://www.access-programmers.co.uk/forums/showpost.php?p=589097&postcount=5
'modified by jjafferr 21-11-2015
'
'  writes the text of each child node to the debug window
'  or a message if no child nodes exist
   Dim n As MSComctlLib.node
   Dim i As Integer
   

   'using the 'Child' property of the node, get the first child
   Set n = node.Child
   'traverse the children using the 'Children' property of the node
   For i = 1 To node.Children
      'display the text of the child node
      
      'Debug.Print n.Key & vbTab & n.Text
      Add_Them = Add_Them & ";" & n.Key
    
      'to affect recursion, uncomment this line
      TraverseChildren n
      'using the 'Next' property of the current child, get the next child
      Set n = n.Next
   Next i
   'indicate no children
   If i = 0 Then Debug.Print "Node has zero children"

    TraverseChildren = Add_Them
    
End Function

.

والوحدة النمطية التي ترسل الشروط للإستعلام:

Option Compare Database

Public The_Value As String


Function Get_Qry_Criteria()

    Get_Qry_Criteria = The_Value

End Function

.

 

 

جعفر

273.2.Tree.accdb.zip

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

اخينا graysky

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

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

اخوي جعفر: ممكن تقول لي كيف ادرج الفيسس ؟ مش عارف بعد التطويرات الجديدة !

تحياتي

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

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

54 دقائق مضت, رمهان said:

هل جربت سطر رمهان ؟

.

نعم انا جربته ، وناوي اعمل له عملية تفكيك علشان اوصل لمعلوماته القيمة جدا واللي ما اعرف حتى كيف اتهجّى كلماته :rol:

 

56 دقائق مضت, رمهان said:

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

.

انا مسافر الاربعاء ان شاء الله ، وحتكون لكم وحشه :cool:

 

58 دقائق مضت, رمهان said:

ممكن تقول لي كيف ادرج الفيسس ؟

.

تفضل ، هذه الايقونه:

0.Faces.jpg.b9d98835bbd7a25856d27408b450

.

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

 

جعفر

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

في ٢٢‏/١١‏/٢٠١٥ ٤:٥١:٣٥, jjafferr said:

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

.

نعم انا جربته ، وناوي اعمل له عملية تفكيك علشان اوصل لمعلوماته القيمة جدا واللي ما اعرف حتى كيف اتهجّى كلماته :rol:

تفضل ، هذه الايقونه:

0.Faces.jpg.b9d98835bbd7a25856d27408b450

.

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

 

جعفر

وحتوحشنا اكثر ! وسنفتقدك ! وندعو لك بالتوفيق !

وغريبه كانت الايقونة لدي لخيار الكود اما الان تمام :jump::jump::jump:

:fff::fff::fff:

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

  • 1 month later...
  • 5 years later...
  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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

×   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

×   Your previous content has been restored.   Clear editor

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

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information