Как известно, в 1С есть неплохие средства работы с датами, которые в данной задаче я и попытался использовать.
И, конечно же, обработка "Консоль запросов":
Очень помогли мне функции
РАЗНОСТЬДАТ()
и
ДОБАВИТЬКДАТЕ()
В итоге получил такие запросы, в которых выставил ограничения по количеству записей (500) для отладки информации:
ВЫБРАТЬ ПЕРВЫЕ 500
Люди.Ссылка КАК Ссылка,
Люди.ДатаРождения КАК ДатаРождения,
ВЫБОР
КОГДА МЕСЯЦ(&ТекущаяДата) < МЕСЯЦ(Люди.ДатаРождения)
ТОГДА РАЗНОСТЬДАТ(Люди.ДатаРождения, &ТекущаяДата, ГОД) - 1
КОГДА МЕСЯЦ(&ТекущаяДата) > МЕСЯЦ(Люди.ДатаРождения)
ТОГДА РАЗНОСТЬДАТ(Люди.ДатаРождения, &ТекущаяДата, ГОД)
КОГДА МЕСЯЦ(&ТекущаяДата) = МЕСЯЦ(Люди.ДатаРождения)
ТОГДА ВЫБОР
КОГДА ДЕНЬ(&ТекущаяДата) < ДЕНЬ(Люди.ДатаРождения)
ТОГДА РАЗНОСТЬДАТ(Люди.ДатаРождения, &ТекущаяДата, ГОД) - 1
КОГДА ДЕНЬ(&ТекущаяДата) >= ДЕНЬ(Люди.ДатаРождения)
ТОГДА РАЗНОСТЬДАТ(Люди.ДатаРождения, &ТекущаяДата, ГОД)
КОНЕЦ
ИНАЧЕ "Смотреть"
КОНЕЦ КАК Количество_лет
ПОМЕСТИТЬ Года
ИЗ
Справочник.Люди КАК Люди
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 500
Люди.Ссылка КАК Ссылка,
Люди.ДатаРождения КАК ДатаРождения,
ГОДА.Количество_лет КАК Количество_лет,
ВЫБОР
КОГДА МЕСЯЦ(&ТекущаяДата) < МЕСЯЦ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА ВЫБОР
КОГДА ДЕНЬ(&ТекущаяДата) >= ДЕНЬ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)), &ТекущаяДата, МЕСЯЦ)
КОГДА ДЕНЬ(&ТекущаяДата) < ДЕНЬ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)), &ТекущаяДата, МЕСЯЦ) - 1
ИНАЧЕ
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)), &ТекущаяДата, МЕСЯЦ) - 1
КОНЕЦ
КОГДА МЕСЯЦ(&ТекущаяДата) > МЕСЯЦ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА
ВЫБОР
КОГДА ДЕНЬ(&ТекущаяДата) >= ДЕНЬ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)), &ТекущаяДата, МЕСЯЦ)
КОГДА ДЕНЬ(&ТекущаяДата) < ДЕНЬ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)), &ТекущаяДата, МЕСЯЦ) - 1
ИНАЧЕ
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)), &ТекущаяДата, МЕСЯЦ) - 1
КОНЕЦ
КОГДА МЕСЯЦ(&ТекущаяДата) = МЕСЯЦ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА ВЫБОР
КОГДА ДЕНЬ(&ТекущаяДата) < ДЕНЬ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)), &ТекущаяДата, МЕСЯЦ) - 1
КОГДА ДЕНЬ(&ТекущаяДата) >= ДЕНЬ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)))
ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(Люди.ДатаРождения, ГОД, ВЫРАЗИТЬ(ГОДА.Количество_лет КАК ЧИСЛО)), &ТекущаяДата, МЕСЯЦ)
КОНЕЦ
ИНАЧЕ "Смотреть"
КОНЕЦ КАК Количество_месяцев
Поместить ГОДАМЕСЯЦА
ИЗ
Справочник.Люди КАК Люди
ЛЕВОЕ СОЕДИНЕНИЕ Года КАК ГОДА
ПО (Люди.Ссылка = ГОДА.Ссылка)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 500
Люди.Ссылка КАК Ссылка,
Люди.ДатаРождения КАК ДатаРождения,
ГОДАМЕСЯЦА.Количество_лет,
ГОДАМЕСЯЦА.Количество_месяцев,
РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(
ДОБАВИТЬКДАТЕ(
Люди.ДатаРождения,
ГОД,
ВЫРАЗИТЬ(ГОДАМЕСЯЦА.Количество_лет КАК ЧИСЛО)
),
МЕСЯЦ,
ВЫРАЗИТЬ(ГОДАМЕСЯЦА.Количество_месяцев КАК ЧИСЛО)),
&ТекущаяДата,
ДЕНЬ
) КАК Количество_дней
ИЗ
Справочник.Люди КАК Люди
ЛЕВОЕ СОЕДИНЕНИЕ ГОДАМЕСЯЦА КАК ГОДАМЕСЯЦА
ПО (Люди.Ссылка = ГОДАМЕСЯЦА.Ссылка)
;
Хотелось бы, конечно, довести эти запросы до совершенства, но ограничен во времени.
PS.
Не знаю, что делать с такими днями рождения - 29.02.1988. Возраст получаю - 29 лет 1 месяц 30 дней.
Если есть предложения, пишите в комментариях).