Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с растановкой приоритетов [D6, Paradox]


Страницы:   1 2

просто_человек ©   (2006-10-19 14:32:00) 

Здравствуйте.
при написании базы столкнулся со следующей проблемой. Есть база заказов предприятия, приходящие заказы становятся в очередь на выполнение, по умолчанию, ставлю заказ в конец очереди. У заказа есть Дата_Начала выполнения и Дата_Окончания, причем, Дата_Начала следующего заказа == Дата_Окончания предыдущего. При этом должна быть возможность изменения приоритета - т.е. если например заказ вместо,скажем, 12 изменяется по приоритету на 3, то соответственно все последующие заказы должны "съезжать" на один вниз, с изменением своего приоритета на +1 или соответствующим изменением Даты_Начала и Даты_Окончания.

Подскажите если не сложно как это реализовать.
Всем заранее спасибо


ANB   (2006-10-19 18:41:00) [1]


> Sergey13 ©   (19.10.06 17:59) [20]

Судя по текущим условиям тута все одна дата нужна. И длительности каждого заказа. Даты начала и конца (планируемые) можно получить запросом. А исполненные и двигать незачем. Их можно хранить отдельно с заполненными фактическими датами.


просто_человек   (2006-10-19 18:16:00) [2]


> Мне кажется что Дата_Начала следующего заказа и Дата_Окончания
> предыдущего присваиваются когда заказ начинает и заканчивает
> ИСПОЛНЯТЬСЯ. Т.е. когда он уже выбран на исполнение согласно
> приоритету и приоритет перестает действовать.
>

Нет,нет, даты назначаются заранее, время выполнения мы знаем, даты и приоритеты для того и идут чтобы, если заказ по плану не успевает выолнится всрок, то мы меняем его приоритети помещаем в начало очереди


Sergey13   (2006-10-19 17:59:00) [3]

> [19] ANB ©   (19.10.06 17:50)

Мне кажется что Дата_Начала следующего заказа и Дата_Окончания предыдущего присваиваются когда заказ начинает и заканчивает ИСПОЛНЯТЬСЯ. Т.е. когда он уже выбран на исполнение согласно приоритету и приоритет перестает действовать.


ANB   (2006-10-19 17:50:00) [4]


> Дата_Начала следующего заказа == Дата_Окончания предыдущего

Одну дату прибить. Вместо этого ввести продолжительность_исполнения. Тогда хватит одного апдейта. Наверное. :)


Sergey13   (2006-10-19 17:48:00) [5]

> [17] Johnmen ©   (19.10.06 17:44)

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


Johnmen   (2006-10-19 17:44:00) [6]


> Sergey13 ©   (19.10.06 17:42) [16]
> Что еще менять то?


Даты.


Sergey13   (2006-10-19 17:42:00) [7]

> [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 16:57:00) [8]


> Sergey13 ©   (19.10.06 16:44) [14]
> Спиртом? Я не против. 8-)


Кто ж откажется? :)


> просто_человек


Проходишь по набору данных в рассматриваемом диапазоне приоритетов в обратном порядке. Изменяемый забиваешь напр.как 99999999. Остальные "двигаешь".Потом изменяемому назначаешь желаемый. Ну и не забываешь при этом подправлять даты.
Всё просто...


Sergey13   (2006-10-19 16:44:00) [9]

> [13] Johnmen ©   (19.10.06 16:09)

Спиртом? Я не против. 8-)


Johnmen   (2006-10-19 16:09:00) [10]


> Sergey13 ©
> sniknik ©  


Мужики, вам пора телепаторы промывать :)))


просто_человек   (2006-10-19 16:06:00) [11]

индекс стоит, по нему идет сортировка таблицы


sniknik   (2006-10-19 16:04:00) [12]

индекс по нему установить активным и все, никаких и "перелопачиваний"... (при непрямом доступе через ADO например, сделать локальный индекс/сортировку в результирующем рекордсете)


Sergey13   (2006-10-19 16:04:00) [13]

> [9] просто_человек   (19.10.06 15:56)
> Вот-вот)))

Зачем?


просто_человек   (2006-10-19 15:56:00) [14]


> Ему придётся перелопатить все записи с приоритетом, находящимся
> между старым и новым значением приоритета.
>


Вот-вот)))
Только как это правильно сделать, чтоб ничо не глючило...


просто_человек   (2006-10-19 15:55:00) [15]

всмысля?


Johnmen   (2006-10-19 15:54:00) [16]


> Sergey13 ©   (19.10.06 15:49) [6]


Не въехал...:)
Ему придётся перелопатить все записи с приоритетом, находящимся между старым и новым значением приоритета.


Sergey13   (2006-10-19 15:49:00) [17]

> [2] просто_человек   (19.10.06 15:31)

Кажется въехал. А никакого действия при этом не надо (если я правильно въехал 8-), кроме как пересортировать НД, если этого не произойдет автоматически.


просто_человек   (2006-10-19 15:47:00) [18]

Хотелось бы иметь следующий порядок действий:
При измнении в таблице ячейки приоритета
1) Приоритет изменяемого заказа ставим любым и желательно нормальным, целым числом.
2) При этом все заказы,начиная с того, чей приоритет мы заняли, сдвигаются на один вниз
3) Дата_Начала и Дата_Окончания изменяются согласно условию Дата_Начала следующего заказа == Дата_Окончания предыдущего

Интересует как это сделать и в какой процедуре, чтобы при этом не вылезло ошибок типа Key Violation из-за того что мы пытаемся поставить уже существующий приоритет и т.д.

Изменения, думаю, надо проводить путем прохождения циклом от того номера строки, соотв. значению что мы поставили в ячейке, до посл строки таблицы?
Или может есть более здравые мысли?


Johnmen   (2006-10-19 15:34:00) [19]

В процедуру AfterPost.


Sergey13   (2006-10-19 15:33:00) [20]

> [2] просто_человек   (19.10.06 15:31)
Переведи. Помедленнее.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо