powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Цыфры словами
2 сообщений из 2, страница 1 из 1
Цыфры словами
    #37218732
Lexx_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
В ReportView10 (VS2010) необходимо перевести цифру в слова. У CR раньше была такая функция ToWord. Есть ли что подобное в ReportView10 или необходимо писать самому перевод??
Спасибо.
...
Рейтинг: 0 / 0
Цыфры словами
    #37221911
Lexx_SQL,

Один из вариантов, попробовать на стороне сервера.
Код: 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.
-- Здесь надо одновременно задействовать обе функции, иначе Error
drop function NumPhrase 
drop function dbo.RubPhrase
go

CREATE function NumPhrase (@Num BIGINT, @IsMaleGender bit= 1 )
returns varchar( 255 )
as
begin
  declare @nword varchar( 255 ), @th tinyint, @gr smallint, @d3 tinyint, @d2 tinyint, @d1 tinyint
  if @Num <  0  return '*** Error: Negative value' else if @Num= 0  return 'Ноль'
/* особый случай */
  while @Num> 0 
  begin
    set @th=IsNull(@th, 0 )+ 1     set @gr=@Num% 1000     set @Num=(@Num-@gr)/ 1000 
    if @gr> 0 
    begin
      set @d3=(@gr-@gr% 100 )/ 100 
      set @d1=@gr% 10 
      set @d2=(@gr-@d3* 100 -@d1)/ 10 
      if @d2= 1  set @d1= 10 +@d1
      set @nword=case @d3
                  when  1  then ' сто' when  2  then ' двести' when  3  then ' триста'
                  when  4  then ' четыреста' when  5  then ' пятьсот' when  6  then ' шестьсот'
                  when  7  then ' семьсот' when  8  then ' восемьсот' when  9  then ' девятьсот' else '' end
                +case @d2
                  when  2  then ' двадцать' when  3  then ' тридцать' when  4  then ' сорок'
                  when  5  then ' пятьдесят' when  6  then ' шестьдесят' when  7  then ' семьдесят'
                  when  8  then ' восемьдесят' when  9  then ' девяносто' else '' end
                +case @d1
                  when  1  then (case when @th= 2  or (@th= 1  and @IsMaleGender= 0 ) then ' одна' else ' один' end)
                  when  2  then (case when @th= 2  or (@th= 1  and @IsMaleGender= 0 ) then ' две' else ' два' end)
                  when  3  then ' три' when  4  then ' четыре' when  5  then ' пять'
                  when  6  then ' шесть' when  7  then ' семь' when  8  then ' восемь'
                  when  9  then ' девять' when  10  then ' десять' when  11  then ' одиннадцать'
                  when  12  then ' двенадцать' when  13  then ' тринадцать' when  14  then ' четырнадцать'
                  when  15  then ' пятнадцать' when  16  then ' шестнадцать' when  17  then ' семнадцать'
                  when  18  then ' восемнадцать' when  19  then ' девятнадцать' else '' end
                +case @th
                  when  2  then ' тысяч'     +(case when @d1= 1  then 'а' when @d1 in ( 2 , 3 , 4 ) then 'и' else ''   end)
                  when  3  then ' миллион' when  4  then ' миллиард' when  5  then ' триллион' when  6  then ' квадриллион' when  7  then ' квинтиллион'
                  else '' end
                +case when @th in ( 3 , 4 , 5 , 6 , 7 ) then (case when @d1= 1  then '' when @d1 in ( 2 , 3 , 4 ) then 'а' else 'ов' end) else '' end
                +IsNull(@nword,'')
    end
  end
  return upper(substring(@nword, 2 , 1 ))+substring(@nword, 3 ,len(@nword)- 2 )
end
go

CREATE function dbo.RubPhrase (@Value money)
returns varchar( 255 )
as
begin
  declare @rpart bigint, @rattr tinyint,  @cpart tinyint, @cattr tinyint
  set @rpart=floor(@Value)     set @rattr=@rpart% 100 
  if @rattr> 19  set @rattr=@rattr% 10 
  set @cpart=(@Value-@rpart)* 100 
  if @cpart> 19  set @cattr=@cpart% 10  else set @cattr=@cpart
  return dbo.NumPhrase(@rpart, 1 )+' рубл'
           +case when @rattr= 1  then 'ь' when @rattr in ( 2 , 3 , 4 ) then 'я' else 'ей' end+' '
           +right('0'+cast(@cpart as varchar( 2 )), 2 )+' копе'
           +case when @cattr= 1  then 'йка' when @cattr in ( 2 , 3 , 4 ) then 'йки' else 'ек' end
end
go

set nocount on

declare @d float =  5868191 . 32 
select dbo.RubPhrase(@d) [s1]

select dbo.RubPhrase( 305 ) [s2]

Похожая тема, где задействованы эти функции:
RS2008 Странный вывод на печать чисел записанный прописью
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Цыфры словами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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