Показать сообщение отдельно
Старый 04.04.2003, 16:22   #2  
finn is offline
finn
Участник
 
136 / 24 (1) +++
Регистрация: 26.12.2001
Адрес: Москва
"Доступ фильтр" из "Прав доступа"
это примочка для SQL Option

я посмотрел форму 113 Финансы\Бюджеты

вероятнее всего дело в следующем

Этот фильтр безопасности стоит скажем на таблице 96 (G/L Budget Entry).
где-то в в форме мы делаем для таблицы 374 (G/L Acc. Budget Buffer)
CALCFIELDS для поля "Budgeted Amount", которое соответственно построено
по таблице 96.
Перед вычислением поля тоже можно соответственно
наложить фильтры, т.е. присвоить "G/L Acc. Budget Buffer"."Budget Dimension 2 Filter"
какое-то значение или не присвоить.
Если фильтры перед CALCFIELDS не накладывались,
т.е. считаем-вычисляем поле как бы по всему диапазону, а
таблица по которой считаем имеет фильтр безопасности ее ограничивающий, то
получается что при CALCFIELDS пытаемся залесть в закрытую зону
и идет сбой.
Это очевидно баг.

Единственное что можно сделать - так подправить код формы 113, что бы
расхождения между фильтрами перед вычислением "G/L Acc. Budget Buffer".CALCFIELDS("Budget Dimension 2 Filter") и фильтром безопасности
по "G/L Budget Entry" не возникало


я сделал так:

1. в роли наложил фильтры безопасности на 2 таблицы

- Table Data 96 Фин. Бюджет Операция
G/L Budget Entry: Бюджет Измерение 2 Код = ЗИМА

-Table Data 374 Фин. Счет Бюджет Буфер
G/L Acc. Budget Buffer: Бюджет Измерение 2 Фильтр =ЗИМА

2. в форме 113 добавил некоторый код (исправления смотри между ALFI)

*******
- на OpenForm()

CurrForm.GlobalDim1Filter.ENABLED :=
(GLSetup."Global Dimension 1 Code" <> '') AND
(GLAccBudgetBuf.GETFILTER("Global Dimension 1 Filter") = '');
CurrForm.GlobalDim2Filter.ENABLED :=
(GLSetup."Global Dimension 2 Code" <> '') AND
(GLAccBudgetBuf.GETFILTER("Global Dimension 2 Filter") = '');

// ALFI >
//до этого объявил 4 глобальные переменные BudgetDim1PremissionFilter (2,3,4)
BudgetDim1PremissionFilter := FALSE;
BudgetDim2PremissionFilter := FALSE;
BudgetDim3PremissionFilter := FALSE;
BudgetDim4PremissionFilter := FALSE;

IF GLAccBudgetBuf.GETFILTER("Budget Dimension 1 Filter") <> '' THEN BEGIN
BudgetDim1Filter := GLAccBudgetBuf.GETFILTER("Budget Dimension 1 Filter");
BudgetDim1PremissionFilter := TRUE;
END;
IF GLAccBudgetBuf.GETFILTER("Budget Dimension 2 Filter") <> '' THEN BEGIN
BudgetDim2Filter := GLAccBudgetBuf.GETFILTER("Budget Dimension 2 Filter");
BudgetDim2PremissionFilter := TRUE;
END;
IF GLAccBudgetBuf.GETFILTER("Budget Dimension 3 Filter") <> '' THEN BEGIN
BudgetDim3Filter := GLAccBudgetBuf.GETFILTER("Budget Dimension 3 Filter");
BudgetDim3PremissionFilter := TRUE;
END;
IF GLAccBudgetBuf.GETFILTER("Budget Dimension 4 Filter") <> '' THEN BEGIN
BudgetDim4Filter := GLAccBudgetBuf.GETFILTER("Budget Dimension 4 Filter");
BudgetDim4PremissionFilter := TRUE;
END;

CurrForm.BudgetDim1Filter.ENABLED :=
(GLAccBudgetBuf.GETFILTER("Budget Dimension 1 Filter") = '');
CurrForm.BudgetDim2Filter.ENABLED :=
(GLAccBudgetBuf.GETFILTER("Budget Dimension 2 Filter") = '');
CurrForm.BudgetDim3Filter.ENABLED :=
(GLAccBudgetBuf.GETFILTER("Budget Dimension 3 Filter") = '');
CurrForm.BudgetDim4Filter.ENABLED :=
(GLAccBudgetBuf.GETFILTER("Budget Dimension 4 Filter") = '');
// ALFI <

ValidateBudgetName;

*******
- в BudgetDrillDown()


WITH GLBudgetEntry DO
IF (GETFILTER("Global Dimension 1 Code") <> '') OR (GETFILTER("Global Dimension 2 Code") <> '') OR
(GETFILTER("Business Unit Code") <> '')
THEN
SETCURRENTKEY("Budget Name","G/L Account No.","Business Unit Code","Global Dimension 1 Code")
ELSE
SETCURRENTKEY("Budget Name","G/L Account No.",Date);

// ALFI >
GLBudgetEntry.FILTERGROUP(4);
// это что бы провалившись в суммы не могли сделать Вид\Показать все
// ALFI <

FORM.RUN(0,GLBudgetEntry);

*******
- в ValidateBudgetName()

//закоментировал ALFI
{
IF PrevGLBudgetName.Name <> '' THEN BEGIN
IF (GLBudgetName."Budget Dimension 1 Code" <> PrevGLBudgetName."Budget Dimension 1 Code") THEN
BudgetDim1Filter := '';
IF (GLBudgetName."Budget Dimension 2 Code" <> PrevGLBudgetName."Budget Dimension 2 Code") THEN
BudgetDim2Filter := '';
IF (GLBudgetName."Budget Dimension 3 Code" <> PrevGLBudgetName."Budget Dimension 3 Code") THEN
BudgetDim3Filter := '';
IF (GLBudgetName."Budget Dimension 4 Code" <> PrevGLBudgetName."Budget Dimension 4 Code") THEN
BudgetDim4Filter := '';
END;
}


// ALFI >
IF PrevGLBudgetName.Name <> '' THEN BEGIN
IF (GLBudgetName."Budget Dimension 1 Code" <> PrevGLBudgetName."Budget Dimension 1 Code")
AND
(NOT BudgetDim1PremissionFilter)
THEN
BudgetDim1Filter := '';
IF (GLBudgetName."Budget Dimension 2 Code" <> PrevGLBudgetName."Budget Dimension 2 Code")
AND
(NOT BudgetDim2PremissionFilter)
THEN
BudgetDim2Filter := '';
IF (GLBudgetName."Budget Dimension 3 Code" <> PrevGLBudgetName."Budget Dimension 3 Code")
AND
(NOT BudgetDim3PremissionFilter)
THEN
BudgetDim3Filter := '';
IF (GLBudgetName."Budget Dimension 4 Code" <> PrevGLBudgetName."Budget Dimension 4 Code")
AND
(NOT BudgetDim4PremissionFilter)
THEN
BudgetDim4Filter := '';
END;
// ALFI <

//закоментировал ALFI
{
GLAccBudgetBuf.SETFILTER("Budget Dimension 1 Filter",BudgetDim1Filter);
GLAccBudgetBuf.SETFILTER("Budget Dimension 2 Filter",BudgetDim2Filter);
GLAccBudgetBuf.SETFILTER("Budget Dimension 3 Filter",BudgetDim3Filter);
GLAccBudgetBuf.SETFILTER("Budget Dimension 4 Filter",BudgetDim4Filter);
}

// ALFI >
IF (NOT BudgetDim1PremissionFilter) THEN
GLAccBudgetBuf.SETFILTER("Budget Dimension 1 Filter",BudgetDim1Filter);
IF (NOT BudgetDim2PremissionFilter) THEN
GLAccBudgetBuf.SETFILTER("Budget Dimension 2 Filter",BudgetDim2Filter);
IF (NOT BudgetDim3PremissionFilter) THEN
GLAccBudgetBuf.SETFILTER("Budget Dimension 3 Filter",BudgetDim3Filter);
IF (NOT BudgetDim4PremissionFilter) THEN
GLAccBudgetBuf.SETFILTER("Budget Dimension 4 Filter",BudgetDim4Filter);
// ALFI <

//закоментировал ALFI
{
CurrForm.BudgetDim1Filter.ENABLED := (GLBudgetName."Budget Dimension 1 Code" <> '');
CurrForm.BudgetDim2Filter.ENABLED := (GLBudgetName."Budget Dimension 2 Code" <> '');
CurrForm.BudgetDim3Filter.ENABLED := (GLBudgetName."Budget Dimension 3 Code" <> '');
CurrForm.BudgetDim4Filter.ENABLED := (GLBudgetName."Budget Dimension 4 Code" <> '');
}

// ALFI >
IF (NOT BudgetDim1PremissionFilter) THEN
CurrForm.BudgetDim1Filter.ENABLED := (GLBudgetName."Budget Dimension 1 Code" <> '');
IF (NOT BudgetDim2PremissionFilter) THEN
CurrForm.BudgetDim2Filter.ENABLED := (GLBudgetName."Budget Dimension 2 Code" <> '');
IF (NOT BudgetDim3PremissionFilter) THEN
CurrForm.BudgetDim3Filter.ENABLED := (GLBudgetName."Budget Dimension 3 Code" <> '');
IF (NOT BudgetDim4PremissionFilter) THEN
CurrForm.BudgetDim4Filter.ENABLED := (GLBudgetName."Budget Dimension 4 Code" <> '');
// ALFI <

PrevGLBudgetName := GLBudgetName;


.....