|
Выбрать периоды не участвующие во вхождениях |
☑ |
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) что курим?
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший