Доброго времени суток.
Являюсь сотрудником компании использующей Salesforce.
Одна из идей использовать Salesаorce для генерации текстов договоров. Все данные для договорв (номер, имя клиента, сумма и т.д.) берутся из других полей. Но по российскому законодательству суммы в договорах должны прописываться не только цифрами, но и словами. Сумму цифрами, как я уже сказал, берем из другого поля в системе, но необходимо автоматически переводить цифры в слова. Подобный код для перевода на английский я нашел - http://salesforcewithkiran.blogspot.ru/2013/05/number-to-words-in-apex.html. Хотел спросить, нет ли у кого подобного на русский?
Если нет, то может ли кто-то взяться за адаптацию подобного на русский, если это конечно рабочий вариант?
Детали обсудим в личке.
Спасибо.
Привет Антон.
Интересный вопрос ты подкинул, а главное очень жизненный. На практике мне не встречался подобный алгоритм и честно признаться самому стало очень любопытно увидеть что-то похожее. Видимо для бизнеса подобный функционал очень даже необходимая штука.
Тот что ты предложил вариант с английскими словами мне кажется не очень подходит для переделки. Я нашел интересный русский вариант на другой платформе. В ближайшее время перепишу для Salesforce и сделаю чтобы его можно было использовать так сказать "из коробки".
Вот статья "Сумма прописью на Salesforce"
круто, круто
Ух ты, действительно "круто"
Спасибо большое! Будем пробовать, как запустим, отпишу, как говорится с полей.
Используй 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','')
Если надо для русского используй схожий алгоритм)
Успехов!