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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.09.2020, 23:09   #1  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,308 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
AX2012: Область действия в номерной серии
Область действия в номерной серии (AX 2012, D365FO)

Добрый день всем! Хочу немного рассказать про понятие области действия в справочнике номерных серий (для тех, кто пока не сталкивался с этим механизмом). Уж очень многих завлекает область действия с учетом периода финансового календаря и очень хочется с наступлением нового года автоматической смены формата номерной серии и обнуления счетчика.
В целом - это работает, правда как обычно немного не в том видении, в котором по умолчанию может ожидаться увидеть.
Для начала надо понимать, что в механизме номерных серий среди необходимых таблиц есть две ключевые таблицы - собственно сам справочник номерных серий (NumberSequenceTable) и таблица ссылок на них (NumberSequenceReference), часть данных из которой мы видим в формах параметров модулей на закладке "Номерные серии".
В самой карточке номерной серии также есть вкладка Ссылки, которая отображает записи из таблицы ссылок (NumberSequenceReference), в которых содержится ссылка на эту номерную серию.

В прошлых версиях (AX2009 и раньше) данные с вкладки Ссылки из карточки номерных серий суммарно по всем номерным сериям совпадали с данными со вкладок Номерные серии из всех параметров модулей системы. Собственно, эта установка и мешает знатокам АХ2009 и более ранних версий принять новое веяние.
Теперь на закладке "Номерные серии" в параметрах модуля отображаются либо ссылки с областью действия Общие (т.е. настройки номерных серий, единых или сквозных по всем компаниям), либо с областью действия Компания (т.е. те, которые действуют внутри компании. У них еще автоматически добавляется префикс кода компании в формат). Какая область действия фильтруется в какой форме - зависит от формы параметров; в основном - фильтр накладывается с областью действия Компания

Для задания номерных серий с иными областями действия нужно воспользоваться вкладкой Ссылки в карточке номерной серии. Причем список ссылок напрямую зависит от области (т.е. модуля) и области действия, например, если я выберу Область = Расчеты с поставщиками и Область действия = Компания и Период действия финансового календаря, то система мне предложит на выбор только 2 ссылки - Mandat и Bordereau de mandat.
Нажмите на изображение для увеличения
Название: Снимок1.PNG
Просмотров: 99
Размер:	71.5 Кб
ID:	12928

Эти 2 ссылки обусловлены тем, что разработчик при добавлении ссылки в коде явно указал область действия только у этих двух ссылок (см метод NumberSeqModuleVendor.loadModule()). Хочу особо отметить, что эти ссылки допускается использовать и при области действия Компания
Нажмите на изображение для увеличения
Название: SNAG_Program-0055.png
Просмотров: 116
Размер:	96.9 Кб
ID:	12929

А дальше предполагается, что на каждый период нужно создавать свою номерную серию. Т.о. если мы каждый месяц хотим счетчик обнулять, то нужно в справочнике номерных серий на год вручную создать 12 номерных серий и у каждой из них указать свой период финансового календаря. И каждую привязать к ссылке на закладке Ссылки. Важно:
1) эти номерные серии не будут нигде видны из параметров модулей.
2) ссылки на номерные серии хранятся в разрезе записей таблицы NumberSequenceScope, т.е. предполагается, что для каждого периода и каждой компании будет создана своя запись в NumberSequenceScope. Конечно, для одной компании для области действия Компания в данной таблице будет ровно одна запись. Но при использовании других областей действия - этих записей уже будет несколько. Т.е. фактически на один EDT может храниться несколько ссылок на разные номерные серии.

В коде, при обращении к номерной серии нужно будет сначала находить правильную запись в таблице ссылок (NumberSequenceReference), вычисляя для этого правильную запись в NumberSequenceScope:
X++:
client server static NumberSequenceReference numRefMyTypeId(TransDate _date = systemDateGet())
{
    NumberSeqScope scope = NumberSeqScopeFactory::CreateDataAreaFiscalCalendarPeriodScope(curext(), FiscalCalendars::findPeriodByPeriodCodeDate(CompanyInfo::fiscalCalendarRecId(), _date).RecId);

    return NumberSeqReference::findReference(extendedTypeNum(MyTypeId), scope);
}
А после этого уже пользоваться стандартным обращением к классу NumberSeq (приведен пример получения номера для ненепрерывной номерной серии)
X++:
newNumber = NumberSeq::newGetNum(numSeqReference).num();
Полагаю, что область действия Юридическое лицо была сделана для того, чтобы можно было в коде обращаться к разным номерным сериям (из разного scope) в зависимости от кода юридического лица (например, если таблица является общей по компаниям, но в ней есть поле типа LegalEntity, которое в себе содержит ссылку RecId на запись о юридическом лице (по сути той же компании)

Для обнуления счетчика раз в году достаточно либо создать такой специальный период, длиною в год и его выбирать, либо в коде передавать не конкретную дату (_date), а к примеру, dateStartYr(_date) и создавать номерную серию с заданным первым периодом в году.

Из всего этого жалко, что эта функциональность не была распространена (в коробке) на типичные номерные серии, которые требуют обнуления с начала года, например, на авансовые отчеты или на счета-фактуры. Остаётся только либо допиливать, либо использовать её только для новых номерных серий.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 07.09.2020 в 23:14.
За это сообщение автора поблагодарили: AlGol (2), Vadik (1), trud (5), raz (5), mikki_messer (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax 2009, SP1, FP11. Удаление освобожденного номера номерной серии wedmak_dk DAX: Программирование 11 18.09.2015 13:45
Создание номерной серии в DAX2012 Mila DAX: Программирование 5 04.04.2013 18:13
Пропуски в непрерывной номерной серии JBOS DAX: Функционал 0 30.07.2009 10:07
Получение последнего номера из номерной серии longson DAX: Программирование 12 21.06.2007 13:30
Непрерывность номерной серии YaHooka DAX: Функционал 7 30.06.2005 18:04

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

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

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