Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Множественная группировка в FastReport / 8 сообщений из 8, страница 1 из 1
12.04.2019, 10:52
    #39800378
JaS0n
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная группировка в FastReport
Доброго времени суток уважаемые форумчане!

Есть Dataset в котором собраны исходные данные. Из Dataset нужно создать и структурировать отчет.

Выглядеть отчет должен следующим образом:

1. Информация по заказу
1.1. Тип выполняемых операций (по количеству)
1.1.1. Участок 1 на котором выполнялись операции
1.1.1.1. Операция 1
1.1.2. Участок 2 на котором выполнялись операции
1.1.2.1. Операция 1
1.1.3. Участок 3 на котором выполнялись операции
1.1.3.1. Операция 1

1.2. Тип выполняемых операций (по времени)
1.2.1. Участок 1 на котором выполнялись операции
1.2.1.1. Операция 1
1.2.2. Участок 2 на котором выполнялись операции
1.2.2.1. Операция 1
1.2.3. Участок 3 на котором выполнялись операции
1.2.3.1. Операция 1

А у меня получается следующая структура:

1. Информация по заказу
1.1. Тип выполняемых операций (по количеству)
1.1.1. Участок 1 на котором выполнялись операции
1.1.1.1. Операция 1
1.2. Тип выполняемых операций (по времени)
1.2.1. Участок 1 на котором выполнялись операции
1.2.1.1. Операция 1
1.3. Тип выполняемых операций (по количеству)
1.3.1. Участок 2 на котором выполнялись операции
1.3.1.1. Операция 1

Google не дал ответа.

Заранее благодарю за ответы или за пинок в сторону правильного решения.
...
Рейтинг: 0 / 0
12.04.2019, 11:18
    #39800396
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная группировка в FastReport
1) после Master-бэнда с выводом строки из датасета кладем Child.
2) Master линкуем с Child
3) У Master'a выставляем KeepChild = true
4) и сейчас трюк: на Master'a вешаем обработчик OnBeforePrint с логикой
Код: pascal
1.
2.
3.
4.
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
   Child1.Visible := .. <если номер 2х-позизиционный> ...                                                
end;


Получилось, что в некоторых случаях после строки с номером параграфа выводится пустой Child (который и дает белое пространство)
...
Рейтинг: 0 / 0
12.04.2019, 12:04
    #39800441
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная группировка в FastReport
P.S.
Проверил решение. Немного иначе вышло, вот так:

Заполнил датасет тестовыми данными
Заполнил датасет. Это моя тестовая тулза со встроенным языком заполнения данных для быстрой проверки решений. Так что на код только для демонстрации
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$TABLE Paragraf(sParagraf)

$INSERT Paragraf("1. Informacija po zakazu")
$INSERT Paragraf("1.1. Tip vypolnjaemyh operacij (po kolichestvu)")
$INSERT Paragraf("1.1.1. Uchastok 1 na kotorom vypolnjalis' operacii")
$INSERT Paragraf("1.1.1.1. Operacija 1")
$INSERT Paragraf("1.1.2. Uchastok 2 na kotorom vypolnjalis' operacii")
$INSERT Paragraf("1.1.2.1. Operacija 1")
$INSERT Paragraf("1.1.3. Uchastok 3 na kotorom vypolnjalis' operacii")
$INSERT Paragraf("1.1.3.1. Operacija 1")
$INSERT Paragraf("1.2. Tip vypolnjaemyh operacij (po vremeni)")
$INSERT Paragraf("1.2.1. Uchastok 1 na kotorom vypolnjalis' operacii")
$INSERT Paragraf("1.2.1.1. Operacija 1")
$INSERT Paragraf("1.2.2. Uchastok 2 na kotorom vypolnjalis' operacii")
$INSERT Paragraf("1.2.2.1. Operacija 1")
$INSERT Paragraf("1.2.3. Uchastok 3 na kotorom vypolnjalis' operacii")
$INSERT Paragraf("1.2.3.1. Operacija 1")




с таким дизайном (смотри скриншот):
...
Рейтинг: 0 / 0
12.04.2019, 12:07
    #39800443
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная группировка в FastReport
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
//Обработчик OnBeforePrint, в котором подсчитываем число точек до первого пробела. 
//Сорри за цикл "for i", как по-другому считать не придумал


procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
var
   bEmptyLineBefore : boolean;                                                                          
   sLine            : string;                                              
   iFirstSpace      : integer;
   iNumDots         : integer;                                                                                                  
   i                : integer;                                                                                                                                                                                  
begin
   bEmptyLineBefore := false;                      
     
   sLine := Trim(<Paragraf."sParagraf">);
   iFirstSpace := Pos(' ', sLine);
     
   if iFirstSpace > 0 then
   begin
      iNumDots := 0;
        
      for i:=1 to iFirstSpace-1 do
      begin
         if sLine[i]='.' then
            iNumDots := iNumDots + 1;                                                                                          
      end;

      bEmptyLineBefore := (iNumDots = 2);  // 2 точки: значит вот оно                                  
   end;             

   Child_SpaceBefore.Visible := bEmptyLineBefore;                                                 
end;

begin

end.
...
Рейтинг: 0 / 0
12.04.2019, 12:09
    #39800445
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная группировка в FastReport
вот что вышло:
...
Рейтинг: 0 / 0
12.04.2019, 12:16
    #39800452
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная группировка в FastReport
Если выше на скриншоте это было не понятно, то


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
(это всё в дизайнере)


MasterData1.Child = Child_SpaceBefore
MasterData1.KeepChild = true
MasterData1.KeepChildIfInvisible = true


Child_SpaceBefore.Child = Child_Data
Child_SpaceBefore.KeepChild = true
Child_SpaceBefore.KeepChildIfInvisible = true

// в принципе, лишнее, но не помешает для единообразия
Child_Data.KeepChild = true
Child_Data.KeepChildIfInvisible = true    
...
Рейтинг: 0 / 0
12.04.2019, 12:26
    #39800461
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная группировка в FastReport
Вариант 2

Возможно более простое решение ;)

в сами строки добавлять перевод строки (#13#10) до текста в нужных местах и играться со свойствами Stretched мемки и бэнда.
Тогда возможно обойтись вообще одним бэндом и без кода вообще.

Но вы все-равно отложите мой сложный путь на память. Он позволяет через игру с видимостью/невидимостью промежуточных бэндов в цепочке создавать очень навороченные отчеты
...
Рейтинг: 0 / 0
12.04.2019, 12:57
    #39800507
JaS0n
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная группировка в FastReport
Кроик Семён,
Спасибо
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Множественная группировка в FastReport / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]