7.7 Что быстрее: запрос или временный расчет регистров?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем X-Man, 27 янв 2014.

  1. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    433
    Симпатии:
    3
    Баллы:
    29
    Собственно, сабж. Что целесообразнее использовать в модуле проведения при контроле остатков: запрос или временный расчет регистров с наложенными фильтрами? Что будет работать быстрее?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Временный расчет разумеется. Ибо запрос выполняется всегда, а расчет только если итоги не актуальны.
    Но будьте аккуратны с итогами. Там есть подводные камни. Пример:
    Если не указать для итогов первый параметр (допускается) время расчета увеличится в РАЗЫ. В этом случае проще использовать конструкцию: выгрузить в ТЗ, свернуть, получить
  3. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    433
    Симпатии:
    3
    Баллы:
    29
    О каком параметре идет речь? Я планирую сделать так: УстановитьЗначениеФильтра(), далее если надо-ВремМойРегистр.ВременныйРасчет(); ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ну например метод СводныйОстаток. Фильтры указывать не обязательно - они же задаются непосредственно в параметрах. Причем пропуск допускается....
    Предположим что у нас есть некий регистр Покупатели. В котором измерения Фирма,Контрагент. Ресурс сумма.

    Если написать так
    Код:
    Сообщить("Всего по контрагенту "+Рег.СводныйОстаток(,НашКонтрагент,"Сумма"));
    
    То он отработает раза в 3 медленнее чем код
    Код:
    Спр=СоздатьОбъект("Справочник.Фирмы");
    итог=0;
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Итог=Итог+Рег.СводныйОстаток(Спр.ТекущийЭлемент(),НашКонтрагент,"Сумма")
    КонецЦикла;
    Сообщить("Всего по контрагенту "+Итог);
    
    попробуйте))))))
  5. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    433
    Симпатии:
    3
    Баллы:
    29
    Насчет фильтров: если их применить перед запуском временного расчета-это же вроде должно оптимизировать сам процесс расчета, или я ошибаюсь?
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Все зависит от стоящей задачи. Но в целом хуже и не лучше. Для вышеприведенного примера в частности. Во всяком случае (специально занимался этим вопросом) в замерах в отладчике фильтр не отнимает ресурсы по сравнению с получением самих остатков. Они влияют только на конечный результат.
  7. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    433
    Симпатии:
    3
    Баллы:
    29
    "
    УстановитьЗначениеФильтра
    Установить значение фильтра для оптимизации расчетов." Так написано в желтой книжице. То есть авторы безбожно брешут?
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нет конечно. Просто некоторые вещи не документированы. У вас какая конкретно задача?
  9. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    433
    Симпатии:
    3
    Баллы:
    29
    Устроился в контору(крупную производственно-торговую фирму), а там во всех расходных документах для контроля и списания остатков используются запросы к регистрам. Я такое первый раз вижу, долго работал с комплексной, там все через итоги делается, вот задумал навести порядок и избавиться от запросов. Написать унифицированную процедуру списания партий, поместить ее в глобальник и вызывать из модулей проведения, а не в каждом модуле документа писать свою процедуру с запросом, как сделано сейчас. Я подозреваю, что и из-за этого отчасти у них постоянно возникают транзакции продолжительные, вылетают по ошибке раз в три минуты стабильно.
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вы совершенно правы. Советую для проверки и оптимизации алгоритма использовать замер производительности в отладчике. Все сразу станет ясно.

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