Получить список дат в запросе

25. mailrum2004 1 09.12.13 17:04 Сейчас в теме
Вариант предложенный в (20) - использовать РегламентированныйПроизводственныйКалендарь понравился больше

ВЫБРАТЬ РАЗЛИЧНЫЕ
	НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК Поле1
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
user1621493; user821055; borman; Meverix; Xytras; SIrina9; Gaster; Drapezhnik; Egovigor; igee12; Dmitri93; jsmith; garant21; +13 Ответить
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
54. _7445_ 14.05.19 10:39 Сейчас в теме
(25)
ВЫБРАТЬ
	0 КАК Поле1
ПОМЕСТИТЬ ВТ_Цифры

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата1, ГОД), ГОД, 100 * ВТ_Цифры2.Поле1 + 10 * ВТ_Цифры1.Поле1 + ВТ_Цифры.Поле1) КАК Поле1
ИЗ
	ВТ_Цифры КАК ВТ_Цифры,
	ВТ_Цифры КАК ВТ_Цифры1,
	ВТ_Цифры КАК ВТ_Цифры2
ГДЕ
	ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата1, ГОД), ГОД, 100 * ВТ_Цифры2.Поле1 + 10 * ВТ_Цифры1.Поле1 + ВТ_Цифры.Поле1) МЕЖДУ &дата1 И &дата2

УПОРЯДОЧИТЬ ПО
	Поле1
Показать
tol_l; movled; useresu; +3 Ответить
26. vishiv 27 21.03.09 08:51 Сейчас в теме
Подскажите пожалуйста, возможно ли в 1С8 в запросе получить список дат за выбранный интервал.
Что то вроде такого
01.01.2009
02.01.2009
03.01.2009
04.01.2009
05.01.2009
...
27. puzano-v 147 21.03.09 10:30 Сейчас в теме
Предлагаю примитивный алгоритм

Процедура Печать_Дат_За_Период(ДатаНач,ДатаКон)

// Определим количество дней в интервале
	Кол_Дней =День(ДатаКон) - День(ДатаНач);
// Установим начало отсчета
	ТекДень = КонецДня(ДатаНач); 

// Формируем массив дат
	Для I = 0 По Кол_Дней Цикл
		ТекДень =  Дата(КонецДня(ТекДень)+I);
		Сообщить(НачалоДня (ТекДень));
	КонецЦикла;

КонецПроцедуры
Показать
28. puzano-v 147 21.03.09 10:40 Сейчас в теме
// ********* 
//  Недастаток первой процедуры 
//    I - Счетчик секунд. ( На больших массивах можем вылитить за пределы)
//   Вторая процедура не использует параметр - I
// ********* 

Процедура Печать_Дат_За_Период(ДатаНач,ДатаКон) 

	// Определим количество дней в интервале
	Кол_Дней =День(ДатаКон) - День(ДатаНач);
	// Установим начало отсчета на день раньше
	ТекДень = НачалоДня(ДатаНач)-1; 
	// Формируем массив дат
	Для I = 0 По Кол_Дней Цикл
		ТекДень =  Дата(КонецДня(ТекДень)+1);
		Сообщить(НачалоДня (ТекДень));
	КонецЦикла;
КонецПроцедуры
Показать
29. vishiv 27 21.03.09 11:22 Сейчас в теме
Спасибо конечно, но Вы вопрос не поняли. Мне нужно именно в ЗАПРОСЕ!!!
30. puzano-v 147 21.03.09 11:37 Сейчас в теме
Нужен пример ( в запросе дата - Строка )
Форматирование даты обычно производится или в талице или по шабону.
Аналогичная проблема отсортировать выходной массив из запроса по дате.
31. seermak 665 21.03.09 12:04 Сейчас в теме
в условиях запроса список дат или в результате запроса?
56. serko8547 110 22.11.21 10:49 Сейчас в теме
(33) публикация удалена :(((
32. Anything 89 21.03.09 12:20 Сейчас в теме
(1)

Вариант 1.

Создаешь регистр сведений "Календарь".
Заполняешь его всеми датами на 5 лет вперед.
Делаешь по нему выборку в запросе.

Вариант 2.

Формируешь список значений из нужных дат.
Передаешь его в запрос через параметр &СписокДат.
И выполняешь запрос:

ВЫБРАТЬ
      Значение
ПОМЕСТИТЬ СписокДат
      ИЗ &СписокДат КАК СписокДат;

ВЫБРАТЬ Значение ИЗ СписокДат
33. Душелов 4014 21.03.09 12:51 Сейчас в теме
34. Душелов 4014 21.03.09 12:52 Сейчас в теме
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, 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 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
Показать
cyegor; Xytras; SIrina9; Izumov; SunSunych; gringoman; Pavel791; muzipov; bobreks; jif; +10 Ответить
35. vishiv 27 21.03.09 12:56 Сейчас в теме
(6.) в результате запроса
36. vishiv 27 21.03.09 13:00 Сейчас в теме
Сергей Дудаков пишет:
Вариант 2.

Формируешь список значений из нужных дат.
Передаешь его в запрос через параметр &СписокДат.
И выполняешь запрос:

ВЫБРАТЬ
Значение
ПОМЕСТИТЬ СписокДат
ИЗ &СписокДат КАК СписокДат;

ВЫБРАТЬ Значение ИЗ СписокДат
Показать


Запрос предполагается использовать в постоителе отчета. В связи с этим вопрос возникает можно ли временные таблицы в построителе использовать?
37. vishiv 27 21.03.09 13:21 Сейчас в теме
А будет работать такой вариант:
ВЫБРАТЬ
	ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК ДАТА) КАК Поле1
ИЗ
	РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, , ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты

СГРУППИРОВАТЬ ПО
	ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК ДАТА)

УПОРЯДОЧИТЬ ПО
	Поле1
ИТОГИ ПО
	Поле1 ПЕРИОДАМИ(ДЕНЬ, &ДатаНач, &ДатаКон)
Показать
38. Anything 89 21.03.09 13:38 Сейчас в теме
(11) По идее, должен. Попробуй.

Немного "упростил" код из (9):

ВЫБРАТЬ	0 КАК Цифра
ПОМЕСТИТЬ Цифры
ОБЪЕДИНИТЬ ВЫБРАТЬ	1
ОБЪЕДИНИТЬ ВЫБРАТЬ	2
ОБЪЕДИНИТЬ ВЫБРАТЬ	3
ОБЪЕДИНИТЬ ВЫБРАТЬ	4
ОБЪЕДИНИТЬ ВЫБРАТЬ	5
ОБЪЕДИНИТЬ ВЫБРАТЬ	6
ОБЪЕДИНИТЬ ВЫБРАТЬ	7
ОБЪЕДИНИТЬ ВЫБРАТЬ	8
ОБЪЕДИНИТЬ ВЫБРАТЬ	9;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра КАК Дней
ПОМЕСТИТЬ СписокДней
ИЗ
	Цифры КАК Тысячи,
	Цифры КАК Сотни,
	Цифры КАК Десятки,
	Цифры КАК Единицы
ГДЕ
	Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, СписокДней.Дней) КАК Период
ИЗ
	СписокДней КАК СписокДней
УПОРЯДОЧИТЬ ПО
	Период
Показать
erjoma; andy3626603; gely; acanta; Detache; eirc40; bobreks; ABudnikov; alexsh76; +9 Ответить
39. alexk-is 6533 21.03.09 21:23 Сейчас в теме
Ребята не понимаю, что вы всякую ерунду городите. Вот решение...
ВЫБРАТЬ
	ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПериода
ИТОГИ ПО
	ДатаПериода ПЕРИОДАМИ(ДЕНЬ, &НачалоПериода, &КонецПериода)
AlexanderAndreev; +1 1 Ответить
55. user633736_actors.bas 06.10.20 11:44 Сейчас в теме
(39)
ВЫБРАТЬ
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПериода
ИТОГИ ПО
ДатаПериода ПЕРИОДАМИ(ДЕНЬ, &НачалоПериода, &КонецПериода)



Проверил, НЕ работает
(39)
40. larisab 160 21.03.09 22:16 Сейчас в теме
ДАТАВРЕМЯ(1, 1, 1)

что за поле?
41. alexk-is 6533 21.03.09 22:24 Сейчас в теме
(15) Это не поле, а выражение. Смысловая нагрузка - пустая дата. Все в ЖКК.
42. larisab 160 21.03.09 23:24 Сейчас в теме
(16) вычисляемое поле, функция языка запросов, как все просто то
43. Anything 89 22.03.09 00:43 Сейчас в теме
(14)

alexk-is пишет:
ВЫБРАТЬ
   ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПериода
ИТОГИ ПО
   ДатаПериода ПЕРИОДАМИ(ДЕНЬ, &НачалоПериода, &КонецПериода)


И это работает?
44. tsd 105 22.03.09 07:42 Сейчас в теме
(14) сколько у тебя строк в результате работы запроса получится?
думаю 2, вне зависимости от выбранного интервала
Nastya1111111; user633736_actors.bas; +2 Ответить
45. vishiv 27 22.03.09 10:12 Сейчас в теме
(19) Нет, действительно работает. Только к сожалению этим запросом воспользоваться нельзя напрямую( обойти можно как в http://infostart.ru/projects/3044/). Таблица нужна для соединения с другой, а во вложенных запросах нельзя использовать операцию ИТОГИ.
В общем наиболее подходящий вариант тот который предложил Душелов. Или же использовать какой либо готовый источник данных, например регистр сведений РегламентированныйПроизводственныйКалендарь в УТ.
46. alexk-is 6533 22.03.09 10:21 Сейчас в теме
(19) Ладно, немного поторопился. Тогда так...
ВЫБРАТЬ 
   ВЫРАЗИТЬ(&НачалоПериода КАК ДАТА) КАК ДатаПериода 
ИТОГИ ПО 
   ДатаПериода ПЕРИОДАМИ(ДЕНЬ, &НачалоПериода, &КонецПериода)
47. Душелов 4014 22.03.09 10:55 Сейчас в теме
(21) Именно, что в (20) > во вложенных запросах нельзя использовать операцию ИТОГИ.
48. Anything 89 22.03.09 20:38 Сейчас в теме
(21) также не работает, как и (14).
49. alexk-is 6533 22.03.09 22:53 Сейчас в теме
(23) Жаль что ИТОГИ нельзя использовать в виртуальных таблицах. Тогда так :)
ВЫБРАТЬ 0 КАК Цифра 
ПОМЕСТИТЬ Цифры 
ОБЪЕДИНИТЬ ВЫБРАТЬ 1 
ОБЪЕДИНИТЬ ВЫБРАТЬ 2 
ОБЪЕДИНИТЬ ВЫБРАТЬ 3 
ОБЪЕДИНИТЬ ВЫБРАТЬ 4 
ОБЪЕДИНИТЬ ВЫБРАТЬ 5 
ОБЪЕДИНИТЬ ВЫБРАТЬ 6 
ОБЪЕДИНИТЬ ВЫБРАТЬ 7 
ОБЪЕДИНИТЬ ВЫБРАТЬ 8 
ОБЪЕДИНИТЬ ВЫБРАТЬ 9; 

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, СписокДней.Дней) КАК Период
ИЗ
    (ВЫБРАТЬ
    	СотниТысяч.Цифра * 100000 + ДесяткиТысяч.Цифра * 10000 + Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра КАК Дней
    ИЗ
    	Цифры КАК СотниТысяч
    	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК ДесяткиТысяч
    	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Тысячи
    	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Сотни
    	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Десятки
    	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Единицы
    	ПО (Десятки.Цифра * 10 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
    	    И (Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
    	ПО (Сотни.Цифра * 100 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
    	ПО (Тысячи.Цифра * 1000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
    	ПО (ДесяткиТысяч.Цифра * 10000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
    	ПО (СотниТысяч.Цифра * 100000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
    ГДЕ
    	СотниТысяч.Цифра * 100000 + ДесяткиТысяч.Цифра * 10000 + Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК СписокДней

УПОРЯДОЧИТЬ ПО
    Период
Показать


Переделал ранее предложенные с периода в 27 лет на период 2739 лет. Так сказать - добавил прочности, сохранил производительность. :)

Или так...
ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ Единицы
ОБЪЕДИНИТЬ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВЫБРАТЬ 9;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ Десятки
ОБЪЕДИНИТЬ ВЫБРАТЬ 10
ОБЪЕДИНИТЬ ВЫБРАТЬ 20
ОБЪЕДИНИТЬ ВЫБРАТЬ 30
ОБЪЕДИНИТЬ ВЫБРАТЬ 40
ОБЪЕДИНИТЬ ВЫБРАТЬ 50
ОБЪЕДИНИТЬ ВЫБРАТЬ 60
ОБЪЕДИНИТЬ ВЫБРАТЬ 70
ОБЪЕДИНИТЬ ВЫБРАТЬ 80
ОБЪЕДИНИТЬ ВЫБРАТЬ 90;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ Сотни
ОБЪЕДИНИТЬ ВЫБРАТЬ 100
ОБЪЕДИНИТЬ ВЫБРАТЬ 200
ОБЪЕДИНИТЬ ВЫБРАТЬ 300
ОБЪЕДИНИТЬ ВЫБРАТЬ 400
ОБЪЕДИНИТЬ ВЫБРАТЬ 500
ОБЪЕДИНИТЬ ВЫБРАТЬ 600
ОБЪЕДИНИТЬ ВЫБРАТЬ 700
ОБЪЕДИНИТЬ ВЫБРАТЬ 800
ОБЪЕДИНИТЬ ВЫБРАТЬ 900;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра 
ПОМЕСТИТЬ Тысячи 
ОБЪЕДИНИТЬ ВЫБРАТЬ 1000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 2000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 3000
ОБЪЕДИНИТЬ ВЫБРАТЬ 4000
ОБЪЕДИНИТЬ ВЫБРАТЬ 5000
ОБЪЕДИНИТЬ ВЫБРАТЬ 6000
ОБЪЕДИНИТЬ ВЫБРАТЬ 7000
ОБЪЕДИНИТЬ ВЫБРАТЬ 8000
ОБЪЕДИНИТЬ ВЫБРАТЬ 9000;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра 
ПОМЕСТИТЬ ДесяткиТысяч 
ОБЪЕДИНИТЬ ВЫБРАТЬ 10000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 20000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 30000
ОБЪЕДИНИТЬ ВЫБРАТЬ 40000
ОБЪЕДИНИТЬ ВЫБРАТЬ 50000
ОБЪЕДИНИТЬ ВЫБРАТЬ 60000
ОБЪЕДИНИТЬ ВЫБРАТЬ 70000
ОБЪЕДИНИТЬ ВЫБРАТЬ 80000
ОБЪЕДИНИТЬ ВЫБРАТЬ 90000;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра 
ПОМЕСТИТЬ СотниТысяч 
ОБЪЕДИНИТЬ ВЫБРАТЬ 100000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 200000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 300000
ОБЪЕДИНИТЬ ВЫБРАТЬ 400000
ОБЪЕДИНИТЬ ВЫБРАТЬ 500000
ОБЪЕДИНИТЬ ВЫБРАТЬ 600000
ОБЪЕДИНИТЬ ВЫБРАТЬ 700000
ОБЪЕДИНИТЬ ВЫБРАТЬ 800000
ОБЪЕДИНИТЬ ВЫБРАТЬ 900000;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра) КАК Период
ИЗ
	СотниТысяч
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДесяткиТысяч
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Тысячи
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сотни
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Десятки
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Единицы
	ПО (Десятки.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
		И (Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
	ПО (Сотни.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
	ПО (Тысячи.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
	ПО (ДесяткиТысяч.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
	ПО (СотниТысяч.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
ГДЕ
	СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)

УПОРЯДОЧИТЬ ПО
	Период
Показать
Izumov; CratosX; Lapitskiy; Shurgent; agent00mouse; bserge88; Detache; modevi; Alkarasu; wing; +10 Ответить
50. agent00mouse 253 22.05.18 20:23 Сейчас в теме
(49) +1 Только доп вопрос, а если нужен произвольный шаг, например 2 дня а не день?

Подумал и решил вот таким способом, в запросе избыточные данные, зато в сосноли запросов удобно смотреть.

Полный код запроса
////////////////////////////////////////////////////////////­//////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, СписокДней.Дней) КАК Период ПОМЕСТИТЬ НужныйПериод ИЗ (ВЫБРАТЬ СотниТысяч.Цифра * 100000 + ДесяткиТысяч.Цифра * 10000 + Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра КАК Дней ИЗ Цифры КАК СотниТысяч ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК ДесяткиТысяч ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Тысячи ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Сотни ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Десятки ВНУТРЕННЕЕ СОЕДИНЕНИЕ Цифры КАК Единицы ПО (Десятки.Цифра * 10 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) И (Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) ПО (Сотни.Цифра * 100 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) ПО (Тысячи.Цифра * 1000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) ПО (ДесяткиТысяч.Цифра * 10000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) ПО (СотниТысяч.Цифра * 100000 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) ГДЕ СотниТысяч.Цифра * 100000 + ДесяткиТысяч.Цифра * 10000 + Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК СписокДней ; ////////////////////////////////////////////////////////////­//////////////////// ВЫБРАТЬ НужныйПериод1.Период КАК Период, СУММА(1) + (&Шаг - 1) КАК Шаг ПОМЕСТИТЬ ПериодДоОбрезания ИЗ НужныйПериод КАК НужныйПериод1 ЛЕВОЕ СОЕДИНЕНИЕ НужныйПериод КАК НужныйПериод2 ПО НужныйПериод1.Период >= НужныйПериод2.Период СГРУППИРОВАТЬ ПО НужныйПериод1.Период ; ////////////////////////////////////////////////////////////­//////////////////// ВЫБРАТЬ ПериодДоОбрезания.Период, ПериодДоОбрезания.Шаг ПОМЕСТИТЬ ПериодПлюсПоследняяДата ИЗ ПериодДоОбрезания КАК ПериодДоОбрезания ГДЕ ПериодДоОбрезания.Шаг / &Шаг = (ВЫРАЗИТЬ(ПериодДоОбрезания.Шаг / &Шаг КАК ЧИСЛО(10, 0))) СГРУППИРОВАТЬ ПО ПериодДоОбрезания.Период, ПериодДоОбрезания.Шаг ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ &КонецПериода, NULL ; ////////////////////////////////////////////////////////////­//////////////////// ВЫБРАТЬ ПериодПлюсПоследняяДата.Период, СУММА(ПериодПлюсПоследняяДата.Шаг) КАК Шаг ИЗ ПериодПлюсПоследняяДата КАК ПериодПлюсПоследняяДата СГРУППИРОВАТЬ ПО ПериодПлюсПоследняяДата.Период
Показать
mrChOP93; +1 Ответить
51. Lapitskiy 1057 29.03.19 20:56 Сейчас в теме
А вот так по месяцам можно:

ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ Единицы
ОБЪЕДИНИТЬ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВЫБРАТЬ 9;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ Десятки
ОБЪЕДИНИТЬ ВЫБРАТЬ 10
ОБЪЕДИНИТЬ ВЫБРАТЬ 20
ОБЪЕДИНИТЬ ВЫБРАТЬ 30
ОБЪЕДИНИТЬ ВЫБРАТЬ 40
ОБЪЕДИНИТЬ ВЫБРАТЬ 50
ОБЪЕДИНИТЬ ВЫБРАТЬ 60
ОБЪЕДИНИТЬ ВЫБРАТЬ 70
ОБЪЕДИНИТЬ ВЫБРАТЬ 80
ОБЪЕДИНИТЬ ВЫБРАТЬ 90;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ Сотни
ОБЪЕДИНИТЬ ВЫБРАТЬ 100
ОБЪЕДИНИТЬ ВЫБРАТЬ 200
ОБЪЕДИНИТЬ ВЫБРАТЬ 300
ОБЪЕДИНИТЬ ВЫБРАТЬ 400
ОБЪЕДИНИТЬ ВЫБРАТЬ 500
ОБЪЕДИНИТЬ ВЫБРАТЬ 600
ОБЪЕДИНИТЬ ВЫБРАТЬ 700
ОБЪЕДИНИТЬ ВЫБРАТЬ 800
ОБЪЕДИНИТЬ ВЫБРАТЬ 900;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра 
ПОМЕСТИТЬ Тысячи 
ОБЪЕДИНИТЬ ВЫБРАТЬ 1000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 2000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 3000
ОБЪЕДИНИТЬ ВЫБРАТЬ 4000
ОБЪЕДИНИТЬ ВЫБРАТЬ 5000
ОБЪЕДИНИТЬ ВЫБРАТЬ 6000
ОБЪЕДИНИТЬ ВЫБРАТЬ 7000
ОБЪЕДИНИТЬ ВЫБРАТЬ 8000
ОБЪЕДИНИТЬ ВЫБРАТЬ 9000;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра 
ПОМЕСТИТЬ ДесяткиТысяч 
ОБЪЕДИНИТЬ ВЫБРАТЬ 10000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 20000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 30000
ОБЪЕДИНИТЬ ВЫБРАТЬ 40000
ОБЪЕДИНИТЬ ВЫБРАТЬ 50000
ОБЪЕДИНИТЬ ВЫБРАТЬ 60000
ОБЪЕДИНИТЬ ВЫБРАТЬ 70000
ОБЪЕДИНИТЬ ВЫБРАТЬ 80000
ОБЪЕДИНИТЬ ВЫБРАТЬ 90000;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ 0 КАК Цифра 
ПОМЕСТИТЬ СотниТысяч 
ОБЪЕДИНИТЬ ВЫБРАТЬ 100000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 200000 
ОБЪЕДИНИТЬ ВЫБРАТЬ 300000
ОБЪЕДИНИТЬ ВЫБРАТЬ 400000
ОБЪЕДИНИТЬ ВЫБРАТЬ 500000
ОБЪЕДИНИТЬ ВЫБРАТЬ 600000
ОБЪЕДИНИТЬ ВЫБРАТЬ 700000
ОБЪЕДИНИТЬ ВЫБРАТЬ 800000
ОБЪЕДИНИТЬ ВЫБРАТЬ 900000;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра) КАК Период
ИЗ
    СотниТысяч
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДесяткиТысяч
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Тысячи
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сотни
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Десятки
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Единицы
    ПО (Десятки.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
        И (Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
    ПО (Сотни.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
    ПО (Тысячи.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
    ПО (ДесяткиТысяч.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
    ПО (СотниТысяч.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
ГДЕ
    СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ)

УПОРЯДОЧИТЬ ПО
    Период
Показать
52. bimy22 01.04.19 14:16 Сейчас в теме
53. HappYNooB 26.04.19 14:05 Сейчас в теме
Я делал так, это как у автора 11 поста, только я не понимаю зачем ему отдельная временная таблица со всеми цифрами.
А сам порядок, расширяется легко, и не принципиально в запросе.


ВЫБРАТЬ 0 КАК Ключ
ПОМЕСТИТЬ Порядки
	ОБЪЕДИНИТЬ ВЫБРАТЬ 1
	ОБЪЕДИНИТЬ ВЫБРАТЬ 2
	ОБЪЕДИНИТЬ ВЫБРАТЬ 3
	ОБЪЕДИНИТЬ ВЫБРАТЬ 4
	ОБЪЕДИНИТЬ ВЫБРАТЬ 5
	ОБЪЕДИНИТЬ ВЫБРАТЬ 6
	ОБЪЕДИНИТЬ ВЫБРАТЬ 7
	ОБЪЕДИНИТЬ ВЫБРАТЬ 8
	ОБЪЕДИНИТЬ ВЫБРАТЬ 9
;

ВЫБРАТЬ
	ДобавитьКДате(НачалоПериода(&НачалоПериода,День), ДЕНЬ, П1.Ключ+(П2.Ключ*10)+(П3.Ключ*100)) КАК Период
//ПОМЕСТИТЬ СписокПериодов
ИЗ
	Порядки КАК П1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Порядки КАК П2 ПО ИСТИНА
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Порядки КАК П3 ПО ИСТИНА
ГДЕ
	П1.Ключ+(П2.Ключ*10)+(П3.Ключ*100) <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)

УПОРЯДОЧИТЬ ПО Период
//ИНДЕКСИРОВАТЬ ПО Период
Показать
Gudzella; chinser; skyadmin; oneman@yandex.ru; soci0pat; CaIIIkaDer; bohdan-k; imaster; soulner; +9 Ответить
57. nikolasx 59 03.11.23 13:04 Сейчас в теме
Может кому то пригодится, список дат для периодов. На примере последние текущий месяц и последние 12 месяцев от текущей даты.
ВЫБРАТЬ
	ВложенныйЗапрос.Месяц КАК Месяц,
	ВложенныйЗапрос.ДатаНачала КАК ДатаНачала,
	ВложенныйЗапрос.ДатаОкончания КАК ДатаОкончания
ИЗ
	(ВЫБРАТЬ
		0 КАК Месяц,
		НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ) КАК ДатаНачала,
		&ТекущаяДата КАК ДатаОкончания
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		1,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -1),
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		2,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -2),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -1), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		3,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -3),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -2), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		4,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -4),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -3), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		5,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -5),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -4), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		6,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -6),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -5), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		7,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -7),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -6), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		8,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -8),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -7), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		9,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -9),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -8), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		10,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -10),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -9), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		11,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -11),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -10), СЕКУНДА, -1)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		12,
		ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -12),
		ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ), МЕСЯЦ, -11), СЕКУНДА, -1)) КАК ВложенныйЗапрос
Показать
Прикрепленные файлы:
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)