![]() |
#7 |
Участник
|
Ну, тут явная кастомизация сделана. В данном случае, в таблице Currency записаны не коды валют, а коды условных единиц. Причем сделана иерархия. Добавлены следующие поля
Currency.UE - признак того, что данная запись относится к условным единицам Currency.CurrencyCodeParent - код валюты "родителя". Т.е. той валюты, по отношению к которой следует рассчитывать курс этих самых условных единиц Задача сводится к тому, чтобы найти курс "родительской" валюты на текущую дату и на ее основе создать (записать) курс условной единицы тоже на текущую дату. Внешний цикл - это просто перебор всех условных единиц. В принципе, код, вроде бы, рабочий ("корявенько", но работает ![]() Или что подразумевается под фразой "он может создать по 2 записи для каждой у.е"? Если я правильно понял, что надо сделать, то код должен быть примерно таким X++: void clicked() { Currency currency; ExchRates exchRates; ExchRates exchRatesUE; FromDate fromDate = systemdateget(); ; while select exchRates where exchRates.FromDate == fromDate join currency where currency.CurrencyCodeParent == exchRates.CurrencyCode && currency.UE == NoYes::Yes { // Сначала проверяем тот факт, что курс УЕ на текущую дату уже заведен select firstonly exchRatesUE where exchRatesUE.FromDate == fromDate && exchRatesUE.CurrencyCode == currency.CurrencyCode; // Если уже есть, то берем следующую запись выборки if (exchRatesUE) { continue; } // Если нет, то создаем новую запись exchRatesUE.clear(); exchRatesUE.CurrencyCode = currency.CurrencyCode; exchRatesUE.FromDate = fromDate; exchRatesUE.ExchRate = exchRates.ExchRate * currency.Rate; exchRatesUE.insert(); info(strFmt("Курс %1: %2", exchRatesUE.CurrencyCode, exchRatesUE.ExchRate)); } // while select exchRates info(strFmt("Формирование курсов УЕ на %1 завершено!", fromDate)); element.closeCancel(); } |
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |