Имя: Пароль:
1C
1С v8
Поделитесь алгоритмом нумератора строк таблицы значений
,
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) Например? Не врубаюсь, зачем это нужно.