Основная страница

Вопросы производительности конфигураций


 

Общие рекомендации

Проблемы производительности

Интерактивные и пакетные режимы

Использование "длинных путей"

Использование длинных строк в индексируемых данных

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

Определение производительности конфигурации

Оптимизация работы Справочников

Оптимизация работы документов

Документы

Формы ввода документов

Журналы документов

Проведение документа (отмена проведения)

Графы отбора

Производительность выборки документов

Оптимизация работы с Константами

Оптимизация работы компоненты "Бухгалтерский учет"

Проектирование документов

Проектирование плана счетов

Работа с бухгалтерскими итогами

Обращение к бухгалтерским итогам в тех конфигурациях, в которых используется разделитель учета

Бухгалтерские отборы

Использование "длинных путей" при записи операции

Оптимизация работы Регистров оперативного учета

Регистры остатков

Оборотные регистры

Использование реквизитов регистров

Периодичность сохранения итогов

Обращение к данным регистров

Использование отборов регистра

Использование признака "Быстрая обработка движений"

Оптимизация работы запросов

Использование запросов в алгоритмах расчетов

Оптимизация формирования отчетов

Оптимизация конфигураций при работе с базами данных  в формате SQL

Работа пользователей

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

Позиционирование в журналах на вводимые документы

 

Общие рекомендации

Проблемы производительности

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

Очевидно, что при создании конфигурации 1С:Предприятия, как и при разработке любой системы автоматизации в сфере экономики все решения принимаются как компромисс между удобством работы пользователей, функциональной сложностью конфигурации и быстродействием системы. Причем, при увеличении объемов обрабатываемой информации и количества одновременно работающих пользователей следует внимательнее подходить к оценке необходимости предоставляемых пользователю сервисных функций и искать пути к оптимизации разрабатываемой конфигурации. Заметим, что оптимизация конфигурации далеко не всегда сопровождается снижением уровня сервиса. В этом разделе мы дадим несколько рекомендаций по разработке конфигураций 1С:Предприятия предназначенных для использования с большими объемами данных и в многопользовательском режиме.

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

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

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

Интерактивные и пакетные режимы

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

Предоставляемые средства системы 1C:Предприятие ориентированы на то, чтобы интерактивные режимы работали с приемлемой производительностью при любых объемах данных. Этим объясняется, например,  отсутствие возможностей просмотра журналов документов и списков справочников с произвольным фильтром по некоторому условию, так как эти режимы просматривают данные непосредственно в информационной базе, без предварительной выборки. Предоставленные возможности отборов в журналах документов опираются на специальные механизмы, позволяющие просматривать документы интерактивно с определенной выборкой. Однако заметим, что чем больше  обычно объем информационной базы в экономической системе, тем меньше предусматривается режимов динамического просмотра информации.

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

Использование "длинных путей"

При написании модулей следует избегать многократного обращения к данным агрегатных объектов с использованием "длинных путей", то есть через две точки и более. Примером такого обращения может являться получение цены товара документа:

ЦенаТовара=Накл.Товар.Цена;

Если такое обращение выполняется многократно (например, в цикле)  или выполняется обращение  к нескольким атрибутам и методам одного атрибута агрегатного объекта, то целесообразно вначале запомнить атрибут в переменную, а затем использовать запомненное значение. Например:

Тов=Накл.Товар.Цена;

ЦенаТовара=Тов.Цена;

Это объясняется тем, что при обращении к атрибуту объекта, если атрибут имеет тип "документ", "справочник" или "счет", то  выполняется поиск объекта в информационной базе. Если такое обращение происходит многократно, то поиск выполняется каждый раз. Если выполняется обращение к одной и той же к запомненной переменной, то поиска в информационной базе не происходит.

Использование длинных строк в индексируемых данных

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

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

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

Встроенные язык 1С:Предприятия поддерживает автоматическое преобразование типов в выражениях оперирующих данными различных типов, а также в функциях языка. В некоторых случаях эту особенность следует учитывать при оптимизации конфигураций с точки зрения производительности.

Приведем пример. Необходимо выполнить некоторые действия в модуле для непустых значений атрибута или переменной типа справочник. Иногда для этого используется проверка типа:

Если ПустаяСтрока(Запрос.Товар)=1 Тогда

      …

или

Если СокрЛП(Запрос.Товар)="" Тогда

      …

При таком выполнении проверки на самом деле программа сначала выполняет преобразование значения типа "Справочник" к типу "Строка", а затем уже обрабатывает полученный результат. При преобразовании к строковому типа значения типа "Справочник" выполняется поиск значения в информационной базе для получения его представления (наименования или кода). Если этот алгоритм работает в цикле с большим объемом значений, то суммарные издержки такого способа проверки могут быть достаточно велики.

Для проверки такого значения следует использовать функцию "ПустоеЗначение", которое выполнит проверку без считывания данных элемента справочника.

Если ПустоеЗначение (Запрос.Товар)=1 Тогда

      …

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

Определение производительности конфигурации

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

Разумеется, идеальным способом измерения производительности является тестирование конфигурации непосредственно в процессе работы пользователей. Однако, конфигурирование (отладка) часто выполняется на тестовой информационной базе или в нерабочее время. В этом случае при выполнении замеров производительности необходимо правильно воссоздать реальные условия работы системы. В противном случае соотношения временных затрат на различные операции может абсолютно не соответствовать "боевым" условиям. Прежде всего, необходимо, чтобы информационная база располагалась на сервере локальной сети, а не на той же машине, на которой выполняется программа. Разумеется, формат хранения (DBF/CDX или SQL) тестовой базы

должен совпадать с форматом хранения "боевой" информационной базы. Желательно, чтобы по характеристикам сервер и локальная сеть были теми же, что и при работе пользователей или аналогичными. Запуск программы должен производиться не в монопольном режиме, так как монопольный режим существенно отличается по производительности от разделенного. Кроме того, при работе с базами данных в формате (DBF/CDX),  следует выполнять дополнительный запуск программы с той же информационной базой с другого компьютера, так как отсутствие второго соединения позволяет системе оптимизировать доступ к данным. Наконец для более полной имитации можно рекомендовать на втором компьютере запустить длительный отчет, который будет имитировать нагрузку пользователей или обработку, выполняющую в цикле запись некоторых данных в информационную базу. При таком наборе условий производимые замеры будет приближены к реальным условиям, и позволят получить адекватную оценку соотношения длительности различных операций.

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

Заметим, что  основные проблемы, связанные с производительностью, возникают при многопользовательской работе с большими объемами данных. Причем основные затраты времени приходятся именно на доступ к данным информационной базы. Поэтому, очевидно, что при анализе результатов замера производительности, прежде всего, будут выделяться обращения к данным. Для того, чтобы лучше выделить эти операции можно рекомендовать отключать флажок "Для вызовов процедур и функций включать время выполнения". Это позволит получить чистое время выполнения различных методов объектов встроенного языка 1С:Предприятия. По результатам проведенного замера следует предпринимать меры к оптимизации алгоритмов. Механизм "Замер производительности" предоставляет возможность сохранения результата замера, что позволяет после внесения изменений в конфигурацию выполнить повторный замер и сравнить с предыдущим для оценки эффективности сделанных изменений.

Оптимизация работы Справочников

Справочники

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

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

Не рекомендуется устанавливать для справочников количество уровней больше 1, если реально не предполагается создавать группы. Это также позволит системе не поддерживать дополнительные индексы. Однако само количество уровней (от 2 и более) никак не влияет на структуру хранения данных справочника.

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

Также следует внимательно относиться к указанию для реквизитов справочников признаков "Сортировка" и "Отбор". Наличие этих признаков замедляет запись элемента справочника. Рекомендуется указывать признак "Сортировка" только при реальной необходимости упорядоченного просмотра по данному реквизиту или поиска элементов по данному реквизиту из встроенного языка. Например, признак "сортировка" будет необходим для поиска товара по штрих-коду.

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

- Периодическим реквизитам. Размещение в колонках списка большого количества периодических реквизитов замедляет просмотр списка.

- Строкам неограниченной длины. Наличие в колонках таких реквизитов так же замедляет просмотр.

- Реквизитам типа "Справочник", "Документ", "Счет". Отображение таких реквизитов требует выборки представлений их значений из информационной базы.

- Формулам, осуществляющим выборку данных из информационной базы.

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

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

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

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

Оптимизация работы документов

Документы

Общие реквизиты.

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

 Общие реквизиты с признаком "Отбор".

Общие реквизиты документов с признаком "Отбор" рекомендуется создавать только при явной необходимости просмотра журнала с отбором по данному реквизиту или быстрого получения выборок документов по значению данного реквизита средствами встроенного языка. Желательно не создавать в конфигурации большое количество общих реквизитов с признаком "Отбор", так как это может  замедлить запись документов. Заметим, что при работе конфигурации с большим количеством документов следует ограничивать сервисные режимы просмотра журнала документов. Использование общих реквизитов с признаком "Отбор" в таких конфигурациях должно быть весьма обосновано.

 Строковые реквизиты неограниченной длины.

При создании строковых реквизитов шапки документа следует внимательно отнестись к решению: делать их неограниченной или конкретной длины. Реквизиты неограниченной длины несколько замедляют обращение к данным реквизитам (а не к документу вообще), но существенно экономят объем базы данных при частичном заполнении строк, так как записываются блоками по 80 символов. Причем пустая строка (не заполненный реквизит) не будет занимать места вообще.

 Номера документов.

Использование нумераторов в документах никак не влияет на производительность. Однако, не рекомендуется задавать в метаданных слишком длинные номера документов даже у редко встречаемых документов. Ресурсы системы, используемые для поддержки номеров документов, зависят от максимальной длины номера среди документов всех видов.

 Реквизиты типа "Документ".

Если в структуре документа имеются реквизиты типа "Документ", то система автоматически поддерживает механизм подчиненных документов. Для этого в информационной базе хранится список ссылок на подчиненные документы. Затраты системы на поддержание этого списка по конкретному документу зависят от количества различных значений типа "Документ" в реквизитах документа. Если, например, в документе будет присутствовать два реквизита типа "Документ" в шапке, то в список будет заноситься две записи. А если в документе будет присутствовать один реквизит типа "Документ" в табличной части, то в список будет занесено столько записей, сколько строк в табличной части конкретного документа, при условии, что во всех строках эти значения разные. Данный механизм в конфигурации не может быть отключен. Описанное влияние реквизитов типа "Документ" имеет смысл учитывать при проектировании структуры документа.

Формы ввода документов

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

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

В шапке документа, обычно, выбираются значения общих для документа полей (склад, валюта, организация-покупатель и т.д.). Выбор  значения из списка справочника, разумеется, требует значительного количества обращений к информационной базе. Если при последовательном вводе документов часто происходит выбор одних и тех же значений из справочника, то можно предусмотреть средства, которые будут при вводе нового документа автоматически заполнять большинство реквизитов, например, значениями, выбранными при вводе предыдущего документа этим пользователем. Для этого можно использовать методы СохранитьЗначение/ВосстановитьЗначение или заносить стандартные значения в качестве реквизитов в справочник пользователей.

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

Разумеется, ввод товаров существенно ускоряет использование сканеров штрих-кодов. При использовании сканера вместо разворачивания спискасправочника происходит всего один поиск товара по считанному коду.

Если заполнение накладной может быть выполнено на основании счета, то это также существенно уменьшит количество обращений к информационной базе, да и упростит работу оператора.

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

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

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

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

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

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

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

Журналы документов

Обычные журналы.

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