Значение вычисляемого поля

Добрый день! Есть такая задача: Нужно вычислить разность между двумя полями таблицы которые не будут статичными то есть название этих полей будут передаваться из другого скрипта. И эту разность нужно присвоить вычисляемому столбцу

.....
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();
}
В чем тут ошибка???? Подскажите очень надо)

Нравится

21 комментарий

Попробуйте так:

function ds_ReportAccountsOT7OnDatasetCalcFields(Dataset) {
peremen1 = edtMont1.value;
peremen2 = edtMont2.value;
Dataset.DataFields('Delta').Value = peremen2-peremen1;
}

Функция OnDatasetCalcFields вызывается после открытия датасета, не стоит вызывать ее из другой функции, это не принесет результата.

www.informicus.ru

Проблема еще в том что 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

как в этом случае??

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

www.informicus.ru

используйте CastomSQL
всю логику можно будет поместить туда
тотже case

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

Вот функция окна:
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 с передачей параметров из контролов - непонятно, как это моженосделать??? Автор, поясните, пожалуйста. Да и в принципе, как можно будет там рассчитать необходимые для данного отчета значения?

www.informicus.ru

"Maxim Ivanov" написал:А как мне из контрола передать значнение месяца в CastomSQL

через параметры
создаете параметр нужного типа
а в CastomSQL используете его с указаним ":" перед названием параметра

"Kat" написал:Насчет CustomSQL с передачей параметров из контролов - непонятно, как это моженосделать??? Автор, поясните, пожалуйста. Да и в принципе, как можно будет там рассчитать необходимые для данного отчета значения?

если для всего запроса это константы , то передать параметрами , а вычисления уже в CustomSQL
или передать даты и уже фукциями БД вычислить разницу между датами (не нужно будет такого нагромождения кейсов)
если это SQLServer то есть спец функции

нет я думаю что все гораздо проще) мне всего навсего в функции function ds_ReportAccountsOT7OnDatasetCalcFields(Dataset) {
нужно узнать значение контрола из окна. это вообще возможно????

"Maxim Ivanov" написал:нужно узнать значение контрола из окна. это вообще возможно

да , никаких проблем если он выбран
var pole = 'pole1'
var poleValue = Dataset.DataFields(pole).Value;

Извиняюсь не то. Это енум контрол) он с датасетом не связан.

"Maxim Ivanov" написал:Извиняюсь не то. Это енум контрол) он с датасетом не связан.

если edtMont1 это энум
то edtMont1.value - не значение а объект
из отого объекта можно извлечь значение , код и описание
в зависимости от того что вам нужно

Вот значит как. А если допустим вот так написать:
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;

}
Почему он мне выдает ошибку???

gпишет что поле Delta не выбранно?

Нет пишет
[09.08.20 14.25.27.871] (E) Ошибка выполнения метода 'ds_ReportAccountsOT7OnDatasetCalcFields'. 'edtQuarterStart' - определение отсутствует «Call Stack»

датасет неможет просто так обратится к контролу , который неизвесно где находится , лучше это событие обрабатывать не в датасете а в окне , даталинк имеет теже свойства что и датасет
если даталинк и контрол находятся в одном окне , то такое написание должно работать
а может вы просто "edtQuarterStart" неправильно написали
ошибка говорит о том что такого контрола этот срипт не видет , он для него не существует

Что он его не видит это я понял) Сейчас в линке попробую прописать)

Спасибо огромное! Получилось)

:smile:

Показать все комментарии