Имя: Пароль:
1C
1С v8
Выбрать периоды не участвующие во вхождениях
0 FreeWay
 
11.07.19
18:40
Кто нибудь сталкивался с похожей задачей?

Дан период месяцев к примеру с начала тысячелетия по текущий период.
в этот период входят другие периоды (с начала мая 2005 по конец ноября 2012, следующий с начала августа 2014 по конец февраля 2016) их количество разное и длительность разная.
Стоит задача выбрать периоды месяцев не участвующие во вхождениях. То бишь в нашем случае это будут:
с начала января 2000 по конец апреля 2005,
с начала декабря 2012 по конец июля 2014,
с начачла марта 2016 по конец июля 2019
1 FreeWay
 
11.07.19
18:47
не через запросы, а массивы, таблицы значений и т.д.
т.б результат должен быть таким
начало периода    конец периода
1-ый период
2-ой период
3-ий период
и т.д.
2 FreeWay
 
12.07.19
00:18
//ТЗ - таблица периодов
//НД - начало периода
//КД Окончание периода
функция ЕжемесячныеПериоды(ТЗ,НД,КД)
    ТЗрез=Новый ТаблицаЗначений;
    ТЗрез.Колонки.Добавить("Начало");
    ТЗрез.Колонки.Добавить("Конец");
    
    Для каждого стр из ТЗ цикл
        Если НД<Стр.НачалоПериода тогда
            Строка = ТЗрез.Добавить();
            Строка.Начало = Нд;
            Строка.Конец = КонецМесяца(ДобавитьМесяц(Стр.НачалоПериода,-1));
            Нд=КонецМесяца(стр.КонецПериода)+1;
        ИначеЕсли  НД<Стр.КонецПериода Тогда
            Нд=НачалоМесяца(ДобавитьМесяц(стр.КонецПериода,1));
        КонецЕсли;
        КонПер=Стр.КонецПериода;
    КонецЦикла;
    Если КонПер<КД Тогда
        Строка = ТЗрез.Добавить();
        Строка.Начало = НачалоМесяца(ДобавитьМесяц(КонПер,1));
        Строка.Конец =КонецМесяца(КД);
    КонецЕсли;
    Возврат ТЗрез
КонецФункции
3 zva
 
12.07.19
05:23
А чем запрос не угодил?
http://catalog.mista.ru/public/788007/#66. Инвертирование периодов в запросе
4 fisher
 
12.07.19
09:24
(3) Если все данные уже в памяти и для остального запросы не требуются, то делать это отдельным запросом - оверкил. Задача простая и рассчитывается быстро даже на клиенте.
5 FreeWay
 
12.07.19
20:15
как смог, так и сделал. помогающих очень много было, потому и выбрал свой вариант ;)
6 Garykom
 
гуру
12.07.19
20:26
Что у тебя будет если исходные периоды пересекаются по всякому?
7 FreeWay
 
12.07.19
22:17
(6) а не адекватный вариант с пересечение периодов здесь не рассматривается и что за не адекват такое может сотварить? условие как бы ни кто не отменял...
8 FreeWay
 
12.07.19
22:18
(6) что курим?
AdBlock убивает бесплатный контент. 1Сергей