Сведения об ОС - отчет тормозит. Неоптимальный запрос или странное поведение платформы?

22.11.15

Учетные задачи - Учет ОС и НМА

Типовой отчет тормозит неподобно! В случае выполнения отчета с отбором по одному элементу справочника ОС. На больших объемах справочника ОС и при большом количестве бухгалтерских проводок.
Проведу небольшое исследование и исправлю типовой отчет.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Отчет "Сведения ОБ ОС"
.erf 27,55Kb
0
0
1 SM
Скачать Купить за 1 850 руб.

Назначение

Функциональность была протестирована и отработана на основе конфигурации Бухгалтерия для Украины 1.2.33.2 и платформы версии 8.3.6.2363. На базе MSSQL

Но данный типовой отчет "СведенияОбОС" с идентичной функциональностью и проблемой встречается в УТП, УПП и прочих типовых конфигурациях на обычных формах.

Рассмотрена любопытная особенность поведения платформы, поэтому будет интересно всем получить небольшой опыт в оптимизации запросов.

История

История обычная,  обращается бухгалтер. Проблема с одной стороны пустяковая, но работать с основными средствами нормально не возможно.  Действительно, проблема встречается редко, т.к. запустить отчет "Сведения об ОС" из карточки справочника (или списка) многим достается редко, некоторые даже не знают о его существовании.

По делу

Есть база, большущая. На MSSQL. Огромное количество ОС в справочнике.  Заходим в справочник Основные средства, и нажимаем кн. "Перейти" - "Сведения об ОС".

Ждем.... Ждем минуту, две ...  - и вуаля, Сведения об ОДНОМ объекте сформированы!  Быстренько. ничего не скажешь.
А работать то надо!

Начинаю ковырять. Добираюсь до запроса, что видим: небольшой запрос, грамотные фильтры, выполненные как отборы построителя (фигурные скобки). Нет правда временных таблицы, ну да ладно, как оказалось это не главное в данной проблеме.

 Запрос

На первый взгляд не удалось обнаружить каких-то  проблем с запросом. Соединений масса, но содержимое виртуальных таблиц при наложении фильтров единичное, что не должно вызывать разрастание объема обрабатываемой информации.

Первое что повело по правильному пути - это понимание того, что отчет формируется одинаково медленно как при отборе по одному элементу основного средства, так и по всем без отборов. Ну почти. разница - не заметна. Получается, фильтры не работают? А уж когда фильтры не работают - вот тогда и получаются множественные соединения больших таблиц, например,  регистра "Хозрасчетный" виртуальная таблица которого огромна по определению, и регистра "СчетаБухгалтерскогоУчетаОС" - содержимое которого массивно при большом количестве ОС.

Для поиска проблемы решил последовательно отрабатывать в консоли запросов все вложенные подзапросы изнутри наружу. Проблема не показалась. Все подзапросы, все варианты соединений их от самых простых до полного запроса в консоли запросов отрабатывались быстро. С отбором по одном объекту естественно.

Вопрос: почему в консоли запросов все работает быстро, в этом отчете тормозит?

Ок, в консоли не было директив построителя - отборов в фигурных скобках. Совпадение, или нет, но в начале я писал о предположении что как раз отборы временных таблиц и не работают. И о чудо!

В тот момент, когда открыл исходный запрос в модуле отчета в конструкторе запросов и не внося изменений, подтвердил и закрыл конструктор - случайно заметил что ПРОПАЛ ФИЛЬТР в подзапросе другого ФИЛЬТРА виртуальной таблицы !!! То, что на рисунке выше выделено красным. Что это означает? То, что  Конструктор запроса отказался принимать эту директиву. Что сразу же навеяло на мысль, что данный фильтр НЕ РАБОТАЕТ!

Вывод созрел. Проблема найдена!

Фильтры виртуальной таблицы, которая использована как подзапрос в Фильтре другой виртуальной таблицы НЕ РАБОТАЮТ. Т.е. такого не бывает, т.е. использование их разработчиками было ошибочным.
Что это? баг платформы или фича?  документация не найдена. Прошу уважаемое сообщество прокомментировать данный факт.

Исправляем

Конфигурация заточена под 8.2 Поэтому смело решаю использовать временные таблицы в запросе.
Выбираем регистр "СчетаБухгалтерскогоУчетаОС" во временную таблицы, естественно используем фильтры, которые теперь сработают нормально, т.к. нет такой дикой вложенности.

Временная таблица:

 временная таблица

Заменяем в подзапросе виртуальную талицу временной:

 использование временной таблицы

Все, проблемы нет, на огромной базе отчет в случае отбора по одному ОС или небольшой группе работает МГНОВЕННО! Потому, что фильтры переданные построителем теперь работают нормально.
Собственно как и обязан.

с уважением.

Основные средства ОС Очеты по ОС СведенияОбОС Оптимизация запроса Виртуальные таблицы Временные талицы Фильтры в запросах Условия в запроса Фигурные скобки Отборы в построителе

См. также

Учет ОС и НМА Сканер штрих-кода Терминал сбора данных Логистика, склад и ТМЦ Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Приложение Инвентаризация ОС и ТМЦ предназначено для инвентаризации основных средств и товарно-материальных ценностей, закреплённых за конкретным материально ответственным лицом или складом. В конфигурации 1С:Бухгалтерии 3.0 отсутствуют возможности генерации и работы со штрих-кодами для основных средств. Приложение позволяет генерировать и обрабатывать штрих-коды как для основных средств, так и для товарно-материальных ценностей (материалы, товары). В новом релизе появилась возможность работы с фотографиями объектов учета.

07.07.2023    3038    1    alfanika    0    

5

Учет ОС и НМА Бухгалтер Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бухгалтерский учет Бесплатно (free)

В данной статье рассмотрим особенности принятия к учету ОС по ФСБУ 06 в ERP 2.5. С учетом изменений по ФСБУ 06 и изменений в новой ERP 2.5.

22.03.2022    6645    Shining_ninja    0    

53

Учет ОС и НМА Бухгалтер Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Абонемент ($m)

Внешний отчет "Ведомость по основным средствам" для конфигураций ERP 2.4, ERP 2.5, КА 2.4, КА 2.5 с выводом дополнительных колонок: Срок использования, Ликвидационная стоимость.

1 стартмани

17.02.2022    11006    59    SergAl    0    

21

Регламентированный учет и отчетность Учет ОС и НМА Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:ERP Управление предприятием 2 Бухгалтерский учет Бесплатно (free)

Рекомендации по переходу и применение в 1С:ERP. Статья подготовлена Фроленковой Альфией - экспертом по регламентированному учету в 1С:ERP. Занимается автоматизацией на базе программ 1С более 15 лет. Имеет 5 сертификатов по 1С:ERP.

02.02.2022    94669    1СERP    18    

45

Учет ОС и НМА Сканер штрих-кода Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Абонемент ($m)

Внешняя обработка для документа Инвентаризация ОС, позволяет легко и быстро организовать штрихкодирование основных средств на предприятии. Обработка не требует изменения конфигурации. Предназначена для конфигураций БП 3.0 и БП 3.0 Корп.

2 стартмани

24.01.2022    9886    35    1Cergey    4    

9

Печатные формы Учет ОС и НМА Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Абонемент ($m)

В стандартной печатной форме "Акта ОС-1" нет возможности вывести подписантов, т.к. в документе "Принятие к учету ОС" нет полей для заполнения председателя и членов комиссии.

1 стартмани

16.08.2021    8707    15    SergAl    30    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3060 22.11.15 14:11 Сейчас в теме
Сдается мне, что если проиндексировать ВТ по счету и вынести подзапрос во ВНУТРЕННЕЕ СОЕДИНЕНИЕ, то может получиться еще быстрее безотносительно количества выбираемых ОС.
2. dap 14 22.11.15 15:07 Сейчас в теме
(1) starik-2005, Да, спасибо. Там еще есть над чем поработать. Смотрите, там получается 4 раза выполняется запрос по "СчетаБухгалтерскогоУчетаОС". Там все соединения нужно переделать с использованием ВТ.
Но зачем ... если главная проблема решена ...
3. asved.ru 36 24.11.15 06:26 Сейчас в теме
Не факт, что "фильтры не работают" и это ошибка кода. Для того, чтобы в этом убедиться, нужно смотреть на фактические запросы к СУБД и их планы.

Зачастую бывает так, что условие соединения, указанное в фильтре, просто-напросто не оставляет оптимизатору иного выхода, кроме как сканить всю таблицу. Кроме того, для соединения с подзапросом оптимизатор часто не может просчитать статистику, особенно на сложных условиях, и применяет алгоритм соединения nested loops, сильно тормозной на больших количествах строк. И наконец, степень оптимальности планов зависит от состояния базы данных и нагрузки на СУБД.
4. dap 14 24.11.15 10:36 Сейчас в теме
(3) asved.ru, Спасибо.
А почему тогда конструктор запроса удаляет именно эти фильтры? Или это его предсказуемое поведение на таких вложенностях?
Или это не имеется значение, 1С передает запрос в БД без предварительного анализа и интерпретации?
Оставьте свое сообщение