Показать сообщение отдельно
Старый 15.02.2019, 14:45   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Если кому интересно, то проблема в поле DataAreaId.
Проблема не только в этом. Есть некоторые отключенные поля, которые не существуют на уровне SQL Server'а. Список ORDER BY формируется последовательно, чем и порождает ошибку. Например в индексе 10 полей, допустим 2-е, 3-е и 5-е по счету поля отключены, в списке полей их будет всего 7, однако в ORDER BY будет нумерация 1, 4, 6, 7, 8, 9, 10 DESC. А откуда у нас 8, 9 и 10, когда в SELECT'е их всего 7? (я игнорирую COUNT(*) для ясности).
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
А здесь нужны 3 списка: Select, Group By, Order By.
Достаточно двух списков: названия полей и их номера для сортировки.
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Т.е. модификация сильно избыточная. Надо всего лишь добавить if (dataPrCompany) перед/после формированием очередного списка полей с явным добавлением поля DataAreaId в список полей
Как следует из вышесказанного, "всего-лишь добавить if" не получится.
Да и если явно добавить DataAreaId, вы уже не избавитесь от группировки по этому полю для общих таблиц, где DataAreaId нет в принципе.
Плюс я заменил алгоритм на использование коллекции Map. Так будет немного эстетичнее, да и удобнее читать код.
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Вот здесь был разбор этой функции и зачем нужен параметр fieldNameGenerationMode в методе dictTable.fieldname()

Кнопка "Add-ins\Дубликаты" на табличных индексах в АОТ
Не спорю, но здесь так не докопались до истины. Проблема осталась висеть мертвым грузом еще 10 лет. Возможно из-за того, что эта функция очень редко используется.
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
PS: Но, вообще-то, есть еще поле Partition. Теоретически, его тоже надо добавлять в формируемый запрос
Да, можно и с Partition поработать... теоретически, но практически это почти нигде не используется.
__________________
// no comments