05.07.2007, 14:48 | #1 |
Участник
|
Натолкнулся на непонятный момент. У формы StaffingList выставлено AutoSplitKey = true
Если на поле вторичного ключа наложен фильтр (я пока не смог уловить однозначную закономерность, но всегда проявляется если отфильтровано 1 или 2 записи и вставка ведется в позицию перед последней записью), то при копировании записи возникает ошибка "запись с таким значением ключа уже существует" Ктото может прокоментировать? |
|
05.07.2007, 15:00 | #2 |
Участник
|
А можно поподробнее в чем суть вопроса. А то непонятно, что вы делаете со штатным расписанием???.
|
|
05.07.2007, 15:25 | #3 |
Участник
|
Цитата:
Сообщение от VasVovec
Натолкнулся на непонятный момент. У формы StaffingList выставлено AutoSplitKey = true
Если на поле вторичного ключа наложен фильтр (я пока не смог уловить однозначную закономерность, но всегда проявляется если отфильтровано 1 или 2 записи и вставка ведется в позицию перед последней записью), то при копировании записи возникает ошибка "запись с таким значением ключа уже существует" Ктото может прокоментировать? При вставке новой записи между строк, автосплиткей сравнивает эти две строки (например в заказе продажи) - у первой "Line no." = 10000, у второй "Line No." = 20000. Разницу между значениями он делит на два и прибавляет к минимальной, в итоге = (20000-10000)/2+10000 = 15000. Происходит вставка строки, у которой "Line No." = 15000. Теперь, допустим, вы отсортировали по вторичному ключу, и у вас последовательно пять строк "Line No." которых 10000 60000 30000 40000 20000 50000 При попытке вставить между 20000 и 40000 строкой произойдет ошибка, по причине того, что расчет AvtoSplitKey даст строку с номером 30000, а такая в базе уже есть! |
|
05.07.2007, 15:27 | #4 |
Участник
|
есть такая возможность вносить изменения в штатное расписание через форму, сохраняя историю. Механизм описан в мануале, его суть.
Имеем какую-то должность с определенным окладом, количеством ставок и т.п. И нам допустим нужно увеличить количество ставок. Берем копируем строку штатного, нажимаем F3, вставляем в появившуюся строку. В новой вставленной строке делаем дату начала периода действия = с какого времени вводятся дополнительные ставки, в поле ставки пишем новое количество ставок. А в исходной строке штатного делаем дату окончания периода действия = предыдущему дню. Получается мы изменили штатное сохранив для истории его предыдущее состояние и дату измененния. И вот во время этого процесса я заметил вышеописанную странность. |
|
05.07.2007, 15:31 | #5 |
Участник
|
2 Kashin
Цитата:
это особенность AutoSplitKey. Он работает только когда стоит сортировка по первичному ключу.
|
|
05.07.2007, 15:36 | #6 |
Участник
|
Цитата:
Допустим, у вас отсортировалось только 2 записи, номера которых = 20000 и 40000 При попытке вставить между этими двумя строками строку с номером 30000(по формуле Автосплиткея именно такая строка и будет вставлена), произойдет ошибка, так как такая строка уже существует, хоть и в фильтры не попадает. |
|
05.07.2007, 16:01 | #7 |
Участник
|
Я тоже об этом подумал. Мелкософт мог бы и внести этот пункт в справку, а то там указано только про сортировку по первичному ключу и integer'ное поле в нем
Видимо придется за ними доделывать самому |
|