![]() |
#8 |
Участник
|
Вот, что получилось у меня после того, как я привел код в структурированный и более читаемый вид
Код: IF SpecHeader.FIND('-') THEN REPEAT SpecLine.SETRANGE("Production BOM No.", SpecHeader."No."); IF SpecHeader2.FIND('-') THEN REPEAT SpecLine2.SETRANGE("Production BOM No.", SpecHeader2."No."); IF (SpecHeader."No." <> SpecHeader2."No.") AND (SpecHeader.Name = SpecHeader2.Name) THEN BEGIN IF SpecLine.FIND('-') THEN REPEAT IF SpecLine2.FIND('-') THEN REPEAT IF (SpecLine.COUNT = SpecLine2.COUNT) AND (SpecLine."Name." = SpecLine2."Name.") AND (SpecLine."Quantity per" = SpecLine2."Quantity per) THEN BEGIN Ret := TRUE; Var1 := SpecHeader."No."; Var2 := SpecHeader2."No."; END; UNTIL SpecLine2.NEXT = 0; UNTIL SpecLine.NEXT =0; END; UNTIL SpecHeader2.NEXT = 0; UNTIL SpecHeader.NEXT = 0; IF Ret THEN MESSAGE('Есть') ELSE MESSAGE('Нет'); Если вся шняга начинается как я понял, когда Код: IF (SpecHeader."No." <> SpecHeader2."No.") AND (SpecHeader.Name = SpecHeader2.Name) THEN BEGIN Код: SpecHeader2.SETRANGE(Name, Spec.Header.Name); SpecHeader2.SETFILTER("No.", '<>%1', SpecHeader."No."); Код: IF SpecHeader.FIND('-') THEN REPEAT SpecHeader2.RESET; SpecHeader2.SETRANGE(Name, SpecHeader.Name); SpecHeader2.SETFILTER("No.", '<>%1', SpecHeader."No."); IF SpecHeader2.FIND('-') THEN REPEAT SpecLine.SETRANGE("Production BOM No.", SpecHeader."No."); SpecLine2.RESET; SpecLine2.SETRANGE("Production BOM No.", SpecHeader2."No."); SpecLineCount := SpecLine.COUNT; SpecLine2Coount := SpecLine2.COUNT; IF SpecLineCount = SpecLine2Coount THEN BEGIN SpecLine2.SETRANGE(Name, SpecLine.Name); SpecLine2.SETRANGE("Quantity Per", SpecLine."Quantity Per"); IF SpecLine2.FIND('-') THEN BEGIN Ret := TRUE; Var1 := SpecHeader."No."; Var2 := SpecHeader2."No."; END; END; UNTIL SpecHeader2.NEXT = 0; UNTIL SpecHeader.NEXT = 0; IF Ret THEN MESSAGE('Есть') ELSE MESSAGE('Нет'); Ебрика!!!! Вы ищете не заведен ли уже такой же в точности комплект???? По составу и всему остальному ) День сегодня проведен не зря. Ды-бы-дым, ды-бы-дам ) Я все пОнял [Димон, Наша Раша] Ммм. Плохо написал. Накладывать фильтры на SpecLine надо вне начала цикла по SpecHeader2.. А то COUNT по SpecLine считается чаще, чем нужно ( А COUNT - тажелая функция. А так все. Ах да... Вот так должно было звучать условие задачи : "Есть 27 и 90 таблицы. Коды комплектующих судя по всему у них могут повторяться (никто не смотрит, была ли уже дверца шкафа белая с кодом А. могут внести товар с тем же названием, но код будет уже Б). Задача в том, чтобы найти полностью идентичные комплекты по составу, учитывая, что не Код, а Название комплектующей имеет значение." Вот коллега поправил код. Получился рабочий вариант. Вроде бы ) Я цикл забыл. Код: IF SpecHeader.FIND('-') THEN REPEAT SpecHeader2.SETRANGE(Name, SpecHeader.Name); SpecHeader2.SETFILTER("No.", '<>%1', SpecHeader."No."); IF SpecHeader2.FIND('-') THEN REPEAT SpecLine.SETRANGE("Production BOM No.", SpecHeader."No."); SpecLine2.SETRANGE("Production BOM No.", SpecHeader2."No."); IF SpecLine.COUNT = SpecLine2.COUNT THEN BEGIN IF SpecLine.FIND('-') THEN REPEAT SpecLine2.Setrange("Name.", SpecLine."Name."); SpecLine2.Setrange("Quantity per", SpecLine."Quantity per"); IF NOT SpecLine2.ISEMPTY() THEN BEGIN Ret := TRUE; Var1 := SpecHeader."No."; Var2 := SpecHeader2."No."; END; UNTIL Ret OR (SpecLine.NEXT = 0); END; UNTIL Ret OR (SpecHeader2.NEXT = 0); UNTIL Ret OR (SpecHeader.NEXT = 0); IF Ret THEN MESSAGE('Есть совпадение') ELSE MESSAGE('Нету сопадений'); |
|