Добрый день! Есть такая задача: Нужно вычислить разность между двумя полями таблицы которые не будут статичными то есть название этих полей будут передаваться из другого скрипта. И эту разность нужно присвоить вычисляемому столбцу
.....
function Refresh(){
peremen1 = edtMont1.value;
peremen2 = edtMont2.value;
ds_ReportAccountsOT7OnDatasetCalcFields(Dataset,peremen1, peremen2);
......
function ds_ReportAccountsOT7OnDatasetCalcFields(Dataset,peremen1, peremen2 ) {
Dataset.DisableEvents();
Dataset.DataFields('Delta').Value = peremen2-peremen1;
Dataset.EnableEvents();
}
В чем тут ошибка???? Подскажите очень надо)
Нравится
Попробуйте так:
function ds_ReportAccountsOT7OnDatasetCalcFields(Dataset) {
peremen1 = edtMont1.value;
peremen2 = edtMont2.value;
Dataset.DataFields('Delta').Value = peremen2-peremen1;
}
Функция OnDatasetCalcFields вызывается после открытия датасета, не стоит вызывать ее из другой функции, это не принесет результата.
Проблема еще в том что edtMont1.value , edtMont2.value не совсем те значения) тут ка бы значение этих полей будет выглядеть вот так:
скрипт wnd_.....
function RefreshReport(){
switch(edtMont1.value.id){
case (Month0): MonthValue = 0;
break;
case (Month01): MonthValue = 1;
break;
case (Month02): MonthValue = 2;
break;
case (Month03): MonthValue = 3;
break;
.....................
}
скрипт ds_.....
var pole1 = 'Pole'+MonthValue
var pole2 = 'Pole'+(MonthValue-1);
Dataset.DataFields('Delta').Value =Dataset.DataFields('pole1').Value - Dataset.DataFields('pole2').Value
как в этом случае??
А не могли бы вы описать задачу?
Насколько понимаю, вы формируете отчет и нужно рассчитать значения полей из значений котролов какого-то окна. что за окно?
Формируется отчет по счета за период (скрин прилагаеться). Нужно рассчитать разность между последним и предпоследним месяцем из выбранного периода???
Вот функция окна:
function RefreshReport(){
var MonthValueStart = edtQuarterStart.Value;
// Ivan
var MonthValueEnd = edtQuarterEnd.Value;
// год начала и конца периода
var YearStartValue = edtYearStart.Value;
var YearEndValue = edtYearEnd.Value;
var NewDateStart = new Date();
var NewDateEnd = new Date();
var DateRegMinValue = DataRegMin.Value;
var DateRegMaxValue = DataRegMax.Value;
var Dataset = dlData.Dataset;
switch(edtQuarterStart.Value.id){
case (Month0): MonthValueStart = 0;
break;
case (Month01): MonthValueStart = 1;
break;
case (Month02): MonthValueStart = 2;
break;
case (Month03): MonthValueStart = 3;
break;
case (Month04): MonthValueStart = 4;
break;
case (Month05): MonthValueStart = 5;
break;
case (Month06): MonthValueStart = 6;
break;
case (Month07): MonthValueStart = 7;
break;
case (Month08): MonthValueStart = 8;
break;
case (Month09): MonthValueStart = 9;
break;
case (Month10): MonthValueStart = 10;
break;
case (Month11): MonthValueStart = 11;
break;
}
// Ivan
// Возможность вывода отчета не за три месяца а за период
switch(edtQuarterEnd.Value.id){
case (Month0): MonthValueEnd = 0;
break;
case (Month01): MonthValueEnd = 1;
break;
case (Month02): MonthValueEnd = 2;
break;
case (Month03): MonthValueEnd = 3;
break;
case (Month04): MonthValueEnd = 4;
break;
case (Month05): MonthValueEnd = 5;
break;
case (Month06): MonthValueEnd = 6;
break;
case (Month07): MonthValueEnd = 7;
break;
case (Month08): MonthValueEnd = 8;
break;
case (Month09): MonthValueEnd = 9;
break;
case (Month10): MonthValueEnd = 10;
break;
case (Month11): MonthValueEnd = 11;
break;
}
// год начало периода
switch(edtYearStart.Value.id){
case (Year08): YearStartValue = 2008;
break;
case (Year09): YearStartValue = 2009;
break;
case (Year10): YearStartValue = 2010;
break;
}
// год конца периода
switch(edtYearEnd.Value.id){
case (Year08): YearEndValue = 2008;
break;
case (Year09): YearEndValue = 2009;
break;
case (Year10): YearEndValue = 2010;
break;
}
var Period = (12 * YearEndValue + MonthValueEnd) - (12 * YearStartValue+ MonthValueStart)+1;
var j = 0;
for (var i = MonthValueStart; (i
"Денис М" написал:используйте CastomSQL
всю логику можно будет поместить туда
... а если используете. не забывайте про особенности работы этой колонки под пользователями с ограниченными правами (http://community.terrasoft.ua/forum/topic/3962)
ООО "Лайнсервис"
www.ls-crm.ru
А как мне из контрола передать значнение месяца в CastomSQL??? Не разу ничего не делал с этим полем??? если можно подскажите как сделать? Можно пример какой нибудь?
Что-то я таких отчетов, как у вас, еще не видела.
Наверно, было бы удобней использовать MemoDataset и по нажатию на кнопку "Сформировать" все действия по расчету полей произвести в скрипте и результат положить в MemoDataset, который привязать к гриду окна.
Насчет CustomSQL с передачей параметров из контролов - непонятно, как это моженосделать??? Автор, поясните, пожалуйста. Да и в принципе, как можно будет там рассчитать необходимые для данного отчета значения?
"Kat" написал:Насчет CustomSQL с передачей параметров из контролов - непонятно, как это моженосделать??? Автор, поясните, пожалуйста. Да и в принципе, как можно будет там рассчитать необходимые для данного отчета значения?
если для всего запроса это константы , то передать параметрами , а вычисления уже в CustomSQL
или передать даты и уже фукциями БД вычислить разницу между датами (не нужно будет такого нагромождения кейсов)
если это SQLServer то есть спец функции
нет я думаю что все гораздо проще) мне всего навсего в функции function ds_ReportAccountsOT7OnDatasetCalcFields(Dataset) {
нужно узнать значение контрола из окна. это вообще возможно????
Извиняюсь не то. Это енум контрол) он с датасетом не связан.
Вот значит как. А если допустим вот так написать:
function ds_ReportAccountsOT7OnDatasetCalcFields(Dataset) {
// TODO
var MonthValueStart;
switch(edtQuarterStart.Value.id){
case (Month0): MonthValueStart = 0;
break;
case (Month01): MonthValueStart = 1;
break;
case (Month02): MonthValueStart = 2;
break;
case (Month03): MonthValueStart = 3;
break;
case (Month04): MonthValueStart = 4;
break;
case (Month05): MonthValueStart = 5;
break;
case (Month06): MonthValueStart = 6;
break;
case (Month07): MonthValueStart = 7;
break;
case (Month08): MonthValueStart = 8;
break;
case (Month09): MonthValueStart = 9;
break;
case (Month10): MonthValueStart = 10;
break;
case (Month11): MonthValueStart = 11;
break;
}
Dataset.DataFields('Delta').Value = MonthValueStart;
}
Почему он мне выдает ошибку???
Нет пишет
[09.08.20 14.25.27.871] (E) Ошибка выполнения метода 'ds_ReportAccountsOT7OnDatasetCalcFields'. 'edtQuarterStart' - определение отсутствует «Call Stack»
датасет неможет просто так обратится к контролу , который неизвесно где находится , лучше это событие обрабатывать не в датасете а в окне , даталинк имеет теже свойства что и датасет
если даталинк и контрол находятся в одном окне , то такое написание должно работать
а может вы просто "edtQuarterStart" неправильно написали
ошибка говорит о том что такого контрола этот срипт не видет , он для него не существует
Что он его не видит это я понял) Сейчас в линке попробую прописать)