Форум » GUI » Отбор документов » Ответить

Отбор документов

Vlad04: Вопрос общий, но так как делаю все в MINIGUI , пишу здесь. Есть таблица,из которой выводится на экран: Дата Документа, № документа, Покупатель .Обычно в таких случаях принято фильтровать данные по дате.Я так и хочу- создаю индексы: dtos(DataDoc)+NomerDoc и dtos(DataDoc)+Name.Далее, устанавливаю Scope. Но как в этом случае искать документы ( по номеру или имени Покупателя). Seek работать не будет, только Locate. У кого какие соображения или практика по этому вопросу есть- подскажите.

Ответов - 10

S-A-N: Первое, что приходит в голову - иметь соответствующие индексы по NomerDoc и Name. Далее: - dbSetOrder() или OrdSetFocus() на соответствующий индекс - непосредственно сам поиск - dbSetOrder() или OrdSetFocus() на основной индекс Как-то так.

Vlad04: Это общий просмотр. С этим все понятно. А вот если установить интервал видимости по дате..... Я раньше делал отбор в пределах месяца. Индекс начинался с Left(dtos(DataDoc),6)

S-A-N: Тогда еще раз: - какой индекс управляющий при просмотре? - по какому полю необходим поиск?


Vlad04: Хотелось бы так dtos(DataDoc)+NomerDoc ищем по номеру документа ( символьное поле) или dtos(DataDoc)+Name ищем по наименованию организации В первом случае номера не повторяются . NomerDoc - УНИКАЛЬНЫЕ Во втором одинаковые организации не будут стоять друг за другом, если документы оформлены в разные дни

Andrey: Vlad04 пишет: Seek работать не будет Будет, если сделать несколько индексных файлов. И переключайся между ними... Можешь сделать условную индексацию, тоже очень быстро поиск происходит. Locate - это очень долго...

S-A-N: Vlad04 пишет: Обычно в таких случаях принято фильтровать данные по дате. ПРИНЯТО или НЕОБХОДИМО фильтровать по дате? Как Вы хотите показать результат поиска документа (организации): - в отдельном окне; - в том же окне, убирая с экрана лишние записи; - в том же окне в той же таблице, делая активной найденную запись? Как вариант, предлагаю сделать три индекса: 1 - основной = дата+...то, что необходимо при обычном промотре 2 - дополнительный = номер документа+дата 3 - дополнительный = заказчик + дата Первый индекс использовать при просмотре таблицы. Второй и третий - служат для поиска данных.

Vlad04: ПРИНЯТО или НЕОБХОДИМО фильтровать по дате? Необходимо. - в отдельном окне; - в том же окне, убирая с экрана лишние записи; - в том же окне в той же таблице, делая активной найденную запись? Это уже детали. Во всех распространенных системах такие функции фильтрации и поиска есть - 1)отбор документов в интервале дат или 2)отбор документов на заданную дату или 3)отбор документов позднее заданной даты. В первом и третьем случае Seek искать не будет, так как чтобы найти, нужно ввести в стороку поиска первую часть индекса, т.е дату ,а она неизвестна, а потом собственно объект поиска.

S-A-N: Vlad04 пишет: Во всех распространенных системах такие функции фильтрации и поиска есть А кто мешает задать фильтр? См. dbSetFilter. Vlad04 пишет: В первом и третьем случае Seek искать не будет, так как чтобы найти, нужно ввести в стороку поиска первую часть индекса, т.е дату ,а она неизвестна, а потом собственно объект поиска. Вы упорно не обращаете внимание на возможность создания вспомогательного индекса для поиска (№ док-та + дата). В этом случае легко решаются описанные выше 1 и 3 случаи.

S-A-N: Да, и хочу еще раз обратить Ваше внимание на Andrey пишет: Можешь сделать условную индексацию

Vlad04: ок. Попробую все варианты



полная версия страницы