Topic: Сумма прописью
Можно ли как-то через скрипт перевести сумму цифрами в сумму прописью на украинском языке?
My Visual Database → Russian → Сумма прописью
Можно ли как-то через скрипт перевести сумму цифрами в сумму прописью на украинском языке?
у меня сделано в FR3
Скопировать скрипт в код фаст репорта, или скачать во вложении
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.
перевести слова на Украинский, пропись формируется в Memo5 и дублируется в Мemo 81 для копии квитанции
Спасибо, попробую.
My Visual Database → Russian → Сумма прописью
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi