Topic: Сумма прописью

Собственно говоря, у меня два вопроса:
1) Есть поле Цена и Поле Кол-во. - Как их перемножить? Делаю вычисляемое поле и пишу в нем так:
"SELECT Main.Price * Main.Number FROM Main". Выдает ошибку "near "SELECT" syntax error".

2) Можно ли реализовать сумму прописью в программе или при выводе в отчёт?

Re: Сумма прописью

1) Необходимо написать просто: Price * Number

2) Пока это не реализовано но планируется.

Dmitry.

Re: Сумма прописью

const
  Max000 = 6; {Кол-во триплетов - 000}
  MaxPosition = Max000 * 3; {Кол-во знаков в числе }
  var

    c100: array[0..9] of string;
    c11: array[0..9] of string;
    c10: array[0..9] of string;
    c1: array[0..1, 0..9] of string;
    c1000w: array[0..Max000] of integer;
    c1000:array[0..Max000] of string;
    w:array[0..1, 0..9] of string;
    ruble: array[0..9] of string;
    Kopeek: array[0..9] of string;


procedure initalize;
begin
       c1000[0]:='';
       c1000[1]:='тысяч';
       c1000[2]:='миллион';
       c1000[3]:='миллиард';
       c1000[4]:='триллион';
       c1000[5]:='квадраллион';
       c1000[6]:='квинтиллион';

       c1000w[0]:=0;
       c1000w[1]:=1;
       c1000w[2]:=0;
       c1000w[3]:=0;
       c1000w[4]:=0;
       c1000w[5]:=0;
       c1000w[6]:=0;

       w[0,0]:='ов ';
       w[0,1]:=' ';
       w[0,2]:='а ';
       w[0,3]:='а ';
       w[0,4]:='а ';
       w[0,5]:='ов ';
       w[0,6]:='ов ';
       w[0,7]:='ов ';
       w[0,8]:='ов ';
       w[0,9]:='ов ';
       w[1,0]:=' ';
       w[1,1]:='а ';
       w[1,2]:='и ';
       w[1,3]:='и ';
       w[1,4]:='и ';
       w[1,5]:=' ';
       w[1,6]:=' ';
       w[1,7]:=' ';
       w[1,8]:=' ';
       w[1,9]:=' ';
     c100[0]:='';
     c100[1]:='сто ';
     c100[2]:='двести ';
     c100[3]:='триста ';
     c100[4]:='четыреста ';
     c100[5]:='пятьсот ';
     c100[6]:='шестьсот ';
     c100[7]:='семьсот ';
     c100[8]:='восемьсот ';
     c100[9]:='девятьсот ';

      c10[0]:='';
      c10[1]:='десять ';
      c10[2]:='двадцать ';
      c10[3]:='тридцать ';
      c10[4]:='сорок ';
      c10[5]:='пятьдесят ';
      c10[6]:='шестьдесят ';
      c10[7]:='семьдесят ';
      c10[8]:='восемьдесят ';
      c10[9]:='девяносто ';

      c11[0]:='';
      c11[1]:='один';
      c11[2]:='две';
      c11[3]:='три';
      c11[4]:='четыр';
      c11[5]:='пят';
      c11[6]:='шест';
      c11[7]:='сем';
      c11[8]:='восем';
      c11[9]:='девят';


      c1[0,0]:='';
      c1[0,1]:='один ';
      c1[0,2]:='два ';
      c1[0,3]:='три ';
      c1[0,4]:='четыре ';
      c1[0,5]:='пять ';
      c1[0,6]:='шесть ';
      c1[0,7]:='семь ';
      c1[0,8]:='восемь ';
      c1[0,9]:='девять ';

      c1[1,0]:='';
      c1[1,1]:='одна ';
      c1[1,2]:='две ';
      c1[1,3]:='три ';
      c1[1,4]:='четыре ';
      c1[1,5]:='пять ';
      c1[1,6]:='шесть ';
      c1[1,7]:='семь ';
      c1[1,8]:='восемь ';
      c1[1,9]:='девять ';

      ruble[0]:='ей';
      ruble[1]:='ь';
      ruble[2]:='я';
      ruble[3]:='я';
      ruble[4]:='я';
      ruble[5]:='ей';
      ruble[6]:='ей';
      ruble[7]:='ей';
      ruble[8]:='ей';
      ruble[9]:='ей';

      Kopeek[0]:='ек';
      Kopeek[1]:='йка';
      Kopeek[2]:='йки';
      Kopeek[3]:='йки';
      Kopeek[4]:='йки';
      Kopeek[5]:='ек';
      Kopeek[6]:='ек';
      Kopeek[7]:='ек';
      Kopeek[8]:='ек';
      Kopeek[9]:='ек';




end;

function Ceil(const X: Extended): Integer;
begin
  Result:=(Trunc(X));
  if Frac(X) > 0 then
    Inc(Result);
end;

Function IIF2( bln:boolean; TruePart:string; FalsePart:string):string;
begin
  if bln then
    Result := TruePart
  else
    Result := FalsePart;

end;

  function Num000toStr(S: string; woman: integer): string;
    {Num000toStr возвращает число для триплета}

  begin {Num000toStr}
    Result:= c100[ord(s[1])-ord('0')] + iif2((s[2] = '1') and (s[3] > '0'), c11[ord(s[3])-ord('0')] +
      'надцать ', c10[ord(s[2])-ord('0')] + c1[woman, ord(s[3])-ord('0')]);
  end; {Num000toStr}

function NumToStr(s: string): string; {Возвращает число прописью}
var
  s000: string;

  isMinus: Boolean;
  isw:integer;
  i: integer; //Сч?тчик триплетов
begin

  Result := '';
  i := 0;
   isMinus := (s <> '') and (s[1] = '-');

  if isMinus then
    s := Copy(s, 2, Length(s) - 1);
  while not ((i >= Ceil(Length(s) / 3)) or (i >= Max000)) do
  begin
    s000 := Copy('00' + s, Length(s) - i * 3, 3);
    isw := c1000w[i];
    if (i > 0) and (s000 <> '000') then //тысячи и т.д.
      Result := c1000[i] + w[Isw, strtoint(iif2(s000[2] = '1', '0', s000[3]))] + Result;
    Result := Num000toStr(s000, isw) + Result;
    Inc(i)
  end;
  if Result = '' then
    Result := 'ноль';
  if isMinus then
    Result := 'минус ' + Result;
end; {NumToStr}

function TrimLeft(const S: string): string;
var
  I, L: Integer;
begin
  L := Length(S);
  I := 1;
  while (I <= L) and (S[i] <= ' ') do Inc(I);
  Result := Copy(S, I, 32565555);
end;

function RealToRouble(c: Extended): string;


  function ending(const s: string): Char;
  var
    l: Integer; //С l на 8 байт коротче $50->$48->$3F
  begin //Возвращает индекс окончания

    l := Length(s);
     if(l > 1) and (s[l-1]='1') then
     result:='0'
    else
    result:=s[l];

  end;

var
  rub: string;
  kop: string;
  h,x:integer;
begin {Возвращает число прописью с рублями и копейками}

  Result:=formatfloat('0.00',c);
  h:=length(Result);
  for X:=h to 18 do Result:=' '+Result;
  //Str(c: MaxPosition + 3: 2, Result);

  if Pos('E', Result) = 0 then //Если число можно представить в строке <>1E+99
  begin
    rub := TrimLeft(Copy(Result, 1, Length(Result) - 3));
    kop := Copy(Result, Length(Result) - 1, 2);
    Result := NumToStr(rub) + ' рубл'+ruble[strtoint(ending(rub))]
      + ' ' + kop + ' копе' + Kopeek[strtoint(ending(kop))];
    Result := UpperCase(Result[1]) + Copy(Result, 2, Length(Result) - 1);

  end;
end;
function GetSummaToText(r:real):string;
begin
initalize;
result:=RealToRouble(r);
end;
  
begin
    
                                                            
     memo5.lines.text:=GetSummaToText (<Report."predoplata">) ;
     memo81.lines.text:=GetSummaToText (<Report."predoplata">) ;         
end.            

У меня так реализовано в отчете (привязка к memo 5 и 8 соответственно для копии)
Вставляй скрипт в отчет и в путь

Post's attachments

Attachment icon Снимок.JPG 75.64 kb, 340 downloads since 2014-08-19 

Re: Сумма прописью

А как быть, если используется не поле в базе, а сумма?

[SUM(<Report."Predoplata">,MasterData1)]