Имя: Пароль:
1C
1С v8
Как в запросе поделить время на равные интервалы?
, ,
0 SachoZ
 
19.10.12
16:07
Например надо взять день с 5 утра до 6 вечера и получить каждый час за этот промежуток:
5-6
6-7
7-8
9-10
11-12
...

как сие реализовать в запросе?
1 1Страх
 
19.10.12
16:08
зачем?
2 SachoZ
 
19.10.12
16:09
т.е. в результате выполнения запроса я должен получить таблицу с двумя колонками: ПериодНач и ПериодКон...
3 SachoZ
 
19.10.12
16:10
(1) для отображения данных в такой временной сетке....
4 МихаилМ
 
19.10.12
16:10
создать временную таблицу

заполнить её интервалами,
в запросе  соединить с данными
по вхождению в интервал, свернуть
5 Reset
 
19.10.12
16:11
Выбрать 5 Как ПериодНач, 6 как ПериодКон Поместить МояТаблица
Объединить Выбрать 6,7
Объединить Выбрать 7,8
Объединить Выбрать 9,10
Объединить Выбрать 11,12
6 SachoZ
 
19.10.12
16:11
(4) "заполнить её интервалами" как?
7 SachoZ
 
19.10.12
16:12
(5) а если мне надо менять интервал, скажем не 1 час, а 1.5 или 2 или 3...
8 Reset
 
19.10.12
16:14
(7) Тогда начни с определения того, что ты хочешь
9 Reset
 
19.10.12
16:15
"А Если" можно говорить до бесконечности, для любого решения
10 GLazNik
 
19.10.12
16:16
(7) что мешает подготовить таблицу вне запроса?
11 Reset
 
19.10.12
16:18
ну у него написано "как сие реализовать в запросе?".
Хотя это, скорее всего, малозначащая фраза
12 SachoZ
 
19.10.12
16:19
(10) Да вот похоже, что в цикле сделать таблицу проще чем в запросе.
13 SachoZ
 
19.10.12
16:21
Хотелось бы в запрос передать начало и окончание периода, итервал в секундах, а после выполнения запроса получить таблицу периодов ПериодНач и ПериодКон...
14 GLazNik
 
19.10.12
16:23
(13) в моем понимании запрос подразумевает работу с базой данных. Какая именно в этом случае работа за базой данных?
15 Reset
 
19.10.12
16:24
(13) В запросе циклов нет. То, что ты хочешь, сделать можно, но с большими извратами, необходимость коих сильно сомнительна.
16 SachoZ
 
19.10.12
16:25
Без запросов примерно так:

Начало   = Дата("00010101000000");
Конец    = Дата("00010101000000")60*60*24;
Интервал = 60; //сек.

Для Тек = Начало По Конец Цикл
  НачалоИнтервала = Тек;
  Тек = Тек+Интервал;
  КонецИнтервала  = Тек;
  Сообщить(НачалоИнтервала+"-"+КонецИнтервала);
КонецЦикла;
17 agorbunov
 
19.10.12
16:26
ВЫБРАТЬ 1 КАК Цифра
ПОМЕСТИТЬ Цифры
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 9
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 10
;

ВЫБРАТЬ
  А.Цифра*1000 + Б.Цифра*1000 +В.Цифра*10 + Г.Цифра КАК Число
ПОМЕСТИТЬ Числа
ИЗ Цифры КАК А,
  Цифры КАК Б,
  Цифры КАК В,
  ЦифрыКАК Г
;

ВЫБРАТЬ
  МояТаблица.ПериодНачало,
  МояТаблица.ПериодОкончание,
  ДОБАВИТЬКДАТЕ(МояТаблица.ПериодНачало, Числа.Число, СЕКУНДА) КАК ТекущийПериод
ИЗ
  МояТаблица КАК МояТаблица
  Левое Соединение Числа КАК Числа ПО
  РАЗНОСТЬДАТ(МояТаблица.ПериодНачало, МояТаблица.ПериодОкончание, СЕКУНДА) < Числа.Число

==============================================

Как-то так. Написал по-памяти.
18 SachoZ
 
19.10.12
16:28
(14) на скл такое можно сделать не извращаясь.
19 Reset
 
19.10.12
16:28
(16)Цикл должен быть не "Для" а "Пока"
20 agorbunov
 
19.10.12
16:29
(17) Перечитал и нашел косяк. В цифры выбрать последним нужно 0, а не 10. Для твоей задачи подставь период ЧАС.
21 GLazNik
 
19.10.12
16:32
(18) скл, это скл. там все через запросы делается. и записи в бд тож через запрос собственно. и циклы там есть и курсоры. и много чего чего нет в 1с
(17) ну собственно на входе все равно треб таблица, которая потом в результате перемножения себя на себя вырастает в здоровую таблицу. Но нафига такой изврат? это же потом нужно уметь еще и прочитать.

У 1С есть для таких целей вполне приличный язык. Чего сочинять то...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший