Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Поделитесь алгоритмом нумератора строк таблицы значений

Поделитесь алгоритмом нумератора строк таблицы значений
Я
   new_hope
 
28.03.19 - 13:58
Нужен алгоритм..  Возможно, он есть у кого готовый. Что-то ничего изящного не приходит в голову.

Нумерация новой строки с порядковым номером, НО - если до введения этой новой строки была удалена строка с номером (не последним по порядку) то этой новой строке присваивается номер ранее удаленной строки.
Перенумерация всего списка НЕ подходит. Очень важна привязка конкретного номера к существующей строке.

Например. В ТЗ был список записей с порядковыми номерами от 1 до 13.... удалена строка с номером "7"... при вводе новой строки ей дожен присвоится номер "7" (но не 14)

Мерещится цикл, с перебором каждой строки начиная с "1" и до самого конца, при не нахождении номера (например "7" из примера выше) - его применение как номера для новой строки.

Спасибо.
 
 
   polosov
 
1 - 28.03.19 - 14:02
Делай программный стек LIFO удаленных номеров.
   fisher
 
2 - 28.03.19 - 14:03
А ради чего все это? Может, просто гуид на строку поцепить?
   new_hope
 
3 - 28.03.19 - 14:07
(2) Не думаю, что это будет красиво.

А так мне нужно сгруппировать банковские счета в группы (во внешней обработке). И группы должны идти по порядку.
Одна таблица значений - номера и названия групп... Вторая - сами счета, с разбивкой по группам
   1Сергей
 
4 - 28.03.19 - 14:09
(3) если пользователь не видит эти номера, то это "латание дыр" лишняя трата сил
   ASU_Diamond
 
5 - 28.03.19 - 14:09
(3) и для чего в данной задаче такая нумерация нужна?
   fisher
 
6 - 28.03.19 - 14:10
(3) Непонятно, как из этой задачи вытекает требование непрерывной нумерации. Это же просто идентификаторы. Выводи потом порядковый номер и все.
   elCust
 
7 - 28.03.19 - 14:12
>> удалена строка с номером "7"... при вводе новой строки ей дожен присвоится номер "7"

Это задача с собеседования или Вы себе так жизнь решили усложнить?
   new_hope
 
8 - 28.03.19 - 14:17
(7) Ну... не собеседование точно, мне поздно ходить по собеседованиям ;)

Да...наверное зря усложнил себе жизнь... вижу, это решается без проблем другими методами. Просто не буду видеть номера групп... и при выводе этих групп пронумеровать их автоматически по порядку.

ПС: Но ведь наверное такой алгоритм существует :)
   Garykom
 
9 - 28.03.19 - 14:19
(8) существует и совершенно тупой на уровне студента с циклами и сравнением =
   new_hope
 
10 - 28.03.19 - 14:28
(9) Я так и сделал... Вопрос в другом - есть не тупой алгоритм? Очень хотелось-бы увидеть

Вот тупой:

Функция ПолучитьНомерГруппы()

     ТЗ = ГруппаСчетов.Выгрузить();
    Для i=1 по ТЗ.Количество() Цикл
        НайденныйНомер = ТЗ.Найти(i,"НомерГруппы");
        Если НайденныйНомер = Неопределено Тогда
            НайденныйНомер = i;
            Прервать;
        КонецЕсли;
    КонецЦикла;    
    
    Возврат НайденныйНомер;

КонецФункции
   elCust
 
11 - 28.03.19 - 14:37
(10) Ну неуёмный)))

Сделай запросом уже в конце концов.
Сортируем по номеру, далее из текущей вычетаем предыдущий номер, фиксируем. Далее отбираем строки где разница номеров больше чем 1, получаем минимум, все привет.
   Garykom
 
12 - 28.03.19 - 14:37
(10) мдя а цикл и сравнивать тек номер-1 равен ли предыдущему?
   1Сергей
 
13 - 28.03.19 - 14:38
(12) это только если по порядку идут
   timurhv
 
14 - 28.03.19 - 14:39
v8: пересечение массивов - алгоритм

Вот хороший пример из ветки, имеющий право на жизнь, можно запросом аналогично сделать:

Для каждого Эл из М1 Цикл
  Стр = ТЗ.Добавить();
  Стр.Элемент = Эл;
  Стр.Флаг = 1;
КонецЦикла;

Для каждого Эл из М2 Цикл
  Стр = ТЗ.Добавить();
  Стр.Элемент = Эл;
  Стр.Флаг = -1;
КонецЦикла;

ТЗ.Свернуть("Элемент","Флаг");
М = ТЗ.НайтиСтроки(Новый Структура("Флаг",0));
   Garykom
 
15 - 28.03.19 - 14:40
(13) сортировать до и после добавления строк
   elCust
 
16 - 28.03.19 - 14:41
(11) В СКД ваще 3 строки кода и пара ресурсов с выражением.
   new_hope
 
17 - 28.03.19 - 14:47
Всем спасибо за примеры и помощь! Так или иначе задача решена!
   VladZ
 
18 - 28.03.19 - 14:52
(0) И зачем это нужно?
   new_hope
 
19 - 28.03.19 - 14:54
(18) Та приходят всякие шальные мысли на старчекие мозги ;)
   fisher
 
20 - 28.03.19 - 15:56
(8) "Просто не буду видеть номера групп... и при выводе этих групп пронумеровать их автоматически по порядку. "
Ну почему же. Можно сделать как я сразу предложил. Идентифицировать строки по уникальному идентификатору. А авто-номер строки будет выступать номером группы. Полная аналогия со справочником. Ведь ты по сути и эмулируешь отсутствующий справочник.
   uno-group
 
21 - 28.03.19 - 16:08
Проверяешь количество строк и номер последней строки если неравны то тупо перебираешь циклом. Для больших таблиц можно сравнивать присвоенные номера строк и порядковые с каким то шагом например 1000. и если не равны то искать пробел уже последовательным перебором последней группы.
Типа 1000стр=1000ном ок
2000стр=2005. значит перебираем строки с 1000 по 2000 ищем дырки.
   Ботаник Гарден Меран
 
22 - 28.03.19 - 16:23
+(21)
Так как у ТЗ есть индекс, то двоичный поиск можно использовать.
   dezss
 
23 - 28.03.19 - 16:48
(1) +100500
Самый лучший вариант. Но если это делается в каком-то сохраняемом списке, то этот стек тогда нужно сохранять вместе со списком.
   VladZ
 
24 - 28.03.19 - 16:52
(19) Например? Не врубаюсь, зачем это нужно.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.