![]() |
|
Туплю и не вижу ошибки | ☑ | ||
---|---|---|---|---|
0
shlyahtich
25.03.12
✎
10:00
|
Загоняю запросом в ДеревоЗначений и не понимаю - почему пусто
ЗапросТЗ=Новый Запрос; ЗапросТЗ.Текст ="ВЫБРАТЬ | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Описание КАК Описание, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Контрагент КАК Контрагент, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ДоговорКонтрагента КАК ДоговорКонтрагента, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ДатаПринятияКУчету, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Валюта КАК Валюта, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СчетУчета КАК СчетУчета, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Остаток, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ДатаПоследнейОперации, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ТипЗайма, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СчетУчетаЗайма, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СчетУчетаПроцентов, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ПроцентГодовой, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Процент, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ПредставлениеПроцента, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.НачалоПериода, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.КонецПериода, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.КоличествоДней, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СуммаПроцентов, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ПроцентЦБРФ, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Коэффициент, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СуммаПроцентовПринмаемая, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СуммаПроцентовНеПринмаемая |ИЗ | Документ.НачислениеПроцентовПоКредитамИЗаймам.ЗаймыПолученные КАК НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные |ГДЕ | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Ссылка = &Документ |ИТОГИ ПО | Валюта, | СчетУчета, | Контрагент, | ДоговорКонтрагента, | Описание"; ЗапросТЗ.УстановитьПараметр("Документ",ЭтотОбъект.Ссылка); л_РезультатЗапроса = ЗапросТЗ.Выполнить(); ВыборкаВалют = л_РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаВалют.Следующий() Цикл л_СтрокаДЗВалюта = ДеревоЗаймовПолученных.Строки.Добавить(); л_СтрокаДЗВалюта.Валюта = ВыборкаВалют.Валюта; л_СтрокаДЗВалюта.Описание = ВыборкаВалют.Описание; ВыборкаСчетов = ВыборкаВалют.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСчетов.Следующий() Цикл л_СтрокаДЗСчет = л_СтрокаДЗВалюта.Строки.Добавить(); л_СтрокаДЗСчет.Валюта = л_СтрокаДЗВалюта.Валюта; л_СтрокаДЗСчет.СчетУчета = ВыборкаСчетов.СчетУчета; ВыборкаКонтрагентов = ВыборкаСчетов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагентов.Следующий() Цикл л_СтрокаДЗКонтрагент = л_СтрокаДЗСчет.Строки.Добавить(); л_СтрокаДЗКонтрагент.Валюта = л_СтрокаДЗВалюта.Валюта; л_СтрокаДЗКонтрагент.СчетУчета = л_СтрокаДЗСчет.СчетУчета; л_СтрокаДЗКонтрагент.Контрагент = ВыборкаКонтрагентов.Контрагент; ВыборкаДоговоров = ВыборкаКонтрагентов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДоговоров.Следующий() Цикл л_СтрокаДЗДоговор = л_СтрокаДЗКонтрагент.Строки.Добавить(); л_СтрокаДЗДоговор.Валюта = л_СтрокаДЗВалюта.Валюта; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; Для каждого л_СтрокаДЗ из ДеревоЗаймовПолученных.Строки Цикл ЭлементыФормы.ДеревоЗаймовПолученных.Развернуть(л_СтрокаДЗ, Истина); КонецЦикла; |
|||
1
shlyahtich
25.03.12
✎
10:02
|
колонки деревьев созданы ранее
л_ТипДата = Новый ОписаниеТипов("Дата",,Новый КвалификаторыДаты(ЧастиДаты.Дата)); л_ТипСумма = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2)); // ДеревоЗаймовПолученных.Колонки.Добавить("Описание",Новый ОписаниеТипов("Строка"),"Объект",40); ДеревоЗаймовПолученных.Колонки.Добавить("Контрагент",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"),"Контрагент",20); ДеревоЗаймовПолученных.Колонки.Добавить("ДоговорКонтрагента",Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"),"Договор",20); ДеревоЗаймовПолученных.Колонки.Добавить("ДатаПринятияКУчету",л_ТипДата,"Принято к учету",10); ДеревоЗаймовПолученных.Колонки.Добавить("Валюта",Новый ОписаниеТипов("СправочникСсылка.Валюты"),"Валюта",5); ДеревоЗаймовПолученных.Колонки.Добавить("СчетУчета",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный"),"Счет движения",7); ДеревоЗаймовПолученных.Колонки.Добавить("Остаток",л_ТипСумма,"Остаток",15); ДеревоЗаймовПолученных.Колонки.Добавить("ДатаПоследнейОперации",л_ТипДата,"Последняя операция",10); ДеревоЗаймовПолученных.Колонки.Добавить("ТипЗайма",Новый ОписаниеТипов("Строка"),"Тип займа",10); ДеревоЗаймовПолученных.Колонки.Добавить("СчетУчетаЗайма",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный"),"Счет учета займа в договоре",7); ДеревоЗаймовПолученных.Колонки.Добавить("СчетУчетаПроцентов",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный"),"Счет учета %",7); ДеревоЗаймовПолученных.Колонки.Добавить("ПроцентГодовой",Новый ОписаниеТипов("Число"),"% годовой",5); ДеревоЗаймовПолученных.Колонки.Добавить("Процент",Новый ОписаниеТипов("Число"),"%",5); ДеревоЗаймовПолученных.Колонки.Добавить("ПредставлениеПроцента",Новый ОписаниеТипов("Строка"),"Представление %",6); ДеревоЗаймовПолученных.Колонки.Добавить("НачалоПериода",л_ТипДата,"Начало периода",10); ДеревоЗаймовПолученных.Колонки.Добавить("КонецПериода",л_ТипДата,"Конец периода",10); ДеревоЗаймовПолученных.Колонки.Добавить("КоличествоДней",Новый ОписаниеТипов("Число"),"Дней",5); ДеревоЗаймовПолученных.Колонки.Добавить("СуммаПроцентов",л_ТипСумма,"Сумма %",15); ДеревоЗаймовПолученных.Колонки.Добавить("ПроцентЦБРФ",Новый ОписаниеТипов("Число"),"%ЦБРФ",5); ДеревоЗаймовПолученных.Колонки.Добавить("Коэффициент",Новый ОписаниеТипов("Число"),"К. нормирования ",5); ДеревоЗаймовПолученных.Колонки.Добавить("СуммаПроцентовПринмаемая",л_ТипСумма,"Сумма % прин.",15); ДеревоЗаймовПолученных.Колонки.Добавить("СуммаПроцентовНеПринмаемая",л_ТипСумма,"Сумма % не прин.",15); |
|||
2
Шапокляк
25.03.12
✎
10:07
|
А почему вы не хотите результат просто выгрузить в дерево?
|
|||
3
МихаилМ
25.03.12
✎
10:18
|
а где в запросе группировки
|
|||
4
patapum
25.03.12
✎
10:23
|
может быть в табличной части пусто?
|
|||
5
shlyahtich
25.03.12
✎
10:25
|
(2) ИТОГИ ПО и есть группировки
(3) Дерево рассчитывается, сохраняется в ТабЧасть документа, потом восстанавливается из неё Выгрузить результат запроса в дерево, у которого уже определены колонки - это ккак? |
|||
6
shlyahtich
25.03.12
✎
10:26
|
(4) не пусто - запрос в консоли проверен
|
|||
7
patapum
25.03.12
✎
10:28
|
а как ты проверил что в дереве пусто?
|
|||
8
shlyahtich
25.03.12
✎
10:30
|
ЭлементыФормы.ДеревоЗаймовПолученных -> данных нетути
|
|||
9
shlyahtich
25.03.12
✎
10:30
|
(7)ДеревоЗаймовПолученных это реквизит формы обычной, не управляемой
|
|||
10
patapum
25.03.12
✎
10:32
|
а в отладчике что после выполнения кода? я не верю, что дерево пустое
|
|||
11
shlyahtich
25.03.12
✎
10:35
|
(10) в отладчике вижу как строки добавляются - а на форме не вижу результата.
а Табличное поле с данными ДеревоЗаймовПолученных и типом ДеревоЗначение |
|||
12
Шапокляк
25.03.12
✎
10:36
|
Дерево=Результат.выгрузить(ОбходРезультатаЗапроса.Погруппировкам);
Дерево.ВыбратьСтроку();//просто поглядеть, что там получается ЭлементыФормы.ТабличноеПолеСДеревом.Значение=Дерево; //по идее, если колонки совпадают, все должно подхватиться |
|||
13
patapum
25.03.12
✎
10:38
|
так получается у тебя с отображением проблема, а ты нам запрос и выборку показываешь, которые прекрасно работают
|
|||
14
shlyahtich
25.03.12
✎
10:39
|
(12) а я вообще очищаю и заполняю - совпадают вроде... ну не все заполнял как видно для теста
(13) Вот именно - не понимаю где в отображении то плюха может быть - там вроде и негде |
|||
15
Web00001
25.03.12
✎
10:39
|
(12) Ну как бы еще и СоздатьКолонки() не мешало бы
|
|||
16
shlyahtich
25.03.12
✎
10:40
|
Ладно - видно где то что то в воскресение... надо наверно пойти пивка попить и все пройдет
|
|||
17
patapum
25.03.12
✎
10:40
|
чтобы понять, почему не работает надо противно до тошноты объяснить почему оно должно работать
|
|||
18
patapum
25.03.12
✎
10:41
|
пивка попить - одобряю!
|
|||
19
shlyahtich
25.03.12
✎
10:41
|
(15) - а (1)?
|
|||
20
Web00001
25.03.12
✎
10:42
|
(14) Вычислить выражение в отладчике, надо по дереву сделать, чтоб понять натупил с отображением или с заполнением
|
|||
21
Web00001
25.03.12
✎
10:42
|
(19) создать когда дерево уже заполнено?
|
|||
22
shlyahtich
25.03.12
✎
10:47
|
(19) не понял - что создать?
|
|||
23
shlyahtich
25.03.12
✎
10:56
|
(21)
На форме есть Табличное поле (Элемент формы)с данными ДеревоЗаймовПолученных (реквизит формы такой появляется от Табличного поля) и типом ДеревоЗначений Процедура КоманднаяПанель2ВыгрузитьТаблицуЗначенийВДеревоЗначений(Кнопка) ДеревоЗаймовПолученных.Строки.Очистить(); ДеревоЗаймовПолученных=ВыгрузитьТаблицуЗначенийВДеревоЗначенийЗапросом(ЭтотОбъект,) КонецПроцедуры //выгружает данные из таблицы значений в дерево значений // Функция ВыгрузитьТаблицуЗначенийВДеревоЗначенийЗапросом(ЭтотОбъект,Дерево=Неопределено) Экспорт Если Дерево = Неопределено Тогда Дерево = Новый ДеревоЗначений; л_ТипДата = Новый ОписаниеТипов("Дата",,Новый КвалификаторыДаты(ЧастиДаты.Дата)); л_ТипСумма = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2)); // Дерево.Колонки.Добавить("Описание",Новый ОписаниеТипов("Строка"),"Объект",40); Дерево.Колонки.Добавить("Контрагент",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"),"Контрагент",20); Дерево.Колонки.Добавить("ДоговорКонтрагента",Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"),"Договор",20); Дерево.Колонки.Добавить("ДатаПринятияКУчету",л_ТипДата,"Принято к учету",10); Дерево.Колонки.Добавить("Валюта",Новый ОписаниеТипов("СправочникСсылка.Валюты"),"Валюта",5); Дерево.Колонки.Добавить("СчетУчета",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный"),"Счет движения",7); Дерево.Колонки.Добавить("Остаток",л_ТипСумма,"Остаток",15); Дерево.Колонки.Добавить("ДатаПоследнейОперации",л_ТипДата,"Последняя операция",10); Дерево.Колонки.Добавить("ТипЗайма",Новый ОписаниеТипов("Строка"),"Тип займа",10); Дерево.Колонки.Добавить("СчетУчетаЗайма",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный"),"Счет учета займа в договоре",7); Дерево.Колонки.Добавить("СчетУчетаПроцентов",Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный"),"Счет учета %",7); Дерево.Колонки.Добавить("ПроцентГодовой",Новый ОписаниеТипов("Число"),"% годовой",5); Дерево.Колонки.Добавить("Процент",Новый ОписаниеТипов("Число"),"%",5); Дерево.Колонки.Добавить("ПредставлениеПроцента",Новый ОписаниеТипов("Строка"),"Представление %",6); Дерево.Колонки.Добавить("НачалоПериода",л_ТипДата,"Начало периода",10); Дерево.Колонки.Добавить("КонецПериода",л_ТипДата,"Конец периода",10); Дерево.Колонки.Добавить("КоличествоДней",Новый ОписаниеТипов("Число"),"Дней",5); Дерево.Колонки.Добавить("СуммаПроцентов",л_ТипСумма,"Сумма %",15); Дерево.Колонки.Добавить("ПроцентЦБРФ",Новый ОписаниеТипов("Число"),"%ЦБРФ",5); Дерево.Колонки.Добавить("Коэффициент",Новый ОписаниеТипов("Число"),"К. нормирования ",5); Дерево.Колонки.Добавить("СуммаПроцентовПринмаемая",л_ТипСумма,"Сумма % прин.",15); Дерево.Колонки.Добавить("СуммаПроцентовНеПринмаемая",л_ТипСумма,"Сумма % не прин.",15); КонецЕсли; ЗапросТЗ=Новый Запрос; ЗапросТЗ.Текст ="ВЫБРАТЬ | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Описание КАК Описание, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Контрагент КАК Контрагент, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ДоговорКонтрагента КАК ДоговорКонтрагента, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ДатаПринятияКУчету, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Валюта КАК Валюта, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СчетУчета КАК СчетУчета, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Остаток, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ДатаПоследнейОперации, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ТипЗайма, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СчетУчетаЗайма, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СчетУчетаПроцентов, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ПроцентГодовой, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Процент, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ПредставлениеПроцента, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.НачалоПериода, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.КонецПериода, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.КоличествоДней, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СуммаПроцентов, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.ПроцентЦБРФ, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Коэффициент, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СуммаПроцентовПринмаемая, | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.СуммаПроцентовНеПринмаемая |ИЗ | Документ.НачислениеПроцентовПоКредитамИЗаймам.ЗаймыПолученные КАК НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные |ГДЕ | НачислениеПроцентовПоКредитамИЗаймамЗаймыПолученные.Ссылка = &Документ |ИТОГИ ПО | Валюта, | СчетУчета, | Контрагент, | ДоговорКонтрагента, | Описание"; ЗапросТЗ.УстановитьПараметр("Документ",ЭтотОбъект.Ссылка); л_РезультатЗапроса = ЗапросТЗ.Выполнить(); ВыборкаВалют = л_РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаВалют.Следующий() Цикл л_СтрокаДЗВалюта = Дерево.Строки.Добавить(); л_СтрокаДЗВалюта.Валюта = ВыборкаВалют.Валюта; л_СтрокаДЗВалюта.Описание = ВыборкаВалют.Описание; ВыборкаСчетов = ВыборкаВалют.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСчетов.Следующий() Цикл л_СтрокаДЗСчет = л_СтрокаДЗВалюта.Строки.Добавить(); л_СтрокаДЗСчет.Валюта = л_СтрокаДЗВалюта.Валюта; л_СтрокаДЗСчет.СчетУчета = ВыборкаСчетов.СчетУчета; ВыборкаКонтрагентов = ВыборкаСчетов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагентов.Следующий() Цикл л_СтрокаДЗКонтрагент = л_СтрокаДЗСчет.Строки.Добавить(); л_СтрокаДЗКонтрагент.Валюта = л_СтрокаДЗВалюта.Валюта; л_СтрокаДЗКонтрагент.СчетУчета = л_СтрокаДЗСчет.СчетУчета; л_СтрокаДЗКонтрагент.Контрагент = ВыборкаКонтрагентов.Контрагент; ВыборкаДоговоров = ВыборкаКонтрагентов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДоговоров.Следующий() Цикл л_СтрокаДЗДоговор = л_СтрокаДЗКонтрагент.Строки.Добавить(); л_СтрокаДЗДоговор.Валюта = л_СтрокаДЗВалюта.Валюта; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; Возврат Дерево; КонецФункции //ВыгрузитьТаблицуЗначенийВДеревоЗначений() Процедура КоманднаяПанель2ВыгрузитьТаблицуЗначенийВ |
|||
24
Web00001
25.03.12
✎
11:05
|
ДеревоИзФункции=ВыгрузитьТаблицуЗначенийВДеревоЗначенийЗапросом(ЭтотОбъект,)
ЭлементыФормы.ДеревоЗаймовПолученных.Значение = ДеревоИзФункции; ЭлементыФормы.ДеревоЗаймовПолученных.СоздатьКолонки(); Пишу по памяти куда применять СоздатьКолонки() точно не помню, но как бы просто присвоить ТП на форме другое ТП вроде как совсем никак |
|||
25
Шапокляк
25.03.12
✎
11:09
|
(15) Вот если просто табличное поле с типом Дерево, после этого (24), тогда надо СоздатьКолонки(). А если он уже в табличном поле колонки вручную создал, зачем их еще раз создавать-то?
|
|||
26
shlyahtich
25.03.12
✎
12:04
|
(24) (25)
надо было сделать это однако - недоглядел ЭлементыФормы.ДеревоЗаймовПолученных.СоздатьКолонки(); хотя я перед этим в процедуре расчета создаю их, заполняю, но когда потом сохраняю в табчасти данные и из них вытаксиваю запросом в то же дерево, однако я же не расчитываю их и забыл что колонки то опять создать надо спасибо. нашлось |
|||
27
shlyahtich
25.03.12
✎
12:11
|
Рекомендую для работы с деревом процедуры эти
// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ДЕРЕВОМ ЗНАЧЕНИЙ // Функция формирует значение нового ключа строки табличной части. // // Параметры: // Дерево - дерево значений // Функция ПолучитьНовыйКлючСтрокиДерева(Дерево, СписокКлючей = Неопределено) Экспорт Если СписокКлючей = Неопределено Тогда СписокКлючей = Новый СписокЗначений; СписокКлючей.Добавить(0); КонецЕсли; Для Каждого СтрокаДерева Из Дерево.Строки Цикл СписокКлючей.Добавить(СтрокаДерева.КлючСтроки); ПолучитьНовыйКлючСтрокиДерева(СтрокаДерева, СписокКлючей); СписокКлючей.СортироватьПоЗначению(НаправлениеСортировки.Убыв); МаксКлюч = СписокКлючей[0].Значение + 1; КонецЦикла; Возврат МаксКлюч; КонецФункции // ПолучитьНовыйКлючСтрокиДерева() // Процедура обновляет ключи связи в дереве значений // Процедура ОбновитьКлючиСвязиВДеревеЗначений(Дерево) Экспорт Для Каждого СтрокаДерева Из Дерево.Строки Цикл // ВМЕСТО //Попытка // СтрокаДерева.КлючСвязи = СтрокаДерева.Родитель.КлючСтроки; //Исключение // СтрокаДерева.КлючСвязи = 0; //КонецПопытки; // НАПИШЕМ Если СтрокаДерева.Родитель = Неопределено Тогда СтрокаДерева.КлючСвязи = 0; Иначе СтрокаДерева.КлючСвязи = СтрокаДерева.Родитель.КлючСтроки; КонецЕсли; // ТОГДА ВСЕ РАБОТАЕТ ОбновитьКлючиСвязиВДеревеЗначений(СтрокаДерева); КонецЦикла; КонецПроцедуры // ОбновитьКлючиСвязиВДеревеЗначений() // Процедура обновляет ключи связи в дереве значений // Процедура ОбновитьКлючиСтрокВДеревеЗначений(Дерево, КлючСтроки = 1) Экспорт Для Каждого СтрокаДерева Из Дерево.Строки Цикл СтрокаДерева.КлючСтроки = КлючСтроки; КлючСтроки = КлючСтроки + 1; ОбновитьКлючиСтрокВДеревеЗначений(СтрокаДерева, КлючСтроки); КонецЦикла; КонецПроцедуры // ОбновитьКлючиСвязиВДеревеЗначений() // Процедура выгружает данные из дерева значений в таблицу значений // данные выгружаются только в таблицу со сходным набором реквизитов // Функция ВыгрузитьДеревоЗначенийВТаблицуЗначений(Дерево, Таблица = Неопределено) Экспорт Если Таблица = Неопределено Тогда Таблица = Новый ТаблицаЗначений; Для Каждого Колонка Из Дерево.Колонки Цикл Таблица.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); КонецЦикла; КонецЕсли; Для Каждого СтрокаДерева Из Дерево.Строки Цикл ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаДерева); ВыгрузитьДеревоЗначенийВТаблицуЗначений(СтрокаДерева, Таблица); КонецЦикла; Возврат Таблица; КонецФункции //ВыгрузитьДеревоЗначенийВТаблицуЗначений() // Процедура выгружает данные из таблицы значений в дерево значений // данные выгружаются только в таблицу со сходным набором реквизитов // // Параметры: // // КлючСтроки - имя колонки ТаблицыЗначений - уникальный идентификатор // КлючСвязи - имя колонки ТаблицыЗначений - указатель привязки к строке Дерева, // своего рода указатель на "Родителя" // Функция ВыгрузитьТаблицуЗначенийВДеревоЗначений(Таблица, КлючСтроки = "КлючСтроки", КлючСвязи = "КлючСвязи") Экспорт Дерево = Новый ДеревоЗначений; Для Каждого Колонка Из Таблица.Колонки Цикл Дерево.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); КонецЦикла; Для Каждого СтрокаТаблицы Из Таблица Цикл СтрокаГруппировки = Дерево.Строки.Найти(СтрокаТаблицы[КлючСвязи], КлючСтроки,Истина); Если СтрокаГруппировки = Неопределено Тогда ЗаполнитьЗначенияСвойств(Дерево.Строки.Добавить(), СтрокаТаблицы); Иначе ЗаполнитьЗначенияСвойств(СтрокаГруппировки.Строки.Добавить(), СтрокаТаблицы); КонецЕсли; КонецЦикла; Возврат Дерево; КонецФункции //ВыгрузитьТаблицуЗначенийВДеревоЗначений() // Процедура устанавливает значение во всем дереве значений // Процедура УстановитьЗначениеКолонкиДерева(Дерево, Колонка, Значение) Экспорт Для каждого СтрокаДерева Из Дерево.Строки Цикл СтрокаДерева[Колонка] = Значение; УстановитьЗначениеКолонкиДерева(СтрокаДерева, Колонка, Значение); КонецЦикла; КонецПроцедуры //УстановитьЗначениеКолонкиДерева() // Процедура копирует подчиненные строки дерева значений // Процедура СкопироватьПодчиненныеСтроки(СтрокаПриемник, СтрокаИсточник) Для каждого Строка Из СтрокаИсточник.Строки Цикл НоваяСтрока = СтрокаПриемник.Строки.Добавить(); НоваяСтрока.КлючСвязи = СтрокаПриемник.КлючСтроки; ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); СкопироватьПодчиненныеСтроки(НоваяСтрока, Строка); КонецЦикла; КонецПроцедуры // СкопироватьПодчиненныеСтроки() // Процедура переносит выделенные строки дерева значений в указанную ветку // Процедура ПеренестиСтрокиДереваЗначений(СтрокаПриемник, ВыделенныеСтроки) Экспорт Если НЕ СтрокаПриемник = Неопределено Тогда МассивСтрок = Новый Массив; Для Каждого СтрокаПереноса Из ВыделенныеСтроки Цикл МассивСтрок.Добавить(СтрокаПереноса); НоваяСтрока = СтрокаПриемник.Строки.Добавить(); СкопироватьПодчиненныеСтроки(НоваяСтрока, СтрокаПереноса); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаПереноса); НоваяСтрока.КлючСвязи = СтрокаПриемник.КлючСтроки; КонецЦикла; Для Каждого СтрокаДерева Из МассивСтрок Цикл Если СтрокаДерева.Родитель = Неопределено Тогда СтрокаДерева.Строки.Удалить(СтрокаДерева); Иначе СтрокаДерева.Родитель.Строки.Удалить(СтрокаДерева); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры //ПеренестиСтрокиДереваЗначений() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |