2016-11-09 7 views
1

Мы должны разработать некоторые функции для отчета «LedgerAccountStatementPerCurrency» (AX 2012).AX Report Mainaccount Начальный баланс Dataset

Одна из особенностей - показать для каждого основного счета в отчете начальный баланс (валюта транзакции).

Я написал хранимую процедуру давно на SQL Server, который дает мне это как возвращаемое значение. Параметры - mainaccountid, datefrom и dateto.

Вопрос в том, можно ли использовать эту хранимую процедуру? Отчёт от класса «LedgerAccountStatementPerCurrencyDP», могу ли я реализовать, что для каждого основного счета, который система предоставляет отчет, я вызываю свою сохраненную процедуру и возвращает остаток в другом поле?

Каков путь в этой ситуации?

ответ

1

Для этого отчета у вас есть эта информация. Проверьте LedgerAccountStatementPerCurrencyDP класс processReport способ. Здесь после while (queryRun.next()) вы можете увидеть этот стандартный код для расчета начального баланса.

В следующем коде найти эту метку //Here OpeningBalance

Вот код

... 
... 
... 
queryRun = new QueryRun(query); 
while (queryRun.next()) 
{ 
    generalJournalAccountEntry = queryRun.get(tableNum(GeneralJournalAccountEntry)) as GeneralJournalAccountEntry; 
    generalJournalEntry = queryRun.get(tableNum(GeneralJournalEntry)) as GeneralJournalEntry; 
    fiscalCalendarPeriod = queryRun.get(tableNum(FiscalCalendarPeriod)) as FiscalCalendarPeriod; 
    dimAttrValueCombo = queryRun.get(tableNum(DimensionAttributeValueCombination)) as DimensionAttributeValueCombination; 

    if (dimAttrValueCombo.MainAccount != prevMainAccount) 
    { 
     mainAccount = MainAccount::find(dimAttrValueCombo.MainAccount); 
     localizedName = mainAccount.localizedName(); 
    } 

    ledgerAccountStatementPerCurrencyTmp.clear(); 
    ledgerAccountStatementPerCurrencyTmp.MainAccountId = mainAccount.MainAccountId; 
    ledgerAccountStatementPerCurrencyTmp.AccountName = localizedName; 

    if (dimAttrValueCombo.MainAccount != prevMainAccount) 
    { 
     if (mainAccount && ledgerBalanceOpening) 
     { 
     //Here OpeningBalance 
      ledgerBalanceOpening.calculateBalance(mainAccount); 
      openingBalance = ledgerBalanceOpening.getAccountingCurrencyBalance(); 
     //Here OpeningBalance END 
     } 
     else 
     { 
      openingBalance = 0; 
     } 

     ledgerAccountStatementPerCurrencyTmp.OpeningBalance = openingBalance; 
     ledgerAccountStatementPerCurrencyTmp.insert(); 

     prevMainAccount = dimAttrValueCombo.MainAccount; 
    } 
... 
... 
... 
+0

нормально, и как я могу добавить новое поле, которое дается в отчете, например «OpeningBalanceTransaction»? в этом разделе кода у меня есть все, что мне нужно для моей хранимой процедуры (dateFrom, dateTo, mainaccountID), поэтому я могу назвать ее здесь и заполнить новое добавленное поле «OpeningBalanceTransaction» или? – JamesnxD

+0

Да, конечно, вы можете. Чтобы выполнить это, вы должны создать новое поле в таблице LedgerAccountStatementPerCurrencyTmp'. Добавьте код для этого нового поля в метод ProcessReport. Затем в ** Visual Studio ** обновите источник данных LedgerAccountStatementPerCurrencyDS', чтобы отобразить новое поле, а затем в макете добавьте новое поле. –

+1

ОК, я попробую, отправьте мой результат и пометьте свой ответ как можно лучше;) – JamesnxD

 Смежные вопросы

  • Нет связанных вопросов^_^