Текущий архив: 2006.12.31;
Скачать: CL | DM;
ВнизПомогите с растановкой приоритетов Найти похожие ветки
← →
просто_человек (2006-10-19 14:32) [0]Здравствуйте.
при написании базы столкнулся со следующей проблемой. Есть база заказов предприятия, приходящие заказы становятся в очередь на выполнение, по умолчанию, ставлю заказ в конец очереди. У заказа есть Дата_Начала выполнения и Дата_Окончания, причем, Дата_Начала следующего заказа == Дата_Окончания предыдущего. При этом должна быть возможность изменения приоритета - т.е. если например заказ вместо,скажем, 12 изменяется по приоритету на 3, то соответственно все последующие заказы должны "съезжать" на один вниз, с изменением своего приоритета на +1 или соответствующим изменением Даты_Начала и Даты_Окончания.
Подскажите если не сложно как это реализовать.
Всем заранее спасибо
← →
Sergey13 © (2006-10-19 14:45) [1]Завести поле приоритета, по умолчанию = ID. При изменении оного менять это поле. Если ID - integer, можно сделать приоритет дробным числом и давать ему значения типа 345.5 345.55 и т.д. Сортировать ессно по нему.
← →
просто_человек (2006-10-19 15:31) [2]А в какую процедуру загнать действия по изменению приоритета, чтобы она запускалась непосредственно при изменении в ячейке приоритета?
← →
Sergey13 © (2006-10-19 15:33) [3]> [2] просто_человек (19.10.06 15:31)
Переведи. Помедленнее.
← →
Johnmen © (2006-10-19 15:34) [4]В процедуру AfterPost.
← →
просто_человек (2006-10-19 15:47) [5]Хотелось бы иметь следующий порядок действий:
При измнении в таблице ячейки приоритета
1) Приоритет изменяемого заказа ставим любым и желательно нормальным, целым числом.
2) При этом все заказы,начиная с того, чей приоритет мы заняли, сдвигаются на один вниз
3) Дата_Начала и Дата_Окончания изменяются согласно условию Дата_Начала следующего заказа == Дата_Окончания предыдущего
Интересует как это сделать и в какой процедуре, чтобы при этом не вылезло ошибок типа Key Violation из-за того что мы пытаемся поставить уже существующий приоритет и т.д.
Изменения, думаю, надо проводить путем прохождения циклом от того номера строки, соотв. значению что мы поставили в ячейке, до посл строки таблицы?
Или может есть более здравые мысли?
← →
Sergey13 © (2006-10-19 15:49) [6]> [2] просто_человек (19.10.06 15:31)
Кажется въехал. А никакого действия при этом не надо (если я правильно въехал 8-), кроме как пересортировать НД, если этого не произойдет автоматически.
← →
Johnmen © (2006-10-19 15:54) [7]
> Sergey13 © (19.10.06 15:49) [6]
Не въехал...:)
Ему придётся перелопатить все записи с приоритетом, находящимся между старым и новым значением приоритета.
← →
просто_человек (2006-10-19 15:55) [8]всмысля?
← →
просто_человек (2006-10-19 15:56) [9]
> Ему придётся перелопатить все записи с приоритетом, находящимся
> между старым и новым значением приоритета.
>
Вот-вот)))
Только как это правильно сделать, чтоб ничо не глючило...
← →
Sergey13 © (2006-10-19 16:04) [10]> [9] просто_человек (19.10.06 15:56)
> Вот-вот)))
Зачем?
← →
sniknik © (2006-10-19 16:04) [11]индекс по нему установить активным и все, никаких и "перелопачиваний"... (при непрямом доступе через ADO например, сделать локальный индекс/сортировку в результирующем рекордсете)
← →
просто_человек (2006-10-19 16:06) [12]индекс стоит, по нему идет сортировка таблицы
← →
Johnmen © (2006-10-19 16:09) [13]
> Sergey13 ©
> sniknik ©
Мужики, вам пора телепаторы промывать :)))
← →
Sergey13 © (2006-10-19 16:44) [14]> [13] Johnmen © (19.10.06 16:09)
Спиртом? Я не против. 8-)
← →
Johnmen © (2006-10-19 16:57) [15]
> Sergey13 © (19.10.06 16:44) [14]
> Спиртом? Я не против. 8-)
Кто ж откажется? :)
> просто_человек
Проходишь по набору данных в рассматриваемом диапазоне приоритетов в обратном порядке. Изменяемый забиваешь напр.как 99999999. Остальные "двигаешь".Потом изменяемому назначаешь желаемый. Ну и не забываешь при этом подправлять даты.
Всё просто...
← →
Sergey13 © (2006-10-19 17:42) [16]> [15] Johnmen © (19.10.06 16:57)
> Всё просто...
А зачем все это?
Есть данные
ИД Приоритет Документ
1 1 1
2 2 2
3 3 3
Отсортировано по Приоритету. Захотели мы поднять приоритет 3 документа и сделать его 2 по списку. Ну и сделали
ИД Приоритет Документ
1 1 1
3 1.5 3
2 2 2
Все. Что еще менять то?
← →
Johnmen © (2006-10-19 17:44) [17]
> Sergey13 © (19.10.06 17:42) [16]
> Что еще менять то?
Даты.
← →
Sergey13 © (2006-10-19 17:48) [18]> [17] Johnmen © (19.10.06 17:44)
Зачем? Есть документ (заказ) принятый сегодня. Но я крутой и башляю немеряно, поэтому хочу, что бы мой заказ сделали "прям щас", а не после твоего, поданного вчера. Зачем даты то менять? Нужно же просто очередь изменить или я неправильно понимаю слово "приоритет"?
← →
ANB © (2006-10-19 17:50) [19]
> Дата_Начала следующего заказа == Дата_Окончания предыдущего
Одну дату прибить. Вместо этого ввести продолжительность_исполнения. Тогда хватит одного апдейта. Наверное. :)
← →
Sergey13 © (2006-10-19 17:59) [20]> [19] ANB © (19.10.06 17:50)
Мне кажется что Дата_Начала следующего заказа и Дата_Окончания предыдущего присваиваются когда заказ начинает и заканчивает ИСПОЛНЯТЬСЯ. Т.е. когда он уже выбран на исполнение согласно приоритету и приоритет перестает действовать.
← →
просто_человек (2006-10-19 18:16) [21]
> Мне кажется что Дата_Начала следующего заказа и Дата_Окончания
> предыдущего присваиваются когда заказ начинает и заканчивает
> ИСПОЛНЯТЬСЯ. Т.е. когда он уже выбран на исполнение согласно
> приоритету и приоритет перестает действовать.
>
Нет,нет, даты назначаются заранее, время выполнения мы знаем, даты и приоритеты для того и идут чтобы, если заказ по плану не успевает выолнится всрок, то мы меняем его приоритети помещаем в начало очереди
← →
ANB © (2006-10-19 18:41) [22]
> Sergey13 © (19.10.06 17:59) [20]
Судя по текущим условиям тута все одна дата нужна. И длительности каждого заказа. Даты начала и конца (планируемые) можно получить запросом. А исполненные и двигать незачем. Их можно хранить отдельно с заполненными фактическими датами.
Страницы: 1 вся ветка
Текущий архив: 2006.12.31;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.06 c