AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.07.2007, 14:48   #1  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Натолкнулся на непонятный момент. У формы StaffingList выставлено AutoSplitKey = true
Если на поле вторичного ключа наложен фильтр (я пока не смог уловить однозначную закономерность,
но всегда проявляется если отфильтровано 1 или 2 записи и вставка ведется в позицию перед последней записью),
то при копировании записи возникает ошибка "запись с таким значением ключа уже существует"
Ктото может прокоментировать?
Старый 05.07.2007, 15:00   #2  
kas1 is offline
kas1
Участник
 
51 / 10 (1) +
Регистрация: 13.02.2007
А можно поподробнее в чем суть вопроса. А то непонятно, что вы делаете со штатным расписанием???.
Старый 05.07.2007, 15:25   #3  
artkashin is offline
artkashin
Участник
MCBMSS
 
519 / 18 (2) ++
Регистрация: 06.12.2006
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Натолкнулся на непонятный момент. У формы StaffingList выставлено AutoSplitKey = true
Если на поле вторичного ключа наложен фильтр (я пока не смог уловить однозначную закономерность,
но всегда проявляется если отфильтровано 1 или 2 записи и вставка ведется в позицию перед последней записью),
то при копировании записи возникает ошибка "запись с таким значением ключа уже существует"
Ктото может прокоментировать?
это особенность AutoSplitKey. Он работает только когда стоит сортировка по первичному ключу. Принцип работы прост:
При вставке новой записи между строк, автосплиткей сравнивает эти две строки (например в заказе продажи) - у первой "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  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
есть такая возможность вносить изменения в штатное расписание через форму, сохраняя историю. Механизм описан в мануале, его суть.
Имеем какую-то должность с определенным окладом, количеством ставок и т.п. И нам допустим нужно увеличить количество ставок.
Берем копируем строку штатного, нажимаем F3, вставляем в появившуюся строку. В новой вставленной строке делаем дату начала периода действия = с какого времени вводятся дополнительные ставки, в поле ставки пишем новое количество ставок.
А в исходной строке штатного делаем дату окончания периода действия = предыдущему дню.
Получается мы изменили штатное сохранив для истории его предыдущее состояние и дату измененния.

И вот во время этого процесса я заметил вышеописанную странность.
Старый 05.07.2007, 15:31   #5  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
2 Kashin
Цитата:
это особенность AutoSplitKey. Он работает только когда стоит сортировка по первичному ключу.
Так я в курсе. Сортировка как стояла так и стоит по первичному ключу. Я же описал что ошибка появляется при наложении фильтра.
Старый 05.07.2007, 15:36   #6  
artkashin is offline
artkashin
Участник
MCBMSS
 
519 / 18 (2) ++
Регистрация: 06.12.2006
Цитата:
Сообщение от VasVovec Посмотреть сообщение
2 Kashin

Так я в курсе. Сортировка как стояла так и стоит по первичному ключу. Я же описал что ошибка появляется при наложении фильтра.
Нет разницы.
Допустим, у вас отсортировалось только 2 записи, номера которых =
20000
и
40000
При попытке вставить между этими двумя строками строку с номером 30000(по формуле Автосплиткея именно такая строка и будет вставлена), произойдет ошибка, так как такая строка уже существует, хоть и в фильтры не попадает.
Старый 05.07.2007, 16:01   #7  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Я тоже об этом подумал. Мелкософт мог бы и внести этот пункт в справку, а то там указано только про сортировку по первичному ключу и integer'ное поле в нем
Видимо придется за ними доделывать самому
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:10.