Увеличение производительности в автоматизированных системах на базе 1С.

Автор: Программист Шельдешев Павел

Традиционно факторы, влияющие на увеличение быстродействия информационных систем, специалисты, занимающиеся этой проблематикой,  делят на три обособленные группы - оборудование, СУБД и код приложения.

Для оптимизации работы СУБД  надо четко понимать, за счет каких бизнес-процессов происходит торможение системы:

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

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

Менеджерам по продажам нужны оперативные остатки продаваемых ими товаров, сроки поставок отсутствующих товаров и взаиморасчеты с покупателями, причем платежи они должны видеть сразу после разнесения бухгалтером банковских выписок.

Бухгалтерам важно успеть к определенным датам рассчитать и перечислить налоги, сдать регламентированную отчетность, в реальном масштабе времени они отслеживают только банк и кассу.

Расчетчику надо успеть до 5 числа рассчитать зарплату и подать руководству на подпись платежную ведомость, а в бухгалтерию передать информацию по затратам и налогам.

Как видим, по времени и ресурсам бухгалтера и менеджеры пересекаются только в финансовом учете. Всю остальную деятельность можно спокойно разнести по разным базам и серверам, а обмен между базами проводить в нерабочее время. Таким образом, мы за счет грамотного проектирования архитектуры информационных баз, распределяем нагрузку на оборудование.

После апгрейда оборудования и декомпозиции информационной системы могут остаться однотипные пользователи фронт-офиса, для которых время отклика системы имеет решающую роль с точки зрения успешности бизнеса.

Под оптимизацией 1С-кода подразумевается несколько технологических приемов:

  • механизм управляемых блокировок: он позволяет увеличить параллельность проведения документов за счет того, что при операции типа "запись" блокируется не вся таблица, а только указанный диапазон строк. Это позволяет одномоментно проводить два документа "Реализация Товаров и Услуг", если в них нет одинаковых товаров, либо эти товары отгружаются с разных складов. Причем механизм управляемых блокировок работает независимо от СУБД (будь то MS SQL или Postrge SQL), т.к. срабатывает на уровне 1С-сервера приложений. В режим управляемых блокировок программистами 1С переведены почти во все типовые конфигурации.
  • реализация концепции "тонкий клиент": в платформе 1С:Предприятие 8.1 можно было переносить выполнение некоторых наиболее трудоемких участков кода на процессор 1С-сервера. В платформе 1С:Предприятие 8.2 эта концепция получила еще более глубокое развитие за счет управляемых форм и использования "четырехзвенной" архитектуры – СУБД+Сервер приложений+web-сервер+клиент. Таким образом, скорость реакции системы перестает зависеть от способностей "железа" компьютеров конечных пользователей. Концепция "тонкий клиент" в той или иной мере реализована во всех типовых конфигурациях 1С.
  • удаление/откладывание "лишних" регистров при проведении документов: "лишний" функционал в типовой конфигурации появляется из-за того, что конфигурация является максимально универсальным тиражным продуктом. За универсальность приходится расплачиваться быстродействием, т.к. не весь заложенный функционал может быть востребован данным конкретным бизнесом. Или функционал может быть востребован редко, в таких случаях движение некоторых регистров можно перенести «на потом», выполнять в фоновом режиме, или вообще отключить.
  • Отключение таблицы итогов: при проведении/перепроведении большого массива многострочных документов можно временно блокировать механизм пересчета итогов регистров сведений и регистров бухгалтерского учета с помощью команды УстановитьИспользованиеИтогов. Операция рискованная с точки зрения временного искажения данных об остатках регистров, но она того стоит. Важно после завершения не забыть вернуть режим обратно и пересчитать итоги, начиная с самого раннего проведенного документа
  • РАУЗ: В типовых конфигурациях «1С:Управление производственным предприятием» и «1С:Комплексная конфигурация» программистами фирмы 1С внедрен замечательный механизм – РАУЗ (Расширенная аналитика учета затрат). Этот механизм позволяет рассчитывать месячную себестоимость не заботясь о хронологической последовательности приходных и расходных документов внутри месяца, соответственно не надо перепроводить документы для перерасчета сумм в партионных регистрах. Себестоимость рассчитывается методом линейных уравнений. Те клиенты, которые согласились перейти с партионного учета на РАУЗ выиграли несколько дней жизни ежемесячно!
  • минимизация влияния невостребованного функционала: существуют сервисные фоновые задачи, которыми пользуются редко или никогда, например, пересчет индексов полнотекстового поиска. Его отключение дает существенный выигрыш при проведении "тяжелых" документов, таких как "закрытие месяца".
  • оптимизация запросов: задача выборки нужной информации из базы данных может быть решена множеством способов, но среди этих способов всегда существует несколько наиболее оптимальных по времени выполнения. Наличие вариативности решений делает процесс оптимизации запросов почти творческим, подчас требующим озарения. Вот лишь небольшой перечень рекомендаций, которыми стоит вооружиться программисту:

- максимально использовать фильтры в параметрах виртуальных таблиц, а не в условиях ГДЕ,

- не использовать запросы в цикле,

- по возможности использовать временные таблицы, и не забывать про индексацию полей-коннекторов.