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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.07.2011, 11:19   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Судя по кракозябрам у вас ax3.0
совет: переключайтесь в русский язык ПЕРЕД копированием в буфер обмена, чтобы сохранить русский текст неизменным.

Очень подозрительным выглядит этот участок кода.
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
select excR
where excR.CurrencyCode == cur.CurrencyCodeParent
&& excR.FromDate == dt;
{
С чего это после точки запятой идет открывающая фигурная?
скорее всего, были какие-то правки.

Что касается кода вообще, то вот как он переводится на человеческий:
1. перебрать ВСЕ валюты, удовлетворяющие условию
2. выбрать ОДИН курс, удовлетворяющий условию
3. если курс выбран И его код равен некоему enumstr(!!!!!!)
3.1. то ДОБАВИТЬ еще один курс
... и так далее

Во-первых, по смыслу - вы ДОБАВЛЯЕТЕ курс, если он УЖЕ ЕСТЬ.
Поэтому во втором проходе получаете ДВА курса.
Аксапточка сделала ровно то, что ей сказали.

Во-вторых, по стилю - сравнивать CurrencyCode с EnumStr - предельно некорректно. Прежде всего потому, что Аксапта может работать с разными языками и никто не гарантирует, что enumstr в разных языках будут одинаковыми. НИКОГДА так не делайте. Заведите строковые параметры в таблице параметров.
__________________
полезное на axForum, github, vk, coub.
Старый 29.07.2011, 15:31   #2  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Здраствуйте! Спасибо что обратили внимание! На счет Axapta 3.0 вы правы! А алгоритм работы следующий:
->Заходим в Currency, ищем валюты у кот. есть признак у.е. и от какой валюты они считаются и запоминаем коеффициент
->Заходим в ExchRates, там находим валюту и ее значение на сегодняшний день (т.к. предполагается что курсы валют грузятся до работы этого кода)
->Потом через if делаются записи, валюты всего 2 поэтому 2 транзакции.
Не понятно почему если я один раз запускаю код, он может создать по 2 записи для каждой у.е.??? Ниже приведу нормальный листинг с коментариями и отступами.
Старый 29.07.2011, 15:35   #3  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
X++:
void clicked()
{
    Currency  cur;
    ExchRates excR, excRval;

    real     sumEur, sumUsd,Coef;
    date     dt = systemdateget();// <-получаем сегодняшную дату
    str      Eur, Usd, stVal, StrDt;

    StrDt = Date2Str(dt,2,2,2,2,2,4);
    while select cur // Выбираем валюты кот. явл условными единицами
    where cur.UE == NoYes::Yes
     {
       stVal = cur.CurrencyCode; // Запоминаем наименование валюты напр. YEEUR
       Coef  = cur.rate; // Запоминаем коэффициент
       select excR
       where  excR.CurrencyCode == cur.CurrencyCodeParent
              && excR.FromDate == dt;
        {
           if (excR.CurrencyCode == enum2str(CurrencyUECod::EURcod))
           {
            sumEur = excR.ExchRate * Coef;
            ttsbegin;
            excR.FromDate = dt;
            excR.ExchRate = sumEur;
            excR.CurrencyCode = stVal;
            excR.insert();
            ttscommit;
           }
            else
             if (excR.CurrencyCode == enum2str(CurrencyUECod::USDcod))
            {
             sumUsd = excR.ExchRate * Coef;
             ttsbegin;
             excR.FromDate = dt;
             excR.ExchRate = sumUsd;
             excR.CurrencyCode = stVal;
             excR.insert();
             ttscommit;
            }
        }
     }
    element.closeCancel();
    info(strfmt("На: %1", StrDt));
    info("Курсы у.е. успешно расчитаны");
    info(strfmt("Курс YEEUR: %1", sumEur));
    info(strfmt("Курс YEUSD: %1", sumUsd));
}
Если убрать ; там где она вас смущает, то выдает ошибку!!
Старый 29.07.2011, 16:11   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Если убрать ; там где она вас смущает, то выдает ошибку!!
понятно почему вы поставили точку с запятой.
непонятно почему вы не убрали фигурную скобку - по синаксису ее здесь не должно быть.
но если бы выше было "while select excR", то фигурная скобка обязательна, а точка с запятой была бы лишней.

вы определитесь что именно у вас лишнее.

==============
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
->Потом через if делаются записи
Что значит "делаются записи"?
записи могут: insert, update, delete. Что именно вы подразумеваете под словом "делаются"

Пожалуйста, пока не постите в эту ветку ваш код - на него просто физически больно смотреть.

Сформулируйте на простом и родном для вас языке - что именно вы хотите получить в результате. Пожалуйста, не надо в стиле "акына" - заходим, запоминаем, делаем. А именно каков ожидаемый результат?
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
функционал Работа с документами и создание договора в Word GM2005 DAX: Функционал 5 28.09.2009 14:49
Доступ к меню "Работа с документами" Kuat DAX: Администрирование 4 16.11.2007 17:07
Совместная работа заказчика и исполнителя в разных или одном слое? Кузин Владимир В. DAX: Программирование 6 08.08.2006 10:02
Работа с главным меню в Axapta Alexey DAX: Программирование 0 04.01.2002 23:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:07.