|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от dech
![]() Все бы хорошо, но в более ранних версиях, например в АХ4 она в принципе не работает.
Во-первых из-за того, что вызывается на клиенте. Во-вторых, абсолютно неверно составляется запрос. Функцию невозможно было вызвать ни при каких условиях. Непонятно, как вообще она прошла в production. В-третьих, хоть она и была исправлена в 2012, однако с некоторыми отключенными полями запрос все-равно формировался с ошибками. ![]() Если кому интересно, то проблема в поле DataAreaId. Т.е. для таблиц со свойством SaveDataPerCompany = No данная функция прекрасно работала. А вот если поле DataAreaId надо было учитывать, то вот тут и возникали проблемы с конструированием строки запроса Select-SQL Это поле не добавлялось в список полей. А здесь нужны 3 списка: Select, Group By, Order By. Поэтому или в полученной строке SQL-запроса появлялось "лишняя" запятая или это поле вообще "забывали", что еще хуже, поскольку получали дубли там, где их нет. Т.е. модификация сильно избыточная. Надо всего лишь добавить if (dataPrCompany) перед/после формированием очередного списка полей с явным добавлением поля DataAreaId в список полей Вот здесь был разбор этой функции и зачем нужен параметр fieldNameGenerationMode в методе dictTable.fieldname() Кнопка "Add-ins\Дубликаты" на табличных индексах в АОТ PS: Но, вообще-то, есть еще поле Partition. Теоретически, его тоже надо добавлять в формируемый запрос ![]()
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Logger (1), SRF (1). |
![]() |
#2 |
Участник
|
Проблема не только в этом. Есть некоторые отключенные поля, которые не существуют на уровне 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(*) для ясности).
Достаточно двух списков: названия полей и их номера для сортировки. Цитата:
Да и если явно добавить DataAreaId, вы уже не избавитесь от группировки по этому полю для общих таблиц, где DataAreaId нет в принципе. Плюс я заменил алгоритм на использование коллекции Map. Так будет немного эстетичнее, да и удобнее читать код. Цитата:
Сообщение от Владимир Максимов
![]() Вот здесь был разбор этой функции и зачем нужен параметр fieldNameGenerationMode в методе dictTable.fieldname()
Кнопка "Add-ins\Дубликаты" на табличных индексах в АОТ Да, можно и с Partition поработать... теоретически, но практически это почти нигде не используется.
__________________
// no comments |
|
Теги |
duplicates, index, sysdictindex, баг, индекс, ошибка |
|
|