"Андрей Иванов" ...

Привет, всем!

Есть старая прога D7+BDE+Paradox7 розничная торговля лекарствами.
Сделал новую D7+FIB+Firebird1.5

средний ассортимент 3-5тыс позиций, но есть и по 10тыс (это те кто еще и 
косметикой торгует)

В старой проге фармацевт видит весь товар в алфавитно порядке.
При наборе первых букв названия происходит перемещение к соответствующему 
товару.
В этой ситуации перемещение к нужному товару происходит даже если название 
товара набирается не совсем точно.
Пример: ШАЛФЕЙ
а в базе есть ШАЛФЕИ мы все равно окажемся на нужной строке,
т.к. поиск идет при наборе каждой буквы и как только идет не совпадение
мы просто не перемещаемся с последнего найденного варианта.

В новой проге весь товар по умолчанию не видно.
Наберут ШАЛФ тогда (оп like 'ШАЛФ%' )и увидят
ШАЛФЕИ
ШАЛФЕЙ

засада1: они набирают ШАЛФЕЙ соответственно не весь товар видят.
Кто помнит, что есть еще товар начинает убирать последнии буквы.
Такое гадание их напрягает, а они меня.

засада2: в старой проге при нахождении товара они еще видят по десять
строк с верху и с низу от этого товара.
У товара есть цветовые метки (красный истекает срок годности, синий долго лежит 
и т.п.)
и фармацевты говорят, что краем газа они их замечают и в памяти у них это 
откладывается.
Соответственно в новой проге этого нет.

select first 21 * from table
where name >=
(
   select first 1 skip 10 name from table
    where name <=
   (
       select first 1 name from table
        where name like 'шалф%'
       order by name
   )
   order by name desc
)
order by name

Или, более эффективно и понятно :

create or alter procedure proc (mask varchar(255))
 returns (id integer, name varchar(255))
as
begin
 select first 1 name from table
  where name starting :mask
 order by name
 into :name;

 select first 1 skip 10 name from table
  where name <= :name
 order by name desc
 into :name;

 for select first 21 id, name from table
  where name >= :s
 order by name
 into :id, :name
 do suspend;
end

   Есс-но, оба индекса на name необходимы. Да, еще, - name должно быть 
уникально.
Ну и на сладкое - сам придумай что делать, если name starting :mask ничего не 
вернёт

--
Хорсун Влад


Ответить