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

Есть 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
Множественная группировка в FastReport
    #39800396
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Множественная группировка в FastReport
    #39800441
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Множественная группировка в FastReport
    #39800443
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Множественная группировка в FastReport
    #39800445
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот что вышло:
...
Рейтинг: 0 / 0
Множественная группировка в FastReport
    #39800452
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если выше на скриншоте это было не понятно, то


Код: 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
Множественная группировка в FastReport
    #39800461
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 2

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

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

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


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