Ну чтож, нашел кучу багов. Пофиксил. Тестируем поставщика дальше?
Вопрос к знатокам поставщиков. Есть у ТП такой метод, как ТекущаяСтрока. Если пользователь пишет
тп.ТекущаяСтрока = выбЭлементмне надо по переданному значению определить ключ нужной записи.
Сейчас это делается убого, и может привести к full-scan'у.
Например, такой запрос (вывод справочника с иерархией):
|select
|id [Номенклатура :Справочник.Номенклатура],
|code [Код],
|descr [Наименование],
|case when isfolder = 2 then '' else '+' end [ЭтоГруппа],
|Артикул,
|БазоваяЕдиница [БазоваяЕдиница :Справочник.Единицы],
|idx_parentid_isfolder_descr key
|from Справочник_Номенклатура Н
|where parentid = @parentid
Пользователь задает ид-поле - [Номенклатура :Справочник.Номенклатура].
То есть возникает задача - если мне передали id, надо вычислить для него idx_parentid_isfolder_descr.
Сейчас это решается так:
выполняется запрос
|select
|id [Номенклатура :Справочник.Номенклатура],
|code [Код],
|descr [Наименование],
|case when isfolder = 2 then '' else '+' end [ЭтоГруппа],
|Артикул,
|БазоваяЕдиница [БазоваяЕдиница :Справочник.Единицы],
|idx_parentid_isfolder_descr key
|from Справочник_Номенклатура Н
|where parentid = @parentid and [Номенклатура :Справочник.Номенклатура] = @idvalue
|order by key limit 1
Как видите, не самый оптимальный вариант, оптимальней было бы
|select idx_parentid_isfolder_descr
|from Справочник_Номенклатура Н
|where id = @idvalue limit 1
В примере с документами по графе отбора ситуация еще хуже.
Я совершенно не представляю, как автоматом из исходного текста запроса и названия ИдПоля сгенерить оптимальный запрос для получения ключа порядка по значению ИдПоля.
Может, при указании ИдПоля задавать еще и запрос для нахождения ключа по ИдПолю?