Приветствую Вас Гость | RSS

Delphi заготовки

Среда, 27.11.2024, 02:00
Главная » Статьи » Мои статьи

Сумма прописью для FastReport 4.0 паскаль версия
Перевел функцию Сумма прописью для FastReport 4.0 паскаль версия
основная статья
http://delphiworld.narod.ru/base/sum_written_out7.html
моя переделка для встроенного языка FastReport

/download/FastReport_Summa.fr3

Отчетные формы для фаст репорт (FastReport)

/сумма прописью FastReport  V4
/сумма прописью на языке Pascal Открытый код.


{
перевод на язык паскаля для Фаст Репорта
Наумов Денис
ICQ 368-254-335
mailTo denis-naymov1985@mail.ru
for my web NetSoftWare.Ucoz.ru
основна
http://delphiworld.narod.ru/base/sum_written_out7.html
 
{Пропись © Близнец Антон '99 http:\\anton-bl.chat.ru\delphi\1001.htm }
{ 1000011.01->'Один миллион одинадцать рублей 01 копейка'     
}

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
   memo1.lines.text:=GetSummaToText(100425.44);
end.           

  Программа для перевода суммы в число для Pascal ABC

/Progrma_for_pascal.pas


полностью готовая программа лежит по ссылке

http://netsoftware.ucoz.ru/blog/programma_dlja_perevoda_chisla_v_stroku_summa_propisju/2012-05-18-7




примеры
123456789,00

сто двадцать три миллиона четыреста пятьдесят шесть тысяч семьсот восемьдесят девять  рублей 00 копеек
987654321,00
девятьсот восемьдесят семь миллионов шестьсот пятьдесят четыре тысячи триста двадцать один  рубль 00 копеек

Категория: Мои статьи | Добавил: NetSoftWare (24.07.2011)
Просмотров: 7759 | Комментарии: 3 | Рейтинг: 4.0/1
Всего комментариев: 3
3 MichaelNoist  
0
http://mysite.ru - http://mysite.ru

2 NetSoftWare  
0

1 usestycep  
1
спасибо за интересный блог

Имя *:
Email *:
Код *: