|
Вопрос от новичка - расчет Возраста | ☑ | ||
---|---|---|---|---|
0
Nidenger
09.11.16
✎
16:24
|
Здравствуйте уважаемые эксперты! Являюсь новичком в программирование на 1с и при создание собственной "тестовой" конфигурации" появился вопрос.
У справочника ЧленыСемьи есть у меня табличная часть - Биография, в ней есть реквизиты справочника - ДатаРождения (тип Дата) и Возраст(тип Число). Я хотел бы чтобы - когда будет заполнен реквизит ДатаРождения, в Возраст автоматически вставлялась "цифра возраста, например 23". По логике я должен ТЕКУЩУЮДАТУ (сегоднящий день и год) - ДатаРождения (07.10.1993) = Возраст Если я напишу в Модуль формы Справочника следующий код: &НаКлиенте Процедура РасчетВозраста () ТекущаяДата – РеквезитТабличнойЧасти.ДатаРождения = РеквезитТабличнойЧасти.Возраст ; КонецПроцедуры Как довести до ума это ? |
|||
1
Fragster
гуру
09.11.16
✎
16:31
|
а в "программирование" не на 1с тоже новичок?
|
|||
2
f_vadim
09.11.16
✎
16:35
|
(1) похоже гуру, или как там они на ближнем востоке называются...
|
|||
3
разработчик 1с
09.11.16
✎
16:38
|
в след году будешь открывать все элементы, заново возраст рассчитывать?
|
|||
4
f_vadim
09.11.16
✎
16:38
|
Оператор присваивания
Синтаксис: <Назначение> = <Источник>; |
|||
5
bootini
09.11.16
✎
16:40
|
||||
6
Windyhead
09.11.16
✎
16:45
|
(3) На регламент повесит, когда дойдет до этой главы ))))
|
|||
7
Nidenger
09.11.16
✎
17:02
|
Хорошо, подскажите как правильней сформулировать? Как правильно сделать в данном случае?
&НаКлиенте Процедура РасчетВозраста () РеквезитТабличнойЧасти.Возраст = ТекущаяДата – РеквезитТабличнойЧасти.ДатаРождения ; КонецПроцедуры |
|||
8
Барматолог
09.11.16
✎
17:12
|
(7) Ты возраст в чем меряешь?
|
|||
9
h-sp
09.11.16
✎
17:13
|
(7) ну это вы в секундах получили. Если вам в днях надо, тогда
РеквезитТабличнойЧасти.Возраст = (ТекущаяДата – РеквезитТабличнойЧасти.ДатаРождения) / 60 / 60 / 24; |
|||
10
kosts
09.11.16
✎
17:14
|
(9) Возраст людей обычно в годах измеряют
|
|||
11
Барматолог
09.11.16
✎
17:14
|
(9) И спрашиваешь такой обычно "А вам сколько дней?"
|
|||
12
Nidenger
09.11.16
✎
17:16
|
Да у меня Возраст это реквизит табличной части - Число, Длина 3, Точно 0, неотрицательное.
РеквезитТабличнойЧасти.Возраст = (ТекущаяДата – РеквезитТабличнойЧасти.ДатаРождения) / 60 / 60 / 24; Мне данный код записать в Модуль формы или обьекты? |
|||
13
Барматолог
09.11.16
✎
17:17
|
(9) + оговорюсь - моя ирония конечно не к вам)
|
|||
14
kosts
09.11.16
✎
17:17
|
(0) Разбей свою задачу на две части.
Сперва составь словесный алгоритм как бы ты вычислял свой возраст на сегодня. Потом уже перекладывай в программу. |
|||
15
Nidenger
09.11.16
✎
17:17
|
Да мне нужно чтобы в реквизите Возраст только год писался а не дни, вы правы
|
|||
16
aleks_default
09.11.16
✎
17:18
|
Год(ТекущаяДата()) – Год(РеквезитТабличнойЧасти.ДатаРождения)
и не хранить в реквизите справочника, а создать реквизит формы в который и писать и расчитывать при открытии формы |
|||
17
Nidenger
09.11.16
✎
17:19
|
aleks_default спасибо за хороший совет!
|
|||
18
kosts
09.11.16
✎
17:20
|
(16) Если подсказывать, то хотя бы чуть-чуть близко к правде подсказывал...
|
|||
19
разработчик 1с
09.11.16
✎
17:21
|
(17) а если человек родился в декабре, сейчас ноябрь, формула правильный возраст посчитает?
|
|||
20
aleks_default
09.11.16
✎
17:22
|
(18)А че не так? Я конечно упростил, но вроде не наврал...
|
|||
21
singlych
09.11.16
✎
17:23
|
(16) добавь еще
- (Формат(ТекущаяДата(), "ДФ=MMdd") < Формат(РеквезитТабличнойЧасти.ДатаРождения, "ДФ=MMdd")) |
|||
22
kosts
09.11.16
✎
17:26
|
(20) Если ребенок родился 31 декабря, по этому алгоритму ему уже на следующий день год будет...
|
|||
23
aleks_default
09.11.16
✎
17:29
|
вот буквоеды
|
|||
24
kosts
09.11.16
✎
17:31
|
(23) Программисту как никому, надо на мелочи обращать внимание. Из-за одной ошибки космические корабли взрываются.
|
|||
25
newbling
09.11.16
✎
17:34
|
(24) и дети становятся стариками
|
|||
26
Михаил Козлов
09.11.16
✎
17:40
|
Для собственной даты рождения рассмотрите такие варианты (в текущем году):
- текущий месяц меньше; - текущий месяц больше; - текущий месяц тот же: - текущий день меньше; - текущий день больше; - текущий день тот же. |
|||
27
IlyaSR
09.11.16
✎
17:57
|
РАЗНОСТЬДАТ(ТекущаяДата(), ДатаРождения, "ГОД")
|
|||
28
KnightAlone
09.11.16
✎
18:01
|
ВОт из типовой:
| ВЫБОР | КОГДА ГОД(ВыборкаДляСтавки.Сотрудник.Физлицо.ДатаРождения) = 1 | ТОГДА 0 | ИНАЧЕ &ДатаАктуальности_Год - ГОД(ВыборкаДляСтавки.Сотрудник.Физлицо.ДатаРождения) + ВЫБОР | КОГДА МЕСЯЦ(ВыборкаДляСтавки.Сотрудник.Физлицо.ДатаРождения) * 100 + ДЕНЬ(ВыборкаДляСтавки.Сотрудник.Физлицо.ДатаРождения) > &ДатаАктуальности_Месяц * 100 + &ДатаАктуальности_День | ТОГДА -1 | ИНАЧЕ 0 | КОНЕЦ | КОНЕЦ КАК Возраст |
|||
29
singlych
09.11.16
✎
18:05
|
(27) (28) вы гвозди в стену тоже через запрос забиваете?
|
|||
30
KnightAlone
09.11.16
✎
18:07
|
(29) ты чего умное сказать хотел или ищешь повод посра_ться? у меня есть это было в виде запроса, я сюда кинул в виде примера, мысль понять можно. переписать это для клиента надеюсь ума хватит. если не хватит - не понятно зачем вообще за программирование браться
|
|||
31
h-sp
09.11.16
✎
18:11
|
(27) читай (22)
|
|||
32
marvak
09.11.16
✎
18:37
|
вот мой второй вариант
Функция ПолучитьВозраст(ДатаРождения) Экспорт ТекДата = ТекущаяДата(); ТекущийМесяц = Месяц(ТекДата); РожденияМесяц = Месяц(ДатаРождения); ТекущийГод = Год(ТекДата); РожденияГод = Год(ДатаРождения); ТекущийДень = День(ТекДата); РожденияДень = День(ДатаРождения); // Число полных лет между текущей датой и датой рождения Если Не ЗначениеЗаполнено(ДатаРождения) Или (ДатаРождения > ТекДата) Тогда Возврат 0; Иначе Если ТекущийГод = РожденияГод Тогда Возврат 0; Иначе Если ТекущийМесяц < РожденияМесяц Тогда Возврат ТекущийГод - РожденияГод - 1; ИначеЕсли ТекущийМесяц > РожденияМесяц Тогда Возврат ТекущийГод - РожденияГод; ИначеЕсли ТекущийМесяц = РожденияМесяц Тогда Если ТекущийДень < РожденияДень Тогда Возврат ТекущийГод - РожденияГод - 1; Иначе Возврат ТекущийГод - РожденияГод; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецФункции |
|||
33
Garykom
гуру
09.11.16
✎
18:52
|
Возраст = Цел((ТекущаяДата()-ДатаРождения)/КолвоСекВГоду);
|
|||
34
Михаил Козлов
09.11.16
✎
19:02
|
(33) КолвоСекВГоду примерно Pi*10^7.
|
|||
35
Михаил Козлов
09.11.16
✎
19:03
|
(34)+ Нужно еще високосные учитывать.
|
|||
36
Мимохожий Однако
09.11.16
✎
19:20
|
ОФФ: пятнично
|
|||
37
Garykom
гуру
09.11.16
✎
19:47
|
(35) Это такой намек как не повезло родившимся 29 февраля?
|
|||
38
Garykom
гуру
09.11.16
✎
19:48
|
(37)+ зато какая экономия на ДР, а подарки можно чтобы накапливали (за пропущенные не високосные) к предстоящему в будущем торжеству
|
|||
39
GROOVY
09.11.16
✎
20:10
|
Одного не могу понять, зачем в реквизитах хранить рассчитываемый показатель?
|
|||
40
Garykom
гуру
09.11.16
✎
20:15
|
(39) В оригинале это такая замена для РС или доков для случая сохранения данных созданных на некие даты "резюме"
|
|||
41
Dmitry77
09.11.16
✎
20:17
|
(0)посмотри как в типовом зупе стаж считается...
Скопируй из зупа необходимые функции... |
|||
42
Fram
09.11.16
✎
22:31
|
(41) он присваивать не умеет, а вы его в зуп отправляете
|
|||
43
EvgeniuXP
09.11.16
✎
22:43
|
Функция ПолучитьВозраст(Знач ДатаРождения, Знач ДатаАктуальности, Возраст = 0) Экспорт
ДатаРождения = НачалоДня(ДатаРождения); ДатаАктуальности = НачалоДня(ДатаАктуальности); Возраст = 0; Если ЗначениеЗаполнено(ДатаРождения) И ЗначениеЗаполнено(ДатаАктуальности) И ДобавитьМесяц(ДатаРождения, 12) <= ДатаАктуальности Тогда Возраст = Год(ДатаАктуальности) - Год(ДатаРождения); Если Возраст > 0 Тогда Если ДобавитьМесяц(ДатаРождения, 12 * Возраст) > ДатаАктуальности Тогда Возраст = Возраст - 1; КонецЕсли; КонецЕсли; КонецЕсли; Если Возраст = 0 Тогда ВозрастВВидеТекста = ""; Иначе ВозрастВВидеТекста = ПолучитьВозрастВВидеТекста(Возраст); КонецЕсли; Возврат ВозрастВВидеТекста; КонецФункции |
|||
44
EvgeniuXP
09.11.16
✎
22:45
|
эту же самую идею можно перетащить в запрос.
|
|||
45
bolder
09.11.16
✎
22:47
|
(42) Это было особенно прикольно.Новые одинесники на подходе!
|
|||
46
EvgeniuXP
09.11.16
✎
22:54
|
Функция ПолучитьВозрастВВидеТекста(Знач Возраст)
ВозрастВВидеТекста = Строка(Возраст) + " " + ПолучитьПодписьИзЧисла(Возраст, "год, года, лет, м"); Возврат ВозрастВВидеТекста; КонецФункции |
|||
47
EvgeniuXP
16.11.16
✎
17:49
|
От новичка даже спасибо нет :)
|
|||
48
Aistovich
16.11.16
✎
18:30
|
(47) всем реквезитам реквезет!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |