Вариант предложенный в (20) - использовать РегламентированныйПроизводственныйКалендарь понравился больше
ВЫБРАТЬ РАЗЛИЧНЫЕ
НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК Поле1
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(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
Показать
Предлагаю примитивный алгоритм
Процедура Печать_Дат_За_Период(ДатаНач,ДатаКон)
// Определим количество дней в интервале
Кол_Дней =День(ДатаКон) - День(ДатаНач);
// Установим начало отсчета
ТекДень = КонецДня(ДатаНач);
// Формируем массив дат
Для I = 0 По Кол_Дней Цикл
ТекДень = Дата(КонецДня(ТекДень)+I);
Сообщить(НачалоДня (ТекДень));
КонецЦикла;
КонецПроцедуры
Показать// *********
// Недастаток первой процедуры
// I - Счетчик секунд. ( На больших массивах можем вылитить за пределы)
// Вторая процедура не использует параметр - I
// *********
Процедура Печать_Дат_За_Период(ДатаНач,ДатаКон)
// Определим количество дней в интервале
Кол_Дней =День(ДатаКон) - День(ДатаНач);
// Установим начало отсчета на день раньше
ТекДень = НачалоДня(ДатаНач)-1;
// Формируем массив дат
Для I = 0 По Кол_Дней Цикл
ТекДень = Дата(КонецДня(ТекДень)+1);
Сообщить(НачалоДня (ТекДень));
КонецЦикла;
КонецПроцедуры
Показать
(1)
Вариант 1.
Создаешь регистр сведений "Календарь".
Заполняешь его всеми датами на 5 лет вперед.
Делаешь по нему выборку в запросе.
Вариант 2.
Формируешь список значений из нужных дат.
Передаешь его в запрос через параметр &СписокДат.
И выполняешь запрос:
Вариант 1.
Создаешь регистр сведений "Календарь".
Заполняешь его всеми датами на 5 лет вперед.
Делаешь по нему выборку в запросе.
Вариант 2.
Формируешь список значений из нужных дат.
Передаешь его в запрос через параметр &СписокДат.
И выполняешь запрос:
ВЫБРАТЬ
Значение
ПОМЕСТИТЬ СписокДат
ИЗ &СписокДат КАК СписокДат;
ВЫБРАТЬ Значение ИЗ СписокДат
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, 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 <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
ПоказатьСергей Дудаков пишет:
Вариант 2.
Формируешь список значений из нужных дат.
Передаешь его в запрос через параметр &СписокДат.
И выполняешь запрос:
ВЫБРАТЬ
Значение
ПОМЕСТИТЬ СписокДат
ИЗ &СписокДат КАК СписокДат;
ВЫБРАТЬ Значение ИЗ СписокДат
ПоказатьВариант 2.
Формируешь список значений из нужных дат.
Передаешь его в запрос через параметр &СписокДат.
И выполняешь запрос:
ВЫБРАТЬ
Значение
ПОМЕСТИТЬ СписокДат
ИЗ &СписокДат КАК СписокДат;
ВЫБРАТЬ Значение ИЗ СписокДат
Запрос предполагается использовать в постоителе отчета. В связи с этим вопрос возникает можно ли временные таблицы в построителе использовать?
А будет работать такой вариант:
ВЫБРАТЬ
ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК ДАТА) КАК Поле1
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, , ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
СГРУППИРОВАТЬ ПО
ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период КАК ДАТА)
УПОРЯДОЧИТЬ ПО
Поле1
ИТОГИ ПО
Поле1 ПЕРИОДАМИ(ДЕНЬ, &ДатаНач, &ДатаКон)
Показать
(11) По идее, должен. Попробуй.
Немного "упростил" код из (9):
Немного "упростил" код из (9):
ВЫБРАТЬ 0 КАК Цифра
ПОМЕСТИТЬ Цифры
ОБЪЕДИНИТЬ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВЫБРАТЬ 9;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра КАК Дней
ПОМЕСТИТЬ СписокДней
ИЗ
Цифры КАК Тысячи,
Цифры КАК Сотни,
Цифры КАК Десятки,
Цифры КАК Единицы
ГДЕ
Тысячи.Цифра * 1000 + Сотни.Цифра * 100 + Десятки.Цифра * 10 + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, СписокДней.Дней) КАК Период
ИЗ
СписокДней КАК СписокДней
УПОРЯДОЧИТЬ ПО
Период
Показать
(19) Нет, действительно работает. Только к сожалению этим запросом воспользоваться нельзя напрямую( обойти можно как в http://infostart.ru/projects/3044/ ). Таблица нужна для соединения с другой, а во вложенных запросах нельзя использовать операцию ИТОГИ.
В общем наиболее подходящий вариант тот который предложил Душелов. Или же использовать какой либо готовый источник данных, например регистр сведений РегламентированныйПроизводственныйКалендарь в УТ.
В общем наиболее подходящий вариант тот который предложил Душелов. Или же использовать какой либо готовый источник данных, например регистр сведений РегламентированныйПроизводственныйКалендарь в УТ.
(23) Жаль что ИТОГИ нельзя использовать в виртуальных таблицах. Тогда так :)
Переделал ранее предложенные с периода в 27 лет на период 2739 лет. Так сказать - добавил прочности, сохранил производительность. :)
Или так...
ВЫБРАТЬ 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;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра) КАК Период
ИЗ
СотниТысяч
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДесяткиТысяч
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Тысячи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сотни
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Десятки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Единицы
ПО (Десятки.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
И (Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
ПО (Сотни.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
ПО (Тысячи.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
ПО (ДесяткиТысяч.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
ПО (СотниТысяч.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ))
ГДЕ
СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
УПОРЯДОЧИТЬ ПО
Период
Показать
(49) +1 Только доп вопрос, а если нужен произвольный шаг, например 2 дня а не день?
Подумал и решил вот таким способом, в запросе избыточные данные, зато в сосноли запросов удобно смотреть.
Подумал и решил вот таким способом, в запросе избыточные данные, зато в сосноли запросов удобно смотреть.
Полный код запроса ВЫБРАТЬ 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 + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК СписокДней
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
НужныйПериод1.Период КАК Период,
СУММА(1) + (&Шаг - 1) КАК Шаг
ПОМЕСТИТЬ ПериодДоОбрезания
ИЗ
НужныйПериод КАК НужныйПериод1
ЛЕВОЕ СОЕДИНЕНИЕ НужныйПериод КАК НужныйПериод2
ПО НужныйПериод1.Период >= НужныйПериод2.Период
СГРУППИРОВАТЬ ПО
НужныйПериод1.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ПериодДоОбрезания.Период,
ПериодДоОбрезания.Шаг
ПОМЕСТИТЬ ПериодПлюсПоследняяДата
ИЗ
ПериодДоОбрезания КАК ПериодДоОбрезания
ГДЕ
ПериодДоОбрезания.Шаг / &Шаг = (ВЫРАЗИТЬ(ПериодДоОбрезания.Шаг / &Шаг КАК ЧИСЛО(10, 0)))
СГРУППИРОВАТЬ ПО
ПериодДоОбрезания.Период,
ПериодДоОбрезания.Шаг
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
&КонецПериода,
NULL
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ПериодПлюсПоследняяДата.Период,
СУММА(ПериодПлюсПоследняяДата.Шаг) КАК Шаг
ИЗ
ПериодПлюсПоследняяДата КАК ПериодПлюсПоследняяДата
СГРУППИРОВАТЬ ПО
ПериодПлюсПоследняяДата.Период
Показать
А вот так по месяцам можно:
ВЫБРАТЬ 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;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра) КАК Период
ИЗ
СотниТысяч
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДесяткиТысяч
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Тысячи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сотни
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Десятки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Единицы
ПО (Десятки.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
И (Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
ПО (Сотни.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
ПО (Тысячи.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
ПО (ДесяткиТысяч.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
ПО (СотниТысяч.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ))
ГДЕ
СотниТысяч.Цифра + ДесяткиТысяч.Цифра + Тысячи.Цифра + Сотни.Цифра + Десятки.Цифра + Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ)
УПОРЯДОЧИТЬ ПО
Период
Показать
Я делал так, это как у автора 11 поста, только я не понимаю зачем ему отдельная временная таблица со всеми цифрами.
А сам порядок, расширяется легко, и не принципиально в запросе.
А сам порядок, расширяется легко, и не принципиально в запросе.
ВЫБРАТЬ 0 КАК Ключ
ПОМЕСТИТЬ Порядки
ОБЪЕДИНИТЬ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВЫБРАТЬ 9
;
ВЫБРАТЬ
ДобавитьКДате(НачалоПериода(&НачалоПериода,День), ДЕНЬ, П1.Ключ+(П2.Ключ*10)+(П3.Ключ*100)) КАК Период
//ПОМЕСТИТЬ СписокПериодов
ИЗ
Порядки КАК П1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Порядки КАК П2 ПО ИСТИНА
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Порядки КАК П3 ПО ИСТИНА
ГДЕ
П1.Ключ+(П2.Ключ*10)+(П3.Ключ*100) <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
УПОРЯДОЧИТЬ ПО Период
//ИНДЕКСИРОВАТЬ ПО Период
Показать
Может кому то пригодится, список дат для периодов. На примере последние текущий месяц и последние 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 И &ДатаКалендаря2
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот