Уменьшение объема SQL-запросов в отчете NAVISION 2009 R2

В NAVISION 2009 R2 у меня есть отчет, который перебирает 3 таблицы:

  • Заголовок службы: 82 266 шт. / 120512 Ko
  • Сервисная линия: 311 117 шт. / 720 352 тыс. шт.
  • Запись в служебной книге: 2 293 754 позиции / 2 453 568 тыс.

Я экспортирую около 10 000 заголовков и 50 000 строк.

Из SQL Server Profiler я вижу, что NAVISION делает:

  • 1 запрос по заголовкам

    SELECT * FROM "database_name"."dbo"."company_name$Service Header"

  • 10 000 запросов к строкам (с использованием свойства DataItemLink)

    SELECT * FROM "database_name"."dbo"."company_name$Service Line"

  • 50 000 запросов к записям книги (с использованием процедуры SETRANGE + SETFILTER)

    SELECT * FROM "database_name"."dbo"."company_name$Service Line"

Из-за размера таблицы записей Service Ledger эти запросы занимают около 300 мс каждый (согласно событиям StmtCompleted), поэтому в целом более 4 часов.

Поскольку я использую ограниченное количество атрибутов из таблиц записей Ledger,

Есть ли способ избежать SELECT * запроса NAVISION по умолчанию и вместо этого указать необходимые атрибуты?


person Tibo    schedule 11.09.2019    source источник


Ответы (1)


Я не думаю, что есть способ ограничить поля, извлекаемые Nav, но вот экспериментальная идея, я однажды использовал ее для проекта интеграции, она выглядит следующим образом:

  1. Создайте представление в SQL Server для каждой таблицы (или даже комбинированное представление)
  2. Сохраните вид со стилем имени объекта Nav: [CompanyName]$[ViewNAme]
  3. Создайте таблицы в Nav и установите для свойства LinkedObject значение true.
  4. Сохраните таблицу с тем же именем, что и представление, но без названия компании: ViewName.
  5. Добавьте нужные поля с теми же именами, что и в представлении, в таблицу Nav и сохраните их.

Теперь используйте эти таблицы (LinkedObject — View) в своем отчете.

person Babak    schedule 23.06.2020