|
![]() |
#1 |
Участник
|
Получается такая ситуация, как ее преодолет незнаю.
Ниже приведена джоба, которая создает и освобождаем номер. Номерная серия должна быть Continious. X++: static void Job9(Args _args) { NumberSeq numberSeq; Num number; ; // Method DataSource.create() - craete the number numberSeq = NumberSeq::newGetNumFromCode('Acco_11', true); if (numberSeq) { number = numberSeq.num(); info(number); } // Method DataSource.delete() - delete the number; ttsbegin; numberSeq.abort(); //super() - delete line ttscommit; } Можно зайти в Basic->Setup->Number sequence->NumberSequence и посмотреть List. На отркывшейся форме видно что номер имеет статус Free Переделаем джобу, для вытягивания номерной серии из другой компании. X++: static void Job9(Args _args) { NumberSeq numberSeq; Num number; ; // Method DataSource.create() - craete the number changecompany('VVV') { numberSeq = NumberSeq::newGetNumFromCode('Acco_11', true); if (numberSeq) { number = numberSeq.num(); info(number); } } // Method DataSource.delete() - delete the number; ttsbegin; changecompany('VVV') { numberSeq.abort(); } //super() - delete line ttscommit; } Таблица NumberSequenceList будет проапдейтчена, если переменная abortIdx больше нуля. При вызове numberSeq.abort(); происходить увеличение abortIdx на единицу, т.е. все ок вродебы. Но последний ttscommit для апдейта таблици NumberSequenceList, должен переключится в компанию VVV, но при переключении в эту компанию вызывается ttsbegin, который сбрасывает переменную abortIdx. Application->ttsNotifyCommit()->this.numberSeqGlobal().ttsNotifyCommit();->this.runAutoClean();->Line 23 В результате маемо те що маемо =), т.е. Undecided. Убрать просто ttsbegin-ttscommit я не могу потомучто если у нас не выполнится удаление линии на форме, то и номерная серия должна вернутся в исходное положение, откатится =) |
|
![]() |
#2 |
Участник
|
Цитата:
X++: changecompany('VVV') { ttsbegin; numberSeq.abort(); ttscommit; } |
|
![]() |
#3 |
Участник
|
Да так сработает, но так к сожалению нельзя.
Потомучто метод super() иnumberSeq.abort(); должны находится в одной транзакции. Table.Delete() X++: void delete() { ttsbegin; changecompany('VMI') { numberSeq.abort(); } super(); ttscommit; } |
|
![]() |
#4 |
Участник
|
Вообще как то все муторно получается...Насколько я понял, в момент удаления записи в текущей компании Вам нужно освободить номер сгенерированный в другой компании. Попробуйте посмотреть в сторону NumberSeq::release(); (только осторожней с ним, могут быть блокировки)
|
|
![]() |
#5 |
Участник
|
Да именно. Нужно удалить номер с другой компании, так как он сгенерировался в другой компании.
Форма работает с классом NumberSeqFormHandler, поэтому я хочу использовать стандартный подход Спасибо за участие ![]() |
|