|
Разрыв в периоде | ☑ | ||
---|---|---|---|---|
0
КУНГ ФУ 1С
20.10.15
✎
12:03
|
Нужна помощь в решении алгоритма
Задача: Есть таблицы с 2 колонками дата начала и дата окончания действия записи. Необходимо определить был ли разыв в периоде с 01.07.2010 - 01.01.2015. Начало Конец 01.07.2010 - 01.12.2010 02.12.2010 - 23.04.2012 24.04.2012 - 07.08.2012 01.09.2012 - 01.01.2015 |
|||
1
КУНГ ФУ 1С
20.10.15
✎
12:04
|
Года 2 назад решал похожую задачу с использованием алгоритма разрыва. Сейчас не могу найти этот алгоритм. Кто подскажет.
|
|||
2
Timon1405
20.10.15
✎
12:06
|
в запросе или где?
|
|||
3
КУНГ ФУ 1С
20.10.15
✎
12:09
|
в цикле
|
|||
4
RomanYS
20.10.15
✎
12:12
|
(3)берешь все даты и в двойном цикле их "прорежаешь"
|
|||
5
Ненавижу 1С
гуру
20.10.15
✎
12:12
|
лучше в запросе))
|
|||
6
Timon1405
20.10.15
✎
12:12
|
на выбор в цикле перебирать или даты из интервалов на предмет вхождения в заданный или наоборот по всем датам из заданного определять есть ли она хотя бы в одном интервале.
в чем вопрос-то? |
|||
7
RomanYS
20.10.15
✎
12:13
|
в запросе правое соединение с таблицей дат и условие Есть NULL на твою таблицу
|
|||
8
DTXyupyup
20.10.15
✎
12:14
|
Таблица.Сортировать("Начало");
ПраваяГраница = '00010101'; Для каждого Стр ИЗ Таблица Цикл Если Стр.Начало>ПраваяГраница И Не значениеЗаполнено(ПраваяГраница) Тогда Возврат Истина; Иначе ПраваяГраница = Стр.Конец; КонецЕсли; КонецЦикла; Возврат Ложь; |
|||
9
Гёдза
20.10.15
✎
12:14
|
соедини с собой по конец+1 = начало, там где нул,там разрыв
|
|||
10
DTXyupyup
20.10.15
✎
12:14
|
(8) Иначе -> ИначеЕсли Стр.Конец>ПраваяГраница
|
|||
11
DTXyupyup
20.10.15
✎
12:15
|
(8) Не значениеЗаполнено(ПраваяГраница) -> значениеЗаполнено(ПраваяГраница)
:) |
|||
12
1Сергей
20.10.15
✎
12:20
|
Объединить все пересекающиеся периоды. Если в результате остался один период, то НИ ЕДИНОГО РАЗРЫВА ©
|
|||
13
axuli
20.10.15
✎
12:57
|
тз = Новый ТаблицаЗначений;
тз.Колонки.Добавить("НачПер",Новый ОписаниеТипов("Дата")); тз.Колонки.Добавить("КонПер",Новый ОписаниеТипов("Дата")); // 01.07.2010 - 01.12.2010 //02.12.2010 - 23.04.2012 //24.04.2012 - 07.08.2012 //01.09.2012 - 01.01.2015 стр = тз.Добавить(); стр.НачПер = Дата(2010,7,1); стр.КонПер = Дата(2010,12,1); стр = тз.Добавить(); стр.НачПер = Дата(2010,12,2); стр.КонПер = Дата(2012,4,23); стр = тз.Добавить(); стр.НачПер = Дата(2012,4,24); стр.КонПер = Дата(2012,8,7); стр = тз.Добавить(); стр.НачПер = Дата(2012,9,1); стр.КонПер = Дата(2015,1,1); // 01.07.2010 - 01.01.2015. Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТЗ",Тз); Запрос.УстановитьПараметр("КонтрДатаНач",Дата(2010,7,1)); Запрос.УстановитьПараметр("КонтрДатаКон",Дата(2015,1,1)); Запрос.Текст = "ВЫБРАТЬ | тз.НачПер КАК НачПер, | тз.КонПер КАК КонПер |ПОМЕСТИТЬ втДанные |ИЗ | &тз КАК тз |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | взРазрывы.НачалоРазрыва, | взРазрывы.КонецРазрыва |ИЗ | (ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(ВложенныйЗапрос.КонПер, ДЕНЬ, 1) КАК НачалоРазрыва, | ВложенныйЗапрос.НачалоСледущего КАК КонецРазрыва | ИЗ | (ВЫБРАТЬ | втДанные.НачПер КАК НачПер, | втДанные.КонПер КАК КонПер, | МИНИМУМ(ЕСТЬNULL(втДанные1.НачПер, втДанные.КонПер)) КАК НачалоСледущего | ИЗ | втДанные КАК втДанные | ЛЕВОЕ СОЕДИНЕНИЕ втДанные КАК втДанные1 | ПО втДанные.КонПер < втДанные1.НачПер | | СГРУППИРОВАТЬ ПО | втДанные.НачПер, | втДанные.КонПер) КАК ВложенныйЗапрос | ГДЕ | РАЗНОСТЬДАТ(ВложенныйЗапрос.КонПер, ВложенныйЗапрос.НачалоСледущего, ДЕНЬ) > 1) КАК взРазрывы |ГДЕ | (взРазрывы.НачалоРазрыва >= &КонтрДатаНач | И взРазрывы.КонецРазрыва <= &КонтрДатаКон | ИЛИ взРазрывы.КонецРазрыва >= &КонтрДатаНач | И взРазрывы.КонецРазрыва <= &КонтрДатаКон)"; Запрос.Выполнить().Выгрузить().ВыбратьСтроку(); |
|||
14
mistеr
20.10.15
✎
12:58
|
(0) По-моему эта вчерашняя статья для вас как по заказу вышла:
http://habrahabr.ru/post/266859/ |
|||
15
Garykom
гуру
20.10.15
✎
13:04
|
вот и в 1С приползли ораклоидо-pl/sql'щики... и начали многостраничными запросами все захламлять...
|
|||
16
mistеr
20.10.15
✎
13:38
|
(15) Это разве многостраничные...
|
|||
17
Garykom
гуру
20.10.15
✎
13:52
|
(16) у меня при дефолтовых 1600х900 на 1 экран не влезает
масштаб 100% стандартный и все прочее не менял |
|||
18
mikecool
20.10.15
✎
13:56
|
(15) ошибаешься, в запросе ни одного курсора
|
|||
19
SiAl-chel
20.10.15
✎
14:22
|
(0) "Есть таблицы ..."
Вижу только одну таблицу, разрывов не вижу. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |