Отчеты в FastReport

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Отчеты в FastReport

Сообщение RAJAH »

Доброго времени суток!
Наконец, дошёл до использования DB-CrossTab. В связи с этим возникли 2 вопроса: 1) почему время от времени отчёт выдаёт ошибку "Argument out of range" (скрипт пока пуст)? 2) как столбцы сортировать по номеру месяца, а выводить название, ибо, если в редактировании DB-CrossTab пишу FormatDateTime('mmmm',EncodeDate(2016,<PERER."MM">,1)), то первым оказывается "Август" по алфавиту.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

Ошибку не встречал, но судя по всем... данные вылетают за возможные границы.
По месяцам - может добавлять в текст номер месяца потом его название? Так отсортирует верно.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Отчеты в FastReport

Сообщение RAJAH »

Алексей писал(а):данные вылетают за возможные границы.
Да, но какие данные? Странно, что иногда получаешь ошибку, иногда нет, на одном и том же отчёте.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Отчеты в FastReport

Сообщение edward_K »

При использовании крос таблиц важно следить за полнотой в наборе данных.
Ошибку не видел, но сталкивался с тем, что отчет вообще ничего не выводил, если не было данных по какому то столбцу в такой то строке. Пришлось доформировывать их. Что же касается вычислении, то это можно делать в событиях на печать поля.
Вот пример с вычислением среднего значения в итоги по строкам/столбцам.

Код: Выделить всё

procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
begin
    if Length(RowSums) < (RowIndex + 1) then           
    begin                              
      SetLength(RowSums, (RowIndex + 1));                                                                     
      SetLength(RowCounts, (RowIndex + 1));
    end;                  
  
    if Length(ColSums) < (ColumnIndex + 1) then           
    begin                              
      SetLength(ColSums, (ColumnIndex + 1));                                                                     
      SetLength(ColCounts, (ColumnIndex + 1));
    end;                  
  
  
  if DBCross1.IsTotalColumn(ColumnIndex) then
  begin
    if RowCounts[RowIndex] > 0.0000001 then
    Begin                  
      Memo.Text := Format('%2.2n', [RowSums[RowIndex] / RowCounts[RowIndex]]);
      AllSumAvg := AllSumAvg + (RowSums[RowIndex] / RowCounts[RowIndex]);
    End;              
           
  end
  else if DBCross1.IsTotalRow(RowIndex) then
  begin              
    if ColCounts[ColumnIndex] > 0.0000001 then      
      Memo.Text := Format('%2.2n', [ColSums[ColumnIndex] / ColCounts[ColumnIndex]]);              
  end
  else
  begin
    if Value > 0.0000001 then
    begin
      RowSums[RowIndex] := RowSums[RowIndex] + Value;
      RowCounts[RowIndex] := RowCounts[RowIndex] + 1;

      ColSums[ColumnIndex] := ColSums[ColumnIndex] + Value;
      ColCounts[ColumnIndex] := ColCounts[ColumnIndex] + 1;                                      
    end;              
  end;
  if ( DBCross1.IsGrandTotalColumn(ColumnIndex) and DBCross1.IsGrandTotalRow(RowIndex) ) then
  Begin
     Memo.Text := Format('%2.2n', [AllSumAvg / (DBCross1.RowCount - 1)]);              
  End;            
end; // procedure DBCross1OnPrintCell                 

Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

LaaLaa писал(а):
Алексей писал(а):Есть ли техническая возможность из випа вызвать не генератор отчётов Fastreport, а указав конкретный отчёт послать его сразу на принтер, минуя диалоговое окно?
Набор таких функций почти готов. Планируется выпустить в Атлантисе 5.5.23.0
После последних обновлений (буквально позавчера), функционал отсылки отчета на принтер без диалога сломался... функция FRSetParameters выдаёт false. Кто-нибудь сталкивался и как пофиксить? Объём путевых листов большой, диалог не нужен.
Код брали из примера в документации.

Код: Выделить всё

          var PrintParam: frxPrintParam;
          ClearAdvRecord(PrintParam);
          FRGetDefaultParameters(frPrintParam, PrintParam);
          PrintParam.ShowDialog := False;
          [b]FRSetParameters[/b](FReport, frPrintParam, PrintParam);
          FRPrintReport(FReport);
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

