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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.06.2011, 15:38   #7  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
В общем - при работе с номерными сериями, есть два режима - простой и сложный
Простой режим работает тогда, когда выделение номера в номерной серии и его использование (то есть - засовывание в поле какой-то записи какой-то таблицы) происходят в рамках одной транзакции. В момент выделения номера, новый номер пишется в таблицу NumberSequenceList, и помечается там статусом Нерешенный (Undecided). Если транзакция успешно завершается, в момент завершения все выделенные номера помечаются как используемые. Если транзакция о откатывается, то в момент отката все нерешенные номера, выделенные в рамках откатываемой транзакции, помечаются как свободные. Штатный аллокатор номеров в номерной серии, перед тем как создать новый номер из счетчика, сначала пытается реюзать свободные номера из NumberSequenceList.

Сложный способ используется тогда, когда выделение и использование номера разделены по времени. В этом случае, при создании класса NumberSeq(),в конструктор передается второй параметр decideLater==true. В этом случае, где-то в своем коде, если ты (или пользователь) решил не использовать уже выделенный номер, ты должен вызвать NumberSeq::Release(), если решил использовать - numberSeq.used(). Если ты ни один из методов не вызвал, то номер будет вечно висеть в статусе Undecided, приводя к распуханию таблицы.
При работе с журналом/заказом/закупкой и тп в интерактивном режиме, возможен сценарий, при котором пользователь создал запись (при этом система снегерирует новый номер в номерной серии и запишет его в поле новой записи), а потом вышел из формы без сохранения, или просто удалил запись до сохранения ее в БД. Для того чтобы отслеживать использование/неиспользование номеров, для таких форм был написан класс NumberSeqFormHandler, который обрабатывает в "сложном" режиме, выделение, пометку как использованных и освобождение номеров в номерной серии.

Поскольку при программном создании строк журнала, вариант "Создали запись, захватили номер ваучера, а потом передумали и не сохранились" невозможен, то никакие used() или Release() не используются, поскольку номера будут корректно помечены как использованные или неиспользованные при успешном или неуспешном завершении транзакции "простым" механизмом.

Последний раз редактировалось fed; 27.06.2011 в 15:54.
За это сообщение автора поблагодарили: Logger (3), Ivanhoe (5), IKA (1), alex55 (1), S.Kuskov (5), someOne (3), Eloy (1).
Теги
number sequence, номерная серия, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Счет фактура по строке общего журнала Starling DAX: Функционал 2 28.09.2011 18:31
ОС: Ошибка при создании строк журнала ввода в эксплуатацию через групповую операцию USTA DAX: Функционал 1 14.05.2009 15:55
Ошибка при создании журнала ega DAX: Администрирование 8 14.04.2008 09:06
Ошибка при создании журнала заверш. маршрута WMP DAX: Функционал 1 23.08.2006 09:22
3.0, Модуль: ОС, операция: Разноска строк журнала ОС (с предварит просм проводок) MagisterLudi DAX: Функционал 2 07.10.2003 18:55

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

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

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