Создал отчет, в ходе решения задачи выяснилось что в отчете будут поля, вычисляемые на основании уже вычисленных. С помощью нехитрого кода в скрипте FR я рассчитывал все сделать, однако обнаружил что

я могу делать так: m5.Text := m1.Text;
но не могу так: m5.Text := FloatToStr(StrToFloat(m1.Text));

код :
m5.Text := FloatToStr(StrToFloat(m1.Text) - StrToFloat(m3.Text));

m6.Text := FloatToStr(StrToFloat(m5.Text) * 0.10);

m7.Text := FloatToStr(StrToFloat(m6.Text) - StrToFloat(m4.Text) *0.18 * 30/360 );

m8.Text := FloatToStr(StrToFloat(m5.Text) / StrToFloat(m1.Text) );

подскажите что я делаю не так, может быть есть гораздо более легкий способ, например использовать переменные, которые не работают ...
Необходимо просто на основании мемок со значениями получить значения в других мемках.

Нравится

3 комментария

Владимир, идеальным вариантом будет создание в датасете вычисляемых полей, а в отчете простое их отображение. Почему именно скрипты FastReport? С ними как раз и возникают вот такие непредвиденные ошибки.

"Стоян Виталий" написал:идеальным вариантом будет создание в датасете вычисляемых полей

Действительно, так будет проще. Да и в самом редакторе FastReport есть понятие "функции", тоесть можно пересчеты сделать за их счет, в обход скриптов.

Но лично я бы все грузанул в ексель или ворд. Фаст только для наглядного просомтра и печати катит...

Я с вами согласен, скрипты фастрепорта это *... не лучше решение как минимум :)

Решил проблему вычисляемыми полями:

function ds_SalesByCorporateClientsOnDatasetCalcFields(Dataset) {
	var SaleUA       = Dataset('Amount') - Dataset('Amount_no_abUA');
	var Discount10   = SaleUA * 0.10;
	var NotGetAmount = Discount10 - Dataset('CurrentBalanceRUR') *0.18 * 30/360;
	var FactDiscount = SaleUA / Dataset('Amount');
 
    Dataset.ValAsFloat('_AmountUa') = SaleUA;
    Dataset.ValAsFloat('_Discount10') = Discount10;
    Dataset.ValAsFloat('_NotGetAmount') = NotGetAmount;  
    Dataset.ValAsFloat('_FactDiscount') = FactDiscount; 
}
 
function ds_SalesByCorporateClientsOnDatasetAfterOpen(Dataset) {
	Dataset.CalcDataFields();
}
Показать все комментарии