Гость
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Вывод Crosstab / 3 сообщений из 3, страница 1 из 1
14.04.2014, 00:35
    #38613831
vovanus100991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод Crosstab
Доброго всем времени суток. Обращаюсь за помощью к специалистам.
Не знаю куда писать: программа сама написана на делфи, а скрипт на паскале - решил сюда.
Проблема в следующем: есть один 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
14.04.2014, 13:11
    #38614133
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод Crosstab
vovanus100991,

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


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