Из множества реализаций этой востребованной функции представлен вариант, наиболее отвечающий требованиям отечественного документооборота (в части правил написания и склонения названий валют).
В демо-файле использована модифицированная версия Михаила Едошина, опубликованная в КЛУБ FileMaker.RU.
Модификация состоит в том, что основная функция ЧислоПрописью, которая, собственно, и превращает целое число в слова, вызывается "внешней" функцией СуммаПрописьюВалюта, параметрами которой являются поля Сумма и Валюта. В ней уже прописаны некоторые варианты написания валют (род, склонения), которые вы можете сами дополнить.
Функция СуммаПрописьюВалюта(Сумма, Валюта) добавляет в текст названия денежных единиц (рублей, копеек, долларов, центов... ) в правильном числе и падеже.
Предполагается, что Сумма - это число вида Rub.Kop (допустимые варианты - 123, 123.4, 123.45), где "копейки" могут либо отсутствовать вообще, либо занимать не более двух символов.
Лишние символы в "копейках" игнорируются. Например, 123.4567 превратится в 123.45.
Примеры:
Код функции СуммаПрописьюВалюта
В данном варианте возможные значения параметра Валюта:
USD, EUR, RUB, Гривна. Любое другое эквивалентно RUB.
Обратите внимание: элементы формулы, обозначающие
род валюты - "М", "Ж", "С" - набираются кириллицей;
"Kop" - латиницей.
СуммаПрописьюВалюта(Число, Валюта) =
Let(
[
Rub = Int ( Число); Kop = Left ( 100*(Число - Rub);2) ;
TextRub = Case(
Валюта = "USD"; ЧислоПрописью ( Rub; "М" ; "доллар США" ; "доллара США" ; "долларов США" );
Валюта = "EUR"; ЧислоПрописью ( Rub; "М" ; "ЕВРО" ; "ЕВРО" ; "ЕВРО" );
Валюта = "Гривна"; ЧислоПрописью ( Rub; "Ж" ; "гривня" ; "гривнi" ; "гривень" );
ЧислоПрописью ( Rub; "М" ; "рубль" ; "рубля" ; "рублей" ))
];
Replace ( TextRub; 1; 1; Proper ( Left ( TextRub ; 1))) & " " &
Case(
Валюта = "USD"; ЧислоПрописью ( Kop; "М" ; "цент" ; "цента" ; "центов" );
Валюта = "EUR"; ЧислоПрописью ( Kop; "М" ; "евроцент" ; "евроцента" ; "евроцентов" );
Валюта = "Гривна"; ЧислоПрописью ( Kop; "Ж" ; "копiйка" ; "копiйкi" ; "копiйок" );
ЧислоПрописью ( Kop; "Ж" ; "копейка" ; "копейки" ; "копеек" )
)
)
Код функции ЧислоПрописью ввиду его огромности здесь не приводится. Вы можете скопировать его из демо-файла (как и код функции СуммаПрописьюВалюта).
Как вставить функцию в свое приложение:
1. Скачайте демо-файл.
2. Откройте свой файл. Пройдитесь по цепочке File/Manage/Custom Functions...
3. Импортируйте в свой файл функции СуммаПрописьюВалюта и ЧислоПрописью из демо-файла.
4. В своем файле создайте (если их еще нет) поля
Валюта (Text)
Сумма (Number)
СуммаПрописью (calc, Text) = СуммаПрописьюВалюта (Сумма; Валюта)
5. Разместите на нужном лэйауте в подходящем месте все три поля. Назначьте полю Валюта выпадающий список со значениями
RUB
USD
EUR
Гривна
6. Если вы захотите ввести новую валюту, например, фунт стерлингов, добавьте в выпадающий список значение GBP и вставьте в коде функции в соответствующие места две строчки, как показано ниже (выделено):
...
Валюта = "Гривна"; ЧислоПрописью ( Rub; "Ж" ; "гривня" ; "гривнi" ; "гривень" );
Валюта = "GBP"; ЧислоПрописью ( Rub; "М" ; "фунт стерлингов" ; "фунта стерлингов" ; "фунтов стерлингов" );
ЧислоПрописью ( Rub; "М" ; "рубль" ; "рубля" ; "рублей" ))
...
Валюта = "Гривна"; ЧислоПрописью ( Kop; "Ж" ; "копiйка" ; "копiйкi" ; "копiйок" );
Валюта = "GBP"; ЧислоПрописью ( Kop; "М" ; "пенни" ; "пенса" ; "пенсов" );
ЧислоПрописью ( Kop; "Ж" ; "копейка" ; "копейки" ; "копеек" )
...
7. Вот и все
Автор: М.Едошин, модификация FMLogia
Тэги: сумма прописью, функции