Более тонкая работа с рублями и копейками в числе прописью

Понадобилось выводить вот такой текст из Сумма в Результат:

10 000 руб. 00 копеек (Десять тысяч рублей 00 копеек)

Как сделать это с только с помощью ЧислоПрописью не понял. Пришлось потрудиться:

Рублей = Цел(Сумма);
Копеек = (Сумма - Цел(Сумма)) * 100;

СуммаРублейПрописью1 = 
        Формат(Рублей, "ЧДЦ=0; ЧГ=3,0") + " руб. "  +
        Формат(Копеек, "ЧДЦ=2; ЧН=00") + " " + ФормаМножественногоЧисла("копейка", "копейки", "копеек", Копеек);
        
СуммаРублейПрописью2 = ЧислоПрописью(ДанныеОбъекта.СуммаДоговора, "Л=ru_RU", "рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2");

Результат =  "" + СуммаРублейПрописью1 + " (" + СуммаРублейПрописью2 + ")";

Использовал типовую функцию ФормаМножественногоЧисла:

// Функция преобразует строку к множественному числу
//
// Параметры: 
//  Слово1 - форма слова в ед числе      ("шкаф")
//  Слово2 - форма слова для числит 2-4  ("шкафа")
//  Слово3 - форма слова для числит 5-10 ("шкафов")
//  ЦелоеЧисло - целое число.
//
// Возвращаемое значение:
//  строку - одну из строк в зависимости от параметра ЦелоеЧисло.
//
// Описание:
//  Предназначена для формирования "правильной" подписи к числительным.
//
Функция ФормаМножественногоЧисла(Слово1, Слово2, Слово3, Знач ЦелоеЧисло) Экспорт
    
    // Изменим знак целого числа, иначе отрицательные числа будут неправильно преобразовываться.
    Если ЦелоеЧисло < 0 Тогда
        ЦелоеЧисло = -1 * ЦелоеЧисло;
    КонецЕсли;
    
    Если ЦелоеЧисло <> Цел(ЦелоеЧисло) Тогда 
        // для нецелых чисел - всегда вторая форма
        Возврат Слово2;
    КонецЕсли;
    
    // остаток
    Остаток = ЦелоеЧисло%10;
    Если (ЦелоеЧисло >10) И (ЦелоеЧисло<20) Тогда
        // для второго десятка - всегда третья форма
        Возврат Слово3;
    ИначеЕсли Остаток=1 Тогда
        Возврат Слово1;
    ИначеЕсли (Остаток>1) И (Остаток<5) Тогда
        Возврат Слово2;
    Иначе
        Возврат Слово3;
    КонецЕсли;

КонецФункции

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. rzd:

    1. использовать СтрШаблон (или аналог БСП ПодставитьПараметрыВСтроку) лаконичнее конкатенации
    2. нет универсальности с валютами

    • 1. про СтрШаблон не знал, искать в БСП аналог лень.
      2. Валюты в данной задаче не были нужны.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *