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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.01.2007, 22:55   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,990 / 3293 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Описанная проблема возникает из-за того что метод NumberSeq::release() использует текущее соединение с базой для обновления таблиц numberSequenceTable и numberSequenceList

Если мы посмотрим как работает метод NumberSeq.getNumInternal() (этот метод вызывается, когда мы получаем номер из номерной серии) то видим, что для доступа к таблицам номерных серий numberSequenceTable и numberSequenceList используется отдельное соединение с базой. Это нужно для того чтобы снизить вероятность блокировки пользователями друг друга при разносках документов и при обработке накладных.

А метод NumberSeq::release() так не делает !

Из за чего клиент может легко заблокировать сам себя при определенной последовательности вызовов. (пример Wamr-а)

При работе в системе этот баг может проявляться если
1. мы пытаемся в одной транзакции рассопоставить несколько проводок (более одной).
2. удалили строку LedgerJournalTrans и затем попытались создать заново выделив новый Voucher

(2- верно для случая когда
X++:
        ledgerJournalType != LedgerJournalType::Periodic    &&
        ledgerJournalType != LedgerJournalType::VendInvoicePool &&
        ledgerJournalType != LedgerJournalType::VendInvoicePoolNotPosted)
см. код метода LedgerJournalTran.delete()
)

Случаи 1 и 2 удалось воспроизвести только при написании модификаций, джобов. При обычной работе системы без модификаций глюк не воспроизводился.

Прилагаю вложение с исправлением кода метода NumberSeq::release()

Ax 3.0 sp3 Oracle

P.S.
Внимательно пересмотрел классы по работе с номерными сериями - проблема с блокировками может возникать также при использовании метода
\Classes\NumberSeq_RU\useNumFromList
так как там тоже идет обращение к таблицам номерных серий через обычное соединение. - Как следствие могут быть проблемы с блокировками.

Этот метод используется при обработке счетов фактур. Тоже надо бы пофиксить.
Вложения
Тип файла: txt NumberSeq_release.txt (5.1 Кб, 608 просмотров)

Последний раз редактировалось Logger; 10.01.2007 в 22:59. Причина: Добавлено вложение
За это сообщение автора поблагодарили: Dron AKA andy (2), Ivan Mischenko (1), Vadik (5), Roman777 (2), SHiSHok (2), wojzeh (1), sgt.Pepper (1), jkspb (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Блокировка таблиц пр InnerJoin Logger DAX: Программирование 5 26.11.2007 18:21
Блокировка ключа индекса Sequel DAX: Программирование 4 06.07.2006 16:08
Блокировка в сводном планировании BeLFO DAX: Функционал 5 01.09.2005 09:12
Блокировка ключа индексации velk DAX: Программирование 2 10.08.2005 12:01
Блокировка всех таблиц DreamCreator DAX: Администрирование 1 09.08.2005 16:07
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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