Оптимизация Работы С Тз

  • Автор темы Hryv
  • Дата начала
H

Hryv

#1
Есть две ТЗ с одинаковыми колонками: Товар, Цена, День, НачО, КонО, Приход, Расход

Если в ТЗ1 и в ТЗ2 есть строки с совпадающими Товар, Цена, День, то надо
ТЗ1.Приход = ТЗ1.Приход+ТЗ2.Приход;
ТЗ1.Расход = ТЗ1.Расход+ТЗ2.Расход;

а если в ТЗ2 есть строка с такими Товар, Цена, День, которых нет в ТЗ1, то в ТЗ1 надо добавить строку

Я сделал вложенный цикл, все работает правильно
Однако если делать за 10 дней, то время выполнения еще терпимое, но как правило будут делать за месяц
Через 8 минут по секундомеру я прервал отчет

замер показал, что тормозит этот цикл
 
H

Hryv

#3
unknown181538, я специально не выкладывал
чтобы не вести ваши мысли в одном направлении
вдруг кто-то предложит радикально иной эффективный подход


кстати больше всего весит конкретно одна строка
Если (ТЗ1.Товар=ТЗ2.Товар) и (ТЗ1.Цена = ТЗ2.Цена) и (ТЗ1.День = ТЗ2.День) Тогда

за 5 дней - 15%
за 15 дней - 28% (более 3 млн. вызовов) - это уже первая строка во всем отчете
 

unknown181538

НеГуру
28.12.2008
1 417
0
#4
Идея такая:
В ТЗ1 добавить колонку "ПерваяТЗ" типа "число", заполнить ее единицей.
Перегнать данные всех строк 2-й ТЗ в первую по колонкам "Товар","День","Цена","Приход","Расход"
ТЗ1.Свернуть("Товар,День,Цена","Приход,Расход,ПерваяТЗ").
Строки, где ПерваяТЗ = 0 удалить.
 
H

Hryv

#5
unknown181538, или я не понял идею или она не правильная, так как я не вижу как нужные остатки из ТЗ2 попадут в ТЗ1

Но в любом случае вопрос снимается
Я решил копнуть глубже
Обе ТЗ формируются запросами
Вроде уже вижу как одним запросом сразу получить одну ТЗ со всеми нужными данными

Сейчас буду тестить
 

unknown181538

НеГуру
28.12.2008
1 417
0
#6
unknown181538, или я не понял идею или она не правильная, так как я не вижу как нужные остатки из ТЗ2 попадут в ТЗ1
таак...
попробую примеры
Товар дата Приход ПерваяТЗ ТЗ2. Товар Дата Приход ПерваяТЗ
Товар1 01.01.2011 10 1 Товар1 01.01.2011 15 0
Товар1 02.01.2011 10 0

После объединения
Товар дата Приход ПерваяТЗ
Товар1 01.01.2011 10 1
Товар1 01.01.2011 15 0
Товар1 02.01.2011 10 0

ТЗ1 после свертки:
Товар дата Приход ПерваяТЗ
Товар1 01.01.2011 25 1
Товар1 02.01.2011 10 0

После удаления:
Товар дата Приход ПерваяТЗ
Товар1 01.01.2011 25 1


А... стоп.. надо подумать. Условия не четко прочитал.

Добавлено: Фразу про остатки упустил.
Но, если все записи в ТЗ2 уникальны, то в ТЗ1 добавляем колонку НачОстИзТЗ2, и в конце циклов, если ПерваяТЗ=0 не удаляем, а переписываем из вспомогательных колонок в основные.
 
H

Hryv

#7
Но, если все записи в ТЗ2 уникальны, то в ТЗ1 добавляем колонку НачОстИзТЗ2, и в конце циклов, если ПерваяТЗ=0 не удаляем, а переписываем из вспомогательных колонок в основные.
Похоже что так сработало бы

Возьму на заметку, но проверять уже не буду, так как замена двух запросов на один решила проблему
Теперь за месяц отрабатывает быстрее 1 минуты
 

puh14

Well-known member
11.07.2008
1 412
0
#8
Одним запросом вестимо лучше. А так - разсруктуры ТЗ одинаковые, сам бог велел Тз.свернуть()
 

Allexei

Well-known member
02.05.2008
322
1
#9
В одном запросе сделать выборку двух таблиц. Сдал ать "индексное поле" Товар+Цена+День. Далее сделать объединение по этому полю с суммированием прихода и расхода.

.....
Ой.Извеняюсь. Не увидел что 7.7.