![]() |
#4 |
Участник
|
В общем я считаю что это бага!
Т.к. изначальной логикой(как мне показалось, поправть если не прав) должно было быть следующие: Есть таблица_1, с настроенной НЕПРЕРЫВНОЙ номерной серией NumSeq_1.(###; след 1; т.е. вид будет 001 ) Программист(т.е. Я ![]() Дейсвтия происходят в ОДИН день. 1. Заходит User_1 в AX, создает к примеру 3 записи в таблица_1. 001 002 003 2. тут же заходит User_2 в AX, создает к примеру 1 запись в таблица_1. 004 3. User_2 захотел удалить ПЕРВУЮ запись из таблица_1. Запись благополучно удаляется! Но номерная серия не очищается!!! Т.к. User_1 еще в системе! 4. User_1 создает еще 1 запись в таблица_1. 005, т.к. номерная серия не очисталась(нельзя очистить ЧУЖУЮ номерную серию пока этот чужой ещё в системе! Кроме случая если это происходит в другой день) 5. User_1 выходит из AX. 6. User_2 захотел удалить запись 005 из таблица_1. Запись благополучно удаляется! И номерная серия становится со статусом СВОБОДНАЯ. Т.к. User_1 уже вышел из AX! Но сейчас у меня такого НЕ происходит, и номерная серия НЕ очищается!!! Посмотрел как это все реализовано в 5ке, там вызывается метод \Classes\Global\isSessionActive в котором есть проверка закрыта ли сессия: X++: .. select session where session.SessionId == _sessionId; if ( session && session.Status > 0 ) .. Т.е. чтоб решить мою проблему надо перенсти изменения с 5ки! Решение №2 Оказывается еще ВАЖНЫМ фактором является что пердается ВТОРЫМ параметром при использовании numberSeq = NumberSeq::newGetNumFromCode(numSeq, true); Если передавать TRUE. То каждый раз при создании записи в таблица_1, будет создаваться запись в NumberSequenceList! Она будет только менять свой статус с Active на Free, после удаления строки из таблица_1. И в результате получаем проблему описанную в Решение 1 Если передать FALSE(ОБЯЗАТЕЛЬНО нужно использовать ttsBegin и ttsCommit, взял здесь): X++: ttsBegin; numberSeq = NumberSeq::newGetNumFromCode( , false); myNum = numberSeq.num(); ttsCommit; в момент выполнения, ttsCommit;. ttsCommit вызывает очистку номерной серии см. Рисунок Запись в NumberSequenceList ПОВТОРНО СОЗДАЕТСЯ в момент УДАЛЕНИЯ строки из таблица_1, со статусом FREE(типа готова к повторному использованию). НО есть один минус, нельзя посмотреть какие номера сейчас используются!!!(кнопка список Список в форме Номерные серии) т.к. таблица NumberSequenceList пуста. В ней будут видны только те номера, которые свободны и готовы к использованию. Таким образом Если передаем FALSE то ЗАНЯТЫЕ num не хранятся в базе(NumberSequenceList). Хранятся только СВОБОДНЫЕ со статусом FREE. Если TRUE, то запись постоянно хранится в NumberSequenceList, и только меняет статус с Active на FREE Итого два решения Править код 4ки как в 5ке(пока не уверен) Передавать FALSE(дефалтовое!!!) вторым параметром думаем ![]() Последний раз редактировалось Proba; 03.12.2010 в 10:13. |
|