Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ДобавитьГруппуСтрок - не всё группирует. (число прочтений - 5391 )
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
ДобавитьГруппуСтрок - не всё группирует.
13. Января 2012 :: 04:27
Печать  
Хочу вывести данные из сгруппированной индексированной таблицы, создавая группировки в ТабличномДокументе соответственно иерархии ИТ.   
При выводе в таблицу данных из ИТ в каждой строке ИТ указываю группу строк. Потом, обходя рекурсивно ит, создаю группы строк в ТабличномДокументе (например: 1-5). Но вот беда - Yoksel не создает группу строк на последней строке ИТ в каждом уровне ИТ.
Голову уже сломал над отчетом, пошагово просмотрел все этапы работы с группами строк - касяк, вроде бы не мой.
Подскажите, в чём причина?      
  

__________________________________.zip ( 14 KB | Загрузки )

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: ДобавитьГруппуСтрок - не всё группирует.
Ответ #1 - 13. Января 2012 :: 09:40
Печать  
Ты выложил не все. Непонятно где и как вызывается метод "ДобавитьГруппуСтрок".
Использую Yoksel и у меня группы строк нормально создаются.
Переделай свой тест, чтобы было все понятно.
  
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: ДобавитьГруппуСтрок - не всё группирует.
Ответ #2 - 13. Января 2012 :: 10:26
Печать  
zk96 писал(а) 13. Января 2012 :: 09:40:
Ты выложил не все. Непонятно где и как вызывается метод "ДобавитьГруппуСтрок".
Использую Yoksel и у меня группы строк нормально создаются.
Переделай свой тест, чтобы было все понятно.

Метод "ДобавитьГруппуСтрок" вызывается в процедуре "СформироватьСтруктуруВложенности()".
Проблему локализовал - Вложенная группа строк не создается, если её последняя строка совпадает с последней строкой родительской группы строк. Уф! Я сформулировал это!
Решил так: в каждую вложенную "тзПотомки" добавил по одной пустой строке. При выводе вместо этой самой пустой строки выводил минимизированную строку таблицы. Сворачивается-то теперь всё правильно, но этими пустыми строками таблица, как бы, делится на несколько частей. Некрасиво, в общем, хотя и приемлемо. Версия SpreadSheet.dll, Yoksel.dll - 1.1.26.0.
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ДобавитьГруппуСтрок - не всё группирует.
Ответ #3 - 13. Января 2012 :: 12:12
Печать  
Подмигивание
  

_______001.PNG ( 1 KB | Загрузки )
_______001.PNG

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: ДобавитьГруппуСтрок - не всё группирует.
Ответ #4 - 16. Января 2012 :: 03:43
Печать  
berezdetsky писал(а) 13. Января 2012 :: 12:12:
Подмигивание
А вот у меня так не хочет! Почему - не могу понять.
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: ДобавитьГруппуСтрок - не всё группирует.
Ответ #5 - 16. Января 2012 :: 05:06
Печать  
И ещё один вопрос по Yoksel: как свернуть группы строк ТабличногоДокумента по определенном уровню, так, чтобы при развороте не разворачивались подчиненные уровни?
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ДобавитьГруппуСтрок - не всё группирует.
Ответ #6 - 16. Января 2012 :: 08:46
Печать  
третий параметр установи
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: ДобавитьГруппуСтрок - не всё группирует.
Ответ #7 - 26. Июля 2012 :: 19:00
Печать  
Код
Выбрать все
Перем тзГруппСтрок;

//{--- Группы Строк
Процедура ДобавитьГруппыСтрок() Экспорт
	тзГруппСтрок.ВыбратьСтроки();
	Пока тзГруппСтрок.ПолучитьСтроку() = 1 Цикл
		ТабЭлемент.Документ.ДобавитьГруппуСтрок(тзГруппСтрок.Нач, тзГруппСтрок.Кон);
	КонецЦикла;

	ТабЭлемент.ОтображатьСтруктуру = 1;
	ТабЭлемент.Документ.ПоказатьУровеньГруппировокСтрок(3);
	ТабЭлемент.Документ.ПоказатьУровеньГруппировокСтрок(2);
	ТабЭлемент.Документ.ПоказатьУровеньГруппировокСтрок(1);
	ТабЭлемент.Обновить();
КонецПроцедуры

Функция ОткрытьГруппуСтрок(чНачСтр) Экспорт
	тзГруппСтрок.НоваяСтрока();
		тзГруппСтрок.Нач = чНачСтр;

	Возврат тзГруппСтрок.НомерСтроки;
КонецФункции

Функция ЗакрытьГруппуСтрок(чКонСтр) Экспорт
	кс = тзГруппСтрок.КоличествоСтрок();
	й = кс;
	флНашлиОткрытуюГруппу = 0;
	Пока (й >= 1) и (флНашлиОткрытуюГруппу = 0) Цикл
	    тзГруппСтрок.ПолучитьСтрокуПоНомеру(й);
		Если ПустоеЗначение(тзГруппСтрок.Кон) = 1 Тогда
			Если тзГруппСтрок.Нач < чКонСтр Тогда
				тзГруппСтрок.Кон = чКонСтр;
			Иначе
				тзГруппСтрок.Кон = чКонСтр;//тзГруппСтрок.Нач + 1;
			КонецЕсли;
			флНашлиОткрытуюГруппу = тзГруппСтрок.НомерСтроки;
		КонецЕсли;
		й=й-1;
	КонецЦикла;
КонецФункции

Функция ЕстьОткрытыеГруппыСтрок() Экспорт
	Если ПустоеЗначение(тзГруппСтрок) = 1 Тогда
		Возврат 0;
	Иначе
		Возврат 1;
	КонецЕсли;
КонецФункции

//}

Процедура ПриОткрытии()
тзГруппСтрок = СоздатьОбъект("ТаблицаЗначений");
	тзГруппСтрок.НоваяКолонка("Нач");
	тзГруппСтрок.НоваяКолонка("Кон");
КонецПроцедуры


 



Пользуюсь этим добром след. образом:

Код
Выбрать все
таб.ВывестиСекцию("Группировка");
ОткрытьГруппуСтрок(таб.ВысотаТаблицы()+1);
//Цикл по элементам текущей группировки
Для й = 1 по КоличествоЭлементовТекущейГруппировки Цикл
   таб.ВывестиСекцию("элемент");
КонецЦикла;
ЗакрытьГруппуСтрок(таб.ВысотаТаблицы());
ДобавитьГруппуСтрок(); 



как-то так.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: ДобавитьГруппуСтрок - не всё группирует.
Ответ #8 - 26. Июля 2012 :: 19:05
Печать  
т.е.
1. Группировка должна начинаться с НомерСтрокиРодителя + 1.
2. Две смежные группировки объединяются.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать