Top.Mail.Ru

Бюджетирование в AX 2012 (Часть 1)

Бюджетирование в 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. Такое комбинирование позволяет контролировать обработку записи и отображение значений аналитики бюджета на формах.

На форме требуются изменения

Для большинства случаев, требуется сделать следующие изменения на форме:

  1. Проверить, что таблица, которая является источником данных формы, содержит внешний ключ таблицы DimensionAttributeValueCombination.
  2. Перенести поле LedgerDimension из источника данных в требуемое место дизайна формы. Автоматически создастся элемент управления Segmented
    Entry с заполненными значениями свойств DataSource и ReferenceField. Алтернативным способом является ручное добавление элемента управления и заполнение свойств DataSource и ReferenceField.
  3. Переопределить на форме методы Declaration и Init. Если методы уже существуют, то просто необходимо добавить код в них.
    public class FormRun extends ObjectRun
    {
        BudgetLedgerDimensionController budgetLedgerDimensionController;
    }
    
    public void init()
    {
        super();
        budgetLedgerDimensionController =
    
        BudgetLedgerDimensionController::construct({BackingDataSource_ds}, fieldstr({BackingTable}, LedgerDimension));
    }
  4. Переопределить у элемента управления 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);
    }
  5. Переопределить метод resolveReference у поля источника данных, которое указано в свойствах элемента управления Segmented
    Entry.
    public Common resolveReference(FormReferenceControl _formReferenceControl)
    {
        return budgetLedgerDimensionController.resolveReference();
    }
  6. Установить параметр 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 контроллера.

microsoft

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar