"Доступ фильтр" из "Прав доступа"
это примочка для 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;
.....
|