Имя: Пароль:
1C
1С v8
вычесть месяца
0 Nst
 
naïve
16.01.25
13:02
Здравствуйте всем. пожалуйста, подскажите
ситуация такая - нужно вычесть месяца
МояПеременная = Месяц(Выборка.ДатаПоказания) - Месяц(Выборка.ДатаПредыдущегоПоказания);
например, моя переменная = месяц(15.01.25) - месяц(04.09.24)
равно -8,  но по факту прошло же 3 месяца, а не 8.
как сделать правильный расчет, подскажите?
1 Волшебник
 
16.01.25
13:03
РазницаМес = (ДатаПоказания - ДатаПредыдущегоПоказания) / 86400 / 30;
2 Буковка
 
16.01.25
13:04
(0) выспользуйтесь отладкой и пропишите условие на случай, если одна/обе даты не заполнены
3 arsik
 
16.01.25
13:07
(0)(1) РазницаМес = (Год(ДатаПоказания)*12 + Месяц(ДатаПоказания)) - (Год(ДатаПредыдущегоПоказания)*12 + Месяц(ДатаПредыдущегоПоказания))
4 Fedor-1971
 
16.01.25
13:08
(0) Если уже использованы запросы, то РазностьДат(ххх, ууу, Месяц) - и не парься
5 Волшебник
 
16.01.25
13:11
(3) или так
6 KJlag
 
16.01.25
13:20
РазницаСек = ДатаПоказания - ДатаПредыдущегоПоказания;
РасчетнаяДата = Дата(1,1,1,0,0,0) + РазницаСек;
РазницаМес = (Год(РасчетнаяДата)-1)*12 + Месяц(РасчетнаяДата);
7 Ненавижу 1С
 
16.01.25
13:30
МояПеременная = (Год(Выборка.ДатаПоказания) - Год(Выборка.ДатаПредыдущегоПоказания))*12 + Месяц(Выборка.ДатаПоказания) - Месяц(Выборка.ДатаПредыдущегоПоказания)
8 Asmody
 
16.01.25
13:37
(0) (7) сколько месяцев прошло между 29.02.2024 и 28.02.2023?
9 Михаил Козлов
 
16.01.25
13:41
(7) Ещё от дней даты зависит. Для (0): (2025-2024)*12+1-9=4, а полных месяцев 3.
10 Elf_80_lvl
 
16.01.25
13:50
(0) Функция месяц(Дата) возвращает номер месяца из даты.
Поэтому и получается:
месяц(15.01.25)  = 1
месяц(04.09.24) = 9
Ну и разница 8
А то что тебе нужно (1) или (3)
11 Волшебник
 
16.01.25
13:49
(10) разница "-8"
12 Ненавижу 1С
 
16.01.25
13:56
(8) а сколько между 31.12.24 и 01.01.25?
13 Волшебник
 
16.01.25
14:02
(12) где-то от 0 до 1, точнее 0,033(3)
14 Ненавижу 1С
 
16.01.25
14:06
(13) чтобы начать говорить о точном значении надо определиться с единицей измерения "месяц", а это очень неоднозначно
15 arsik
 
16.01.25
14:17
Судя по контексту, показания числятся в том месяце, в котором поданы. Тем более у нас например показания с 15 по 25 принимают.
16 Nst
 
naïve
16.01.25
14:21
спасибо, помог (1)
этот вариант подходящий, т.к получается на моем примере, что между сентябрем и январем прошло 3 месяца (октябрь, ноябрь, декабрь)
17 arsik
 
16.01.25
14:25
(16) Вообще то 4 месяца. если уж так
09-10 - 1 месяц
10-11 - 1 месяц
11-12 - 1 месяц
12-01 - 1 месяц
18 Волшебник
 
16.01.25
14:24
(16) 🤦 но моя формула выдаёт 4,43
19 Fedor-1971
 
16.01.25
14:40
(16) Что есть Выборка из "Выборка.ДатаПоказания"? Если результат запроса, то сразу подготовь как в (4), будет ещё одно поле, например, РазностьДат(Таб.ДатаПредыдущегоПоказания, Таб.ДатаПоказания, Месяц) КАК КолМесяцев (вместо Таб подставь что там у тебя в запросе)
И пустые даты сможешь обработать там же
20 Михаил Козлов
 
16.01.25
15:20
(17) 12-01 - неполный месяц. Формально 0.
21 KJlag
 
16.01.25
15:24
(20) учитывая что там 15.01.25 и 04.09.24, то 12-01 - полный месяц, а вот 01-02 не полный и с 05.01 по 15.01 - откидываем
22 Михаил Козлов
 
16.01.25
17:25
(21) А с 04.09.2024 по 30.09.2024 тоже нужно откинуть?
AdBlock убивает бесплатный контент. 1Сергей