Incorrect Records in the Time Sheet
Task: It is impossible to set a correct time format in the Time Sheet report. Minutes should be limited to the value of 60.
Solution: In the MemFldRIGHTDURATION filed, change [INT([NET DURATION]) +0.6*FRAC([NET DURATION])] to [[NET DURATION]*60*60/(60*60*24)] and select the time format 00:00:00 in the DisplayFormat property.
Correcting Layouts for Direct Reports
Mission: To edit layouts for direct reports: remove (merge) unnecessary empty lines.
Solution: In the Menu items sold by category layout, on the code page, insert the script:
var S: string; D: Tdatetime; DS: TfrxDataSet; procedure MasterData1OnAfterCalcHeight(Sender: TfrxComponent); begin if ((Engine.FreeSpace < 2*memDataCLASSIFICATION.Height) and (Engine.FreeSpace > memDataCLASSIFICATION.Height)) then memDataCLASSIFICATION.Frame.Typ := memDataCLASSIFICATION.Frame.Typ + ftBottom; end; procedure memDataCLASSIFICATIONOnBeforePrint(Sender: TfrxComponent); begin if S = <ReportSource."CLASSIFICATION"> then memDataCLASSIFICATION.Frame.Typ := ftLeft + ftRight else memDataCLASSIFICATION.Frame.Typ := ftLeft + ftRight + ftTop; DS.Next; if DS.Eof then memDataCLASSIFICATION.Frame.Typ := memDataCLASSIFICATION.Frame.Typ + ftBottom else DS.Prior; S := <ReportSource."CLASSIFICATION">; end; procedure Memo8OnBeforePrint(Sender: TfrxComponent); begin if D = <ReportSource."SHIFTDATE"> then Memo8.Frame.Typ := ftLeft + ftRight else Memo8.Frame.Typ := ftLeft + ftRight + ftTop; DS.Next; if DS.Eof then Memo8.Frame.Typ := Memo8.Frame.Typ + ftBottom else DS.Prior; D := <ReportSource."SHIFTDATE">; end; begin DS := Report.GetDataSet('ReportSource'); S := ''; end.
Insert the following script in the Menu items sold layout on the code page:
var D: Tdatetime; DS: TfrxDataSet; procedure memDataDISHCODEOnBeforePrint(Sender: TfrxComponent); begin if D = <ReportSource."SHIFTDATE"> then memDataDISHCODE.Frame.Typ := ftLeft + ftRight else memDataDISHCODE.Frame.Typ := ftLeft + ftRight + ftTop; DS.Next; if DS.Eof then memDataDISHCODE.Frame.Typ := memDataDISHCODE.Frame.Typ + ftBottom else DS.Prior; D := <ReportSource."SHIFTDATE">; end; procedure Table_BodyOnAfterCalcHeight(Sender: TfrxComponent); begin if ((Engine.FreeSpace < 2*memHeadDISHCODE.Height) and (Engine.FreeSpace > memHeadDISHCODE.Height)) then memHeadDISHCODE.Frame.Typ := memHeadDISHCODE.Frame.Typ + ftBottom; end; begin DS := Report.GetDataSet('ReportSource'); D := 0; end.
Insert the following script in the Common revenue layout on the code page:
var S: string; DS: TfrxDataSet; procedure MasterData1OnAfterCalcHeight(Sender: TfrxComponent); begin if ((Engine.FreeSpace < 2*Memo19.Height) and (Engine.FreeSpace > Memo19.Height)) then Memo19.Frame.Typ := Memo19.Frame.Typ + ftBottom; end; procedure Memo19OnBeforePrint(Sender: TfrxComponent); begin if S = <ReportSource."CURRENCYTYPE"> then Memo19.Frame.Typ := ftLeft + ftRight else Memo19.Frame.Typ := ftLeft + ftRight + ftTop; DS.Next; if DS.Eof then Memo19.Frame.Typ := Memo19.Frame.Typ + ftBottom else DS.Prior; S := <ReportSource."CURRENCYTYPE">; end; begin DS := Report.GetDataSet('ReportSource'); S := ''; end.
Settings for Label Printing in r_keeper Delivery
Task: A script is required that will manually arrange a report, generate a label for each dish, and divide dish modifiers into lines.
Combo dishes are printed separately on the labels, i.e. the combo dish name and its components are shown separately.
Example: a combo dish, shown on one label
Assorted pizza:
- - ½ of pizza 1
- - ½ of pizza 2
Solution:
procedure Page1OnManualBuild(Sender: TfrxComponent); var dsDishes : TfrxDataSet; i : integer; modstr, newmodstr : string; begin dsDishes:=MasterData1.DataSet; dsDishes.First; while not dsDishes.eof do begin if dsDishes.Value('ComboDish') <> '' then begin dsDishes.next; continue; end; if length(dsDishes.Value('ModifiersText')) >0 then begin modstr:=dsDishes.Value('ModifiersText'); while pos(',',modstr)<>0 do begin newmodstr:='- '+copy(modstr,0,pos(',',modstr)-1)+#13; modstr:=copy(modstr,pos(',',modstr)+1,length(modstr)); end; newmodstr:=newmodstr+'- '+modstr; end; for i:=1 to dsDishes.Value('Quantity') do begin Memo10.Text:=newmodstr; Engine.ShowBand(MasterData1); end; newmodstr:=''; dsDishes.Next; end; end; begin end.
Fastreport Script for Merging Vertical Cells
Task: To add the Order Contents field to the Operations cube. Upon creating a new cube, columns display information incorrectly: if there are several deleted dishes in the same receipt, the Receipt Contents column duplicates the information.
Solution: Change the script
var prevOrder, prevOrder3, prevShiftDate, prevDishName: string; DS, DS3: TfrxDataSet; procedure RKeeperDataOnBeforePrint(Sender: TfrxComponent); begin prevOrder := ''; prevOrder3 := ''; prevShiftDate := ''; prevDishName := ''; end; procedure Table_BodyOnAfterCalcHeight(Sender: TfrxComponent); begin { if ((Engine.FreeSpace < 2*memDataORDERNAME.Height) and (Engine.FreeSpace > memDataORDERNAME.Height)) then memDataORDERNAME.Frame.Typ := memDataORDERNAME.Frame.Typ + ftBottom; } end; procedure memDataSHIFTDATEOnBeforePrint(Sender: TfrxComponent); begin if prevShiftDate = DateToStr(DS.value('SHIFTDATE')) then memDataSHIFTDATE.Frame.Typ := ftLeft + ftRight else memDataSHIFTDATE.Frame.Typ := ftLeft + ftRight + ftTop; DS.Next; if DS.Eof then memDataSHIFTDATE.Frame.Typ := memDataSHIFTDATE.Frame.Typ + ftBottom else DS.Prior; if null<>DS.value('SHIFTDATE') then prevShiftDate := DateToStr(DS.value('SHIFTDATE')) else prevShiftDate := ''; end; procedure memDataORDERNAMEOnBeforePrint(Sender: TfrxComponent); begin if prevOrder = (DS.value('ORDERNAME')) then memDataORDERNAME.Frame.Typ := ftLeft + ftRight else memDataORDERNAME.Frame.Typ := ftLeft + ftRight + ftTop; DS.Next; if DS.Eof then memDataORDERNAME.Frame.Typ := memDataORDERNAME.Frame.Typ + ftBottom else DS.Prior; if null<>DS.value('ORDERNAME') then prevOrder := (DS.value('ORDERNAME')) else prevOrder := ''; end; procedure memDataDISH1OnBeforePrint(Sender: TfrxComponent); begin if (prevDishName = (DS3.value('DISH1')))and(prevOrder3 = (DS3.value('ORDERNAME'))) then memDataDISH1.Frame.Typ := ftLeft + ftRight else memDataDISH1.Frame.Typ := ftLeft + ftRight + ftTop; DS3.Next; if DS3.Eof then memDataDISH1.Frame.Typ := memDataDISH1.Frame.Typ + ftBottom else DS3.Prior; if null<>DS3.value('DISH1') then prevDishName := (DS3.value('DISH1')) else prevDishName := ''; if null<>DS3.value('ORDERNAME') then prevOrder3 := (DS3.value('ORDERNAME')) else prevOrder3 := ''; end; begin DS := Table_Body.Dataset; // Report.GetDataSet('ReportSource'); DS3 := Table_Body.Dataset; // Report.GetDataSet('ReportSource'); prevOrder := ''; prevOrder3 := ''; prevShiftDate := ''; prevDishName := ''; end.