Имя: Пароль:
1C
1С v8
Количество лет клиенту
0 Kirill123455
 
08.01.19
15:10
Имеется поле ДатаРождения(тип дата) и поле количество лет(тип число).
Необходимо создать событие,которое считало бы количество лет, а именно от текущей даты отнимал ДатаРождения
2 Базис
 
naïve
08.01.19
15:18
Не понял про событие. В чём задача, что сделал, что не получилось?
Формат даты - семёрочный, восьмёрочный, unixtime или какой?
3 zak555
 
08.01.19
15:19
Регзадание на перезапись количества лет для каждого клиента ежесуточно
4 Kirill123455
 
08.01.19
15:20
(2) От текущей даты отнял дату рождение( ТекущаяДата()-ДатаРождения). Как сделать, чтобы выводилась разница в годах?
5 impulse9
 
08.01.19
15:21
(3) маловато, данные могут устареть. Надо раз в секунду
6 Базис
 
naïve
08.01.19
15:24
(4) Получил большую цифру, иногда огромную. Если огромную, то пиши "Где дата рождения, блин?". Иначе дели на число секунд в (году + 6 часов).
7 K1RSAN
 
08.01.19
15:29
Проверить, прошел ли ДР в этом году, потом получить значение года рождения и текущего года. Отнять от большего меньшее. Если ДР в этом году еще не было - отнять еще 1.
Если это 8, вроде там есть метод Год(<Дата>).
8 vde69
 
08.01.19
15:33
Год(Дата(ТекущаяДата()-ДатаРождения))
9 Kigo_Kigo
 
08.01.19
15:41
Во заморачиваться и хранить эти данные -зачем?
Если всегда можно посчитать, и мне кажется это будет быстрее и эффективней
10 Kirill123455
 
08.01.19
15:41
(8) Пишет ошибку:Преобразование значения к типу Дата не может быть выполнено
11 vde69
 
08.01.19
15:49
чему равно

ТекущаяДата()-ДатаРождения
12 Kirill123455
 
08.01.19
15:50
(11) полю КоличествоЛет
13 zak555
 
08.01.19
15:51
(5) раз в сутки и при записи даты рождения
14 vde69
 
08.01.19
15:51
(12) напиши значение сюда и тип значения
15 zak555
 
08.01.19
15:51
(11) разница в секундах )
16 vde69
 
08.01.19
15:53
(15) все зависит от типа реквизита "ДатаРождения" и данных записаных туда
17 sieben
 
08.01.19
15:53
(11) Да не работает оно так, дядь Дим. Надо к пустой дате количество секунд прибавлять.
18 vde69
 
08.01.19
15:54
(17) я знаю, что не работает, я пытаюсь человека подтолкнуть...
19 sieben
 
08.01.19
15:57
(18) Публикацией заранее неработающего кода? Отличное "подталкивание" новичков, что уж.

И кстати, ты еще не учел часовой пояс места рождения и места получения данных, это очень важно в операциях с датами! (:
20 vde69
 
08.01.19
16:01
(19) ИХМО в сабже чисто учебная задача не имеющая к практике никакого отношения...


зы
ни кто в здравом уме не придумает поле/реквизит "количество лет"
21 vde69
 
08.01.19
16:03
(19) а по поводу часовых поясов и прочего - ты меня рассмешил, единственный нюанс - это високосный год...

но в большинстве случаев им можно пренебречь
22 Kirill123455
 
08.01.19
16:04
(14) КоличествоЛет - тип число
ДатаРождения - тип дата
23 vde69
 
08.01.19
16:08
(22) ну так какое значение возвращает отладчик если в нем вычислить ТекущаяДата()-ДатаРождения

напиши сюда значение которое получается в результате вычитания...

а потом подумай, что это получается дни, секунды или вообще не верное значение
24 Kirill123455
 
08.01.19
16:11
(23) Отладчик ничего не возвращает, пустое поле
25 vde69
 
08.01.19
16:14
(24) замечательно....

выполни такой код
Сообщить(ТекущаяДата() + " / " +  ДатаРождения  + " / " +  (ТекущаяДата()-ДатаРождения))

и результат сюда
26 Kirill123455
 
08.01.19
16:15
(25) На какое событие это прописать?
27 Конструктор1С
 
08.01.19
16:16
(0) хранить в статичном поле динамичные данные не есть гуд
28 vde69
 
08.01.19
16:17
в форме на любое событие (например ПослеЗаписи), только возможно ДатаРождения надо юзать типа Объект.ДатаРождения или аналогично
29 Kirill123455
 
08.01.19
16:23
(28) А куда будет отображаться результат?
30 vde69
 
08.01.19
16:27
почитай про "Сообщить"

а вообще все что тебе нужно это решить (23) и понять по чему у тебя (24)

на сим я раскланиваюсь ибо и подозреваю, что Вам начало надо на курсы сходить, хоть как-то поучится а потом уже пытаться что-то реализовывать
31 MetaDon
 
08.01.19
16:29
(0) любое решение неверным будет если не требовать от ОК вписывать ДР с точностью до секунды;)
32 Fram
 
08.01.19
16:52
(27) не умничай. Ему ещё до таких истин как до луны
33 sieben
 
08.01.19
16:58
(25) Ну хватит над новичком-то издеваться. Как сам-то думаешь, что будет, если к дате начать прибавлять строку?
34 Конструктор1С
 
08.01.19
17:04
Функция ОпределитьВозрастВГодах(ДатаРождения, ТекущаяДата)

    ВозрастЛет = Год(ТекущаяДата) - Год(ДатаРождения);
        
    МесяцРождения = Месяц(ДатаРождения);
    МесяцТекущий  = Месяц(ТекущаяДата);
    
    ДеньРождения = День(ДатаРождения);
    ДеньТекущий  = День(ТекущаяДата);
    
    ДеньРожденияБыл = Ложь;

    Если МесяцТекущий > МесяцРождения Тогда
        
        ДеньРожденияБыл = Истина;
        
    ИначеЕсли МесяцТекущий = МесяцРождения И ДеньРождения <= ДеньТекущий Тогда
        
        ДеньРожденияБыл = Истина;        
    
    КонецЕсли;     
    
    Если Не ДеньРожденияБыл Тогда
        
        // В этом году день рождения ещё не отмечал
        ВозрастЛет = ВозрастЛет - 1;    
    
    КонецЕсли;
    
    Возврат ВозрастЛет;
    
КонецФункции
35 ГдеСобака Зарыта
 
08.01.19
17:38
Еще вариант

Функция ОпределитьВозрастВГодах(ДатаРождения, ТекущаяДата)
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДатаРождения", ДатаРождения);
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    РАЗНОСТЬДАТ(&ДатаРождения, &ТекущаяДата, МЕСЯЦ) / 12 - ВЫБОР
    |        КОГДА МЕСЯЦ(&ДатаРождения) = МЕСЯЦ(&ТекущаяДата)
    |                И ДЕНЬ(&ДатаРождения) > ДЕНЬ(&ТекущаяДата)
    |            ТОГДА 1
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК КолВоЛет";
    
    Возврат ЦЕЛ(Запрос.Выполнить().Выгрузить().Получить(0).КолВоЛет);
    
КонецФункции
36 g00d
 
08.01.19
20:15
окр(ТекущаяДата()-ДатаРождения / 86400 / 365, режимокругления.до0)
37 Fram
 
08.01.19
20:48
(36) корректнее все таки ... / 365.25
38 palsergeich
 
08.01.19
22:47
(35) Подозрительно похоже на мой код с одного из прошлых мест работы....
39 palsergeich
 
08.01.19
22:47
Совпадает название функции и псевдоним...
Подозрительно.
40 ГдеСобака Зарыта
 
09.01.19
10:21
(39) Это не ко мне. Я скопипастил из (34).
41 Cyberhawk
 
09.01.19
14:46
(40) А откуда псевдоним "КолВоЛет" взял?
42 ГдеСобака Зарыта
 
09.01.19
14:59
(41) Ну все. Меня разоблачили. Я бессовестно пользую плоды интеллектуальной собственности Пал Сергеича. Да еще и выдаю их за свои на профильных форумах, пытаясь поднять значимость в глазах коллег. Очень стыдно, пойду брошусь в окно.
43 НЕА123
 
09.01.19
15:39
Год('0001-01-01'+ (ТекущаяДата() - ДатаРождения) ) - 1
44 Cyberhawk
 
09.01.19
15:56
(42) Так Я без стеба спросил - сам псевдоним придумал?
45 Fram
 
09.01.19
21:01
(43) красиво
46 palsergeich
 
09.01.19
21:05
(42) Та пофиг абсолютно))))
47 sieben
 
09.01.19
22:26
(38) Так вот ты какой - человек, который не может умножить два на два без SQL сервера!
48 Serg_1960
 
09.01.19
23:21
(44) А что тут такого? У меня, например, тоже привычка писать вместо "Количество..." сокращение "КолВо..." - привычка сохранилась с тех пор, когда в языках ограничивали количество символов в наименованиях.
49 RomaH
 
naïve
10.01.19
07:07
(34) как все сложно и запутано

зачем день рождения считать если достаточно разницы?

Функция ПолучитьВозрастЧисломЛет(Знач ДатаРождения,Знач ДатаРасчета) Экспорт
    
    Если ДатаРасчета = '00010101' Тогда
        ДатаРасчета = ТекущаяДата();    
    КонецЕсли;
    
    Возраст = 0;
    
    ПриведеннаяДатаРождения = '00010101' + (НачалоДня(ДатаРасчета) - ДатаРождения);
    
    ПолныхЛет = Год(ПриведеннаяДатаРождения)-1;
    
    Возраст = ПолныхЛет;
    
    Возврат Возраст;
    
КонецФункции
50 Конструктор1С
 
10.01.19
08:18
(49) проверил, эта функция обижает родившихся 29 февраля. Моя функция по родившимся 29 февраля отрабатывает нормально
51 DGorgoN
 
10.01.19
08:22
(49) Год(ТекущаяДата()) - Год(ДатаРождения) не проще?
52 Конструктор1С
 
10.01.19
08:46
(51) проще, но не корректно. Для родившегося 31.01.2018 на дату 01.01.2019 покажет 1 год
53 Cyberhawk
 
10.01.19
10:11
(48) Не по стандартам с ИТС это, однако. И даже не по правилам русского языка.
54 Eiffil123
 
10.01.19
10:13
(6) а что за +6?
55 Fram
 
10.01.19
10:17
(54) каждый 4 год високосный, однако
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший