Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

Помогите с растановкой приоритетов   Найти похожие ветки 

 
просто_человек   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.078 c
15-1165303847
Kerk
2006-12-05 10:30
2006.12.31
Сценарий телесериала "Бригада"


11-1142432146
Vladimir Kladov
2006-03-15 17:15
2006.12.31
Надо исправить линки на


2-1165905216
Steep
2006-12-12 09:33
2006.12.31
Реестр


15-1165816847
vidiv
2006-12-11 09:00
2006.12.31
Создание учетной записи администратора


15-1165527175
Mr. D
2006-12-08 00:32
2006.12.31
Как заставить TMediaPlayer показывать видео на весь экран?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский