![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в двойном TList.
MikeLevinN © (2007-09-06 20:46:00)Допустим, что есть некоторое количество поставщиков (допустим 100), и у каждого из них есть список поставляемых товаров и их количество и цена. (Оговорюсь, что: данные не из базы, просто из текстового файла)
Т.е. это получается два массива. Нужно из этой информации сделать выборку, по наличию товара (по числовому индексу) и количеству.
Но я не представля, как такое реализовывают, я подумал и использовал две записи и два TList. Набросал каркас кода, но мне кажется, что это совсем не то, что нужно.
У меня несколько вопросов: какой подход в такой ситуации? Можно ли использовать такой код? Насколько он быстро будет заниматься поиском? Что можете предложить, может где есть исходник посмотреть, как решают такие задачи?
type
PExData = ^TExData;
TExData = record
Id1, Id2: LongWord; // Id1 - товар; Id2 - количество
Value: Double; // Цена
end;
PData = ^TData;
TData = record
Id: LongWord; // Номер поставщика
Name: string; // Название
MyIdent: Word;
MyExData: TList; // Заполнен элементами типа TExData
end;
var
MyDatas: TList;
// MyDatas - заполнен элементами типа TData
function GetResult(_Id1, _Id2: LongWord): string;
var
i, j: LongWord;
begin
for i := 0 to MyDatas.Count - 1 do
with PData(MyDatas.Items[i])^ do
begin
for j := 0 to MyExData.Count - 1 do
begin
if (PExData(MyExData.Items[j])^.Id1 = _Id1) and ((PExData(MyExData.Items[j])^.Id2 = _Id2)) then
begin
Result := Format('debug_result: %s; data id: %d; Цена: ....', [Name, Id]);
end;
end;
end;
end;
MsGuns (2007-09-07 00:30:00) [1]Задача непростая и универсального решения нет. Как способ "нормализации" можно использовать словари, которые автоматически пополнять из "свежих" прайсов и давать на просмотр менеджеру по поставкам для приведения к общему "знаменателю".
Под "нормализацией" в данном случае имеется в виду наличие справочника товаров, под который "подгоняются" ВСЕ прайсы от всех поставщиков.
Сложность еще в том, что один поставщик детализирует товар (например, вода "Биола" "Апельсин", "Лимонад" и т.д., а второй пишет "вода "Биола" газированная сладкая" - и относи ее то ли к апельсину, то ли к лимонаду)
Кроме того, сложно в плоскую таблицу запихать несколько колонок цен, которые очень часто присутствуют в прайсах, причем кол-во этих колонок может разниться как у разных поставщиков, так и у одного и того же по разным группам товара или в разное время.
И самое, пожалуй, сложное,это "гадьски" скидки, которые дают не на отдельные позиции, а на все закупку в целом в зависимости от суммы, условий оплаты или имеющегося договора. Например, у поставщика 1 цены на мороженое от 8р до 13р, у другого - от 7,5 до 12, но первый дает общую скидку на мороженое 10%. У кого цены ниже ?
В общем я в свое время решил эту тему чисто в Excel с помощью макросов. Там даже графики рисовал ;)
Эх, давненько это было ;(
MsGuns (2007-09-07 00:15:00) [2]В таблице данных одного поставщика (например, в присланном по мылу экселешном прайсе) значится "Анальгин", а другого - "Таблетки анальгин", хотя на самом деле это один и тот же препарат. Как мне их "поженить", чтобы занести в одну запись "Анальгин" результирующей таблицы с двумя ценами (иначе как можно их сравнить ?) ?
MikeLevinN (2007-09-06 22:21:00) [3]Опять я не понимаю, что значит нормализовать?
MsGuns (2007-09-06 21:51:00) [4]Как-то "нормализовать" информацию о "разных" поставщиках
MikeLevinN (2007-09-06 21:45:00) [5]Ну а что тогда делать?
MikeLevinN (2007-09-06 21:42:00) [6]Я видел ClientDataDet, но не знаю, стоит ли использовать это... По количеству у меня получается где-то так:
Максимальное кол-во поставишиков -- будет 80.
Максимальное кол-во товаров -- будет 800.
Можно ли при этих количествах использовать мой алгоритм?
И не знаю, стоит ли использовать для этого ClientDataDet или придумать ешё что-то? Порекомендуйте пожалуйста.
MsGuns (2007-09-06 21:42:00) [7]Дохлый номер ;(
Вася Правильный (2007-09-06 21:31:00) [8]
> ты мог бы другое что-нибудь придумать?
например, запхать данные в ClientDataDet
Sergey Masloff (2007-09-06 21:26:00) [9]Насколько быстро... небыстро ;-)
Но если поставщиков 100 а товаров у них скажем по 50 то не страшно...
MikeLevinN (2007-09-06 21:22:00) [10]
> если это не БД, ты мог бы другое что-нибудь придумать?
Например, что придумать? Я не понял.
koha (2007-09-06 21:15:00) [11]
> (Оговорюсь, что: данные не из базы, просто из текстового
> файла)
если это не БД, ты мог бы другое что-нибудь придумать?