Вечер добрый! Имеется следующая задачка... и мое решение. Просьба проверить и тыкнуть носом в ошибки

А то 1й проект, сами понимаете, волнуюсь.
Стандартный куб(ZIST): День, Месяц, Сеть, МагазинСети, ТипПродажи, Продукт, ПродуктоваяИерархия, Количество, Сумма, 0currency, 0unit.
Куб реального времени (ZIREAL): Месяц, Сеть, Продукт, ПродуктоваяИерархия, Версия, Количество, Сумма, 0currency, 0unit.
Эти два куба входят в мультипровайдер, на котором сделан уровень агрегации: Месяц, Сеть, ТипПродажи, Продукт, ПродуктоваяИерархия, Версия, Количество, Сумма, 0currency, 0unit.
На уровне агрегации построен запрос.
В запросе (Query Designer) автоматически рассчитывается план продаж, который пользователь должен иметь возможность менять вручную. Этот расчет производится на основе ограниченных и рассчитанных показателей. Так как нельзя сделать рассчитанный показатель (в терминах QD, formula) готовым к вводу, то требуется воспроизвести расчет query силами FOX. А т.к. BI IP видит только базовые показатели, то и все рассчитанные показатели, участвующие в расчете плана, тоже надо сделать на FOX. И вот здесь у меня возникла сложность.
Показатели из query (f-formula, s-selection) в формате
Название ### Пояснение ### Расчет или Ограничения ### Спец.агрегация:
1) f113 ### среднее за интервал ### s113_1 ### Average по 0calmonth;
2) s113_1 ### продажи по сетям за интервал пред.года ### Сумма, ограничено:
Инфопровайдер: ZIST
Тип продажи: 1, 3
0currency: rur
Иерарахия: var_hier
Версия: var_vers
0calmonth: var_interval-12
Сеть
(константа-выбор)3) s114 ### продажи по сетям за месяц пред.года ###Сумма, ограничено:
Инфопровайдер: ZIST
Тип продажи: 1, 3
0currency: rur
Иерарахия: var_hier
Версия: var_vers
0calmonth: var_month-12
Сеть
(константа-выбор)4) f115 ### коэффициент по сетям ### f114/f113
5) f132 ### план ### (АтрибутПродукта==1)*f115 + (АтрибутПродукта==2)*f115*10
Эта задача сильно упрощена относительно реальной, т.к. мне важно понять суть, а дальше буду действовать по аналогии.
В наследство от предыдущего разработчика мне достался query с вводным показателем Сумма, ограничено:
Инфопровайдер: ZIREAL
Тип продажи:#0currency: rur
Иерарахия: var_hier
Версия: 001
0calmonth: var_month
Так как коэффициент пользователь тоже должен иметь возможность менять, а в кубе только два показателя (для рублей и для штук), то готовым для ввода показателем Коэффициент я сделала Сумма, ограничено:
Инфопровайдер: ZIREAL
Тип продажи:#
0currency: AFAИерарахия: var_hier
Версия: 001
0calmonth: var_month
Формула FOX для расчета коэффициентов, где
Operand:{KF, месяц, валюта, инфопровайдер, версия, сеть, продукт.иерархия, тип продажи}DATA FMONTH TYPE 0CALMONTH.
DATA ZMONTH TYPE 0CALMONTH.
DATA Z_MONTH TYPE 0CALMONTH.
DATA ZVCHAIN TYPE ZCHAIN. //сеть
DATA ZVVERS TYPE 0VERSION.
DATA ZVHIER TYPE ZCHIER.
DATA NOM TYPE I.
DATA SUM113 TYPE F.
DATA SUM114 TYPE F.
NOM = VARC(var_interval). //число месяцев в интервале, напр.5
Z_MONTH = VARV (var_month). // получаю значение целевого месяца, например, 10.2011
ZMONTH = TMVL(var_month,-12). //смещение на год назад, (10.2010)
SUM113 = 0.
SUM114 = 0.
FOREACH ZVCHAIN IN SELECTION. // имитирую константу-выбор. Здесь еще нужно перечислить признаки?FMONTH = VARI(var_interval,1). //1й месяц периода, напр. 03.2011
FMONTH = TMVL(FMONTH,-12). //смещение на год назад, (03.2010) DO NOM TIMES . // т.к. показатели ограничены двумя значениями ТипПродажи, то получается 2 комбинации для суммирования
SUM113 = SUM113 + {KF, FMONTH, RUR, ZIST, ZVVERS, ZVCHAIN, ZVHIER, 01} + {KF, FMONTH, RUR, ZIST, ZVVERS, ZVCHAIN, ZVHIER, 03}.
FMONTH = TMVL(FMONTH,1). //переход к след. месяцу
ENDDO.
SUM114 = SUM114 + {KF, ZMONTH, RUR, ZIST, ZVVERS, ZVCHAIN, ZVHIER, 01} + {KF, ZMONTH, RUR, ZIST, ZVVERS, ZVCHAIN, ZVHIER, 03}.
// имитация f115
IF SUM113 = 0. // Условие, чтобы не было деления на 0
EXIT.
ENDIF.
{KF, Z_MONTH, AFA, ZIREAL, 001, ZVCHAIN, ZVHIER, #} = SUM114*NOM/SUM113.
FMONTH = TMVL(FMONTH,1)
ENDFOR.В системе разработки нет данных, а в тесте и продуктиве после нажатия кнопки с командой "Выполнить функцию планирования" или "Выполнить последовательность" появляется диалоговое окошко с ошибкой: «The initial exception that caused the request to fail was: java.lang.NullPointerException».
Готовый для ввода показатель (коэффициент) остается пустым. Из чего я делаю вывод, что формула FOX некорректная и/или это что-то базисное (простые формулы, типа записи в столбец константы какой-нибудь, также сваливаются с ошибкой). Проверку на синтаксис формула проходит. На трассировку в тесте и продуктиве у меня нет авторизации, поэтому пишу формулы вслепую.
Собственно вопросы к форумчанам:
1) Правильно ли, что вводной показатель ограничивается признаком ТипПродажи (ведь этого признака нет в кубе реального времени)?
2) Правильно ли я имитирую константу-выбор? Может, надо дополнить признаком 0calmonth в Foreach?
3) Query является провайдером для веб-шаблона (WAD7), т.е. пользователь работает с отчетами на портале. Как стереть заголовок "AFA" (это левая валюта) из столбца - вводного для коэффициентов? Я правильно понимаю, что это возможно только силами JavaScript? Предчувствуя ответ на 3 вопрос, я уже попыталась подтереть JS'ом. Более того, изначально я вообще хотела рассчитывать все в query, а в вводные ячейки просто копировать, но не получается обратиться к ячейкам таблицы. Вот пример копирования столбца (сразу скажу, что не работает):
function MyFunc ()
{
var my_tab= document.getElementById("MY_ANALYSIS_interactive_pivot_a"); // нахожу по ID таблицу, формируемую веб-элементом ANALYSIS_ITEM
var my_rows = my_tab.getElementsByTagName("tr"); // нахожу по тегу все строки таблицы
var numrows = my_rows.length; //вычисляю количество строк таблицы
//копирую 2й столбец в 3
for(var i=2;i<numrows;i++){ // перебор начинаю с 3й строки, т.е. пропускаю шапку
document.all.my_tab.rows.cells[2].innerHTML=document.all.my_tab.rows[i].cells[1]; [i]// также пробовала innerText
document.all.my_tab.rows.cells[1].hidde(); [i]//скрываю ячейку
}
for(var j=0;j<2;j++){ // скрываю шапку
document.all.my_tab.rows[j].cells[1].hidde();
}
}Обращаться по ID к столбцам невозможно, т.к. отчет дает возможность пользователю сворачивать столбцы, а при этом действии их ID меняются.
П.С. спасибо, что дочитали досюда. Буду очень благодарна любой подсказке!