1.我想定义一个函数转换金额大小写,按照下面的方法:
1)、打开FR目录下的fr_Calss.pas文件,然后找到 
constructor TfrStdFunctionLibrary.Create 
看到一个个系统原带函数名称没? 看到了就依样写上一句 Add('AMTINWORD'); 
然后往下快到End附近的时候,看到添加入口的语句没? 
加上一句  
AddFunctionDesc('AMTINWORD', '金额大写', 'AmtInWord( <Number>)/返回金额的中文大写.');  
这样到时在报表设计器里面就可以看到 有一个金额大写的分类,里面有AMTINWORD函数。 2)、找到procedure TfrStdFunctionLibrary.DoFunction(FNo: Integer; p1, p2, p3: Variant; 
  var val: Variant); 过程 在 Case语句里面加上一句,注意,语句的CASE入口“22” 是 上面的 Add('AMTINWORD')的ItemIndex号码,从0开始数数看,是不是22,否则改成正确的。 
22: Val := AmtInCnWord(frParser.Calc(p1));    3)、在FR_Utils.pas单元中添加上下面的函数,函数的内容随便你写了。Function AmtInWord(Num:Double):String; 
这样写增加了一个系统函数,但为何在系统函数列表中没显示
2.如何定义一个能计算记录总页数的系统变量,fastreport的总页数要设为2次遍历,我是每页5行,不足补空行,所以不能设2次遍历
只要能解决问题,分不够再加

解决方案 »

  1.   

    1.为什么坚持要在报表里写函数呢?在delphi中写代码不爽些吗2.[TotalPages#]用这个不需要选2次遍历,但仅当你的报表只有一个时好用。因为它是批次报表的总页数
      

  2.   

    第1个问题已经搞定了,在报表里写函数的好处是可以在设计报表时就转换了,我是每5行就一个小计,然后转换大小写,如果在delphi中不好弄,也不方便,所以想在报表中写自定义函数
    现在请大家想想第2个问题吧,主要是在哪些事件中写代码,提供一下思路都行
      

  3.   

    我想在FR_DSet中定义一个public变量TotalRecNo(总记录数),在FR_DBSet的Init方法中计算出TotalRecNo,然后在FR_Class中再计算出总页数,不知为何TotalRecNo值不正确,是不是这种想法不对
    procedure TfrDBDataSet.Init;
    begin
      Open;
      //////edit
      TotalRecNo := FDataSet.RecordCount;  //增加这句计算总记录数
      //////edit
      if (FRangeBegin = rbCurrent) or (FRangeEnd = reCurrent) then
        FBook := frGetBook(TfrTDataSet(GetDataSet)) else
        FBook := frEmptyBook;
      FEof := False;
    end;
      

  4.   

    对于第2个问题,可以先根据要求预先计算一下所要的总张数,然后在报表中自定义一个变量.
    在ONGetValue事件中控制变量的显示.以下例子供参考;
      if frreport1.FinalPass
        then
          begin
            for i:=0 to adock.RecordCount-1 do
              begin
                if parname='mytotalpage' //mytotalpage自定义的变量
                  then
                    begin
                      {case (adock.FieldByName('databs').AsString)[1] of
                        'A':  sort:=0;
                        'B':  sort:=1;
                        'D':  sort:=2;
                        'Z':  sort:=3;
                      end;}
                      if checkbox1.Checked //pages_count函数计算总张数
                        then  count:=pages_count(dm.ado_qry,sort,1,adock.fieldbyname('porder').AsString)
                        else  count:=pages_count(dm.ado_qry,sort,0,adock.fieldbyname'porder').AsString);
                      frreport1.Dictionary.Variables['mytotalpage']:=inttostr(count);
                   end;
              end;
          end;
    {以上是多页式连记出库传票,可供参考}
      

  5.   

    嗯,我现在就是用的这种方法,定义一个变量,在delphi中传值,我想改fastreport的源码,在里面实现计算
      

  6.   

    我定义了一个系统变量,在fastreport的系统变量中只有该变量的图标,而没有名称,可以使用,找了好久也没找到原因