Страница 7 из 8

Re: Отчеты в FastReport

Добавлено: 01 мар 2016, 09:28
RAJAH
Доброго времени суток!
Наконец, дошёл до использования DB-CrossTab. В связи с этим возникли 2 вопроса: 1) почему время от времени отчёт выдаёт ошибку "Argument out of range" (скрипт пока пуст)? 2) как столбцы сортировать по номеру месяца, а выводить название, ибо, если в редактировании DB-CrossTab пишу FormatDateTime('mmmm',EncodeDate(2016,<PERER."MM">,1)), то первым оказывается "Август" по алфавиту.

Re: Отчеты в FastReport

Добавлено: 02 мар 2016, 10:21
Алексей
Ошибку не встречал, но судя по всем... данные вылетают за возможные границы.
По месяцам - может добавлять в текст номер месяца потом его название? Так отсортирует верно.

Re: Отчеты в FastReport

Добавлено: 02 мар 2016, 10:51
RAJAH
Алексей писал(а):данные вылетают за возможные границы.
Да, но какие данные? Странно, что иногда получаешь ошибку, иногда нет, на одном и том же отчёте.

Re: Отчеты в FastReport

Добавлено: 02 мар 2016, 11:39
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                 


Re: Отчеты в FastReport

Добавлено: 20 май 2016, 07:25
Алексей
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);

Re: Отчеты в FastReport

Добавлено: 23 май 2016, 17:45
Алексей
Проблема зарегистрирована в Систему ПИР 101.59308

Re: Отчеты в FastReport

Добавлено: 27 май 2016, 12:24
Алексей
После замены FRRecordDefinition.vih на актуальный, заработало.

Re: Отчеты в FastReport

Добавлено: 15 окт 2016, 13:47
Алексей
Настроил отчет в FR. Установил у полей в masterdata значение "растягиваемый до максимальной высоты" и "переносить слова". Получаю отчёт, название МЦ вывелось в поле в 4 строчки, всё читаемо, печатаемо. Но при выгрузке отчета в эксель файл - полученная ячейка как бы скрадывает часть нижней строчки, т.е. нижняя, четвёртая строка видна наполовину. Если щёлкнуть на номер ячейки (авторасширение) - то ячейка раздвигается и весь текст становится виден.
Как сделать чтобы текст при получении отчета в экселе сразу был виден весь в ячейке? Поискал разные настройки но так ничего и не нашел.

Re: Отчеты в FastReport

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

Re: Отчеты в FastReport

Добавлено: 17 окт 2016, 08:37
Алексей
Вот спасибо, помогло! Я вроде смотрел смотрел свойства, и не увидел :)
Держите репуташку :)

Re: Отчеты в FastReport

Добавлено: 08 ноя 2016, 13:48
RAJAH
Приветствую!
У меня был отчёт с cross-tab, где в заголовках строк цеха/отделы из KATPODR, а в заголовках столбцов - месяцы. Теперь пришло требование указывать иерархию подразделений (KATPODR.CPODR = KATPODR.NREC). Ломаю голову, как впихнуть эту информацию, ведь уровень вложенности и вообще присутствие подразделения в отчёте заранее неизвестны. Можно, конечно, помучаться и в Excel выводить, но cross-tab так удобен...

Re: Отчеты в FastReport

Добавлено: 08 ноя 2016, 14:36
edward_K
Ломаю голову, как впихнуть эту информацию, ведь уровень вложенности и вообще присутствие подразделения в отчёте заранее неизвестны
Для кросс таблиц важно правильно сформировать поток, а вот вывод полей можно и подкорректировать.
По сути вам нужно организовать правильную сортировку(проще изначально делать иерархические коды подразделений и хорошо когда все отделы оказываются на одном уровне - жизнь становиться проще), а видимость дерева регулировать пробелами в зависимости от уровня вложенности или от длины кода.
Возможно вам пригодиться возможность зарегить Static функции, а потом использовать в FastReport через CompileVipExpression(в описании к патчам можно найти примеры использования). Вообще говоря, все функции которые работают по Ctrl+F4, можно использовать в фастрепорте.

Re: Отчеты в FastReport

Добавлено: 08 ноя 2016, 15:23
RAJAH
Не совсем понятна мысль. У меня есть отсортированный полный список подразделений, есть набор данных в cross-tab с привязкой к подразделению. Как объединить эти множества, чтобы выходили и все верхние подразделения-родители, и итоги по ним?

Re: Отчеты в FastReport

Добавлено: 08 ноя 2016, 18:43
edward_K
Добавить в набор данных также пустышки для всех вышестоящих подразделений. Объекта дерево в фасте я не помню.

Re: Отчеты в FastReport

Добавлено: 09 ноя 2016, 13:36
RAJAH
По-моему, в этом случае каждое подразделение будет иметь свой независимый итог, а не включающий потомков тоже, но всё-таки попробую.