Регистрация  |  Вход

Перевод цифр в слова

Доброго времени суток.

Являюсь сотрудником компании использующей Salesforce.

Одна из идей использовать Salesаorce для генерации текстов договоров. Все данные для договорв (номер, имя клиента, сумма и т.д.) берутся из других полей. Но по российскому законодательству суммы в договорах должны прописываться не только цифрами, но и словами. Сумму цифрами, как я уже сказал, берем из другого поля в системе, но необходимо автоматически переводить цифры в слова. Подобный код для перевода на английский я нашел - http://salesforcewithkiran.blogspot.ru/2013/05/number-to-words-in-apex.html. Хотел спросить, нет ли у кого подобного на русский?

Если нет, то может ли кто-то взяться за адаптацию подобного на русский, если это конечно рабочий вариант?

Детали обсудим в личке.

Спасибо.

Доброго времени суток. 

Являюсь сотрудником компании использующей Salesforce. 

Одна из идей использовать Salesаorce для генерации текстов договоров. Все данные для договорв (номер, имя клиента, сумма и т.д.) берутся из других полей. Но по российскому законодательству суммы в договорах должны прописываться не только цифрами, но и словами. Сумму цифрами, как я уже сказал, берем из другого поля в системе, но необходимо автоматически переводить цифры в слова. Подобный код для перевода на английский я нашел - [url]http://salesforcewithkiran.blogspot.ru/2013/05/number-to-words-in-apex.html[/url]. Хотел спросить, нет ли у кого подобного на русский? 

Если нет, то может ли кто-то взяться за адаптацию подобного на русский, если это конечно рабочий вариант? 

Детали обсудим в личке. 

Спасибо.

Привет Антон.

Интересный вопрос ты подкинул, а главное очень жизненный. На практике мне не встречался подобный алгоритм и честно признаться самому стало очень любопытно увидеть что-то похожее. Видимо для бизнеса подобный функционал очень даже необходимая штука.

Тот что ты предложил вариант с английскими словами мне кажется не очень подходит для переделки. Я нашел интересный русский вариант на другой платформе. В ближайшее время перепишу для Salesforce и сделаю чтобы его можно было использовать так сказать "из коробки".

Привет Антон.

Интересный вопрос ты подкинул, а главное очень жизненный. На практике мне не встречался подобный алгоритм и честно признаться самому стало очень любопытно увидеть что-то похожее. Видимо для бизнеса подобный функционал очень даже необходимая штука. 

Тот что ты предложил вариант с английскими словами мне кажется не очень подходит для переделки. Я нашел интересный русский вариант на другой платформе. В ближайшее время перепишу для Salesforce и сделаю чтобы его можно было использовать так сказать "из коробки".
[b]Вот статья "[url=http://salesforce-developer.ru/summa-propisyu-na-salesforce/]Сумма прописью на Salesforce[/url]"[/b]

круто, круто

круто, круто

Ух ты, действительно "круто"

Спасибо большое! Будем пробовать, как запустим, отпишу, как говорится с полей.

Ух ты, действительно "круто" :) 

Спасибо большое! Будем пробовать, как запустим, отпишу, как говорится с полей.

Используй formula field поле. Например, вот так. Будет работать на ура до 999 999.

Поле с цифрами AnnualRevenue. Ну и создаешь поле формула филд с таким кодом.

CASE((MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,100000))/1000,
100, 'one',
200, 'two',
300, 'three',
400, 'four',
500, 'five',
600, 'six',
700, 'seven',
800, 'eight',
900, 'nine',
'')
&
IF (MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,100000) >= 100000, IF(MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,100000) == 100000, ' hundred', ' hundreds'),'')
&
IF (MOD(AnnualRevenue,100000) - MOD(AnnualRevenue,10000) == 10000,
CASE((MOD(AnnualRevenue,100000) - MOD(AnnualRevenue,1000))/1000,
10, ' ten',
11, ' eleven',
12, ' twelve',
13, ' thirteen',
14, ' fourteen',
15, ' fifteen',
16, ' sixteen',
17, ' seventeen',
18, ' eighteen',
19, ' nineteen',
'')
,
CASE ((MOD(AnnualRevenue,100000) - MOD(AnnualRevenue,10000))/1000,
20, ' twenty',
30, ' thirty',
40, ' fourty',
50, ' fifty',
60, ' sixty',
70, ' seventy',
80, ' eighty',
90, ' ninety',
''
)
&
CASE ((MOD(AnnualRevenue,10000) - MOD(AnnualRevenue,1000))/1000,
1, ' one',
2, ' two',
3, ' three',
4, ' four',
5, ' five',
6, ' six',
7, ' seven',
8, ' eight',
9, ' nine',
''))
&
IF (MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,1000) >= 1000, IF(MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,1000) == 1000, ' thousand', ' thousands'),'')
&
CASE(MOD(AnnualRevenue,1000) - MOD(AnnualRevenue,100),
100, ' one',
200, ' two',
300, ' three',
400, ' four',
500, ' five',
600, ' six',
700, ' seven',
800, ' eight',
900, ' nine',
'')
&
IF (MOD(AnnualRevenue,1000) - MOD(AnnualRevenue,100) >= 100, IF(MOD(AnnualRevenue,1000) - MOD(AnnualRevenue,100) == 100, ' hundred', ' hundreds'),'')
&
IF (MOD(AnnualRevenue,100) - MOD(AnnualRevenue,10) == 10,
CASE(MOD(AnnualRevenue,100) - MOD(AnnualRevenue,1),
10, ' ten',
11, ' eleven',
12, ' twelve',
13, ' thirteen',
14, ' fourteen',
15, ' fifteen',
16, ' sixteen',
17, ' seventeen',
18, ' eighteen',
19, ' nineteen',
'')
,
CASE (MOD(AnnualRevenue,100) - MOD(AnnualRevenue,10),
20, ' twenty',
30, ' thirty',
40, ' fourty',
50, ' fifty',
60, ' sixty',
70, ' seventy',
80, ' eighty',
90, ' ninety',
''
)
&
CASE (MOD(AnnualRevenue,10) - MOD(AnnualRevenue,1),
1, ' one',
2, ' two',
3, ' three',
4, ' four',
5, ' five',
6, ' six',
7, ' seven',
8, ' eight',
9, ' nine',
''))
&
IF(AnnualRevenue == 0, 'zero','')


Если надо для русского используй схожий алгоритм)

Успехов!

Используй formula field поле. Например, вот так. Будет работать на ура до 999 999.

Поле с цифрами AnnualRevenue. Ну и создаешь поле формула филд с таким кодом.

[code]CASE((MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,100000))/1000,
100, 'one',
200, 'two',
300, 'three',
400, 'four',
500, 'five',
600, 'six',
700, 'seven',
800, 'eight',
900, 'nine',
'')
&
IF (MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,100000) >= 100000, IF(MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,100000) == 100000, ' hundred', ' hundreds'),'')
&
IF (MOD(AnnualRevenue,100000) - MOD(AnnualRevenue,10000) == 10000,
CASE((MOD(AnnualRevenue,100000) - MOD(AnnualRevenue,1000))/1000,
10, ' ten',
11, ' eleven',
12, ' twelve',
13, ' thirteen',
14, ' fourteen',
15, ' fifteen',
16, ' sixteen',
17, ' seventeen',
18, ' eighteen',
19, ' nineteen',
'')
,
CASE ((MOD(AnnualRevenue,100000) - MOD(AnnualRevenue,10000))/1000,
20, ' twenty',
30, ' thirty',
40, ' fourty',
50, ' fifty',
60, ' sixty',
70, ' seventy',
80, ' eighty',
90, ' ninety',
''
)
&
CASE ((MOD(AnnualRevenue,10000) - MOD(AnnualRevenue,1000))/1000,
1, ' one',
2, ' two',
3, ' three',
4, ' four',
5, ' five',
6, ' six',
7, ' seven',
8, ' eight',
9, ' nine',
''))
&
IF (MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,1000) >= 1000, IF(MOD(AnnualRevenue,1000000) - MOD(AnnualRevenue,1000) == 1000, ' thousand', ' thousands'),'')
&
CASE(MOD(AnnualRevenue,1000) - MOD(AnnualRevenue,100),
100, ' one',
200, ' two',
300, ' three',
400, ' four',
500, ' five',
600, ' six',
700, ' seven',
800, ' eight',
900, ' nine',
'')
&
IF (MOD(AnnualRevenue,1000) - MOD(AnnualRevenue,100) >= 100, IF(MOD(AnnualRevenue,1000) - MOD(AnnualRevenue,100) == 100, ' hundred', ' hundreds'),'')
&
IF (MOD(AnnualRevenue,100) - MOD(AnnualRevenue,10) == 10,
CASE(MOD(AnnualRevenue,100) - MOD(AnnualRevenue,1),
10, ' ten',
11, ' eleven',
12, ' twelve',
13, ' thirteen',
14, ' fourteen',
15, ' fifteen',
16, ' sixteen',
17, ' seventeen',
18, ' eighteen',
19, ' nineteen',
'')
,
CASE (MOD(AnnualRevenue,100) - MOD(AnnualRevenue,10),
20, ' twenty',
30, ' thirty',
40, ' fourty',
50, ' fifty',
60, ' sixty',
70, ' seventy',
80, ' eighty',
90, ' ninety',
''
)
&
CASE (MOD(AnnualRevenue,10) - MOD(AnnualRevenue,1),
1, ' one',
2, ' two',
3, ' three',
4, ' four',
5, ' five',
6, ' six',
7, ' seven',
8, ' eight',
9, ' nine',
''))
&
IF(AnnualRevenue == 0, 'zero','')[/code]


Если надо для русского используй схожий алгоритм)

Успехов!