HelpF.pro

Вычислить возраст человека и выразить его прописью

Основная функция будет использовать в себе три вспомогательных:

Код 1C v 8.х
 Функция РазностьМеждуДатамиВМесяцах(Дата1,Дата2)

Год1 = Год(Дата1);
Год2 = Год(Дата2);
Месяц1 = Месяц(Дата1);
Месяц2 = Месяц(Дата2);
День1 = День(Дата1);
День2 = День(Дата2);

Результат = (Год1 - Год2) * 12 + Месяц1 - Месяц2;
Если Результат < 0 Тогда Результат = 0 - Результат; КонецЕсли;
Если ((Дата1 > Дата2) И (День1 < День2)) ИЛИ ((Дата1 < Дата2) И (День1 > День2)) Тогда
Результат = Результат - 1;
КонецЕсли;
Возврат Результат;

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


Код 1C v 8.х
 Функция ВозрастВМесяцахИГодах(Месяцы)

Структура = Новый Структура;
Структура.Вставить("Год");
Структура.Вставить("Месяц");
Структура.Месяц = Месяцы % 12;
Структура.Год = (Месяцы - Структура.Месяц) / 12;

Возврат Структура;

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


Код 1C v 8.х
 Функция ВозрастПрописью(Структура)

Строка = "";
Если Структура.Год > 0 Тогда
ПоследняяЦифраГода = Число(Сред(Строка(Структура.Год), СтрДлина(Строка(Структура.Год)), 1));
Если (ПоследняяЦифраГода = 1) И (Структура.Год <> 11) Тогда Строка = Строка(Структура.Год) + " год"; КонецЕсли;
Если (ПоследняяЦифраГода >= 2) И (ПоследняяЦифраГода <=4) И ((Структура.Год < 12) ИЛИ (Структура.Год > 14)) Тогда Строка = Строка(Структура.Год) + " года"; КонецЕсли;
Если ((ПоследняяЦифраГода >= 5) И (ПоследняяЦифраГода <=9)) ИЛИ (ПоследняяЦифраГода = 0) Тогда Строка = Строка(Структура.Год) + " лет"; КонецЕсли;
Если (Структура.Год >= 11) И (Структура.Год <= 14) Тогда Строка = Строка(Структура.Год) + " лет"; КонецЕсли;
КонецЕсли;

Если (Структура.Год > 0) И (Структура.Год < 3) И (Структура.Месяц > 0) Тогда
Строка = Строка + ", ";
КонецЕсли;

Если (Структура.Месяц > 0) И (Структура.Год <= 3) Тогда
Если Структура.Месяц = 1 Тогда Строка = Строка + "1 месяц"; КонецЕсли;
Если (Структура.Месяц >= 2) И (Структура.Месяц <= 4) Тогда Строка = Строка + Строка(Структура.Месяц) + " месяца"; КонецЕсли;
Если Структура.Месяц >= 5 Тогда Строка = Строка + Строка(Структура.Месяц) + " месяцев"; КонецЕсли;
КонецЕсли;

Возврат Строка;

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


А вот и основная:


Код 1C v 8.х
 Функция ВозрастВычислить(Возраст,Дата)

Месяцы = РазностьМеждуДатамиВМесяцах(Возраст,Дата);
ВозрастСтруктура = ВозрастВМесяцахИГодах(Месяцы);
ВозрастПрописью = ВозрастПрописью(ВозрастСтруктура);

Возврат ВозрастПрописью;

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


Изменения 2011.07.26: Небольшие доработки в процедуре ВозрастПрописью - теперь всё работает правильно.
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/1113.html