Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Количество лет клиенту

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

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

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


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

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

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

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

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

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

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

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

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

    Если МесяцТекущий > МесяцРождения Тогда
        
        ДеньРожденияБыл = Истина;
        
    ИначеЕсли МесяцТекущий = МесяцРождения И ДеньРождения <= ДеньТекущий Тогда
        
        ДеньРожденияБыл = Истина;        
    
    КонецЕсли;     
    
    Если Не ДеньРожденияБыл Тогда
        
        // В этом году день рождения ещё не отмечал

        ВозрастЛет = ВозрастЛет - 1;    
    
    КонецЕсли;
    
    Возврат ВозрастЛет;
    
КонецФункции
   ГдеСобакаЗарыта
 
35 - 08.01.19 - 17:38
Еще вариант

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует