|
Поделитесь алгоритмом нумератора строк таблицы значений | ☑ | ||
---|---|---|---|---|
0
new_hope
28.03.19
✎
13:58
|
Нужен алгоритм.. Возможно, он есть у кого готовый. Что-то ничего изящного не приходит в голову.
Нумерация новой строки с порядковым номером, НО - если до введения этой новой строки была удалена строка с номером (не последним по порядку) то этой новой строке присваивается номер ранее удаленной строки. Перенумерация всего списка НЕ подходит. Очень важна привязка конкретного номера к существующей строке. Например. В ТЗ был список записей с порядковыми номерами от 1 до 13.... удалена строка с номером "7"... при вводе новой строки ей дожен присвоится номер "7" (но не 14) Мерещится цикл, с перебором каждой строки начиная с "1" и до самого конца, при не нахождении номера (например "7" из примера выше) - его применение как номера для новой строки. Спасибо. |
|||
1
polosov
28.03.19
✎
14:02
|
Делай программный стек LIFO удаленных номеров.
|
|||
2
fisher
28.03.19
✎
14:03
|
А ради чего все это? Может, просто гуид на строку поцепить?
|
|||
3
new_hope
28.03.19
✎
14:07
|
(2) Не думаю, что это будет красиво.
А так мне нужно сгруппировать банковские счета в группы (во внешней обработке). И группы должны идти по порядку. Одна таблица значений - номера и названия групп... Вторая - сами счета, с разбивкой по группам |
|||
4
1Сергей
28.03.19
✎
14:09
|
(3) если пользователь не видит эти номера, то это "латание дыр" лишняя трата сил
|
|||
5
ASU_Diamond
28.03.19
✎
14:09
|
(3) и для чего в данной задаче такая нумерация нужна?
|
|||
6
fisher
28.03.19
✎
14:10
|
(3) Непонятно, как из этой задачи вытекает требование непрерывной нумерации. Это же просто идентификаторы. Выводи потом порядковый номер и все.
|
|||
7
elCust
28.03.19
✎
14:12
|
>> удалена строка с номером "7"... при вводе новой строки ей дожен присвоится номер "7"
Это задача с собеседования или Вы себе так жизнь решили усложнить? |
|||
8
new_hope
28.03.19
✎
14:17
|
(7) Ну... не собеседование точно, мне поздно ходить по собеседованиям ;)
Да...наверное зря усложнил себе жизнь... вижу, это решается без проблем другими методами. Просто не буду видеть номера групп... и при выводе этих групп пронумеровать их автоматически по порядку. ПС: Но ведь наверное такой алгоритм существует :) |
|||
9
Garykom
гуру
28.03.19
✎
14:19
|
(8) существует и совершенно тупой на уровне студента с циклами и сравнением =
|
|||
10
new_hope
28.03.19
✎
14:28
|
(9) Я так и сделал... Вопрос в другом - есть не тупой алгоритм? Очень хотелось-бы увидеть
Вот тупой: Функция ПолучитьНомерГруппы() ТЗ = ГруппаСчетов.Выгрузить(); Для i=1 по ТЗ.Количество() Цикл НайденныйНомер = ТЗ.Найти(i,"НомерГруппы"); Если НайденныйНомер = Неопределено Тогда НайденныйНомер = i; Прервать; КонецЕсли; КонецЦикла; Возврат НайденныйНомер; КонецФункции |
|||
11
elCust
28.03.19
✎
14:37
|
(10) Ну неуёмный)))
Сделай запросом уже в конце концов. Сортируем по номеру, далее из текущей вычетаем предыдущий номер, фиксируем. Далее отбираем строки где разница номеров больше чем 1, получаем минимум, все привет. |
|||
12
Garykom
гуру
28.03.19
✎
14:37
|
(10) мдя а цикл и сравнивать тек номер-1 равен ли предыдущему?
|
|||
13
1Сергей
28.03.19
✎
14:38
|
(12) это только если по порядку идут
|
|||
14
timurhv
28.03.19
✎
14:39
|
v8: пересечение массивов - алгоритм
Вот хороший пример из ветки, имеющий право на жизнь, можно запросом аналогично сделать: Для каждого Эл из М1 Цикл Стр = ТЗ.Добавить(); Стр.Элемент = Эл; Стр.Флаг = 1; КонецЦикла; Для каждого Эл из М2 Цикл Стр = ТЗ.Добавить(); Стр.Элемент = Эл; Стр.Флаг = -1; КонецЦикла; ТЗ.Свернуть("Элемент","Флаг"); М = ТЗ.НайтиСтроки(Новый Структура("Флаг",0)); |
|||
15
Garykom
гуру
28.03.19
✎
14:40
|
(13) сортировать до и после добавления строк
|
|||
16
elCust
28.03.19
✎
14:41
|
(11) В СКД ваще 3 строки кода и пара ресурсов с выражением.
|
|||
17
new_hope
28.03.19
✎
14:47
|
Всем спасибо за примеры и помощь! Так или иначе задача решена!
|
|||
18
VladZ
28.03.19
✎
14:52
|
(0) И зачем это нужно?
|
|||
19
new_hope
28.03.19
✎
14:54
|
(18) Та приходят всякие шальные мысли на старчекие мозги ;)
|
|||
20
fisher
28.03.19
✎
15:56
|
(8) "Просто не буду видеть номера групп... и при выводе этих групп пронумеровать их автоматически по порядку. "
Ну почему же. Можно сделать как я сразу предложил. Идентифицировать строки по уникальному идентификатору. А авто-номер строки будет выступать номером группы. Полная аналогия со справочником. Ведь ты по сути и эмулируешь отсутствующий справочник. |
|||
21
uno-group
28.03.19
✎
16:08
|
Проверяешь количество строк и номер последней строки если неравны то тупо перебираешь циклом. Для больших таблиц можно сравнивать присвоенные номера строк и порядковые с каким то шагом например 1000. и если не равны то искать пробел уже последовательным перебором последней группы.
Типа 1000стр=1000ном ок 2000стр=2005. значит перебираем строки с 1000 по 2000 ищем дырки. |
|||
22
Ботаник Гарден Меран
28.03.19
✎
16:23
|
+(21)
Так как у ТЗ есть индекс, то двоичный поиск можно использовать. |
|||
23
dezss
28.03.19
✎
16:48
|
(1) +100500
Самый лучший вариант. Но если это делается в каком-то сохраняемом списке, то этот стек тогда нужно сохранять вместе со списком. |
|||
24
VladZ
28.03.19
✎
16:52
|
(19) Например? Не врубаюсь, зачем это нужно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |