예제 #1
0
파일: Tree.cs 프로젝트: Digiman/ASTPP
 /// <summary>
 /// Рекурсивный метод построения дерева
 /// </summary>
 /// <param name="root">Корень для текущей итерации</param>
 /// <param name="RowsData">Строки таблицы СИ для построения дерева</param>
 /// <param name="parent">Код родительского узла</param>
 public void BuiltTree(TreeNode root, CompositionRow[] RowsData, long parent)
 {
     for (int i = 0; i < RowsData.Length; i++)
         if (RowsData[i].WhereCode == parent)
         {
             TreeNode node = new TreeNode(RowsData[i].RootCode, RowsData[i].WhereCode, RowsData[i].WhatCode, RowsData[i].Count);
             int ind = root.AddNode(node);
             BuiltTree(root[ind], RowsData, root[ind].PProductCodeWhat);
         }
 }
예제 #2
0
파일: Tree.cs 프로젝트: Digiman/ASTPP
 /// <summary>
 /// Добавление корня в массив корней изделий
 /// </summary>
 /// <param name="node"></param>
 public void AddRoot(TreeNode node)
 {
     Array.Resize(ref Root, Root.Length + 1);
     Root[Root.Length - 1] = node;
 }
예제 #3
0
파일: Tree.cs 프로젝트: Digiman/ASTPP
 /// <summary>
 /// Добавление дочернего узла к текущему узлу
 /// </summary>
 /// <param name="node">Новый добавляемый узел TreeNode</param>
 /// <returns>Возвращает индекс в массиве дочерних узлов, куда был вставлен новый узел</returns>
 public int AddNode(TreeNode node)
 {
     Array.Resize(ref Nodes, Nodes.Length + 1);
     Nodes[Nodes.Length - 1] = node;
     return Nodes.Length - 1;
 }
예제 #4
0
파일: Tree.cs 프로젝트: Digiman/ASTPP
        /// <summary>
        /// Проверка на существование в массиве сведений о текущей детали
        /// </summary>
        /// <param name="node">Текущий узел (описывает данные текущей детали)</param>
        /// <param name="Data">Массив со сведениями о деталях</param>
        /// <returns>Возвращает True, если деталь уже имеет описание в массиве, в противном случае False</returns>
        private bool IsItDetail(TreeNode node, FullApplicationRow[] Data)
        {
            bool flag = false;

            for (int i = 0; i < Data.Length; i++)
            {
                if (node.PRootCode == Data[i].ProductCode && node.PProductCodeWhat == Data[i].PackageDetails)
                {
                    flag = true;
                    break;
                }
            }

            return flag;
        }
예제 #5
0
파일: Tree.cs 프로젝트: Digiman/ASTPP
 /// <summary>
 /// Вставка данных о детали в массив данных для таблицы ПП
 /// </summary>
 /// <param name="node">Вставляемый узел (данные для вставки)</param>
 /// <param name="Data">Собственно сам массив с данными</param>
 /// <param name="count">Счетчик единиц (накапливаемый)</param>
 private void InsertNodeDataToFAData(TreeNode node, ref FullApplicationRow[] Data, int count)
 {
     // проверим, есть ли уже в массиве запись для данной детали
     if (!IsItDetail(node, Data))
     {
         Array.Resize(ref Data, Data.Length + 1);
         Data[Data.Length - 1].ProductCode = node.PRootCode;
         Data[Data.Length - 1].PackageDetails = node.PProductCodeWhat;
         Data[Data.Length - 1].Count = node.PCount * count;
     }
     else // если есть уже запись для данной детали
     {
         for (int i = 0; i < Data.Length; i++)
             if (node.PRootCode == Data[i].ProductCode && node.PProductCodeWhat == Data[i].PackageDetails)
             {
                 Data[i].Count += node.PCount * count; // увеличим количество существующих деталей
                 break;
             }
     }
 }
예제 #6
0
파일: Tree.cs 프로젝트: Digiman/ASTPP
 /// <summary>
 /// Рекурсивный метод обхода дерева для подсчета состава изделия
 /// </summary>
 /// <param name="root">Корневой узел для обхода</param>
 /// <param name="Data">Массив сведений о составе изделия</param>
 /// <param name="count">Счетчик единиц (накапливаемый)</param>
 private void GoIntoTree(TreeNode root, ref FullApplicationRow[] Data, int count)
 {
     // просматриваем дочерние узлы текушего узла root
     for (int i = 0; i < root.GetNodesCount(); i++)
     {
         // проверям, деталь ли это
         if (root[i].GetNodesCount() == 0)
         {
             InsertNodeDataToFAData(root[i], ref Data, count);
         }
         else // если не деталь смотрим для текущего узла
         {
             GoIntoTree(root[i], ref Data, root[i].PCount * count);
         }
     }
 }