Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
Nidenger
0 / 0 / 1
Регистрация: 14.09.2016
Сообщений: 16
1

Автоматический расчет возраста

09.11.2016, 16:27. Просмотров 2828. Ответов 13
Метки нет (Все метки)

Здравствуйте уважаемые эксперты! Являюсь новичком в программирование на 1с и при создание собственной "тестовой" конфигурации" появился вопрос.
У справочника ЧленыСемьи есть у меня табличная часть - Биография, в ней есть реквизиты справочника - ДатаРождения (тип Дата) и Возраст(тип Число). Я хотел бы чтобы - когда будет заполнен реквизит ДатаРождения, в Возраст автоматически вставлялась "цифра возраста, например 23". По логике я должен ТЕКУЩУЮДАТУ (сегоднящий день и год) - ДатаРождения (07.10.1993) = Возраст
Если я напишу в Модуль формы Справочника следующий код:

1C
1
2
3
4
&НаКлиенте
Процедура РасчетВозраста ()
  ТекущаяДата – РеквезитТабличнойЧасти.ДатаРождения = РеквезитТабличнойЧасти.Возраст ;
КонецПроцедуры
Как довести до ума это ?
0
Миниатюры
Автоматический расчет возраста   Автоматический расчет возраста  
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2016, 16:27
Ответы с готовыми решениями:

Автоматический расчет
Здравствуйте. Имеется работа, в которой я должна прописать автоматический расчет ЗП сотруднику....

Расчет возраста в структурах
#include <iostream> #include <conio.h> // для getch() #include <stdlib.h> #include <time.h>...

Расчет возраста человека
Дана дата рождения человека. Нужно вывести на экран возраст человека (точнее, количество полных лет)

Расчет возраста человека
Как рассчитать возраст человека? Не тупо отнимая дату от даты? DateDiff не работает (Informix-sql)

Расчет возраста и декод даты
Подскажите как правильно выполнить расчет возраста если знаю дату рождения. Проблема в том что не...

13
renat_dmitriev
391 / 293 / 121
Регистрация: 26.08.2016
Сообщений: 902
09.11.2016, 20:39 2
1) Не очень понятно зачем это, ведь возраст может поменяться уже завтра.Сегодня человеку 20 лет, а завтра будет уже 21.
2) Отнимая даты, вы получите не разницу лет, а разницу миллисекунд, чтобы получить разницу лет, необходимо использовать функции Год(), Месяц() и День(). Как их использовать - это вопрос алгоритмический, не программный.
3) Обращение к текущей строке табличной части в управляемой форме

Элементы.<ИмяТабличнойЧасти>.ТекущиеДанные, например
Элементы.Биография.ТекущиеДанные

Но вообще неплохо бы если б прежде чем задавать даже в статусе новичка вопросы на форуме, вы прошли бы хоть какие-то курсы по программированию 1С.
0
GreenkA
Форумчанин
Эксперт 1С
3004 / 1924 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
09.11.2016, 21:25 3
renat_dmitriev, не милисекунд, а секунд) Для приближенного значения можно поделить на 24*3600*365. Но мне больше нравится функция запроса РазностьДат(), и не надо извращаться с Год(),Месяц(), День().

Вообще про запись в реквизит - да, не очень. Лучше сделать элемент формы типа Надпись и при открытии выводить информацию.
1
renat_dmitriev
391 / 293 / 121
Регистрация: 26.08.2016
Сообщений: 902
09.11.2016, 21:57 4
Цитата Сообщение от GreenkA Посмотреть сообщение
не милисекунд, а секунд
Точно, попутно изучаю вэб-программирование, где разница считается в миллисекундах, и все в голове перепуталось =)

Цитата Сообщение от GreenkA Посмотреть сообщение
Для приближенного значения можно поделить на 24*3600*365. Но мне больше нравится функция запроса РазностьДат()
Все ж таки возраст считается как полное количество прожитых лет, в то время как РазностьДат возвращает числовую разницу между значением года, поэтому для точного расчета возраста наверное придется использовать все перечисленные мною функции. Делить на 24*3600*365 тоже не даст точного значения из-за високосных лет.
0
09.11.2016, 21:57
Tklwegsd
Эксперт 1С
797 / 572 / 197
Регистрация: 24.07.2013
Сообщений: 1,993
09.11.2016, 21:58 5
Цитата Сообщение от GreenkA Посмотреть сообщение
Вообще про запись в реквизит - да, не очень. Лучше сделать элемент формы типа Надпись и при открытии выводить информацию.
Да и табличная часть здесь ни к чему. У каждого человека одно единственное место рождения, дата рождения, возраст и пол.
0
renat_dmitriev
09.11.2016, 22:00
  #6

Не по теме:

Цитата Сообщение от Tklwegsd Посмотреть сообщение
Да и табличная часть здесь ни к чему. У каждого человека одно единственное место рождения, дата рождения, возраст и пол.
Вы не верите в перерождение? :D

0
Briolin
58 / 63 / 11
Регистрация: 13.11.2014
Сообщений: 911
11.11.2016, 09:53 7
Используй РазностьДат и получай возраст запросом
0
Volexovich
203 / 178 / 30
Регистрация: 24.10.2011
Сообщений: 721
11.11.2016, 15:37 8
Цитата Сообщение от GreenkA Посмотреть сообщение
РазностьДат()
Кстати, а разве разность дат не опирается на периоды(Год, Месяц, День)?, все равно не посчитает точно без ВЫБОР КОГДА?
0
renat_dmitriev
391 / 293 / 121
Регистрация: 26.08.2016
Сообщений: 902
11.11.2016, 16:02 9
Volexovich, Нет, отнимает года только.
0
Volexovich
203 / 178 / 30
Регистрация: 24.10.2011
Сообщений: 721
11.11.2016, 16:22 10
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
Volexovich, Нет, отнимает года только.
Вот и я думаю ей что 01.01.2016 -01.01.2010 = 6, что 31.12.2016 - 01.01.2010 = 6, без разницы.
0
renat_dmitriev
391 / 293 / 121
Регистрация: 26.08.2016
Сообщений: 902
11.11.2016, 16:23 11
Volexovich, Это верно, но вы же надеюсь не думаете, что 01.01.2016 - 31.12.2015 = 1 год? =) А РазностьДат с параметром ГОД думает именно так.
0
Volexovich
203 / 178 / 30
Регистрация: 24.10.2011
Сообщений: 721
11.11.2016, 16:32 12
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
А РазностьДат с параметром ГОД думает именно так.
Вот, я и думаю, ТС нужно посчитать реальный текущий возраст, по мне проще без запроса чем на "ВЫБОР КОГДА.." собрать запрос.
0
renat_dmitriev
391 / 293 / 121
Регистрация: 26.08.2016
Сообщений: 902
11.11.2016, 16:37 13
Лучший ответ Сообщение было отмечено Dethmontt как решение

Решение

Volexovich, Конечно. Вобщем-то простая формула

1C
1
Возраст = Год(ТекДата) - Год(ДатаРождения) - ?(Месяц(ТекДата) * 100 + День(ТекДата) < Месяц(ДатаРождения) * 100 + День(ДатаРождения), 1, 0);
2
Dethmontt
Модератор
Эксперт 1С
2736 / 2493 / 443
Регистрация: 10.03.2011
Сообщений: 9,057
Записей в блоге: 1
Завершенные тесты: 1
11.11.2016, 17:08 14
или в запросе

1C
1
ВЫБОР КОГДА ДОБАВИТЬКДАТЕ(&ДатаРождения, ГОД, РАЗНОСТЬДАТ(&ДатаРождения, &ТекущаяДата, ГОД)) > &ТекущаяДата ТОГДА РАЗНОСТЬДАТ(&ДатаРождения, &ТекущаяДата, ГОД)-1 ИНАЧЕ РАЗНОСТЬДАТ(&ДатаРождения, &ТекущаяДата, ГОД) КОНЕЦ КАК ВозрастЛет
0
11.11.2016, 17:08
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2016, 17:08

Расчет возраста по дате рождения
Нужно создать функцию, принимающую параметр типа DateTime с датой рождения и возвращающую DateTime...

Сделать запрос на расчет возраста коньяка
у организации есть продукт (коньяк) и обязательно посчитать сколько ему лет но главная...

Расчет категорий должностей от возраста и перенесение значений на другой лист
Помогите пожалуйста, чайнику. Думала справлюсь сама, гуглила много сайтов, но так и не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.