|
![]() |
#1 |
Участник
|
Судя по кракозябрам у вас ax3.0
совет: переключайтесь в русский язык ПЕРЕД копированием в буфер обмена, чтобы сохранить русский текст неизменным. Очень подозрительным выглядит этот участок кода. Цитата:
скорее всего, были какие-то правки. Что касается кода вообще, то вот как он переводится на человеческий: 1. перебрать ВСЕ валюты, удовлетворяющие условию 2. выбрать ОДИН курс, удовлетворяющий условию 3. если курс выбран И его код равен некоему enumstr(!!!!!!) 3.1. то ДОБАВИТЬ еще один курс ... и так далее Во-первых, по смыслу - вы ДОБАВЛЯЕТЕ курс, если он УЖЕ ЕСТЬ. Поэтому во втором проходе получаете ДВА курса. Аксапточка сделала ровно то, что ей сказали. Во-вторых, по стилю - сравнивать CurrencyCode с EnumStr - предельно некорректно. Прежде всего потому, что Аксапта может работать с разными языками и никто не гарантирует, что enumstr в разных языках будут одинаковыми. НИКОГДА так не делайте. Заведите строковые параметры в таблице параметров. |
|
![]() |
#2 |
Участник
|
Здраствуйте! Спасибо что обратили внимание! На счет Axapta 3.0 вы правы! А алгоритм работы следующий:
->Заходим в Currency, ищем валюты у кот. есть признак у.е. и от какой валюты они считаются и запоминаем коеффициент ->Заходим в ExchRates, там находим валюту и ее значение на сегодняшний день (т.к. предполагается что курсы валют грузятся до работы этого кода) ->Потом через if делаются записи, валюты всего 2 поэтому 2 транзакции. Не понятно почему если я один раз запускаю код, он может создать по 2 записи для каждой у.е.??? Ниже приведу нормальный листинг с коментариями и отступами. |
|
![]() |
#3 |
Участник
|
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)); } |
|
![]() |
#4 |
Участник
|
понятно почему вы поставили точку с запятой.
непонятно почему вы не убрали фигурную скобку - по синаксису ее здесь не должно быть. но если бы выше было "while select excR", то фигурная скобка обязательна, а точка с запятой была бы лишней. вы определитесь что именно у вас лишнее. ============== Что значит "делаются записи"? записи могут: insert, update, delete. Что именно вы подразумеваете под словом "делаются" Пожалуйста, пока не постите в эту ветку ваш код - на него просто физически больно смотреть. Сформулируйте на простом и родном для вас языке - что именно вы хотите получить в результате. Пожалуйста, не надо в стиле "акына" - заходим, запоминаем, делаем. А именно каков ожидаемый результат? |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|