Бюджетирование в AX 2012 (Часть 1)
Contents
Бюджетирование в AX 2012
В AX 2012 возможности бюджетирования были расширены, чтобы обеспечить большую функциональность в сравнении с ранними версиями системы. Для поддержки новой функциональности, бюджетирование было интегрировано с главной книгой, с новой структурой бухгалтерского учета, планом счетов, финансовыми аналитиками и аналитиками главной книги. Также бюджетирование было интегрировано с валютой и типами курсов обмена, шаблоны интеграции данных были полностью пересмотрены.
В AX 2009 и более ранних версиях, все данные бюджетирования хранились в таблице LedgerBudget. Распределение бюджета хранится в одной таблице, а изменения поддерживались через связь с таблицей BudgetRevision. Запись всегда считалась доступной для обработки и отчетности, если специально не указано другое. Пользователь должен был указывать основной номер счета. Не существовало способа, позволяющего различать типы бюджетов или определять принадлежность бюджетных сумм для прогнозов доходов или расходов.
В AX 2012 реализована концепция «бюджетной операции». Таблица LedgerBudget была нормализована в таблицы BudgetTransactionHeader и BudgetTransactionLine. Свойство «SaveDataPerCompany» в таблицах имеет значение «No». Таблица BudgetModel была взята без изменений из AX 2009. Таблицы, которые поддерживали LedgerBudget (LedgerBudgetSettlement и BudgetRevision) были удалены. Бюджетирование поддерживает новую структуру бюджетного контроля. Ниже представлена модель данных бюджетирования.
Таблица BudgetTransactionHeader
Таблица содержит ссылку на таблицу главной книги (поле PrimaryLedger), которая идентифицирует юридическое лицо, связанное с данными бюджетной операции. Таблица содержит следующие значения, которые помогают классифицировать операции:
-
Ссылка на таблицу BudgetModel, которая содержит пользовательские справочные данные.
-
Ссылка на таблицу BudgetTransactionCode, которая определяет код операции.
-
Тип значения (поле BudgetTransactionType).
Таблица содержит также статус операции (поле BudgetTransactionStatus), который поддерживает значения «Draft», это статус операции, позволяющий редактировать ее и статус «Completed», который значит, что бюджетная операции больше не может быть изменена и может быть включена в отчетность.
Таблица BudgetTransactionLine
AX 2012 продолжает поддерживать распределение бюджета с помощью ключей распределения периода, но используется новая терминология. Строки бюджетной операции могут быть сгенерированы с помощью шаблонов, для повторяющихся бюджетных сумм.
Дополнительно, когда бюджет передан из других модулей, таких как «Проект, Основные средства и Управление запасами и складами», суммы операций, которые ранее уже были переданы, могут быть отменены, вместо того, чтобы быть удалены, как в случае AX 2009. Эта функция принята для расширенного контроля изменений бюджета. Изменения отслеживаются с помощью таблицы BudgetTransactionLineReverse, которая содержит ссылки на обе строк BudgetTransactionLine, которая была отменена, и которая содержит измененную информацию.
BudgetTransactionLine содержит ссылку на аналитику главной книги, которая записывается в поле LedgerDimension. Эта ссылка должна всегда содержать значение «Budget» из перечисления LedgerDimensionType. Перечисления LedgerDimensionType различает типы аналитик главной книги, которые могут быть сохранены в таблице DimensionAttributeValueCombination. LedgerDimensionBudget – расширенный тип данных, используется для разграничения аналитики главной книги бюджета.
Только финансовые аналитики, которые спроектированы для использования в бюджетировании, могут быть включены аналитику главной книги бюджета. Они хранятся в таблице BudgetPrimaryLedgerDimensionAttribute. Данная таблица содержит ссылки на финансовые аналитики, которые найдены в плане счетов главной книге, и которые используются в бюджетировании. Таблица связывает записи главной книги с записями DimensionAttribute.
Строки бюджетной операции хранят сумму корректировки бюджета. Эта сумма вводится в валюте операции, определённой для строки. Если строка имеет значение в поле BudgetType = «Revenue» (Доход), то знак (+ или -) суммы корректируется, когда происходит сохранение в базе данных. Если строка имеет значение «Expense» (Расход), то знак остается такой же, какой был введен.
Сумма в строке хранится в валюте операции (поле TransactionCurrencyAmount) и в валюте счета главной книги (поле AccountingCurrencyAmount). Сумма конвертируется в валюту счета с использование типа курса валюты для бюджета. Данный тип определен в параметрах главной книги. Метод calculateTransAmountToAccountingAmount класса BudgetTransactionManager выполняет расчет суммы в валюте счета.
Передача бюджетов между модулями
Передача бюджетов и прогнозов из модулей «Проектов, Основные средства и Управление запасами и складами» в модуль «Главная книга» сохранился в AX 2012, как и передача бюджетов из модуля «Главная книга» в модуль «Учет затрат». Однако, обратное действие – передача из модуля «Учет затратов» в модуль «Главная книга» было удалено из AX 2012.
Для поддержки переноса бюджетов и прогнозов между модулями необходимы разные схемы передачи данных финансового измерения. Это связано с тем, что для бюджетирования в модуле Главной книги можно включить только подмножество атрибутов измерения, указанных в перенесенном бюджете.
Шаблоны кода Х++
Класс «BudgetTransactionManager» — это класс-помощник, который обеспечивает поддержку бюджетных операций. Некоторые ключевые методы этого классы описаны ниже.
Создание аналитик главной книги для бюджета
Для создания используются следующие методы:
-
saveLedgerDimensionBudget – при создании аналитики главной книги с типом бюджет (далее, аналитика бюджета), используются значения атрибутов аналитик из другой ссылки на аналитику главной книги. Используются только атрибуты аналитик, которые включены в набор аналитик доступных для создания аналитики бюджета.
-
getLedgerDimensionBudget – объединение из основного счета и аналитик, используемых по умолчанию, для создания одного набора аналитик бюджета. Используются только атрибуты аналитик, которые включены в набор аналитик доступных для создания аналитики бюджета.
-
mergeDefaultDimWithLedgerDim – объединение аналитики главной книги с аналитиками по умолчанию в одну аналитику бюджета. Используются только атрибуты аналитик, которые включены в набор аналитик доступных для создания аналитики бюджета.
Конвертирование суммы операции в валюте счета
Для конвертирования суммы используется следующий метод:
-
calculateTransAmountToAccountingAmount – конвертирует сумму в валюте счета, используя для этого тип обменного курса, указанный для бюджета в настройках главной книги.
Проверка бюджетных операций
Вся логика проверки бюджетных операций выполняется в методах класса «BudgetTransactionManager», для того, чтобы обеспечить возможность совместного использования их как расширенным клиентом, так и сервисом. Следующие методы используются для проверки:
-
validateAccountStructure
-
validateBudgetModel
-
validateCurrency
-
validateDimensionFocus
-
validateLedgerDimension
-
validateTransactionDate
Workflow
В AX 2012 рабочие процессы были реализованы для бюджетных операций. Поддерживаются рабочие процессы как уровня заголовка бюджета, так и его строк.
Службы
В AX 2012 для операций бюджета реализован интерфейс для сервиса AIF. Office Business Application add-in for Microsoft Excel® использует сервисы для доступа к данным в режиме чтения и записи. Поэтому можно использовать Excel при разработке и корректировке бюджета.
Служба поддерживает следующие операции:
-
Read
-
Входной параметр: AifEntityKeyList
-
Возвращаемое значение: BudgetTransaction
-
-
Find
-
Входной параметр: AifQueryCriteria
-
Возвращаемое значение: BudgetTransaction
-
-
FindKeys
-
Входной параметр: AifQueryCriteria
-
Возвращаемое значение: AifEntityKeyList
-
-
Delete
-
Входной параметр: AifEntityKeyList
-
Возвращаемое значение: void
-
-
Create
-
Входной параметр: BudgetTransaction
-
Возвращаемое значение: AifEntityKeyList
-
-
Update
-
Входной параметр: AifEntityKeyList, BudgetTransaction
-
Возвращаемое значение: void
-
Реализация новых шаблонов данных
Аналитика бюджета (Budget Ledger Dimension) — это новый шаблон в AX 2012.
Аналитика бюджета
Аналитика включает в себя структуру счета и значения финансовых аналитик. Внешний ключ представляющий аналитику бюджета – это поле целого типа, размерностью 64-бит, которое содержит данные связанного поля «RecId» таблицы «DimensionAttributeValueCombination» (или «LedgerDimension»). Поле внешнего ключа называется LedgerDimension, поскольку это псевдоним, используемый для таблицы «DimensionAttributeValueCombination».
Модель данных и расширенный тип данных
Добавленный новый тип: LedgerDimensionBudget.
Добавлено новое поле: LedgerDimension, поле является внешним ключом таблицы «DimensionAttributeValueCombination».
Элемент управления для формы
Элемент управления для аналитики бюджета представляет собой объединение элемента управления Segmented
Entry и класса BudgetLedgerDimensionController. Элемент управления Segmented Entry, это элемент управления общего назначения, который был добавлен в AX 2012. Класс BudgetLedgerDimensionController обрабатывает события Segmented
Entry. Такое комбинирование позволяет контролировать обработку записи и отображение значений аналитики бюджета на формах.
На форме требуются изменения
Для большинства случаев, требуется сделать следующие изменения на форме:
-
Проверить, что таблица, которая является источником данных формы, содержит внешний ключ таблицы DimensionAttributeValueCombination.
-
Перенести поле LedgerDimension из источника данных в требуемое место дизайна формы. Автоматически создастся элемент управления Segmented
Entry с заполненными значениями свойств DataSource и ReferenceField. Алтернативным способом является ручное добавление элемента управления и заполнение свойств DataSource и ReferenceField. -
Переопределить на форме методы Declaration и Init. Если методы уже существуют, то просто необходимо добавить код в них.
public class FormRun extends ObjectRun { BudgetLedgerDimensionController budgetLedgerDimensionController; } public void init() { super(); budgetLedgerDimensionController = BudgetLedgerDimensionController::construct({BackingDataSource_ds}, fieldstr({BackingTable}, LedgerDimension)); }
-
Переопределить у элемента управления Segmented
Entry следующие методы.public void jumpRef() { budgetLedgerDimensionController.jumpRef(); } public boolean validate() { boolean isValid; isValid = super(); isValid = budgetLedgerDimensionController.validate() && isValid; return isValid; } public void segmentValueChanged(SegmentValueChangedEventArgs _e) { super(_e); budgetLedgerDimensionController.segmentValueChanged(_e); } public void loadSegments() { super(); budgetLedgerDimensionController.parmControl(this); budgetLedgerDimensionController.parmDimensionAccountStorageUsage(DimensionAccountStorageUsage::Transactional); budgetLedgerDimensionController.parmDate({BackingTable}.Date); budgetLedgerDimensionController.loadSegments(); } public void loadAutoCompleteData(LoadAutoCompleteDataEventArgs _e) { super(_e); budgetLedgerDimensionController.loadAutoCompleteData(_e); }
-
Переопределить метод resolveReference у поля источника данных, которое указано в свойствах элемента управления Segmented
Entry.public Common resolveReference(FormReferenceControl _formReferenceControl) { return budgetLedgerDimensionController.resolveReference(); }
-
Установить параметр parmAccountStructure, в качестве аргумента передается RecId структуры счетов, настроенного в системе. В большинстве случаев, пользователь может выбирать из нескольких структур счетов. В этом случае, необходимо создать edit-метод, который будет устанавливать выбранную структуру счетов в параметр parmAccountStructure. Если элемент управления Segmented
Entry привязан к определенной структуре счетов, RecId этой структуры можно задать в методе loadSegments элемента управления Segmented Entry.budgetLedgerDimensionController.parmAccountStructure({Account Structure RecId});
Свойства элемента управления
Несколько параметров влияют на проверку, поиск и хранение аналитики бюджета, выполняемого элементом управления.
-
DataAreaId: указывается юридическое лицо, связанное с элементом управления. Используется для проверки и выбора, для обеспечения ограничений доступными значениями. По умолчанию используется текущее юридическое лицо. Если этот параметр может изменяться полем на форме, рекомендуется вызвать соответствующий метод parm в методе modified элемента управления DataAreaId.
-
Date: указывается дата, связанная с элементом управления. Данный параметр используется для проверки. Значение по умолчанию пусто и проверка даты не выполняется.
-
DimensionAccountStorageUsage: определяет, как используется элемент управления. Данный параметр используется для проверки и сохранения комбинаций. Используйте перечисление DimensionAccountStorageUsage и установите значение «Transactional».
Эти параметры должны быть указаны в методе loadSegments элемента управления Segmented
Entry. Они вызываются каждый раз, когда элемент управления получается фокус. Всегда определяйте параметры в одном методе, чтобы гарантировать, что разработчик сможет легко проверить, все ли параметры были заданы правильно.
Специфичные случаи
При работе с элементом управления аналитики бюджета могут возникнуть следующие случаи:
-
Когда несколько полей имеют ссылку на DimensionAttributeValueCombination, тогда каждое поле должно иметь собственный экземпляр класса BudgetLedgerDimensionController.
-
Каждый экземпляр должен иметь уникальное имя, которое должно быть включено в описание. Требуется добавить код, который будет выглядеть, как рассмотренный выше, для каждого экземпляра контроллера.
-
Когда одно поле должно быть редактируемым и может размещаться в нескольких местах на одной форме, требуется создать только один экземпляр BudgetLedgerDimensionController для поля.
-
Когда два элемента управления используют общий контроллер, метод loadSegments в каждом элементе управления должен всегда иметь вызов метода parmControl(this), перед вызовом метода loadSegments контроллера.
Comments
So empty here ... leave a comment!