Показать сообщение отдельно
  #3  
Старый 02.12.2011, 13:39
win32nod32 win32nod32 вне форума
Прохожий
 
Регистрация: 27.02.2011
Сообщения: 12
Репутация: 10
По умолчанию

Результат заноситься в СтрингЛист, который, собственно, и возвращается функцией. Если кто то разобрался, что требуется от функции и есть предложение сделать проще - пожалуйста, говорите)))

Вот, немного изменил процедуру. Заменил массивы StringList'ами. Только толку мало. Опять, вместо того, чтобы не записывать в лист id одинаковой детали, он все правильно плюсует детали и все равно записывает...

Код:
function DataBase.GetDetList(id, count: TStringList): TStringList;
var
  d, k: TStringList;
  i, j, l: integer;
  f: boolean;
  s: string;

begin
  result := TStringList.Create;
  d := TStringList.Create;
  k := TStringList.Create;
  f := false;
  for i := 0 to id.count - 1 do
  begin
    c := GetComplectForID(strtoint(id[i]));
    for j := 1 to c.length do
  	begin
      if i = 0 then
	    begin
      	d.add(inttostr(c.detail[j]));
        k.add(inttostr(strtoint(count[i]) * c.count[j]))
      end else
      for l := 0 to d.count - 1 do
        if c.detail[j] = strtoint(d[l]) then (если в списке есть такая деталь)
          k[l] := inttostr(strtoint(k[l]) + c.count[j] * strtoint(count[i])) (то прибавляем к ней кол-во) 
        else f := true; (если нет, то тогда пишем в листы ид и кол-во)
      if f then
      begin
        d.add(inttostr(c.detail[j]));
        k.add(inttostr(strtoint(count[i]) * c.count[j]))
      end;
    f := false;
    end;
  end;
	for i := 0 to d.count - 1 do
  begin
    s := d[i] + '$' + k[i];
    result.add(s);
  end;
end;
сделал 2 движка с комплектацией (id_детали$количество) :
1) 1$1 2$1 3$1 4$1
2) 1$1 2$1

По идее, при их выборе программа дожна занести в лист:
1$2 2$2 3$1 4$1 (т.к. 1 и 2 деталь повторяются, их кол-во складываем)
Вместо этого она пишет то же самое + 1$1 2$1 (добавляет то что не нужно, т.к. эти детали повторяются)
Ответить с цитированием