Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Отчетные системы Новый топик    Ответить
 Как написать число прописью  [new]
Gaver
Member

Откуда:
Сообщений: 19
У меня есть поле типа number мне нужно что бы число писалось прописью. Например в поле есть значение 150 нужно что бы было "Сто пятьдесят"
Подскажите пожалуйста какую функцию можно использовать
16 мар 05, 14:06    [1390605]     Ответить | Цитировать Сообщить модератору
 Re: Как написать число прописью  [new]
Gaver
Member

Откуда:
Сообщений: 19
Забыл сказать что речь идет о Crystal Reports
16 мар 05, 14:51    [1390821]     Ответить | Цитировать Сообщить модератору
 Re: Как написать число прописью  [new]
Djoon
Member

Откуда: Сыктывкар
Сообщений: 104
как вариант можно использовать функцию на сервере БД и получать уже от туда число прописью. Например в нашей системе так реализовано.
например для Oracla
CREATE OR REPLACE  FUNCTION "NUMBER2WORD" (source IN 
    NUMBER) RETURN varchar2 is
result VARCHAR2(300);
begin
   -- k - копейки
  result := ltrim(to_char( source,
    '9,9,,9,,,,,,9,9,,9,,,,,9,9,,9,,,,9,9,,9,,,.99')) || 'k';
  -- t - тысячи; m - милионы; M - миллиарды;
  result := replace( result, ',,,,,,', 'eM');
  result := replace( result, ',,,,,', 'em');
  result := replace( result, ',,,,', 'et');
  -- e - единицы; d - десятки; c - сотни;
  result := replace( result, ',,,', 'e');
  result := replace( result, ',,', 'd');
  result := replace( result, ',', 'c');
  --
  result := replace( result, '0c0d0et', '');
  result := replace( result, '0c0d0em', '');
  result := replace( result, '0c0d0eM', '');
  --
  result := replace( result, '0c', '');
  result := replace( result, '1c', 'сто ');
  result := replace( result, '2c', 'двести ');
  result := replace( result, '3c', 'триста ');
  result := replace( result, '4c', 'четыреста ');
  result := replace( result, '5c', 'пятьсот ');
  result := replace( result, '6c', 'шестьсот ');
  result := replace( result, '7c', 'семьсот ');
  result := replace( result, '8c', 'восемьсот ');
  result := replace( result, '9c', 'девятьсот ');
  --
  result := replace( result, '1d0e', 'десять ');
  result := replace( result, '1d1e', 'одиннадцать ');
  result := replace( result, '1d2e', 'двенадцать ');
  result := replace( result, '1d3e', 'тринадцать ');
  result := replace( result, '1d4e', 'четырнадцать ');
  result := replace( result, '1d5e', 'пятнадцать ');
  result := replace( result, '1d6e', 'шестнадцать ');
  result := replace( result, '1d7e', 'семьнадцать ');
  result := replace( result, '1d8e', 'восемнадцать ');
  result := replace( result, '1d9e', 'девятнадцать ');
  --
  result := replace( result, '0d', '');
  result := replace( result, '2d', 'двадцать ');
  result := replace( result, '3d', 'тридцать ');
  result := replace( result, '4d', 'сорок ');
  result := replace( result, '5d', 'пятьдесят ');
  result := replace( result, '6d', 'шестьдесят ');
  result := replace( result, '7d', 'семьдесят ');
  result := replace( result, '8d', 'восемьдесят ');
  result := replace( result, '9d', 'девяносто ');
  --
  result := replace( result, '0e', '');
  result := replace( result, '5e', 'пять ');
  result := replace( result, '6e', 'шесть ');
  result := replace( result, '7e', 'семь ');
  result := replace( result, '8e', 'восемь ');
  result := replace( result, '9e', 'девять ');
  --
  result := replace( result, '1e.', 'один рубль ');
  result := replace( result, '2e.', 'два рубля ');
  result := replace( result, '3e.', 'три рубля ');
  result := replace( result, '4e.', 'четыре рубля ');
  result := replace( result, '1et', 'одна тысяча ');
  result := replace( result, '2et', 'две тысячи ');
  result := replace( result, '3et', 'три тысячи ');
  result := replace( result, '4et', 'четыре тысячи ');
  result := replace( result, '1em', 'один миллион ');
  result := replace( result, '2em', 'два миллиона ');
  result := replace( result, '3em', 'три миллиона ');
  result := replace( result, '4em', 'четыре миллиона ');
  result := replace( result, '1eM', 'один милиард ');
  result := replace( result, '2eM', 'два милиарда ');
  result := replace( result, '3eM', 'три милиарда ');
  result := replace( result, '4eM', 'четыре милиарда ');
  --
  result := replace( result, '11k', '11 копеек');
  result := replace( result, '12k', '12 копеек');
  result := replace( result, '13k', '13 копеек');
  result := replace( result, '14k', '14 копеек');
  result := replace( result, '1k', '1 копейка');
  result := replace( result, '2k', '2 копейки');
  result := replace( result, '3k', '3 копейки');
  result := replace( result, '4k', '4 копейки');
  --

  if not (substr(result,1,1)='.') then
  result := replace( result, '.', ' рублeй ');
  else
  result := replace( result, '.', 'ноль рублeй ');
  end if;
  result := replace( result, 't', 'тысяч ');
  result := replace( result, 'm', 'миллионов ');
  result := replace( result, 'M', 'милиардов ');
  result := replace( result, 'k', ' копeeк');
  --
  RETURN(result);

end;
Тут только для для рублей но это не так важно
16 мар 05, 15:10    [1390919]     Ответить | Цитировать Сообщить модератору
 Re: Как написать число прописью  [new]
gerss
Member

Откуда: Москва
Сообщений: 1002
Gaver
У меня есть поле типа number мне нужно что бы число писалось прописью. Например в поле есть значение 150 нужно что бы было "Сто пятьдесят"
Подскажите пожалуйста какую функцию можно использовать


Gaver
Забыл сказать что речь идет о Crystal Reports


Никакую из встроенных. Только писать самому. Смотри в сторону написания внешних пользовательских функций.

PS: Приходилось такое делать, но не уверен, что смогу найти исходники на Delphi. Вечером дома посмотрю - может нарою...
16 мар 05, 15:10    [1390922]     Ответить | Цитировать Сообщить модератору
 Re: Как написать число прописью  [new]
Gaver
Member

Откуда:
Сообщений: 19
[quot Djoon]как вариант можно использовать функцию на сервере БД и получать уже от туда число прописью. Например в нашей системе так реализовано.
например для Oracla

А у вас система случайно не Парус
16 мар 05, 16:10    [1391304]     Ответить | Цитировать Сообщить модератору
 Re: Как написать число прописью  [new]
Djoon
Member

Откуда: Сыктывкар
Сообщений: 104
А у вас система случайно не Парус

Нет у нас своя разработка для сосдания отчетов применяеться Cristal
16 мар 05, 17:48    [1391884]     Ответить | Цитировать Сообщить модератору
 Re: Как написать число прописью  [new]
gean
Member

Откуда:
Сообщений: 77
Gaver
А у вас система случайно не Парус

Если у вас установлен Парус, то используйте функцию PrMoneyToStr()
17 мар 05, 14:13    [1394525]     Ответить | Цитировать Сообщить модератору
 Re: Как написать число прописью  [new]
Gaver
Member

Откуда:
Сообщений: 19
gean
Gaver
А у вас система случайно не Парус

Если у вас установлен Парус, то используйте функцию PrMoneyToStr()


Именно этой функцией я и воспользовался. Всем большое спасибо!
17 мар 05, 15:34    [1394924]     Ответить | Цитировать Сообщить модератору
Все форумы / Отчетные системы Ответить