powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Вывод Crosstab
3 сообщений из 3, страница 1 из 1
Вывод Crosstab
    #38613831
vovanus100991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем времени суток. Обращаюсь за помощью к специалистам.
Не знаю куда писать: программа сама написана на делфи, а скрипт на паскале - решил сюда.
Проблема в следующем: есть один DBCrosstab, справа от него я питаюсь рисовать Crosstаb с такою же высотою строк - все вроде получаеться, но когда я пытаюсь изменить высоту заглавия Crosstаb, то высота строк выщитывается от прежней высоты заглавия. Делаю это все в Fast Report 4. Пример этого 1я картинка. 2я картинка - без изменения высоты заглавия.

1)


2)


Вот сам код скрипта на паскале - подскажите, пожалуйста, как сделать, что бы строки отображались нужным образом - высоту строк DBCrosstab я записываю в массив, а потом из него задаю высоту строк Crosstаb.

Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
var Sum0, Sum1, Sum2, i: Integer;
       b: array of Integer;
       HeightArr: array of Extended;
       HeightHead:Extended;                 
 
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
var s, numRow, numCol:Integer;
var a: array of integer;    
begin         
       SetLength(a,DBCross1.RowCount);
       SetLength(b,DBCross1.RowCount);           
         
       numRow:=DBCross1.RowCount;
       numCol:=DBCross1.ColCount;
         
       if ColumnIndex = DBCross1.ColCount-1 then
       begin                   
               a[RowIndex]:=Value;
               b[RowIndex]:=Value;                   
               Sum0:=Sum0+Value;                                         
               //ShowMessage('a['+vartostr(RowIndex)+']='+ vartostr(a[RowIndex]));                   
       end;           
                  
       if (RowIndex = DBCross1.RowCount-1) AND (ColumnIndex = DBCross1.ColCount-1) then
       begin                   
               //ShowMessage('OK='+ vartostr(RowIndex));
               s:=0;
               for i:=0 to DBCross1.RowCount-1 do
               begin
                       s:=s+a[i];                                                                          
               end;
               //ShowMessage('sum='+ vartostr(sum));
               Memo2.Text:='Загальна кількість: '+vartostr(s);
               Memo4.Text:=vartostr(s);                                    
       end;                                  
end;
                             
procedure DBCross1OnPrintColumnHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
begin
       //ShowMessage('Value='+ vartostr(Value));
       //ShowMessage('Memo='+ vartostr(Memo.Height));
       HeightHead:=Memo.Height;           
end;
//Обчислення ваги кожного рядка                                                                     
procedure Cross1OnBeforePrint(Sender: TfrxComponent);
begin
  for i:=0 to DBCross1.RowCount-1 do
  begin              
       with Cross1 do
       begin
               AddValue([i+1], ['Вага, %'], [(b[i]/Sum0)*100]);
               //AddValue([i+1], ['№, п/п'], [i+1]);                   
       end;
  end;          
end;
//Обчислення висоти рядків DBCross1        
procedure DBCross1OnCalcHeight(RowIndex: Integer; RowValues: Variant; var Height: Extended);
begin
       SetLength(HeightArr,DBCross1.RowCount);             
       HeightArr[RowIndex]:=Height;           
end;
//Обчислення висоти рядків "Вага"                                                                           
procedure Cross1OnCalcHeight(RowIndex: Integer; RowValues: Variant; var Height: Extended);
begin
  Height:=HeightArr[RowIndex];                      
end;
 
procedure Memo3OnBeforePrint(Sender: TfrxComponent);
begin
  Memo3.Text:= <frxDBDataset1."name">;          
end;
 
procedure Cross1OnPrintColumnHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
begin
  Memo.Height:=HeightHead;            
end;
 
procedure DBCross1OnAfterData(Sender: TfrxComponent);
begin
  //ShowMessage('DBCross1.RowCount2=');
  SetLength(HeightArr,DBCross1.RowCount);      
  //ShowMessage('DBCross1.RowCount3='+vartostr(DBCross1.RowCount));      
end;
 
begin
      Sum0 := 0;
      Sum1 := 0;
      Sum2 := 0;
      SetLength(HeightArr,1);      
      //ShowMessage('DBCross1.RowCount1='+vartostr(DBCross1.RowCount));  
end.



А вот еще одна проблема: если количество строк небольшое, то все отображается нормально - DBCross возле Cross, а если строк больше чем может уместиться на одной странице, то на следущей странице отображается только DBCross, а после ее окончания на следущей странице Cross. Пример виден у пдф-файле.
Буду очень благодарен за советы.
...
Рейтинг: 0 / 0
Вывод Crosstab
    #38614133
Фотография user89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vovanus100991,

спросите еще в форуме Delphi . Там много вопросов по Fast Report
...
Рейтинг: 0 / 0
Вывод Crosstab
    #38614157
vovanus100991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user89,
Спасибо, попробую)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Вывод Crosstab
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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