Проблема зарегистрирована в Систему ПИР 101.59308
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

После замены FRRecordDefinition.vih на актуальный, заработало.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

Настроил отчет в FR. Установил у полей в masterdata значение "растягиваемый до максимальной высоты" и "переносить слова". Получаю отчёт, название МЦ вывелось в поле в 4 строчки, всё читаемо, печатаемо. Но при выгрузке отчета в эксель файл - полученная ячейка как бы скрадывает часть нижней строчки, т.е. нижняя, четвёртая строка видна наполовину. Если щёлкнуть на номер ячейки (авторасширение) - то ячейка раздвигается и весь текст становится виден.
Как сделать чтобы текст при получении отчета в экселе сразу был виден весь в ячейке? Поискал разные настройки но так ничего и не нашел.
rmozgov
Сообщения: 7
Зарегистрирован: 09 июн 2016, 14:34
Откуда: Минск

Re: Отчеты в FastReport

Сообщение rmozgov »

Алексей писал(а):Настроил отчет в FR. Установил у полей в masterdata значение "растягиваемый до максимальной высоты" и "переносить слова". Получаю отчёт, название МЦ вывелось в поле в 4 строчки, всё читаемо, печатаемо. Но при выгрузке отчета в эксель файл - полученная ячейка как бы скрадывает часть нижней строчки, т.е. нижняя, четвёртая строка видна наполовину. Если щёлкнуть на номер ячейки (авторасширение) - то ячейка раздвигается и весь текст становится виден.
Как сделать чтобы текст при получении отчета в экселе сразу был виден весь в ячейке? Поискал разные настройки но так ничего и не нашел.
Это происходит из-за того что в Excel нету межстрочного интервала. При использовании ячеек с многострочным текстом необходимо у них выставлять свойство LineSpacing в значение 6.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

Вот спасибо, помогло! Я вроде смотрел смотрел свойства, и не увидел :)
Держите репуташку :)
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Отчеты в FastReport

Сообщение RAJAH »

Приветствую!
У меня был отчёт с cross-tab, где в заголовках строк цеха/отделы из KATPODR, а в заголовках столбцов - месяцы. Теперь пришло требование указывать иерархию подразделений (KATPODR.CPODR = KATPODR.NREC). Ломаю голову, как впихнуть эту информацию, ведь уровень вложенности и вообще присутствие подразделения в отчёте заранее неизвестны. Можно, конечно, помучаться и в Excel выводить, но cross-tab так удобен...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Отчеты в FastReport

Сообщение edward_K »

Ломаю голову, как впихнуть эту информацию, ведь уровень вложенности и вообще присутствие подразделения в отчёте заранее неизвестны
Для кросс таблиц важно правильно сформировать поток, а вот вывод полей можно и подкорректировать.
По сути вам нужно организовать правильную сортировку(проще изначально делать иерархические коды подразделений и хорошо когда все отделы оказываются на одном уровне - жизнь становиться проще), а видимость дерева регулировать пробелами в зависимости от уровня вложенности или от длины кода.
Возможно вам пригодиться возможность зарегить Static функции, а потом использовать в FastReport через CompileVipExpression(в описании к патчам можно найти примеры использования). Вообще говоря, все функции которые работают по Ctrl+F4, можно использовать в фастрепорте.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Отчеты в FastReport

Сообщение RAJAH »

Не совсем понятна мысль. У меня есть отсортированный полный список подразделений, есть набор данных в cross-tab с привязкой к подразделению. Как объединить эти множества, чтобы выходили и все верхние подразделения-родители, и итоги по ним?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Отчеты в FastReport

Сообщение edward_K »

Добавить в набор данных также пустышки для всех вышестоящих подразделений. Объекта дерево в фасте я не помню.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Отчеты в FastReport

Сообщение RAJAH »

По-моему, в этом случае каждое подразделение будет иметь свой независимый итог, а не включающий потомков тоже, но всё-таки попробую.
Ответить