|
Выбрать пропущенные числа последовательности | ☑ | ||
---|---|---|---|---|
0
Про100Филя
16.06.15
✎
11:56
|
Есть справочник
Код Наименование Число 001 Имя1 1 002 Имя2 2 003 Имя3 3 004 Имя4 4 005 Имя5 5 "Число" при создании заполняется с инкрементом 1 (Ну как нумерация кода) При пометке на удаление число становится равным нулю. Код Наименование Число 001 Имя1 1 002 Имя2 2 003 Имя3 0 <---- Объект помечен на удаление 004 Имя4 4 005 Имя5 5 Нужно запросом узнать пропущенные числа в последовательности. Как найти пропущенное число 3? |
|||
1
Liova
16.06.15
✎
11:58
|
А разрядность этого Числа какая?
|
|||
2
Про100Филя
16.06.15
✎
12:00
|
(1) Целое число
|
|||
3
Liova
16.06.15
✎
12:00
|
Вообще делается виртуалка со всеми числами диапазона и левое соединение к твоей таблице с условием есть NULL.
Вообще задача странная. |
|||
4
Гёдза
16.06.15
✎
12:01
|
если код = число, то элементарно ватсон
|
|||
5
Liova
16.06.15
✎
12:03
|
(2) Понятно, что целое, но есть разница 5 там разрядов или 14
Я говорил про это примерно: Книга знаний: Генерация числовой последовательности и последовательности дат при помощи языка запросов. |
|||
6
Liova
16.06.15
✎
12:04
|
Чем воротить такой запрос может быть проще переделать, чтобы такой задачи не возникало?
Или при присвоении 0 коду в отдельный реквизит писать этот свободный код, который был. |
|||
7
Про100Филя
16.06.15
✎
12:10
|
(3) Ну задачу упростил, для простоты понятия. Разрядоность как в коде 8.
(4) Если бы. (6) В реальной задаче не все так просто, это уже есть и количество объектов в справочнике около 25 000. |
|||
8
Liova
16.06.15
✎
12:13
|
(7) Ну так 1 раз перебрать эти 25 тысяч и поставить им этот реквизит, а у остальных перед записью. И получается тривиальный запрос с условием по СвободныйКод <> 0
|
|||
9
Широкий
16.06.15
✎
12:13
|
Вот например: ищет пропущенное число, но не числа:
ВЫБРАТЬ 1 КАК Число ПОМЕСТИТЬ ТаблицаЧисел ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МИНИМУМ(ТаблицаЧисел.Число + 1) КАК Поле1 ИЗ ТаблицаЧисел КАК ТаблицаЧисел ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаЧисел КАК ТаблицаЧисел1 ПО ТаблицаЧисел.Число+1 = ТаблицаЧисел1.Число ГДЕ ТаблицаЧисел1.Число ЕСТЬ NULL |
|||
10
Про100Филя
16.06.15
✎
12:19
|
(9) Спасибо!
(8) Тогда в регистр сведений это перенести(В разрезе чисел), и при пометке на удаление ставить пустую ссылку. |
|||
11
palpetrovich
16.06.15
✎
12:36
|
дык
выбрать ссылка ИЗ справочник.Твой где справочник.Число=0 |
|||
12
Про100Филя
16.06.15
✎
12:53
|
(11) Выбрать пропущенные числа последовательности, а не нули.
|
|||
13
13_Mult
16.06.15
✎
13:18
|
(9) Если сделать (-1) можно выбрать все числа
|
|||
14
Широкий
16.06.15
✎
13:22
|
(13) Разницы нет. Только вот два пропущенных не найдет
|
|||
15
13_Mult
16.06.15
✎
13:23
|
(14) два подряд пропущенных )
|
|||
16
palpetrovich
17.06.15
✎
11:50
|
(12) ну дык :)
|ВЫБРАТЬ НужныйСправочник.Код, |ИЗ |Справочник.НужныйСправочник КАК НужныйСправочник |ГДЕ |НужныйСправочник.Число = 0 Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл сообщить("Пропущенно число " + Число(Выборка.Код)); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |