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

Тема в разделе "1C и всё что с ней связано", создана пользователем Hryv, 20 окт 2011.

  1. Hryv

    Hryv Гость

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

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

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

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

    замер показал, что тормозит этот цикл
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Можно код посмотреть хоть?
     
  3. Hryv

    Hryv Гость

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


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

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Идея такая:
    В ТЗ1 добавить колонку "ПерваяТЗ" типа "число", заполнить ее единицей.
    Перегнать данные всех строк 2-й ТЗ в первую по колонкам "Товар","День","Цена","Приход","Расход"
    ТЗ1.Свернуть("Товар,День,Цена","Приход,Расход,ПерваяТЗ").
    Строки, где ПерваяТЗ = 0 удалить.
     
  5. Hryv

    Hryv Гость

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

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

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    таак...
    попробую примеры
    Товар дата Приход ПерваяТЗ ТЗ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 не удаляем, а переписываем из вспомогательных колонок в основные.
     
  7. Hryv

    Hryv Гость

    Похоже что так сработало бы

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

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Одним запросом вестимо лучше. А так - разсруктуры ТЗ одинаковые, сам бог велел Тз.свернуть()
     
  9. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    В одном запросе сделать выборку двух таблиц. Сдал ать "индексное поле" Товар+Цена+День. Далее сделать объединение по этому полю с суммированием прихода и расхода.

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

Поделиться этой страницей