Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/103: Рейтинг темы: голосов - 103, средняя оценка - 4.83
1 / 1 / 1
Регистрация: 14.09.2016
Сообщений: 16

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

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

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

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

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

Автоматический расчёт выплат
Здравствуйте, нужно сделать расчёт в табличной части, кто может помочь? p.s. На первом вложении после, на втором до.

Автоматический расчет стоимости
При проведении документа "Расходная накладная" возникает ошибка, не совсем понимаю почему не видит виртуальную таблицу, она объявлена в...

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

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

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

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

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

Не по теме:

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

0
 Аватар для Briolin
59 / 64 / 11
Регистрация: 13.11.2014
Сообщений: 940
11.11.2016, 09:53
Используй РазностьДат и получай возраст запросом
0
212 / 185 / 32
Регистрация: 24.10.2011
Сообщений: 762
11.11.2016, 15:37
Цитата Сообщение от GreenkA Посмотреть сообщение
РазностьДат()
Кстати, а разве разность дат не опирается на периоды(Год, Месяц, День)?, все равно не посчитает точно без ВЫБОР КОГДА?
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
11.11.2016, 16:02
Volexovich, Нет, отнимает года только.
0
212 / 185 / 32
Регистрация: 24.10.2011
Сообщений: 762
11.11.2016, 16:22
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
Volexovich, Нет, отнимает года только.
Вот и я думаю ей что 01.01.2016 -01.01.2010 = 6, что 31.12.2016 - 01.01.2010 = 6, без разницы.
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
11.11.2016, 16:23
Volexovich, Это верно, но вы же надеюсь не думаете, что 01.01.2016 - 31.12.2015 = 1 год? =) А РазностьДат с параметром ГОД думает именно так.
0
212 / 185 / 32
Регистрация: 24.10.2011
Сообщений: 762
11.11.2016, 16:32
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
А РазностьДат с параметром ГОД думает именно так.
Вот, я и думаю, ТС нужно посчитать реальный текущий возраст, по мне проще без запроса чем на "ВЫБОР КОГДА.." собрать запрос.
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
11.11.2016, 16:37
Лучший ответ Сообщение было отмечено Dethmontt как решение

Решение

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

1C
1
Возраст = Год(ТекДата) - Год(ДатаРождения) - ?(Месяц(ТекДата) * 100 + День(ТекДата) < Месяц(ДатаРождения) * 100 + День(ДатаРождения), 1, 0);
2
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
11.11.2016, 17:08
или в запросе

1C
1
ВЫБОР КОГДА ДОБАВИТЬКДАТЕ(&ДатаРождения, ГОД, РАЗНОСТЬДАТ(&ДатаРождения, &ТекущаяДата, ГОД)) > &ТекущаяДата ТОГДА РАЗНОСТЬДАТ(&ДатаРождения, &ТекущаяДата, ГОД)-1 ИНАЧЕ РАЗНОСТЬДАТ(&ДатаРождения, &ТекущаяДата, ГОД) КОНЕЦ КАК ВозрастЛет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.11.2016, 17:08
Помогаю со студенческими работами здесь

Вычисление возраста сотрудника и расчёт среднего возраста
Народ ПОМОГИТЕ пожалуйста!!! В Access не силён (на уровне пользователя). Имеется база данных с полем &quot;Дата рождения&quot; . ...

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

Расчет возраста в структурах
#include &lt;iostream&gt; #include &lt;conio.h&gt; // для getch() #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;Windows.h&gt; using namespace...

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru