Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <%@ Language=VBScript %>
- <%Option Explicit%>
- <HTML>
- <HEAD>
- <META http-equiv="Content-Type" content="text/html" charset="Windows-1251">
- <title></title>
- <link rel=stylesheet href=/deciweb/cdweb/css/plain.css>
- <link rel=stylesheet href=/deciweb/CustomBDO/PPR/CSS/main.css>
- <link rel=stylesheet media="print" href="print.css">
- <script src="lib/jquery-latest.js"></script>
- <link rel="stylesheet" href="lib/screen.css" type="text/css" />
- <link rel="stylesheet" href="lib/jquery.treeview.css" type="text/css" />
- <script type="text/javascript" src="lib/jquery.treeview.js"></script>
- <script>
- $(document).ready(function(){$("#example").treeview();});
- </script>
- </HEAD>
- <style type="text/css">
- span {margin-top:0; margin-bottom:0;}
- </style>
- <BODY style="margin-left: 20; font: 8pt verdana;">
- <!--#include file="dbHeader.asp"-->
- <%
- const base = "RS"
- const dimention = "UNIT"
- const s = "  "'
- Dim treeSQL
- Dim rsTree
- Dim treeTable(500,5)
- Dim i, n, j
- Dim recursionDepth 'Глубина рекурсии
- Dim previouseRecursianDepth 'Глубина рекурсии на предыдущей отрисовке узла
- recursionDepth = 0
- previouseRecursianDepth = 0
- '
- 'Главная рекурсивная функция построения дерева
- 'отображает все элементы из массива в PID которых указан parentNodeID
- '
- function printChild (parentNodeID)
- 'Увеличиваем счетчик глубины рекурсии на единицу при вызове функции.
- recursionDepth = recursionDepth + 1
- 'Обходим весь массив
- dim i
- for i = 0 to n-1
- 'Если находим элемент в родителях которого прописан наш parentNodeID
- if treeTable(i,2) = parentNodeID then
- dim ulCount 'Счетчик открытых <ul>
- dim k
- 'Вычисляем сколько открытых <ul> как разницу м/у глубиной рекурсии на предыдущем шаге минус на текущем
- ulCount = previouseRecursianDepth - recursionDepth
- 'Если больше нуля, значит мы всплываем и нам нужно закрывать <ul>
- if ulCount > 0 then
- for k = 1 to ulCount
- response.write("</li></ul>" & vbCrlf)
- next
- end if
- DIM mainHtml 'тут формируем что у нас будет выводится на узлах
- mainHtml = "<a href='?id=" & treeTable(i,1) & "'>" & treeTable(i,3) & "</a>"
- 'Формируем сам узел в зависимости от того есть у него потомки или нет
- if treeTable(i,4) = "C" then
- 'Если у элемента есть потомки
- response.write("<li class='closed'><span>" & mainHtml &"</span>"& vbCrlf)
- response.write("<ul>" & vbCrlf)
- else
- 'Если потомков нет
- response.write("<li>" & mainHtml & "</li>" & vbCrlf)
- end if
- 'Тут сохраняем глубину рекурсии для этого шага, чтоб использовать при следующем вызове
- 'для определения погрузились ли мы глубже в рекурсию или всплыли. И величину погружения/всплытия.
- previouseRecursianDepth = recursionDepth
- 'Вызываем функцию рекурсивно, в качестве parentNodeID передаем ID текущего элемента.
- printChild treeTable(i,1)
- end if
- next
- 'Выходим из функции, соответсвенно уменьшаем счетчик глубины рекурсии.
- recursionDepth = recursionDepth - 1
- end function
- 'Запрос для формирования выборки позволяющей построить дерево.
- treeSQL = "SELECT "&base&"."&dimention&".MEM_ORDER AS ORD, "&base&"."&dimention&".MEM_ID AS ID, "&base&"."&dimention&"_TREE.MEM_PID AS PID, "&base&"."&dimention&".MEM_DESC AS NAME, "&base&"."&dimention&".MEM_TYPE AS TYPE FROM "&base&"."&dimention&" INNER JOIN "&base&"."&dimention&"_TREE ON "&base&"."&dimention&".MEM_ID = "&base&"."&dimention&"_TREE.MEM_ID ORDER BY "&base&"."&dimention&".MEM_ORDER"
- Set rsTree = Server.CreateObject("ADODB.Recordset")
- set rsTree = objConnection.Execute(treeSQL)
- 'Заполняем массив из полученной выборки
- n=-1
- do while not rsTree.EOF
- n=n+1
- treeTable(n,0) = rsTree("ORD")
- treeTable(n,1) = rsTree("ID")
- treeTable(n,2) = rsTree("PID")
- treeTable(n,3) = rsTree("NAME")
- treeTable(n,4) = rsTree("TYPE")
- rsTree.MoveNext
- loop
- 'Фомируем дерево и подключаем jQuery.treeview
- Response.Write("<ul id='example'>" & vbCrlf)
- printChild 80000000
- 'Вычисляем сколько осталось незакрытых <ul>
- DIM unclosabeULCount
- unclosabeULCount = previouseRecursianDepth - recursionDepth
- 'Закрываем все не закрытые <ul>
- for i=0 to unclosabeULCount-1
- Response.Write("</ul>" & vbCrlf)
- next
- '============= ДАННЫЕ. Запрос:
- 'SELECT
- ' RS.UNIT.MEM_ORDER AS ORD,
- ' RS.UNIT.MEM_ID AS ID,
- ' RS.UNIT_TREE.MEM_PID AS PID,
- ' RS.UNIT.MEM_DESC AS NAME,
- ' RS.UNIT.MEM_TYPE AS TYPE
- 'FROM RS.UNIT
- ' INNER JOIN
- ' RS.UNIT_TREE ON
- ' RS.UNIT.MEM_ID = RS.UNIT_TREE.MEM_ID
- 'ORDER BY RS.UNIT.MEM_ORDER
- '
- '============= Данные. Распечатать массив
- '
- 'for i=0 to n
- ' response.write(treeTable(i,0) & " " & treeTable(i,1) & " " & treeTable(i,2) & " " & treeTable(i,3) & " " & treeTable(i,4) & " " & vbCrlf )
- 'next
- '
- '============= ДАННЫЕ. Массив. Пример:
- 'treeTable(n,0) = rsTree("ORD") treeTable(n,1) = rsTree("ID") treeTable(n,2) = rsTree("PID") treeTable(n,3) = rsTree("NAME") treeTable(n,4) = rsTree("TYPE")
- '0 1000000 80000000 Без учета ЦФО R
- '0 1000000 81132008 Без учета ЦФО R
- '1 80000000 -1 Total ЦФО C
- '2 81000000 80000000 Холдинг Руссоль C
- '3 81111000 81110000 Производство C
- '4 81111100 81111000 Добыча (шахта) C
- '5 81111110 81111100 УГР R
- '6 81111120 81111100 УПиСУ R
- '7 81111130 81111100 Проходка R
- '8 81111200 81111000 Фабрика C
- '9 81111210 81111200 Переработка R
- '10 81111220 81111200 Транспортировка и размол R
- '11 81111230 81111200 Сушка R
- '12 81112000 81110000 Общепроизводственные C
- '13 81112100 81112000 Добыча (шахта) C
- '14 81112110 81112100 Общешахтные R
- '15 81112120 81112100 Горноспасательная служба R
- '16 81112200 81112000 Фабрика R
- '17 81113000 81110000 Вспомогательное пр-во C
- '18 81113100 81113000 Электроподстанция R
- '19 81113200 81113000 Инженерные сети R
- '20 81113300 81113000 Котельная R
- '21 81113400 81113000 Буровая установка R
- '22 81113500 81113000 Закладка R
- '23 81113600 81113000 Железнодор. Участок C
- '24 81113610 81113600 Подвижной Состав R
- '25 81113620 81113600 Путевое хозяйство R
- '26 81113630 81113600 Подготовка вагонов R
- '27 81113640 81113600 ЖДУ (Общие) R
- '28 81114000 81110000 Обслуживающие подразделения C
- '29 81114100 81114000 Столовая R
- '30 81115000 81110000 Общехозяйственные АУП C
- '31 81115100 81115000 ААУ R
- '32 81115200 81115000 ОГМ (автомобили) R
- '33 81115300 81115000 База МТО R
- '34 81115400 81115000 ПХЛ R
- '35 81115500 81115000 Медпункт R
- '36 81113700 81113000 Автотранспортный участок R
- '37 81114200 81114000 Клуб R
- '38 81114300 81114000 Музей R
- '39 81110000 81100000 ОАО ``Илецксоль`` C
- '40 81111300 81111000 УОВТ R
- '41 81112130 81112100 ОГМ R
- '42 81116000 81110000 Коммерческие расходы (44 сч) R
- '43 81117000 81110000 Услуги на сторону R
- '44 81100000 81000000 Добывающие предприятия C
- '45 81120000 81000000 ООО ``УК ``Руссоль`` C
- '46 81130000 81132004 ООО «Руссоль Трейдинг» C
- '47 81121000 81120000 Производство (20 счет) R
- '48 81122000 81120000 Общехозяйственные АУП (26 счет) R
- '49 81123000 81120000 Коммерческие расходы (44 сч) R
- '50 81131000 81130000 Общехозяйственные АУП (26 счет) R
- '51 81132000 81130000 Коммерческие расходы (44 сч) R
- '61 81132001 81132006 Все ОАО Илецксоль R
- '61 81132001 81110000 Все ОАО Илецксоль R
- '71 81132002 81132005 Все ООО УК Руссоль R
- '71 81132002 81120000 Все ООО УК Руссоль R
- '81 81132003 81130000 Все ООО Руссоль Трейдинг R
- '81 81132003 81132007 Все ООО Руссоль Трейдинг R
- '91 81132004 81000000 Торговые компании C
- '101 81132005 81132008 Холдинг C
- '111 81132006 81132005 Добывающие предприятия C
- '121 81132007 81132005 Торговые компании C
- '131 81132008 -1 Все элементы C
- %>
- <!--#include file="dbFooter.asp"-->
- </BODY>
- </HTML>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement