07.09.2020, 23:09 | #1 |
Administrator
|
AX2012: Область действия в номерной серии
Область действия в номерной серии (AX 2012, D365FO)
Добрый день всем! Хочу немного рассказать про понятие области действия в справочнике номерных серий (для тех, кто пока не сталкивался с этим механизмом). Уж очень многих завлекает область действия с учетом периода финансового календаря и очень хочется с наступлением нового года автоматической смены формата номерной серии и обнуления счетчика. В целом - это работает, правда как обычно немного не в том видении, в котором по умолчанию может ожидаться увидеть. Для начала надо понимать, что в механизме номерных серий среди необходимых таблиц есть две ключевые таблицы - собственно сам справочник номерных серий (NumberSequenceTable) и таблица ссылок на них (NumberSequenceReference), часть данных из которой мы видим в формах параметров модулей на закладке "Номерные серии". В самой карточке номерной серии также есть вкладка Ссылки, которая отображает записи из таблицы ссылок (NumberSequenceReference), в которых содержится ссылка на эту номерную серию. В прошлых версиях (AX2009 и раньше) данные с вкладки Ссылки из карточки номерных серий суммарно по всем номерным сериям совпадали с данными со вкладок Номерные серии из всех параметров модулей системы. Собственно, эта установка и мешает знатокам АХ2009 и более ранних версий принять новое веяние. Теперь на закладке "Номерные серии" в параметрах модуля отображаются либо ссылки с областью действия Общие (т.е. настройки номерных серий, единых или сквозных по всем компаниям), либо с областью действия Компания (т.е. те, которые действуют внутри компании. У них еще автоматически добавляется префикс кода компании в формат). Какая область действия фильтруется в какой форме - зависит от формы параметров; в основном - фильтр накладывается с областью действия Компания Для задания номерных серий с иными областями действия нужно воспользоваться вкладкой Ссылки в карточке номерной серии. Причем список ссылок напрямую зависит от области (т.е. модуля) и области действия, например, если я выберу Область = Расчеты с поставщиками и Область действия = Компания и Период действия финансового календаря, то система мне предложит на выбор только 2 ссылки - Mandat и Bordereau de mandat. Эти 2 ссылки обусловлены тем, что разработчик при добавлении ссылки в коде явно указал область действия только у этих двух ссылок (см метод NumberSeqModuleVendor.loadModule()). Хочу особо отметить, что эти ссылки допускается использовать и при области действия Компания А дальше предполагается, что на каждый период нужно создавать свою номерную серию. Т.о. если мы каждый месяц хотим счетчик обнулять, то нужно в справочнике номерных серий на год вручную создать 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); } X++: newNumber = NumberSeq::newGetNum(numSeqReference).num(); Для обнуления счетчика раз в году достаточно либо создать такой специальный период, длиною в год и его выбирать, либо в коде передавать не конкретную дату (_date), а к примеру, dateStartYr(_date) и создавать номерную серию с заданным первым периодом в году. Из всего этого жалко, что эта функциональность не была распространена (в коробке) на типичные номерные серии, которые требуют обнуления с начала года, например, на авансовые отчеты или на счета-фактуры. Остаётся только либо допиливать, либо использовать её только для новых номерных серий.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 07.09.2020 в 23:14. |
|
|
За это сообщение автора поблагодарили: AlGol (2), Vadik (1), trud (5), raz (5), mikki_messer (1). |