Дата (год) прописью после цифрового значения

Программирование - Практика программирования

Бывают случаи, когда необходимо после цифрового значения "года" писать словом "год, лет, года". Предлагаю такое решение.

Допустим, вам необходимо написать, что срок гарантии для стиральной машины составляет 15 лет. Но! Может быть, у Вас разные стиральные машины, для которых установлен разный период гарантии. У одной может быть 15 лет, а у другой 3 года.

В случае, когда в печатную форму (или договор) Вам необходимо занести строчку "Гарантия на устройство [N]".

Чтобы не вставлять в печатную форму неказистое выражение "года\год\лет" - предлагаю функцию, которая делает это за Вас.  

 

Функция глГодПропись (ПеременнаяПрописи) Экспорт
    МассивПрописей = Новый Массив;
    МассивПрописей.Добавить("лет");  //если год оканчивается на 0,5,6,7,8,9
    МассивПрописей.Добавить("год");  //если год оканчивается на 1
    МассивПрописей.Добавить("года"); //если год оканчивается на 2,3,4
    Если Число(Прав(Строка(ПеременнаяПрописи),2)) = 11 ИЛИ Число(Прав(Строка(ПеременнаяПрописи),2)) = 12 ИЛИ Число(Прав(Строка(ПеременнаяПрописи),2)) = 13 ИЛИ Число(Прав(Строка(ПеременнаяПрописи),2)) = 14 Тогда
        Возврат Строка(ПеременнаяПрописи) + " " + МассивПрописей.Получить(0);
    Иначе
        Индекс = Число(Прав(Строка(ПеременнаяПрописи),1));
    КонецЕсли;
    Если Индекс = 0 ИЛИ Индекс = 5 ИЛИ Индекс = 6 ИЛИ Индекс = 7 ИЛИ Индекс = 8 ИЛИ Индекс = 9 Тогда
        Возврат Строка(ПеременнаяПрописи) + " " + МассивПрописей.Получить(0);
    ИначеЕсли Индекс = 1 Тогда 
        Возврат Строка(ПеременнаяПрописи) + " " + МассивПрописей.Получить(1);
    ИначеЕсли Индекс = 2 ИЛИ Индекс = 3 ИЛИ Индекс = 4  Тогда
        Возврат Строка(ПеременнаяПрописи) + " " + МассивПрописей.Получить(2);
    Иначе
        Возврат "ошибка передачи";
    КонецЕсли;
    //кдс    
КонецФункции


 

См. также

Комментарии
1. Евгений Мадонов (madonov) 160 04.06.18 07:36 Сейчас в теме
Функция глГодПропись(ПеременнаяПрописи=0) Экспорт
   Возврат Нрег(ЧислоПрописью(ПеременнаяПрописи,,"год,года,лет,м , , , , , 0"));
КонецФункции
apostal86; mickey.1cx; +2 Ответить
2. Евгений Мадонов (madonov) 160 04.06.18 07:47 Сейчас в теме
Вообще срок гарантии лучше писать в месяцах - универсальнее. Иначе алгоритм рано или поздно споткнется о стиральную машину с гарантией 1,5 года и потребуется обучить его выделению целых лет из числа месяцев и тд..

Функция глМесяцПропись(ПеременнаяПрописи=0) Экспорт
   Возврат Нрег(ЧислоПрописью(ПеременнаяПрописи,,"месяц,месяца,месяцев,м , , , , , 0"));
КонецФункции
mai@kopak.ru; nagimo; PVG_73; Danila-Master; PhoenixAOD; +5 Ответить
3. EvgeniuXP EvgeniuXP (EvgeniuXP) 06.06.18 22:16 Сейчас в теме
Я проще написал, нужно было выводить стаж в годах, месяцах и днях.
Оставьте свое сообщение