#0
by Гений 1С
Есть некий регистре сведений. В нем есть поле приоритет, задающее порядок сортировки регистра. Нужно так хитро организовать это поле, чтобы можно было переместить любую строку в указанную позицию, при этом чтобы другие строки не модифицировать. Например: Приоритет Пользователь 1 Иванов 2 петров 3 Сидоров Если я хочу поставить Сидорова после Иванова, я должен поставить код 1.5. А человеческий вариант есть, или использовать в качестве приоритета строку длиной N, где N - количество записей в регистре?
#6
by Гений 1С
Хочется минимизировать число изменений поля приоритет при перемещении петрова, иванова, сидорова вверх-вниз по приоритету
#7
by пупсег
Поле "Приоритет" - Тип "Число" с достаточной длины разрядности для точности. При перемещении Приоритет = (ПриоритетПредыдущейЗаписи + ПриоритетПоследующейЗаписи) / 2;
#9
by Гений 1С
гыгыгы... так тогда число битов должно соответствовать числу записей регистра. Видимо задача нерешаемая?
#11
by пупсег
гыгыгы... регламентно пересчитывать поле "порядок" с нужным шагом время от времени нужно.
#12
by Garykom
Сделай отдельную таблицу "относительных приоритетов" аналогично спискам с указателями на предыдущий и последующий элементы. Проще не получится без перенумерации других элементов при вставке-удалении (не перестановке местами)
#14
by Garykom
вот блин проблема, ссылка у предыдущего и последующего элементов друг на друга замкнуть
#15
by Max_Minsk
Еще вариант. При перемещении вверх меняешь приоритет у верхнего на перемещаемый, а у перемещаемого на верхний. И соответственно также при перемещении вниз.
#16
by Garykom
+ обычный иерархический список объектов еще из pascal'я - тогда 1С и в планах не было :)
#18
by Гений 1С
с этого момента поподробнее, че то я не вижу вариантов, даже если делать не на РС а на справочниках
#19
by КонецЦикла
Не так все просто :) Ссылка на какое измерение? :) Если же ссылка на приоритет, то может уже лучше сделать приоритет побольше?
#20
by Garykom
при чем тут измерение? ссылка на элемент ниже/выше конечно доп. функция для сортировки нужна будет
#21
by Гений 1С
ссылка на элемент? Это вы о чем? я вам васю петю для примера привел... Короче регистр состоит из 20 измерений и 10 ресурсов
#22
by КонецЦикла
На какой элемент? Мы говорим за запиись регистра "в регистре сведений нет ссылок" (цы) Гений
#23
by Garykom
для каждого элемента хранишь 2 ссылки (на элемент выше и элемент ниже) и с ними и работаешь, это тормознее при переборе (выборке) но быстрее при вставке-удалении
#25
by Garykom
++ про работу с указателями на объекты в pascal'e почитать стоит или что то типа про алгоритмы и структуры данных
#26
by КонецЦикла
Не знаю даже как бы я сделал :) Наверное хранил бы в каком 36-ном числе (вторая половина "для запаса") При возникновении критической ситуевины - пересчитать поля Но строить немыслимые отчеты имхо труднее и дольше
#28
by Гений 1С
вот я тоже думаю, что приоритет нужно юзать как число, делить пополам, а в случае кризиса - пересчитывать
#29
by zxcvb
Что-то вы не то говорите... Если в контексте 1С. Делаем строку для сортировки (например) 32 символа. 16 резервируем для "нормальной" сортировки: 1,2,3... а 16 для "пересортировки": 1....1,1....11,1.....12 Хватит надолго.:)
#31
by zxcvb
именно! и не выделываться.:) в дело говорит, но как это реализовать? чтоб еще выборка и сортировка быстрая были? На стандартных либах 7.7 - даже и не предположу, сходу...
#33
by Garykom
насчет долго, а как Вы думаете происходит сортировка? А только сравнением двух элементов на больше/меньше и прочие пузырьки и быстрые сортировки шелла и т.д. ЗЫ Всем учить мат. часть :)
#35
by Гений 1С
ты ошибаешься, в 1С сортировка быстрее, чем список, потому что она производится на аппаратном уровне на Б-деревьях базы данных
#36
by Garykom
ииндексыы, ииндексыы, иннндееексыыыы, где вы ау? ;) на аппаратном значит типа процессор и память без всяких dll из состава 1С, да? Б-дерево сначала построить надо. А в данном случае ничего строить не надо уже все есть, конечно запросом хренов и что регистр тоже плохо но пробежаться по ссылкам в цикле или рекурсией разве долго? Кстати каким образом бы сделать ссылки на записи регистра? Коды шо ли уникальные сделать и в измерение их в измерение :)
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Закрытие месяца. Бух просит сделать вместо Д90.8.1 - К26 сделать Д90.2 - К26
- Как сделать в УТ8.0 сделать реализацию по нескольким заказам
- Как можно серый ip сделать белым если сделать у провайдера это нельзя
- Можно ли сделать элемент формы "подменю" сделать недоступным для разворачивания?
- Можно ли сделать реквизит таб. части, сделать недоступным в отдельных строках?
- Конвертация. Как лучше сделать? Как вообще сделать?
В этой группе 1С
- Символ перевода строки при выгрузке в xml
- Оборотный регистр.Измерение и реквизит
- Подключить фискальный регистратор
- ЗиК удержание НДФЛ при увольнении
- Ошибка при подключении АТОЛ дров в 8-ке
- Скульный бекап
- Как в ТиС отключить контроль остатков?
- v7: рабочее место кассира в ТИС
- ЗУП: Почему не рассчитывается НДФЛ?
- v7: Ввод дохода (код 2400) сотрудника в базу.
- v8: Моему гению 1С муза подсказала правильную систему правил для прав доступа
- Как из макета классификатора программно подобрать значения?
- Вывод прописью
- Репликация SQL.
- v7: Отчет по проводкам за период для конфигурации ТиС
- 1C8 - Outlook Программа пытается послать сообщение от Вашего имени
- v8: Сроки выхода новых редакций или релизов тиражных конфигураций 1С
- Как по имени справочника получить Менеджер справочника
- Список значений подчиненного справочника
- FreeBSD 6.2 DVD-образ