| 
    
            
         
         | 
    
    
  | 
Получение месяцев с определенной периодичностью | ☑ | ||
|---|---|---|---|---|
| 
    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.Номер * &Периодичность) <= &КонецПериода УПОРЯДОЧИТЬ ПО Период  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |