2016-11-16 4 views
0

Есть ли способ суммировать данные в группе нижнего колонтитула группы из другого в FastReports 5 Embarcadero Edition?Подведение данных GroupFooter2 из данных GroupFooter1

У меня есть FastReport, который отображает недельные листы времени на месячный период. Ежедневное время входа и выхода и прошедшее время отображаются в MasterBand1. Время, прошедшее время, часы с часами и расчет прямого времени, представлены в еженедельном сводке в GroupFooter1. Мне нужно также суммировать эту информацию в GroupFooter2 за месяц.

Часы с часами - это часы, в которых работник действительно работает. Больные, личные и время отпуска исключены. Общее количество часов включает в себя часы и часы.

Сверхуплощадка рассчитывается как количество часов с часами больше 40 часов в неделю. Я могу использовать переменные для вычисления каждого из них в (еженедельном) банке GroupFooter1. Для того, чтобы ежемесячные суммы за сверхурочную работу и прямое время были точными, я должен накапливать прямое и продолжительное время из еженедельной группы, а не из диапазона основных данных. Поскольку FastReports Embarcadero Edition не включает сценарии, я затрудняюсь с тем, как это сделать с помощью переменных. Единственная альтернатива, о которой я могу думать, - создать рассчитанные поля в «месячном» наборе данных для каждого сотрудника и связать этот набор данных с GroupFooter2. Тем не менее, создается вероятность ошибок при представлении данных из двух разных источников. Есть ли способ сделать это в FastReports?

Вот форму .pas для формы.

unit YTDPayRpt; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option, 
    FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, 
    FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.FB, 
    FireDAC.Phys.FBDef, FireDAC.VCLUI.Wait, FireDAC.Stan.Param, FireDAC.DatS, 
    FireDAC.DApt.Intf, FireDAC.DApt, Vcl.StdCtrls, frxClass, frxDBSet, Data.DB, 
    FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Comp.UI, frxChBox; 

type 
    TForm2 = class(TForm) 
    Connection: TFDConnection; 
    WaitCursor: TFDGUIxWaitCursor; 
    WorkshiftDataset: TFDTable; 
    Report: TfrxReport; 
    frxDBDataset1: TfrxDBDataset; 
    Button1: TButton; 
    frxCheckBoxObject1: TfrxCheckBoxObject; 
    WorkshiftDatasetID: TLargeintField; 
    WorkshiftDatasetEMPLOYEEID: TLargeintField; 
    WorkshiftDatasetJOBCODE: TSmallintField; 
    WorkshiftDatasetCLOCKABLE: TBooleanField; 
    WorkshiftDatasetDAYOFWEEK: TStringField; 
    WorkshiftDatasetDATEIN: TDateField; 
    WorkshiftDatasetTIMEIN: TTimeField; 
    WorkshiftDatasetDATEOUT: TDateField; 
    WorkshiftDatasetTIMEOUT: TTimeField; 
    WorkshiftDatasetNOTE: TMemoField; 
    WorkshiftDatasetTIMEELAPSED: TFMTBCDField; 
    WorkshiftDatasetWEEKOF: TDateField; 
    WorkshiftDatasetROWNBR: TSmallintField; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form2: TForm2; 

implementation 

{$R *.dfm} 

procedure TForm2.Button1Click(Sender: TObject); 
begin 
    Report.ShowReport(); 
end; 

end. 

Вот текстовый файл для формы с компонентами, необходимыми для отчета.

object Form2: TForm2 
    Left = 0 
    Top = 0 
    Caption = 'Form2' 
    ClientHeight = 211 
    ClientWidth = 418 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    PixelsPerInch = 96 
    TextHeight = 13 
    object Button1: TButton 
    Left = 184 
    Top = 112 
    Width = 75 
    Height = 25 
    Caption = 'Button1' 
    TabOrder = 0 
    OnClick = Button1Click 
    end 
    object Connection: TFDConnection 
    Params.Strings = (
     'ConnectionDef=Timedata - Local') 
    Connected = True 
    LoginPrompt = False 
    Left = 96 
    Top = 24 
    end 
    object WaitCursor: TFDGUIxWaitCursor 
    Provider = 'Forms' 
    Left = 208 
    Top = 24 
    end 
    object WorkshiftDataset: TFDTable 
    Active = True 
    IndexFieldNames = 'ID;DATEIN;ROWNBR' 
    Connection = Connection 
    UpdateOptions.UpdateTableName = 'V_WORKSHIFT' 
    TableName = 'V_WORKSHIFT' 
    Left = 288 
    Top = 32 
    object WorkshiftDatasetID: TLargeintField 
     FieldName = 'ID' 
     Origin = 'ID' 
    end 
    object WorkshiftDatasetEMPLOYEEID: TLargeintField 
     FieldName = 'EMPLOYEEID' 
     Origin = 'EMPLOYEEID' 
    end 
    object WorkshiftDatasetJOBCODE: TSmallintField 
     FieldName = 'JOBCODE' 
     Origin = 'JOBCODE' 
    end 
    object WorkshiftDatasetCLOCKABLE: TBooleanField 
     FieldName = 'CLOCKABLE' 
     Origin = 'CLOCKABLE' 
    end 
    object WorkshiftDatasetDAYOFWEEK: TStringField 
     FieldName = 'DAYOFWEEK' 
     Origin = 'DAYOFWEEK' 
     Size = 10 
    end 
    object WorkshiftDatasetDATEIN: TDateField 
     FieldName = 'DATEIN' 
     Origin = 'DATEIN' 
    end 
    object WorkshiftDatasetTIMEIN: TTimeField 
     FieldName = 'TIMEIN' 
     Origin = 'TIMEIN' 
    end 
    object WorkshiftDatasetDATEOUT: TDateField 
     FieldName = 'DATEOUT' 
     Origin = 'DATEOUT' 
    end 
    object WorkshiftDatasetTIMEOUT: TTimeField 
     FieldName = 'TIMEOUT' 
     Origin = 'TIMEOUT' 
    end 
    object WorkshiftDatasetNOTE: TMemoField 
     FieldName = 'NOTE' 
     Origin = 'NOTE' 
     BlobType = ftMemo 
    end 
    object WorkshiftDatasetTIMEELAPSED: TFMTBCDField 
     FieldName = 'TIMEELAPSED' 
     Origin = 'TIMEELAPSED' 
     Precision = 18 
     Size = 9 
    end 
    object WorkshiftDatasetWEEKOF: TDateField 
     FieldName = 'WEEKOF' 
     Origin = 'WEEKOF' 
    end 
    object WorkshiftDatasetROWNBR: TSmallintField 
     FieldName = 'ROWNBR' 
     Origin = 'ROWNBR' 
    end 
    end 
    object Report: TfrxReport 
    Version = '5.3.14' 
    DotMatrixReport = False 
    IniFile = '\Software\Fast Reports' 
    PreviewOptions.Buttons = [pbPrint, pbLoad, pbSave, pbExport, pbZoom, pbFind, pbOutline, pbPageSetup, pbTools, pbEdit, pbNavigator, pbExportQuick] 
    PreviewOptions.Zoom = 1.000000000000000000 
    PrintOptions.Printer = 'Default' 
    PrintOptions.PrintOnSheet = 0 
    ReportOptions.CreateDate = 42689.921906956000000000 
    ReportOptions.LastChange = 42689.930818541700000000 
    ScriptLanguage = 'PascalScript' 
    ScriptText.Strings = (
     '' 
     'begin' 
     '' 
     'end.') 
    Left = 56 
    Top = 103 
    Datasets = < 
     item 
     DataSet = frxDBDataset1 
     DataSetName = 'frxDBDataset1' 
     end> 
    Variables = < 
     item 
     Name = ' Workshift' 
     Value = Null 
     end 
     item 
     Name = 'ClockableTime' 
     Value = 
      'iif(<frxDBDataset1."CLOCKABLE"> = true, <frxDBDataset1."TIMEELAP' + 
      'SED"> * 24, 0)' 
     end 
     item 
     Name = 'WeeklyTimeElapsed' 
     Value = 'SUM(<frxDBDataset1."TIMEELAPSED"> * 24,MasterData1)' 
     end 
     item 
     Name = 'WeeklyClockableTime' 
     Value = 'sum(<ClockableTime>)' 
     end 
     item 
     Name = 'WeeklyStraightTime' 
     Value = '<WeeklyTimeElapsed> - <WeeklyOvertime>' 
     end 
     item 
     Name = 'WeeklyOvertime' 
     Value = 'iif(<WeeklyClockableTime> > 40, <WeeklyTimeElapsed> - 40, 0)' 
     end 
     item 
     Name = 'EmployeeTimeElapsed' 
     Value = 'sum(<frxDBDataset1."TIMEELAPSED">, MasterData1)' 
     end> 
    Style = <> 
    object Data: TfrxDataPage 
     Height = 1000.000000000000000000 
     Width = 1000.000000000000000000 
    end 
    object Page1: TfrxReportPage 
     PaperWidth = 215.900000000000000000 
     PaperHeight = 279.400000000000000000 
     PaperSize = 1 
     LeftMargin = 10.000000000000000000 
     RightMargin = 10.000000000000000000 
     TopMargin = 10.000000000000000000 
     BottomMargin = 10.000000000000000000 
     object MasterData1: TfrxMasterData 
     FillType = ftBrush 
     Height = 28.800000000000000000 
     Top = 201.600000000000000000 
     Width = 740.409927000000000000 
     DataSet = frxDBDataset1 
     DataSetName = 'frxDBDataset1' 
     RowCount = 0 
     object frxDBDataset1JOBCODE: TfrxMemoView 
      Left = 172.800000000000000000 
      Width = 124.800000000000000000 
      Height = 19.200000000000000000 
      DataField = 'JOBCODE' 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      Memo.UTF8W = (
      '[frxDBDataset1."JOBCODE"]') 
     end 
     object frxDBDataset1DATEIN: TfrxMemoView 
      Width = 76.800000000000000000 
      Height = 19.200000000000000000 
      DataField = 'DATEIN' 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      Memo.UTF8W = (
      '[frxDBDataset1."DATEIN"]') 
     end 
     object frxDBDataset1DAYOFWEEK: TfrxMemoView 
      Left = 86.400000000000000000 
      Width = 76.800000000000000000 
      Height = 19.200000000000000000 
      DataField = 'DAYOFWEEK' 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      Memo.UTF8W = (
      '[frxDBDataset1."DAYOFWEEK"]') 
     end 
     object frxDBDataset1TIMEIN: TfrxMemoView 
      Left = 307.200000000000000000 
      Width = 76.800000000000000000 
      Height = 19.200000000000000000 
      DataField = 'TIMEIN' 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      Memo.UTF8W = (
      '[frxDBDataset1."TIMEIN"]') 
     end 
     object frxDBDataset1TIMEOUT: TfrxMemoView 
      Left = 393.600000000000000000 
      Width = 76.800000000000000000 
      Height = 19.200000000000000000 
      DataField = 'TIMEOUT' 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      Memo.UTF8W = (
      '[frxDBDataset1."TIMEOUT"]') 
     end 
     object frxDBDataset1TIMEELAPSED: TfrxMemoView 
      Left = 480.000000000000000000 
      Width = 76.800000000000000000 
      Height = 19.200000000000000000 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      DisplayFormat.FormatStr = '%2.2n' 
      DisplayFormat.Kind = fkNumeric 
      Font.Charset = DEFAULT_CHARSET 
      Font.Color = clBlack 
      Font.Height = -13 
      Font.Name = 'Arial' 
      Font.Style = [] 
      HAlign = haRight 
      Memo.UTF8W = (
      '[<frxDBDataset1."TIMEELAPSED"> * 24]') 
      ParentFont = False 
     end 
     object Memo3: TfrxMemoView 
      Left = 566.400000000000000000 
      Width = 76.800000000000000000 
      Height = 19.200000000000000000 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      DisplayFormat.FormatStr = '%2.2n' 
      DisplayFormat.Kind = fkNumeric 
      Font.Charset = DEFAULT_CHARSET 
      Font.Color = clBlack 
      Font.Height = -13 
      Font.Name = 'Arial' 
      Font.Style = [] 
      HAlign = haRight 
      Memo.UTF8W = (
      '[ClockableTime]') 
      ParentFont = False 
     end 
     object CheckBox1: TfrxCheckBoxView 
      Left = 662.400000000000000000 
      Width = 18.897650000000000000 
      Height = 18.897650000000000000 
      CheckColor = clBlack 
      CheckStyle = csCheck 
      DataField = 'CLOCKABLE' 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
     end 
     end 
     object PageFooter1: TfrxPageFooter 
     FillType = ftBrush 
     Height = 28.800000000000000000 
     Top = 441.600000000000000000 
     Width = 740.409927000000000000 
     object Memo1: TfrxMemoView 
      Left = 665.197280000000000000 
      Width = 75.590600000000000000 
      Height = 18.897650000000000000 
      HAlign = haRight 
      Memo.UTF8W = (
      '[Page#]') 
     end 
     end 
     object PageHeader1: TfrxPageHeader 
     FillType = ftBrush 
     Height = 28.800000000000000000 
     Top = 19.200000000000000000 
     Width = 740.409927000000000000 
     end 
     object ReportSummary1: TfrxReportSummary 
     FillType = ftBrush 
     Height = 28.800000000000000000 
     Top = 393.600000000000000000 
     Width = 740.409927000000000000 
     end 
     object GroupHeader1: TfrxGroupHeader 
     FillType = ftBrush 
     Height = 28.800000000000000000 
     Top = 105.600000000000000000 
     Width = 740.409927000000000000 
     Condition = 'frxDBDataset1."EMPLOYEEID"' 
     StartNewPage = True 
     object frxDBDataset1EMPLOYEEID: TfrxMemoView 
      Width = 115.200000000000000000 
      Height = 19.200000000000000000 
      DataField = 'EMPLOYEEID' 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      Memo.UTF8W = (
      '[frxDBDataset1."EMPLOYEEID"]') 
     end 
     end 
     object GroupFooter1: TfrxGroupFooter 
     FillType = ftBrush 
     Height = 28.800000000000000000 
     Top = 307.200000000000000000 
     Width = 740.409927000000000000 
     object Memo7: TfrxMemoView 
      Left = 460.800000000000000000 
      Top = 9.600000000000023000 
      Width = 96.000000000000000000 
      Height = 19.200000000000000000 
      DisplayFormat.FormatStr = '%2.2n' 
      DisplayFormat.Kind = fkNumeric 
      Font.Charset = DEFAULT_CHARSET 
      Font.Color = clBlack 
      Font.Height = -13 
      Font.Name = 'Arial' 
      Font.Style = [] 
      HAlign = haRight 
      Memo.UTF8W = (
      '[SUM(<frxDBDataset1."TIMEELAPSED"> * 24,MasterData1)]') 
      ParentFont = False 
     end 
     end 
     object GroupHeader2: TfrxGroupHeader 
     FillType = ftBrush 
     Height = 28.800000000000000000 
     Top = 153.600000000000000000 
     Width = 740.409927000000000000 
     Condition = 'frxDBDataset1."WEEKOF"' 
     object frxDBDataset1WEEKOF: TfrxMemoView 
      Width = 105.600000000000000000 
      Height = 19.200000000000000000 
      DataSet = frxDBDataset1 
      DataSetName = 'frxDBDataset1' 
      Memo.UTF8W = (
      'w/o [frxDBDataset1."WEEKOF"]') 
     end 
     end 
     object GroupFooter2: TfrxGroupFooter 
     FillType = ftBrush 
     Height = 38.400000000000000000 
     Top = 249.600000000000000000 
     Width = 740.409927000000000000 
     object Memo2: TfrxMemoView 
      Left = 480.000000000000000000 
      Top = 9.599999999999995000 
      Width = 76.800000000000000000 
      Height = 19.200000000000000000 
      DisplayFormat.FormatStr = '%2.2n' 
      DisplayFormat.Kind = fkNumeric 
      Font.Charset = DEFAULT_CHARSET 
      Font.Color = clBlack 
      Font.Height = -13 
      Font.Name = 'Arial' 
      Font.Style = [] 
      HAlign = haRight 
      Memo.UTF8W = (
      '[WeeklyTimeElapsed]') 
      ParentFont = False 
     end 
     object Memo4: TfrxMemoView 
      Left = 566.400000000000000000 
      Top = 9.599999999999995000 
      Width = 76.800000000000000000 
      Height = 19.200000000000000000 
      DisplayFormat.FormatStr = '%2.2n' 
      DisplayFormat.Kind = fkNumeric 
      Font.Charset = DEFAULT_CHARSET 
      Font.Color = clBlack 
      Font.Height = -13 
      Font.Name = 'Arial' 
      Font.Style = [] 
      HAlign = haRight 
      Memo.UTF8W = (
      '[WeeklyClockableTime]') 
      ParentFont = False 
     end 
     object Memo5: TfrxMemoView 
      Left = 9.600000000000000000 
      Top = 9.599999999999995000 
      Width = 201.600000000000000000 
      Height = 19.200000000000000000 
      DisplayFormat.FormatStr = '%2.2n' 
      DisplayFormat.Kind = fkNumeric 
      Memo.UTF8W = (
      'Straight Time: [WeeklyStraightTime]') 
     end 
     object Memo6: TfrxMemoView 
      Left = 220.800000000000000000 
      Top = 9.599999999999995000 
      Width = 172.800000000000000000 
      Height = 19.200000000000000000 
      DisplayFormat.FormatStr = '%2.2n' 
      DisplayFormat.Kind = fkNumeric 
      Memo.UTF8W = (
      'Overtime hours: [WeeklyOvertime]') 
     end 
     end 
    end 
    end 
    object frxDBDataset1: TfrxDBDataset 
    UserName = 'frxDBDataset1' 
    CloseDataSource = False 
    DataSet = WorkshiftDataset 
    BCDToCurrency = False 
    Left = 360 
    Top = 32 
    end 
    object frxCheckBoxObject1: TfrxCheckBoxObject 
    Left = 112 
    Top = 112 
    end 
end 
+0

Можете ли вы предоставить снимок экрана вашего дизайна страницы отчетов, чтобы мы могли видеть расположение этих групп ?. –

ответ

0

Попробуйте использовать выражение

SUM(iif(<frxDBDataset1."CLOCKABLE"> = true, <frxDBDataset1."TIMEELAP' + 
      'SED"> * 24, 0), MasterData1) 

в TfrxMemoView на GroupFooter2