Как сделать хитрое указание порядка. #258107


#0 by Гений 1С
Есть некий регистре сведений. В нем есть поле приоритет, задающее порядок сортировки регистра. Нужно так хитро организовать это поле, чтобы можно было переместить любую строку в указанную позицию, при этом чтобы другие строки не модифицировать. Например: Приоритет    Пользователь 1        Иванов 2        петров 3        Сидоров Если я хочу поставить Сидорова после Иванова, я должен поставить код 1.5. А человеческий вариант есть, или использовать в качестве приоритета строку длиной N, где N - количество записей в регистре?
#1 by Terv
а не проще ли менять сортировку в Табличном поле? или я чего то не понимаю?
#2 by Terv
+1 тем более мне лично не известно такое понятие как "порядок сортировки регистра"
#3 by sergeante
>> строку длиной N, где N - количество записей в регистре с ума сошёл?
#4 by КонецЦикла
Изолировать тебя надо от общества :)
#5 by Гений 1С
ВЫБРАТЬ * ИЗ Регистр.*** Упорядочить по Приоритет, далее по тексту в , так понятнее?
#6 by Гений 1С
Хочется минимизировать число изменений поля приоритет при перемещении петрова, иванова, сидорова вверх-вниз по приоритету
#7 by пупсег
Поле "Приоритет" - Тип "Число" с достаточной длины разрядности для точности. При перемещении Приоритет = (ПриоритетПредыдущейЗаписи + ПриоритетПоследующейЗаписи) / 2;
#8 by Garykom
даа, вспоминается "RENUM N1, N2" из барсика
#9 by Гений 1С
гыгыгы... так тогда число битов должно соответствовать числу записей регистра. Видимо задача нерешаемая?
#10 by Гений 1С
именно
#11 by пупсег
гыгыгы... регламентно пересчитывать поле "порядок" с нужным шагом время от времени нужно.
#12 by Garykom
Сделай отдельную таблицу "относительных приоритетов" аналогично спискам с указателями на предыдущий и последующий элементы. Проще не получится без перенумерации других элементов при вставке-удалении (не перестановке местами)
#13 by Гений 1С
мдя, а если элемент будет удален...
#14 by Garykom
вот блин проблема, ссылка у предыдущего и последующего элементов друг на друга замкнуть
#15 by Max_Minsk
Еще вариант. При перемещении вверх меняешь приоритет у верхнего на перемещаемый, а у перемещаемого на верхний. И соответственно также при перемещении вниз.
#16 by Garykom
+ обычный иерархический список объектов еще из pascal'я - тогда 1С и в планах не было :)
#17 by Гений 1С
в регистре сведений нет ссылок
#18 by Гений 1С
с этого момента поподробнее, че то я не вижу вариантов, даже если делать не на РС а на справочниках
#19 by КонецЦикла
Не так все просто :) Ссылка на какое измерение? :) Если же ссылка на приоритет, то может уже лучше сделать приоритет побольше?
#20 by Garykom
при чем тут измерение? ссылка на элемент ниже/выше конечно доп. функция для сортировки нужна будет
#21 by Гений 1С
ссылка на элемент? Это вы о чем? я вам васю петю для примера привел... Короче регистр состоит из 20 измерений и 10 ресурсов
#22 by КонецЦикла
На какой элемент? Мы говорим за запиись регистра "в регистре сведений нет ссылок" (цы) Гений
#23 by Garykom
для каждого элемента хранишь 2 ссылки (на элемент выше и элемент ниже) и с ними и работаешь, это тормознее при переборе (выборке) но быстрее при вставке-удалении
#24 by Garykom
+ в данном случае элемент - это запись регистра
#25 by Garykom
++ про работу с указателями на объекты в pascal'e почитать стоит или что то типа про алгоритмы и структуры данных
#26 by КонецЦикла
Не знаю даже как бы я сделал :) Наверное хранил бы в каком 36-ном числе (вторая половина "для запаса") При возникновении критической ситуевины - пересчитать поля Но строить немыслимые отчеты имхо труднее и дольше
#27 by Гений 1С
да нет в РС ссылок, да и сортировка будет какой??? ужас, долго!
#28 by Гений 1С
вот я тоже думаю, что приоритет нужно юзать как число, делить пополам, а в случае кризиса - пересчитывать
#29 by zxcvb
Что-то вы не то говорите... Если в контексте 1С. Делаем строку для сортировки (например) 32 символа. 16 резервируем для "нормальной" сортировки: 1,2,3... а 16 для "пересортировки": 1....1,1....11,1.....12 Хватит надолго.:)
#30 by КонецЦикла
Хватит ГОРАЗДО меньше!
#31 by zxcvb
именно! и не выделываться.:) в дело говорит, но как это реализовать? чтоб еще выборка и сортировка быстрая были? На стандартных либах 7.7 - даже и не предположу, сходу...
#32 by zxcvb
Ну это я загнул конечно.:) Пусть сам считает, сколько там ему надо...
#33 by Garykom
насчет долго, а как Вы думаете происходит сортировка? А только сравнением двух элементов на больше/меньше и прочие пузырьки и быстрые сортировки шелла и т.д. ЗЫ Всем учить мат. часть :)
#34 by КонецЦикла
Ну накропай запросец, интересно взглянуть :)
#35 by Гений 1С
ты ошибаешься, в 1С сортировка быстрее, чем список, потому что она производится на аппаратном уровне на Б-деревьях базы данных
#36 by Garykom
ииндексыы, ииндексыы, иннндееексыыыы, где вы ау? ;) на аппаратном значит типа процессор и память без всяких dll из состава 1С, да? Б-дерево сначала построить надо. А в данном случае ничего строить не надо уже все есть, конечно запросом хренов и что регистр тоже плохо но пробежаться по ссылкам в цикле или рекурсией разве долго? Кстати каким образом бы сделать ссылки на записи регистра? Коды шо ли уникальные сделать и в измерение их в измерение :)
#37 by КонецЦикла
За перебор Гению будет незачот. Нам запрос подавай
#38 by Garykom
Запрос так запрос, только с функцией ;)
#39 by Гений 1С
садись, два балла, объяснять даже лень, вы не знаете структуру 1с.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С