|   |   | 
| 
 | Получить номера месяцев между датами | ☑ | ||
|---|---|---|---|---|
| 0
    
        1ctube 07.06.21✎ 09:15 | 
        Доброго времени суток. Нужно получить номера месяцев между двумя датами. В коде. Например: 25.02.2021 - 03.05.2021 то на выходе: 2,3,4,5. 
 Есть ли готовая системная функция для получения инфы в таком виде ? Попробовал так: Месяц(ДатаОкончания)-Месяц(ДатаНачала)+1+12*(Год(ДатаОкончания)-Год(ДатаНачала)); Но так возвращается только количество месяцев между датами | |||
| 1
    
        acanta 07.06.21✎ 09:18 | 
        Это да... Проблема(     | |||
| 2
    
        Ненавижу 1С гуру 07.06.21✎ 09:20 | 
        (0) зачем? будем искать причину     | |||
| 3
    
        ДенисЧ 07.06.21✎ 09:20 | 
        Цикл написать - лениво?     | |||
| 4
    
        Ненавижу 1С гуру 07.06.21✎ 09:21 | 
        +(2) к тому, что сделать можно, но стоит ли?     | |||
| 5
    
        Масянька 07.06.21✎ 09:21 | 
        (0) Готовой системной нет.     | |||
| 6
    
        1ctube 07.06.21✎ 09:24 | 
        (1) Это да(     | |||
| 7
    
        1ctube 07.06.21✎ 09:24 | 
        (3) Нет, цикл то написать всегда можно, просто хотел в одну короткую строчку     | |||
| 8
    
        1ctube 07.06.21✎ 09:24 | 
        (5) Жаль(((     | |||
| 9
    
        1ctube 07.06.21✎ 09:25 | 
        (4) Да, стоит     | |||
| 10
    
        Обработка 07.06.21✎ 09:26 | 
        (0) Как можно додуматься до того чтоб допустить вопрос у себя в голове нет ли системной функции такой?
 Тогда уж. Нет ли системной функции который возвращает все числа которые стоят между двумя? например 3 и 8 Ответ 4,5,6,7 | |||
| 11
    
        Масянька 07.06.21✎ 09:26 | 
        (7) Хотеть и мочь - две большие разницы. Особенно, в случае с продуктами 1С.     | |||
| 12
    
        ДенисЧ 07.06.21✎ 09:26 | 
        (7) Обычно хотят, чтобы подлинее было... ))))     | |||
| 13
    
        Обработка 07.06.21✎ 09:29 | 
        (0) Что должен вернуть функция? Строку = "2,3,4,5"? Числа в списке  = 2,3,4,5 ..
 Или как? | |||
| 14
    
        SleepyHead гуру 07.06.21✎ 09:29 | 
        (12) С этим вам не на форум 1с надо )     | |||
| 15
    
        ДенисЧ 07.06.21✎ 09:38 | 
        (14) Я про оплату по количеству строк. А вы о чём?     | |||
| 16
    
        Масянька 07.06.21✎ 09:38 | 
        (12) Говорят, что главное не размер, а умение.
 🤔 | |||
| 17
    
        Мультук гуру 07.06.21✎ 09:38 | 
        (0) Готовой системной функции нет.
 Но ты ее напиши сам, а затем не забудь поделиться с сообществом в данной теме. | |||
| 18
    
        Масянька 07.06.21✎ 09:39 | 
        (15) О! И я про тоже.     | |||
| 19
    
        1ctube 07.06.21✎ 09:42 | 
        (12) Если слишком длинно то не удобно и приходиться укоротить)     | |||
| 20
    
        SleepyHead гуру 07.06.21✎ 09:52 | 
        (15) Ну в (12) было про длину что-то.     | |||
| 21
    
        Aleksey 07.06.21✎ 10:00 | 
        А если несколько лет то как?     | |||
| 22
    
        ДенисЧ 07.06.21✎ 10:03 | 
        (20) Длина файла с кодом... А вам, батенька, нужно к специалистам ))     | |||
| 23
    
        1Сергей 07.06.21✎ 10:12 | 
        ВНИМАНИЕ! Не используйте код ниже! Это опасно для жизни. Написано ради хохмы
 Для Идн = (Год(ДатаНачала)*12 + Месяц(ДатаНачала)-1) По (Год(ДатаОкончания)*12 + Месяц(ДатаОкончания)-1) Цикл НомерМесяца = Идн%12 + 1; | |||
| 24
    
        Масянька 07.06.21✎ 10:13 | 
        (22) Длинный файл с кодом - неудобно.
 Это вам, батенька, надо к специалистам. 🤦🏻♀️ | |||
| 25
    
        fisher 07.06.21✎ 10:31 | 
        Не проверял
 
 | |||
| 26
    
        Serg_1960 07.06.21✎ 10:34 | 
        [Как страшно жить] А если начало периода - в предыдущем году, а окончание периода - в текущем? Как автор считать месяца с одинаковыми номерами будет? Непонятно, однако.     | |||
| 27
    
        fisher 07.06.21✎ 10:34 | 
        А, ччерт. Перемудрил. Если несколько лет, то неправильно может работать.     | |||
| 28
    
        1Сергей 07.06.21✎ 10:36 | 
        (25) с 12.2020 по 01.2021 от туда ещё два года накинет     | |||
| 29
    
        1Сергей 07.06.21✎ 10:38 | 
        (26) /vangamode on
 он колонки в таблицу выводит /vangamode off | |||
| 30
    
        fisher 07.06.21✎ 10:40 | 
        (28) Не, в этом случае ок будет. Не ок будет, если 07.2020 - 02.2023     | |||
| 31
    
        1Сергей 07.06.21✎ 10:40 | 
        (30) 
 Для НомерМесяца = Макс(МесяцНачала, МесяцОкончания) По 12 Цикл // с 1 по 12 МассивМесяцев.Добавить(НомерМесяца); КонецЦикла; Для НомерМесяца = 1 По Мин(МесяцНачала, МесяцОкончания) Цикл // с 1 по 12 МассивМесяцев.Добавить(НомерМесяца); КонецЦикла; | |||
| 32
    
        fisher 07.06.21✎ 10:44 | 
        (31) Ну и? Первый цикл будет с 12 по 12, второй с 1 по 1.     | |||
| 33
    
        1Сергей 07.06.21✎ 10:44 | 
        (31) сторно     | |||
| 34
    
        1Сергей 07.06.21✎ 10:45 | 
        (32) прастити, фигню сморозил     | |||
| 35
    
        Ненавижу 1С гуру 07.06.21✎ 10:55 | 
        class Program
 { public static IEnumerable<int> MonthNumbers(DateTime d1, DateTime d2) { return Enumerable.Range(d1.Year * 12 + d1.Month, (d2.Year - d1.Year) * 12 + (d2.Month - d1.Month) + 1).Select(n => n % 12 == 0 ? 12 : n % 12); } static void Main(string[] args) { DateTime d1 = new DateTime(2021, 02, 05); DateTime d2 = new DateTime(2021, 05, 03); foreach(var c in MonthNumbers(d1,d2)) { Console.WriteLine(c); } Console.ReadKey(); } } | |||
| 36
    
        ДенисЧ 07.06.21✎ 10:56 | 
        (35) Что это, Бэрримор?     | |||
| 37
    
        1Сергей 07.06.21✎ 10:57 | 
        (35) Проверял?     | |||
| 38
    
        Ненавижу 1С гуру 07.06.21✎ 10:59 | 
        (37) да     | |||
| 39
    
        1Сергей 07.06.21✎ 11:00 | 
        Лаааадна     | |||
| 40
    
        fisher 07.06.21✎ 11:06 | 
        (35) Избыточно. С ростом диапазона будет больше размер списка, в то время как легко без этого обойтись.     | |||
| 41
    
        fisher 07.06.21✎ 11:08 | 
        Я понял задачу так, что дубли не нужны. Хотя задача похоже или некорректно сформулирована или не имеет отношения к реальной практике.     | |||
| 42
    
        wertyu 07.06.21✎ 11:09 | 
        ДатаОкончания = НачалоМесяца(ДатаОкончанияПериода);
 ДатаЦикла = НачалоМесяца(ДатаНачалаПериода); МассивМесяцев = Новый Массив; Пока ДатаЦикла <= ДатаОкончания Цикл МассивМесяцев.Добавить(Месяц(ДатаЦикла)); ДатаЦикла = ДобавитьМесяц(ДатаЦикла, 1); КонецЦикла; | |||
| 43
    
        1ctube 07.06.21✎ 11:10 | 
        (17) "Но ты ее напиши сам, а затем не забудь поделиться с сообществом в данной теме."
 Вот что получилось в итоге: КоличествоМесяцев = Месяц(ДатаОкончания)-Месяц(ДатаНачала)+1+12*(Год(ДатаОкончания)-Год(ДатаНачала)); Пока НЕ КоличествоМесяцев = 0 Цикл НомерМесяца = Месяц(ДобавитьМесяц(ДатаНачала,КоличествоМесяцев-1)); КоличествоМесяцев = КоличествоМесяцев -1; КонецЦикла; А дальше номермесяца можно пихать в тз и т.д. | |||
| 44
    
        Ненавижу 1С гуру 07.06.21✎ 11:10 | 
        (40) ленивые вычисления же     | |||
| 45
    
        1ctube 07.06.21✎ 11:11 | 
        (41) Нужен просто список номером месяца между заданными интервалами в таком в виде:
 2 3 4 5 | |||
| 46
    
        wertyu 07.06.21✎ 11:12 | 
        (45) период всегда меньше года?     | |||
| 47
    
        1ctube 07.06.21✎ 11:13 | 
        (42) Тоже хороший вариант!     | |||
| 48
    
        1ctube 07.06.21✎ 11:13 | 
        (46) Да     | |||
| 49
    
        Serg_1960 07.06.21✎ 11:14 | 
        Так, как скучно просто так номера считать, то я имена месяцев считал :) ИменаМесяцев.Количество() - количество сами подсчитаете :))
 НачалоПериода = Дата("20190516"); КонецПериода = Дата ("20210921"); НачПериод = НачалоМесяца(НачалоПериода); КонПериод = КонецМесяца(КонецПериода); ИменаМесяцев = Новый Массив; ТекДата = НачПериод; Пока Истина Цикл Если ТекДата >= НачПериод И ТекДата <= КонПериод Тогда ИменаМесяцев.Добавить(Формат(ТекДата,"ДФ=MMMM")); ТекДата = ДобавитьМесяц(ТекДата,1); Иначе Прервать; КонецЕсли; КонецЦикла; | |||
| 50
    
        fisher 07.06.21✎ 11:17 | 
        (44) И чем это лечит? Тут вроде нет "лишних" вычислений которые смогут быть отброшены.     | |||
| 51
    
        Ненавижу 1С гуру 07.06.21✎ 11:19 | 
        (50) причем тут лечит и вычисления? главное оно не хранится в памяти целиком при вычислении, если ты специально не заставишь его это сделать     | |||
| 52
    
        fisher 07.06.21✎ 11:24 | 
        (51) А, ты про память! А я еще и про молотилку, если дубли не нужны.     | |||
| 53
    
        Ненавижу 1С гуру 07.06.21✎ 11:25 | 
        (52) так никто не говорил, что дубли не нужны, хотя может я пропустил     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |