Имя: Пароль:
1C
1С v8
Вывод отчета с периодичностью
0 chingiz
 
28.09.11
12:41
Данные беру из периодических(в пределах секунды) РегистровСведений. Нужно выводить дату-время с периодичностью 5 минут. Т.е. допустим у нас есть время 14:12:30,14:11:40,14:04:39,14:06:07 и нужно, чтобы в отчете это выглядело:

14:00 - сюда попадает время 14:04
14:05 - сюда 14:06:07
14:10 - сюда 14:12, 14:11
14:15 и т.д.
И ресурсы, которые попали в один промежуток нужно сложить.

Возможно ли вообще такое?
1 Inform
 
28.09.11
12:43
(0) сделай поле, в котором будет начало пятиминутки и по нему группировку
2 chingiz
 
28.09.11
13:00
(1) как? Регистр то не виртуальный, периодичность мышкой не задать.
3 Defender aka LINN
 
28.09.11
13:05
(2) Вы знаете, иногда таки приходится брать в руки клавиатуру и писать этот ваш код.
4 chingiz
 
28.09.11
13:07
Ну я же не прошу писать мне код...подскажите какой функцией это можно сделать, дальше уж разберусь. Думал мб поможет
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(нашПериод, ЧАС), МИНУТА, 5), но не то...
5 IronDemon
 
28.09.11
13:08
(4) Почему не то?
6 IronDemon
 
28.09.11
13:11
(0) Нужно сделать таблицу с нужной периодичностью и с ней соединять.
7 Ненавижу 1С
 
гуру
28.09.11
13:20
вот это НАЧАЛОПЕРИОДА(Период,Минута) даст начало минуты
вот это НАЧАЛОПЕРИОДА(Период,Час) даст начало часа
вот это РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(Период,Минута),НАЧАЛОПЕРИОДА(Период,Час),Минута) даст минут с начала часа
ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(Период,Минута),НАЧАЛОПЕРИОДА(Период,Час),Минута)/5-0.5) КАК ЧИСЛО (2,0)) даст число полных пятиминуток
наконец ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(Период,Час),Минута,ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(Период,Минута),НАЧАЛОПЕРИОДА(Период,Час),Минута)/5-0.5) КАК ЧИСЛО (2,0))*5) даст начало каждой пятиминутки
вот по последнему и надо группировать
8 FIXXXL
 
28.09.11
13:24
Минута (Minute)
Синтаксис:

Минута(<Дата>)
Параметры:

<Дата> (обязательный)

Тип: Дата. Исходная дата.
Возвращаемое значение:

Тип: Число. Минута в часе указанной даты.
Описание:

Определяет минуту в часе указанной даты.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:

Сообщить(Минута(ТекущаяДата()));


и в ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(нашПериод, ЧАС), МИНУТА, 5)
вместо "5" выбор когда тогда
9 IronDemon
 
28.09.11
13:25
или так (7)
10 Inform
 
28.09.11
13:33
(0) Держи:

ВЫБОР
   КОГДА МИНУТА(&Период) / 5 > (ВЫРАЗИТЬ(МИНУТА(&Период) / 5 КАК ЧИСЛО(2, 0)))
       ТОГДА ВЫРАЗИТЬ(МИНУТА(&Период) / 5 КАК ЧИСЛО(2, 0))
   ИНАЧЕ (ВЫРАЗИТЬ(МИНУТА(&Период) / 5 КАК ЧИСЛО(2, 0))) - 1
КОНЕЦ * 5
11 Inform
 
28.09.11
13:37
+ (10) вернее вот так будет целиком получение даты:

ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Период, ЧАС), МИНУТА, ВЫБОР
       КОГДА МИНУТА(&Период) / 5 >= (ВЫРАЗИТЬ(МИНУТА(&Период) / 5 КАК ЧИСЛО(2, 0)))
           ТОГДА ВЫРАЗИТЬ(МИНУТА(&Период) / 5 КАК ЧИСЛО(2, 0))
       ИНАЧЕ (ВЫРАЗИТЬ(МИНУТА(&Период) / 5 КАК ЧИСЛО(2, 0))) - 1
   КОНЕЦ * 5)
12 chingiz
 
28.09.11
13:50
Респект, пока обедал уже выдали решение на готово :) Всем спасибо!
13 chingiz
 
29.09.11
11:25
Возник еще один вопрос. Каким образом можно вывести вообще весь день с заданной периодичностью? Если данные на период отсутствуют, то нужно получить последнее состояние ресурса.

Например:  

00:05 есть данные, что объект на месте
00:10 нет никаких данных, но нужно получить последние с 00:05
14 chingiz
 
29.09.11
12:55
МассивДат = Новый Массив;
   ТекДата = НачалоПериода;
   ДатаК = КонецПериода;
   
   Пока ТекДата < ДатаК Цикл
       
       МассивДат.Добавить(ТекДата);
       ТекДата = ТекДата +60*5
       
   КонецЦикла;

Получаем массив пятиминуток в требуемом периоде. Как теперь это совместить с моим запросом?
15 Ненавижу 1С
 
гуру
29.09.11
13:13
(14) получи ТЗ, отправь на сервер в виде временной таблицы
16 chingiz
 
03.10.11
10:37
Все-таки через ТЗ не получится. Знакомый подсказал:
в СКД нужно получить колонку дат, а не массив дат программно

выбор датавремя(данныедаты1) как Период
объединить
выбрать датавремя(данные2)
объединить ....

Но скилл маловат, чтобы самому осмыслить это :\
17 chingiz
 
03.10.11
14:23
Все еще актуально.
18 chingiz
 
03.10.11
14:24
Чтобы не читать с начала - задание в (13)
19 chingiz
 
04.10.11
12:13
В скд создал второй набор и после создания текста, заменяю запрос.

Текст = "
   |ВЫБРАТЬ
   |ДАТАВРЕМЯ("+Формат(ДатаНач,"ДФ=""гггг""")+","+Месяц(ДатаНач)+","+День(ДатаНач)+","+Час(ДатаНач)+","+Минута(ДатаНач)+","+Секунда(ДатаНач)+")
   |КАК Период";
   
   Пока ДатаМасс <= ДатаКон Цикл
       
       ДатаМасс = ДатаМасс + 60*5;
       
       Текст = Текст + Символы.ПС + "ОБЪЕДИНИТЬ" + Символы.ПС +"ВЫБРАТЬ
       |ДАТАВРЕМЯ("+Формат(ДатаМасс,"ДФ=""гггг""")+","+Месяц(ДатаМасс)+","+День(ДатаМасс)+","+Час(ДатаМасс)+","+Минута(ДатаМасс)+","+Секунда(ДатаМасс)+")
       |";
       
   КонецЦикла;

Теперь выводит все даты, но нужно чтобы при отсутствии движений он брал последнее значение ресурса. Как  это организовать?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.