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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.10.2016, 00:31   #24  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Чтобы окончательно добить тему, поделюсь небольшой идей.

Как я уже писал, в AX2009 нет computed columns, но это, разумеется, не преграда пытливому уму и неугомонным рукам

В качестве дисклеймера:
  1. Если вам кажется, что ваша задача требует применения этого решения, остановитесь и подумайте. Возможно, задачу можно переформулировать так, что computed columns будут не нужны.
  2. Если вы всё ещё считаете, что вам необходимы computed columns в AX2009, подумайте ещё раз.
  3. Если ваша настойчивость не знает границ, то так и быть, делайте, но учтите, что нижеприведённый код - это proof-of-concept, и его надо дорабатывать перед переносом в рабочую среду.

Итак, задача: сделать в AX2009 view на основе таблицы LedgerTrans, в котором дебетовые и кредитовые суммы будут в разных полях, чтобы потом можно было группировками собирать дебетовые и кредитовые обороты.
  1. Создаём View, как показано на рисунке. Поля AmountMST, AmountMSTDebit и AmountMSTCredit привязаны к одному и тому же полю LedgerTrans.AmountMST. Статический метод synchronize() пока сделаем пустым.
  2. Ищем в AOT класс Application и его метод dbSynchronize(). В конец этого метода добавляем следующую строчку:
    X++:
    LedgerTransDebCredView::synchronize();
  3. Возвращаемся в метод synchornize() на нашем view и пишем в него следующий код:
    X++:
    public static void synchronize()
    {
        UserConnection  userConnection;
        str             sqlStatement;
        Statement       statement;
        ;
    
        sqlStatement =
            'ALTER VIEW [dbo].[LEDGERTRANSDEBCREDVIEW] AS ' +
            'SELECT ' +
            '   A.ACCOUNTNUM AS ACCOUNTNUM, ' +
            '   A.TRANSDATE AS TRANSDATE, ' +
            '   A.VOUCHER AS VOUCHER, ' +
            '   A.TXT AS TXT, ' +
            '   A.AMOUNTMST AS AMOUNTMST, ' +
            '   CASE WHEN A.AMOUNTMST >= 0 THEN A.AMOUNTMST ELSE NULL END AS AMOUNTMSTDEBIT, ' +
            '   CASE WHEN A.AMOUNTMST <= 0 THEN A.AMOUNTMST ELSE NULL END AS AMOUNTMSTCREDIT, ' +
            '   A.DATAAREAID AS DATAAREAID, ' +
            '   A.RECID AS RECID ' +
            'FROM LEDGERTRANS A';
        new SqlStatementExecutePermission(sqlStatement).assert();
    
        userConnection = new UserConnection();
        statement = userConnection.createStatement();
        statement.executeUpdate(sqlStatement);
    
        CodeAccessPermission::revertAssert();
    }
  4. Синхронизируем view LedgerTransDebCredView и открываем его Table browser'ом.

Ура, в поле AmountMSTDebit остались только дебетовые балансы, а в поле AmountMSTCredit - кредитовые.
Миниатюры
Нажмите на изображение для увеличения
Название: Table browser.png
Просмотров: 765
Размер:	36.3 Кб
ID:	10990  
Изображения
 
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: mazzy (10), AlGol (2).
Теги
distinct, recordrefrencelist_ru, recordsortedlist, view

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Программное воссоздание записей SqlDictionary для определенной таблицы gl00mie DAX: Программирование 17 04.05.2023 20:13
Выборка произвольных записей одним запросом db DAX: Программирование 1 23.09.2010 14:15
Выбор записей по неизвестным заранее полям PavelSR DAX: Программирование 16 21.08.2006 16:16
Как добавить в фильтрацию записей доп. таблицы n:1 или 1:n? Hidden DAX: Программирование 6 11.08.2006 14:04
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:27.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.