Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Выбрать периоды не участвующие во вхождениях

Выбрать периоды не участвующие во вхождениях
Я
   FreeWay
 
11.07.19 - 18:40
Кто нибудь сталкивался с похожей задачей?

Дан период месяцев к примеру с начала тысячелетия по текущий период.
в этот период входят другие периоды (с начала мая 2005 по конец ноября 2012, следующий с начала августа 2014 по конец февраля 2016) их количество разное и длительность разная.
Стоит задача выбрать периоды месяцев не участвующие во вхождениях. То бишь в нашем случае это будут:
с начала января 2000 по конец апреля 2005,
с начала декабря 2012 по конец июля 2014,
с начачла марта 2016 по конец июля 2019
 
 
   FreeWay
 
1 - 11.07.19 - 18:47
не через запросы, а массивы, таблицы значений и т.д.
т.б результат должен быть таким
начало периода    конец периода
1-ый период
2-ой период
3-ий период
и т.д.
   FreeWay
 
2 - 12.07.19 - 00:18
//ТЗ - таблица периодов 

//НД - начало периода 
//КД Окончание периода 

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует