AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.05.2008, 15:37   #1  
ivanovax is offline
ivanovax
Участник
 
3 / 10 (1) +
Регистрация: 01.03.2006
Здравствуйте.

Сначала хочу рассказать, как проявляется данная ошибка:

1. Берем стандартный Navision на SQL, версия любая. У нас 3.60.04, с клиентом 3.70, но это не имеет значения, пробовал и на 4.0 sp3. В таблице G/L Entry, у ключей должен быть включен MaintainSIFTIndex, т.е. должна быть включена поддержка SIFT (по умолчанию все включено).

2. Берем любое глобальное измерение и добавляем ему значения:
VALUE1
VALUE2
VALUE3
VALUE4
VALUE5
VALUE6

3. В фин. журнале делаем 2 проводки по 2-м любым фин. счетам, одну со значением измерения VALUE5, а другую с VALUE6.

4. Открываем план счетов и ставим по выбранному глобальному измерению следующий FlowFilter:
(VALUE4|VALUE1)&(VALUE5|VALUE2..VALUE3)
Согласно логике это выражение дает пустой результат, однако смотрим на план счетов. В нем присутствует сумма из нашей проводки с VALUE5.

5. Открываем план счетов и ставим по выбранному глобальному измерению следующий FlowFilter:
(VALUE4|VALUE1|VALUE6)&(VALUE6|VALUE5|VALUE2..VALUE3)
Согласно логике это выражение должно отобрать все фин. операции с о значением измерения VALUE6 однако смотрим на план счетов. В суммах учтены проводки со значениями VALUE6 и VALUE5.

Выяснилось что таких выражений FlowFilter, при которых в плане счетов показываются неверные суммы можно подобрать много, может быть очень много.
В файловой версии все работает правильно. Если в SQL версии в таблице G/L Entry у ключей отключить MaintainSIFTIndex то опять работает правильно, но очень медленно (если база большая). Перегенерация SIFT индексов ошибку не исправляет.
Оба правильно работающих варианта не устраивают, нужен полноценный SQL c поддержкой SIFT, поскольку нужна скорость вычислений и SQL для интеграции с другими системами.

Почему у нас используются такие выражения во FlowFilter:
У нас переписаны фин. отчеты, фильтры глобальных измерений можно задавать и в строках и в столбцах. Результат показываемый в ячейках, есть множество операций попадающих под пересечение фильтров строк и столбцов. Т.е. по сути дела для каждой ячейки динамически формируется собственный уникальный фильтр, в том числе он может оказаться и таким как в примере выше. Из-за данной ошибки, фрагментарно, в некоторых ячейках отчетов оказываются суммы, которых быть не должно вообще т.к. результат пересечения фильтров пустое множество (как в 4 пункте моего примера) или они добавляются к реально существующим суммам (как в 5 пункте моего примера).

Насколько я смог понять, когда SIFT технология используется в SQL версии, клиент Navision пытается проанализировать и вычислить результат логического выражения представленного в фильтре. Таким образом, создатели Navision видимо хотели упростить и сократить кол-во SQL запросов, которые клиент потом делает к базе данных. Так вот похоже, что решение логического выражения клиент Navision иногда находит неправильно, ошиблись ребята где-то.

Если посмотреть под MS SQL Profiler какой SQL запрос Navision делает к серверу, то можно понять что результатом выражения FlowFilter приведенного в 4 пункте моего примера он считает значение VALUE5, т.е. он выбирает все операции только с данным значением аналитики.
Для выражения из 5 пункта моего примера SQL запрос делается для аналитик VALUE6 и VALUE5.

СТАЛКИВАЛСЯ ЛИ КТО-НИБУДЬ С ПОДОБНОЙ ПРОБЛЕМОЙ? ЕСТЬ ЛИ ЕЕ РЕШЕНИЕ ИЛИ ПУТИ ОБХОДА? ЗАРАНЕЕ БАГОДАРЕН ЗА ПОМОЩЬ.
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:50.