powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / FastReport. Сумма прописью
1 сообщений из 1, страница 1 из 1
FastReport. Сумма прописью
    #34569798
Фотография mr_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вставил следующий код в модуль fs_isysrtti.pas

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
{сама функция преообразования} 
//begin fix 
function ConvertSumToPropis(Number:real):string; 
var 
  PartNum, TruncNum, NumTMP, D: integer; 
  NumStr : string; 
  i, R   : byte; 
  Flag11 : boolean; 
begin 
  D:= 1000000 ; 
  R:= 4 ; 
  TruncNum:=Trunc(Number); 
  if TruncNum<> 0  
    then 
      repeat 
        PartNum:=TruncNum div D; 
        Dec(R); 
        D:=D div  1000 ; 
      until PartNum<> 0  
    else 
      R:= 0 ; 
 
  for i:=R downto  1  do 
  begin 
    Flag11:=False; 
    NumTMP:=PartNum div  100 ; 
    case NumTMP of 
       1 : NumStr:=NumStr+'сто '; 
       2 : NumStr:=NumStr+'двести '; 
       3 : NumStr:=NumStr+'триста '; 
       4 : NumStr:=NumStr+'четыреста '; 
       5 : NumStr:=NumStr+'пятьсот '; 
       6 : NumStr:=NumStr+'шестьсот '; 
       7 : NumStr:=NumStr+'семьсот '; 
       8 : NumStr:=NumStr+'восемьсот '; 
       9 : NumStr:=NumStr+'девятьсот '; 
    end; 
      NumTMP:=(PartNum mod  100 ) div  10 ; 
        case NumTMP of 
         1 : begin 
           NumTMP:=PartNum mod  100 ; 
           case NumTMP of 
             10 : NumStr:=NumStr+'десять '; 
             11 : NumStr:=NumStr+'одиннадцать '; 
             12 : NumStr:=NumStr+'двенадцать '; 
             13 : NumStr:=NumStr+'тринадцать '; 
             14 : NumStr:=NumStr+'четырнадцать '; 
             15 : NumStr:=NumStr+'пятнадцать '; 
             16 : NumStr:=NumStr+'шестнадцать '; 
             17 : NumStr:=NumStr+'семнадцать '; 
             18 : NumStr:=NumStr+'восемнадцать '; 
             19 : NumStr:=NumStr+'девятнадцать '; 
           end; 
           case i of 
              3 : NumStr:=NumStr+'миллионов '; 
              2 : NumStr:=NumStr+'тысяч '; 
              1 : NumStr:=NumStr+'рублей '; 
           end; 
           Flag11:=True; 
         end; 
       2 : NumStr:=NumStr+'двадцать '; 
       3 : NumStr:=NumStr+'тридцать '; 
       4 : NumStr:=NumStr+'сорок '; 
       5 : NumStr:=NumStr+'пятьдесят '; 
       6 : NumStr:=NumStr+'шестьдесят '; 
       7 : NumStr:=NumStr+'семьдесят '; 
       8 : NumStr:=NumStr+'восемьдесят '; 
       9 : NumStr:=NumStr+'девяносто '; 
    end; 
    NumTMP:=PartNum mod  10 ; 
    if not Flag11 then 
      begin 
        case NumTMP of 
           1 : if i= 2  then 
               NumStr:=NumStr+'одна ' 
             else NumStr:=NumStr+'один '; 
           2 : if i= 2  then 
               NumStr:=NumStr+'две ' 
             else NumStr:=NumStr+'два '; 
           3 : NumStr:=NumStr+'три '; 
           4 : NumStr:=NumStr+'четыре '; 
           5 : NumStr:=NumStr+'пять '; 
           6 : NumStr:=NumStr+'шесть '; 
           7 : NumStr:=NumStr+'семь '; 
           8 : NumStr:=NumStr+'восемь '; 
           9 : NumStr:=NumStr+'девять '; 
        end; 
        case i of 
           3 : case NumTMP of 
                1     : NumStr:=NumStr+'миллион '; 
                2 , 3 , 4 : NumStr:=NumStr+'миллиона '; 
               else 
                 NumStr:=NumStr+'миллионов '; 
             end; 
           2 : case NumTMP of 
                1     : NumStr:=NumStr+'тысяча '; 
                2 , 3 , 4 : NumStr:=NumStr+'тысячи '; 
               else 
                 if PartNum<> 0  then 
                   NumStr:=NumStr+'тысяч '; 
             end; 
           1 : case NumTMP of 
                1     : NumStr:=NumStr+'рубль '; 
                2 , 3 , 4 : NumStr:=NumStr+'рубля '; 
               else NumStr:=NumStr+'рублей '; 
             end; 
        end; 
      end; 
    if i> 1  then 
      begin 
        PartNum:=(TruncNum mod (D* 1000 )) div D; 
        D:=D div  1000 ; 
      end; 
  end; 
 
  PartNum:=Round(Frac(Number)* 100 ); 
  if PartNum= 0  then 
    begin 
      ConvertSumToPropis:=NumStr+'00 копеек'; 
      Exit; 
    end; 
  NumTMP:=PartNum div  10 ;  
  if NumTMP= 0  then 
    NumStr:=NumStr+'0'+IntToStr(PartNum)+' ' 
  else 
    NumStr:=NumStr+IntToStr(PartNum)+' '; 
  NumTMP:=PartNum mod  10 ; 
  case NumTMP of 
     1 : if PartNum<> 11  then 
         NumStr:=NumStr+'копейка' 
       else 
         NumStr:=NumStr+'копеек'; 
     2 , 3 , 4 : if (PartNum< 5 ) or (PartNum> 14 ) then 
             NumStr:=NumStr+'копейки' 
           else 
             NumStr:=NumStr+'копеек'; 
    else NumStr:=NumStr+'копеек'; 
  end; 
  ConvertSumToPropis:=NumStr; 
end; 
//end fix 
constructor TFunctions.Create; 
begin 
  FCatStr := 'ctString'; 
  FCatDate := 'ctDate'; 
  FCatConv := 'ctConv'; 
  FCatFormat := 'ctFormat'; 
  FCatMath := 'ctMath'; 
  FCatOther := 'ctOther'; 
//..... 
//begin fix 
    AddMethod('function ConvertSumToPropis(Number:real):string', CallMethod1, FCatConv); 
//end fix 
//..... 
function TFunctions.CallMethod1(Instance: TObject; ClassType: TClass; 
  const MethodName: String; var Params: Variant): Variant; 
var 
{$IFDEF Delphi6} 
  i: Int64; 
{$ELSE} 
  i: Integer; 
{$ENDIF} 
begin 
  if MethodName = 'INTTOSTR' then 
  begin 
    i := Params[ 0 ]; 
    Result := IntToStr(i) 
  end 
  else if MethodName = 'FLOATTOSTR' then 
    Result := FloatToStr(Params[ 0 ]) 
  else if MethodName = 'DATETOSTR' then 
    Result := DateToStr(Params[ 0 ]) 
  else if MethodName = 'TIMETOSTR' then 
    Result := TimeToStr(Params[ 0 ]) 
  else if MethodName = 'DATETIMETOSTR' then 
    Result := DateTimeToStr(Params[ 0 ]) 
//begin fix 
  else if MethodName = 'CONVERTSUMTOPROPIS' then 
    Result := ConvertSumToPropis(Params[ 0 ]) 
//end fix 
end;

И не работает [ConvertSumToPropis([SUM(<frxDBS_WayBill."SUMMA">,MasterData1)])]
???
__________________________________________________________________
THE TRUTH IS OUT THERE
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / FastReport. Сумма прописью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]