我想打印时把金额字段转化为大写,表达式怎么写,请高人指点,谢谢例如
1010元
打印时格式如下
壹 仟 零 佰 壹 拾 零 元

解决方案 »

  1.   

    自己找一个函数,然后传递给fr的自定义函数,之后就能在fr的模板中使用了
      

  2.   

    正好我写过,给你个参考吧。1.在你的程序中加入一条:
      frxReport.AddFunction('function MoneyCn(mmje: Extended): String;','Myfunction','小写金额转大写的函数');
    我放在了窗体创建的时候增加。2.在程序中增加以下函数:
    //------------------大写金额转换函数------------------------//
    function MoneyCn(mmje: Extended): string;
    const
      s1: string = '零壹贰叁肆伍陆柒捌玖';
      s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';function StrTran(const S, s1, s2: string): string;
    begin
      Result := StringReplace(S, s1, s2, [rfReplaceAll]);
    end;var
      S, dx: string;
      i, Len: Integer;
    begin
      if mmje < 0 then
      begin
        dx := '负';
        mmje := -mmje;
      end;
      S := Format('%.0f', [mmje * 100]);
      Len := Length(S);
      for i := 1 to Len do
        dx := dx + Copy(s1, (Ord(S[i]) - Ord('0')) * 2 + 1, 2) + Copy(s2, (Len - i) * 2 + 1, 2);
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰', '零'),'零拾', '零'), '零角', '零'), '零分', '整');
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零', '零'),'零亿', '亿'), '零万', '万'), '零元', '元');
      if dx = '整' then
        Result := '零元整'
      else
        Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
    end;
    //---------------大写金额转换函数(止)---------------------//
    3.在frxReport的OnUserFunction事件中增加:
    function TfrmMain.frxReportUserFunction(const MethodName: String;
      var Params: Variant): Variant;
    begin
      if UpperCase(MethodName) = UpperCase('MoneyCn') then
        Result := MoneyCn(Params[0]);
    end;
    4.在报表中这样用:[MoneyCn(SUM(<frxUserDataSet."field9">,MasterData1))]