|
Получение месяцев с определенной периодичностью | ☑ | ||
---|---|---|---|---|
0
МешочекЗнаний
22.02.18
✎
09:45
|
Приветствую уважаемые.
Второй час бьюсь вроде бы над простой задачей - необходимо получить месяца с определённой периодичностью. Не получается вывести формулу для запроса. Например начисления происходят с 01.02.2018 с периодичностью в 3 месяца. В итоге должны быть месяца 01.02.2018 01.05.2018 01.08.2018 01.11.2018 |
|||
1
Mort
22.02.18
✎
09:47
|
НачалоПериода(, КВАРТАЛ)
|
|||
2
Mort
22.02.18
✎
09:48
|
А через ДобавитьКДате выходим на нужное смещение
|
|||
3
МешочекЗнаний
22.02.18
✎
09:48
|
(2) А если периодичность раз в 6 месяцев, или раз 2 месяца. Нужна универсальная формула
|
|||
4
Asmody
22.02.18
✎
09:49
|
(0) Найди на ИС статью про порождающие запросы, сформируй ВТ с нужными числами, и ДобавитьКДате
|
|||
5
Малыш Джон
22.02.18
✎
10:00
|
(0) не очень понял
то есть имеется определенный регистр с начислениями и надо оттуда вытащить начала месяцев с определенной периодичностью? |
|||
6
Малыш Джон
22.02.18
✎
10:00
|
или самому сформировать табличку с такими месяцами?
|
|||
7
Mort
22.02.18
✎
10:04
|
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&ИсходнаяДата, МЕСЯЦ, (ВЫРАЗИТЬ((РАЗНОСТЬДАТ(&ИсходнаяДата, &ТекущаяДата, МЕСЯЦ)-0.5)/&Периодичность КАК Число(10,0))) * &Периодичность ) КАК Результат
Где &ИсходнаяДата - с которой начинается отсчет &Периодичность - периодичность месяцев (целое число) &ТекущаяДата - дату, которую нужно привести |
|||
8
Timon1405
22.02.18
✎
10:08
|
(7) и где здесь таблица из 4х дат как в примере (0)?
|
|||
9
МешочекЗнаний
22.02.18
✎
10:09
|
(6) Да, саму таблицу создать. Порождающий запрос похоже на то что мне нужно, пока разбираюсь.
|
|||
10
Ненавижу 1С
гуру
22.02.18
✎
10:10
|
зачем порождающий, если можно таблицу значений передать во временную таблицу запроса?
|
|||
11
Ненавижу 1С
гуру
22.02.18
✎
10:13
|
НашаДата = Дата(2018,2,1);
Для й=1 по ЧислоПериодов Цикл Стр = ТЗ.Добавить(); Стр.Период = НашаДата; НашаДата = ДобавитьМесяц(НашаДата,КоличествоМесяцев); КонецЦикла; |
|||
12
МешочекЗнаний
22.02.18
✎
10:18
|
(11) Не стану же я тут описывать задачу целиком, для упрощения я привёл пример что мне нужно - получить месяца в запросе (т.к. от многих условий дата и периодичность может меняться).
Решение в лоб есть, но оно медленное, поэтому сейчас оптимизирую. |
|||
13
тарам пам пам
22.02.18
✎
12:06
|
(12) Как можно это умудриться сделать медленно? Если нужно прямо в запросе, можно так например сделать (при желании можно не 256 номеров сделать, а 65536, чтобы уж точно нужный период вошел):
ВЫБРАТЬ 0 КАК Номер ПОМЕСТИТЬ ВТНомера2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТНомера2.Номер + ВТНомера21.Номер * 2 КАК Номер ПОМЕСТИТЬ ВТНомера4 ИЗ ВТНомера2 КАК ВТНомера2, ВТНомера2 КАК ВТНомера21 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТНомера4.Номер + ВТНомера41.Номер * 4 КАК Номер ПОМЕСТИТЬ ВТНомера16 ИЗ ВТНомера4 КАК ВТНомера4, ВТНомера4 КАК ВТНомера41 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТНомера16.Номер + ВТНомера161.Номер * 16 КАК Номер ПОМЕСТИТЬ ВТНомера256 ИЗ ВТНомера16 КАК ВТНомера16, ВТНомера16 КАК ВТНомера161 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, ВТНомера256.Номер * &Периодичность) КАК Период ИЗ ВТНомера256 КАК ВТНомера256 ГДЕ ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, ВТНомера256.Номер * &Периодичность) <= &КонецПериода УПОРЯДОЧИТЬ ПО Период |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |