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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.02.2015, 00:25   #21  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
:)
Кстати про борщ)
Много лет назад объяснял девушке на подобном примере азы С++. Ей помогло, может быть для вас тоже что-то прояснится (адаптировано под Х++):
X++:
// Класс "Борщ" - описание рецепта приготовления борща
class Borsh {
    ...
    void addItems(Real _water, Real _kartofan, Real _svekla) // добавить ингредиенты
    {...}
    void addSalt() // посолить
    {...}
    void cook(Real _cookTime) // варить
    {...}
    void doSimple() // приготовить "стандартный" вариант (не заморачиваясь)
    {
        // Через "объект" this можно вызывать "собственные" методы
        // (то есть принадлежащие тому же экземпляру, к которому относится текущий метод)
        // This является служебной конструкцией языка, его не нужно объявлять, он доступен в любом классе 

        this.addItems(1500, 300, 200);
        this.addSalt();
        this.cook(45);
    }
}

// Используем наш класс-рецепт дважды 
public static void Job_Borsh(Args _args)
{
    // Сварить два разных экземпляра борща: "обычный" и "экспериментальный"
    Borsh   simpleBorsh = new Borsh();
    Borsh   overSaltBorsh = new Borsh();

    // обычный (все этапы готовки выполнятся "по кулинарной книге"):
    simpleBorsh.doSimple();    
    
    // экспериментальный (управляем этапами самостоятельно):
    overSaltBorsh.addItems(1500, 100, 900); // ингредиенты в "своих" пропорциях

    overSaltBorsh.addSalt(); // солить
    overSaltBorsh.addSalt(); // солить

    overSaltBorsh.cook(90); // варить

    overSaltBorsh.addSalt(); // и опять солить...
}

// А еще можно сделать класс-наследник, добавив новый ингредиент
class Borsh_Morkovka extends Borsh {
    ...
    void addMorkovka(Real _morkovka) 
    {...}
    void doSimple() // перекрыть метод класса-предка
    {        
        this.addMorkovka(150); // добавить новый ингредиент
        super(); // вызов унаследованного поведения (см. Borsh/doSimple())
    }
}
За это сообщение автора поблагодарили: Logger (1), Daiver (1), gl00mie (1), Kabardian (4), pedrozzz (2), A_BAS (1), Товарищ ♂uatr (1), Морковка (1).
Старый 19.02.2015, 04:40   #22  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
856 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
вот кстати покопался в своих файлах нашел мегадревний документ 2001г про X++
что интересно, НА РУССКОМ! и в конце бонус - грамматика языка (для тех, кто интерпретатор хочет свой написать
Вложения
Тип файла: zip Аксапта_Lng_Xpp.zip (256.9 Кб, 180 просмотров)
За это сообщение автора поблагодарили: Player1 (0), Морковка (0).
Старый 24.02.2015, 11:35   #23  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Цитата:
Сообщение от lvan Посмотреть сообщение
вот кстати покопался в своих файлах нашел мегадревний документ 2001г про X++
что интересно, НА РУССКОМ! и в конце бонус - грамматика языка (для тех, кто интерпретатор хочет свой написать
вот такой книжки мне как раз не хватало в добавок к посоветованным ранее.
Старый 24.02.2015, 13:52   #24  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от lvan Посмотреть сообщение
и в конце бонус - грамматика языка (для тех, кто интерпретатор хочет свой написать
Грамматика есть на MSDN. Правда когда я попробовал идти таким путем, мне посоветовали не идти таким путем, а использовать XLNT, так как грамматики недостаточно для корректного разбора X++ (там есть еще правила, которые используют информацию о типах AOT. Вот они не скопипастили Джаву достаточно хорошо, а теперь мы геморройся)
Старый 26.02.2015, 23:16   #25  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
856 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Цитата:
Сообщение от belugin Посмотреть сообщение
Грамматика есть на MSDN. Правда когда я попробовал идти таким путем, мне посоветовали не идти таким путем, а использовать XLNT, так как грамматики недостаточно для корректного разбора X++ (там есть еще правила, которые используют информацию о типах AOT. Вот они не скопипастили Джаву достаточно хорошо, а теперь мы геморройся)
а какую задачу решали?
а то у меня тут есть мысль свой интерпретатор написать
описания нет нигде
копнул чуток, AST дерево там вроде есть - значит должно быть просто интерпретатор написать
Старый 03.03.2015, 13:46   #26  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Еще вопрос от начинающего... где можно научиться созданию отчетов как классов xmlReport, примеры средней сложности.. где например есть группировки. В книгах не через класс, а через Reportы. И еще если отчет строится на сложном запросе, то мы изначально запрос создаем как Query в AOT? А если я запрос хочу полностью прописать программно, а не добавляя по уровням всё в query, то как это сделать?
Старый 03.03.2015, 13:52   #27  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от lvan Посмотреть сообщение
а какую задачу решали?
Статический анализ
Старый 05.03.2015, 10:32   #28  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
8 марта на носу)) помогите, подскажите)
Старый 06.03.2015, 00:37   #29  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от Морковка Посмотреть сообщение
как это сделать?
Сесть и написать

Какая версия аксы?
Юзаете Ssrs или что ?
Старый 06.03.2015, 10:58   #30  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
AX 2012 R2, ага ssrs. запрос написан на sql, но куда же его текст прям текстом вставить, чтоб дальше в отчете xml использовать.
Старый 10.03.2015, 14:35   #31  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
столько умных людей и никто не знает?)
Старый 10.03.2015, 14:43   #32  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Морковка Посмотреть сообщение
столько умных людей и никто не знает?)
Дело в том, что в 2012 (за исключением российских фискальных отчётов вроде бы) в качестве бестпрактиса принято выгружать отчёты именно в виде ссрс и именно используя query из аота. Захардкодить можно всё, что угодно, только зачем?
__________________
С уважением,
Вячеслав
Старый 10.03.2015, 14:49   #33  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Видел у одного кастомера прямые запросы к sql, это ужасно, если честно.
Старый 10.03.2015, 17:26   #34  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Как-то на проекте переносили данные прямым запросом.
Не так ужасно -) И очень быстро -))

X++:
  SOURCE #RHRMImportCalendarDate
    #static void RHRMImportCalendarDate(Args _args)
    #{
    #    ODBCConnection                odbcConnection;
    #    Statement                     statement;
    #    str                           sqlQueryString;
    #    SqlStatementExecutePermission permission;
    #    ResultSet                     resultSet;
    #    LoginProperty                 loginProperty;
    #    str                           serverName = "SUPER";
    #    //str                           dataBaseName = "BASE";
    #    str                           dataBaseName = "DT";
    #    DataAreaId                    dataAreaId;
    #    int                           counter;
    #
    #    void import()
    #    {
    #        RPayCalendarDate rpayCalendarDate;
    #        ;
    #
    #        rpayCalendarDate.clear();
    #        rpayCalendarDate.TransDate = resultSet.getDate(1);
    #        rpayCalendarDate.CalendarId = resultSet.getString(2);
    #        rpayCalendarDate.PayDayType = resultSet.getInt(3);
    #
    #        if(!RPayCalendarDate::exist(rpayCalendarDate.CalendarId, rpayCalendarDate.TransDate))
    #        {
    #            rpayCalendarDate.doInsert();
    #        }
    #
    #
    #        counter++;
    #    }
    #    ;
    #
    #    try
    #    {
    #        loginProperty = new LoginProperty();
    #        loginProperty.setServer(serverName);
    #        loginProperty.setDatabase(dataBaseName);
    #
    #        odbcConnection = new ODBCConnection(loginProperty);
    #
    #        if (!odbcConnection)
    #        {
    #            info("Ошибка при подключении к базе данных");
    #        }
    #    }
    #    catch (Exception::Internal)
    #    {
    #        info("Возникла ошибка при подключении к базе данных. Операция отменена.");
    #    }
    #    catch (Exception::Error)
    #    {
    #        info("Ошибка при подключении к базе данных!");
    #    }
    #
    #    statement = odbcConnection.createStatement();
    #
    #
    #    sqlQueryString = strfmt("SELECT RPAYCALENDARDATE.TRANSDATE"//1
    #                          + ", RPAYCALENDARDATE.CALENDARID"//2
    #                          + ", RPAYCALENDARDATE.PAYDAYTYPE"//3
    #                          + " FROM RPAYCALENDARDATE"
    #                          + " WHERE RPAYCALENDARDATE.DATAAREAID = 'dat'"
    #                          + " AND RPAYCALENDARDATE.TRANSDATE > '20091231'");
    #
    #    permission = new SqlStatementExecutePermission(sqlQueryString);
    #    permission.assert();
    #    resultSet = statement.executeQuery(sqlQueryString);
    #
    #    while (resultSet.next())
    #    {
    #        ttsbegin;
    #
    #        import();
    #
    #        ttscommit;
    #    }
    #
    #    statement.close();
    #
    #    info(strfmt("Импортировано %1", counter));
    #}
  ENDSOURCE
Старый 11.03.2015, 09:45   #35  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
т.е. любой запрос изначально все настраивают в AOT/Queries ? настраивая DataSourse и прям там указывая все условия? или сложный запрос настраивается на методах Queries. непривычно просто, чаще встречала где настрочил текст и вставил текстом.
Старый 11.03.2015, 10:59   #36  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от novic Посмотреть сообщение
Как-то на проекте переносили данные прямым запросом.
Не так ужасно -) И очень быстро -))
И что, прямо по живой, рабочей базе?
__________________
Isn't it nice when things just work?
Старый 11.03.2015, 12:29   #37  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Морковка Посмотреть сообщение
т.е. любой запрос изначально все настраивают в AOT/Queries ? настраивая DataSourse и прям там указывая все условия? или сложный запрос настраивается на методах Queries. непривычно просто, чаще встречала где настрочил текст и вставил текстом.
насчёт все не скажу, но я делаю именно так
разумеется, не все условия можно указать прямо в query, но дописать потом в конкретном объекте пару строк не самая большая проблема.
__________________
С уважением,
Вячеслав
Старый 11.03.2015, 12:56   #38  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от novic Посмотреть сообщение
Как-то на проекте переносили данные прямым запросом.
Не так ужасно -) И очень быстро -))

X++:
  SOURCE #RHRMImportCalendarDate
    #static void RHRMImportCalendarDate(Args _args)
    #{
    #    ODBCConnection                odbcConnection;
    #    Statement                     statement;
    #    str                           sqlQueryString;
    #    SqlStatementExecutePermission permission;
    #    ResultSet                     resultSet;
    #    LoginProperty                 loginProperty;
    #    str                           serverName = "SUPER";
    #    //str                           dataBaseName = "BA
    #    str                           dataBaseName = "DT";
    #    DataAreaId                    dataAreaId;
    #    int                           counter;
    #
    #    void import()
    #    {
    #        RPayCalendarDate rpayCalendarDate;
    #        ;
    #
    #        rpayCalendarDate.clear();
    #        rpayCalendarDate.TransDate = resultSet.getDate(1);
    #        rpayCalendarDate.CalendarId = resultSet.getString(2);
    #        rpayCalendarDate.PayDayType = resultSet.getInt(3);
    #
    #        if(!RPayCalendarDate::exist(rpayCalendarDate.CalendarId, rpayCalendarDate.TransDate))
    #        {
    #            rpayCalendarDate.doInsert();
    #        }
    #
    #
    #        counter++;
    #    }
    #    ;
    #
    #    try
    #    {
    #        loginProperty = new LoginProperty();
    #        loginProperty.setServer(serverName);
    #        loginProperty.setDatabase(dataBaseName);
    #
    #        odbcConnection = new ODBCConnection(loginProperty);
    #
    #        if (!odbcConnection)
    #        {
    #            info("Ошибка при подключении к базе данных");
    #        }
    #    }
    #    catch (Exception::Internal)
    #    {
    #        info("Возникла ошибка при подключении к базе данных. Операция отменена.");
    #    }
    #    catch (Exception::Error)
    #    {
    #        info("Ошибка при подключении к базе данных!");
    #    }
    #
    #    statement = odbcConnection.createStatement();
    #
    #
    #    sqlQueryString = strfmt("SELECT RPAYCALENDARDATE.TRANSDATE"//1
    #                          + ", RPAYCALENDARDATE.CALENDARID"//2
    #                          + ", RPAYCALENDARDATE.PAYDAYTYPE"//3
    #                          + " FROM RPAYCALENDARDATE"
    #                          + " WHERE RPAYCALENDARDATE.DATAAREAID = 'dat'"
    #                          + " AND RPAYCALENDARDATE.TRANSDATE > '20091231'");
    #
    #    permission = new SqlStatementExecutePermission(sqlQueryString);
    #    permission.assert();
    #    resultSet = statement.executeQuery(sqlQueryString);
    #
    #    while (resultSet.next())
    #    {
    #        ttsbegin;
    #
    #        import();
    #
    #        ttscommit;
    #    }
    #
    #    statement.close();
    #
    #    info(strfmt("Импортировано %1", counter));
    #}
  ENDSOURCE
Замечательный пример.
Если всё-таки odbcConnection может быть null то пользователь увидит инфо, а потом стектрейс.
И интересно кто закроет statement если что-то упадёт в execute или в while какой-нибудь дедлок или ещё что...
Ну и counter показует количество прочитанных строк, а не вставленных. В худшем случае напишет что заимпортило 1000, а по факту в базу может попасть 0.

Последний раз редактировалось skuull; 11.03.2015 в 12:59.
Старый 11.03.2015, 17:53   #39  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Цитата:
Сообщение от macklakov Посмотреть сообщение
И что, прямо по живой, рабочей базе?
Да нет уж, в тесте скорее всего, не помню ужо )
Старый 13.03.2015, 10:02   #40  
Морковка is offline
Морковка
Участник
 
71 / 10 (1) +
Регистрация: 12.10.2014
Спасибо большое всем! а вот еще один вопрос не отвеченный мой про обучение отчетам XML, где научиться? где посмотреть простейшие XML отчеты-примеры ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
setTimeOut() не работает в классе, если экземпляр класса создан через вызов MenuFunction AR® DAX: Программирование 10 22.05.2013 16:53
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
передача курсора в два класса kitty DAX: Программирование 3 09.08.2006 13:21
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40
Некоторые вопросы внедрения приложений. Часть 2 Михаил Ковалев DAX: Прочие вопросы 0 27.05.2002 10:43

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

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

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