Имя: Пароль:
1C
1С v8
Как получить массив дней из диапазона дат?
,
0 tabarigen
 
23.08.19
10:13
Всем добра, всем бабла.
У меня есть 2 дата, ДатаОт и ДатаДо. Как без лишних телодвижений получить массив дней между этими датами, включая сами даты?
1 Волшебник
 
23.08.19
10:14
циклом
2 catena
 
23.08.19
10:15
запросом
3 tabarigen
 
23.08.19
10:31
КоличествоДней = (ДатаКонец - ДатаНачала) / 60 / 60 / 24;
4 tabarigen
 
23.08.19
10:33
блин вроде  изи задача, но не так все и просто..
5 tabarigen
 
23.08.19
10:34
на ум приходит только запросом..
6 НЕА123
 
23.08.19
10:35
(5)
та не.
рекурсией только.
7 dka80
 
23.08.19
10:36
Выбрать Дата из регистрсведений.производственныйкалендарь (или справочник)
где дата между &Нач и &Кон
8 Кир Пластелинин
 
23.08.19
10:50
а в чем проблема получить разность дат (читай - количество дней) и в цикле "для ... по ..." заполнить массив накопительной переменной-датой? потом просто в цикле с прерыванием по условию? что тут такого непростого то?
9 kobzon2
 
23.08.19
10:53
(3) (4)

Массив = Новый Массив;
КоличествоДней = (ДатаКонец - ДатаНачала) / 60 / 60 / 24;
Массив.Добавить(ДатаНач);
н = Дата(1, 1, 1);
Пока Массив.Количество() < КоличествоДней Цикл
н = н + 24*60*60;     
Массив.Добавить(н);
КонецЦикла;
Массив.Добавить(ДатаКон);
10 JeHer
 
23.08.19
11:07
(0) на коленке

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    КурсыВалют.Период КАК Период
        |ИЗ
        |    РегистрСведений.КурсыВалют КАК КурсыВалют
        |ГДЕ
        |    КурсыВалют.Период МЕЖДУ &ДатаНачала И &ДатаОкончания";
    
    Запрос.УстановитьПараметр("ДатаНачала", ПериодОбработки.ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания", ПериодОбработки.ДатаОкончания);
    
    РезультатЗапроса = Запрос.Выполнить();
    

А дальше выгрузишь куда угодно
11 Кир Пластелинин
 
23.08.19
11:10
(10) это было сейчас всерьез?)
12 dka80
 
23.08.19
11:15
(10) ваш выбор источника дат вызвает сомнения
13 Кир Пластелинин
 
23.08.19
11:25
(12) да собственно как и производственный календарь. т.к. в определенных случаях может не быть подобных метаданных или же они могут быть не заполнены.
14 Aleksandr N
 
23.08.19
11:26
(1) +1
(2), (10) — Массив дней запросом? Месье знает толк в извращениях.
15 Лефмихалыч
 
23.08.19
11:26
16 НадюшаЯЯ
 
23.08.19
11:27
(10) надо различные выбрать
17 dezss
 
23.08.19
11:42
(9) ппц просто...
может все же
н = ДатаНачала;
18 tabarigen
 
23.08.19
11:42
(10) запросом не стал, потому что у меня данные хранились во временных таблицах.
сделал так.
            врОтчет = Отчет.Скопировать();
            массивДат = Отчет.ВыгрузитьКолонку("ДатаЧека");
            тзДаты = Новый ТаблицаЗначений;
            тзДаты.Колонки.Добавить("ДатаЧека",Новый ОписаниеТипов("Дата"));
            Для каждого стр из массивДат Цикл
                строкаМассива = тзДаты.Добавить();
                строкаМассива.ДатаЧека = стр;
            КонецЦикла;    
            тзДаты.Свернуть("ДатаЧека");
19 tabarigen
 
23.08.19
11:42
воше на изичах
20 kobzon2
 
23.08.19
11:47
(17) Да, точно
21 JeHer
 
23.08.19
11:51
(11) (12) Уээ, написано же "на коленке". ТС хотел запросом, накидал. Что не нравится? Подсуньте вместо курсов валют любой другой параметр.
22 АгентБезопасной Нацио
 
23.08.19
11:56
(15) ildarovich знает толк...
Я вот сколько раз пытаюсь реализовать его "бабочку" - нифига...
23 Simod
 
23.08.19
12:34
Из консоли запросов ИР:

ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
ИЗ
   (ВЫБРАТЬ 0 КАК a
   ОБЪЕДИНИТЬ  
   ВЫБРАТЬ 1
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 2
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 3
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 4
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 5
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 6
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 7
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 8
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 9) КАК aa
      ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b
      ОБЪЕДИНИТЬ
   ВЫБРАТЬ 1
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 2
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 3
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 4
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 5
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 6
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 7
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 8
   ОБЪЕДИНИТЬ    
    ВЫБРАТЬ 9) КАК bb
      ПО (ИСТИНА)
      ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c
      ОБЪЕДИНИТЬ
    ВЫБРАТЬ 1
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 2
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 3
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 4
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 5
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 6
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 7
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 8
   ОБЪЕДИНИТЬ    
    ВЫБРАТЬ 9) КАК cc
      ПО (ИСТИНА)
      ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
         0 КАК d
    ОБЪЕДИНИТЬ
    ВЫБРАТЬ 1
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 2
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 3
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 4
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 5
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 6
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 7
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 8
   ОБЪЕДИНИТЬ    
    ВЫБРАТЬ 9) КАК dd
      ПО (ИСТИНА)
ГДЕ
   aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
24 Ботаник Гарден Меран
 
23.08.19
13:38
(22)
Транзитивное замыкание использую уже довольно часто.
А для бабочки нужна уже пронумерованная таблица - где-ж такую в запросе взять.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.