Почему документ «Регистрация цен поставщиков» в 1С:УТ 11 открывается медленно и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Проблема низкой производительности при работе с документом Регистрация цен поставщиков в конфигурациях «Управление торговлей 11», «ERP Управление предприятием» или «Комплексная автоматизация» — это классическая ситуация, с которой сталкиваются многие специалисты. Когда документ, содержащий всего 500 строк, открывается несколько часов, становится очевидно, что проблема не в объеме данных как таковом, а в алгоритмах обработки информации на сервере и клиенте. В этой статье мы детально разберем, почему это происходит, и рассмотрим эффективные методы решения этой задачи.

Анализируем причины: почему форма «тормозит»

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

  1. Динамические вычисления в цикле: При открытии формы для каждой строки табличной части система пытается вычислить дополнительные данные, которые не хранятся в самом документе. Это могут быть предыдущие цены, процент отклонения текущей цены от старой, а также пересчет валют. Если в документе 500 строк, система может выполнить 500 отдельных микро-запросов к регистру сведений ЦеныНоменклатурыПоставщиков.
  2. Сложное условное оформление: В управляемых формах 1С часто используется механизм условного оформления для визуального выделения строк (например, если цена выросла — подсветить красным). Расчет этих условий для большого количества строк, особенно если условия завязаны на вычисляемые поля, создает серьезную нагрузку на отрисовку интерфейса.
  3. Механизмы RLS (Access Control): Если пользователь работает не под полными правами, система накладывает ограничения на уровне записей. Проверка прав для каждой позиции номенклатуры, партнера и соглашения в сложном запросе может замедлить получение данных в десятки раз.
  4. Работа с характеристиками и упаковками: Если в базе ведется учет по многим характеристикам, поиск «среза последних» в регистре цен становится ресурсоемкой операцией из-за разрастания индексов.

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

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

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

Оптимизация через использование рабочего места «Цены поставщиков (прайс-листы)»

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

В рабочем месте «Цены поставщиков (прайс-листы)» реализована оптимизированная загрузка данных. Система сначала собирает данные во временные таблицы, обрабатывает их пакетно и только в самом конце формирует документ регистрации. Это избавляет пользователя от необходимости ждать, пока «тяжелая» форма документа выполнит все расчеты при открытии. Рекомендуем обучить пользователей работать именно через этот интерфейс.

Ускорение формы с помощью расширения (техническое решение)

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

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

Пример логики оптимизированного запроса:


// В расширении перехватываем процедуру получения данных
&НаСервере
Процедура ОптимизированноеЗаполнениеСтарыхЦен(ДокументОбъект)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ТабличнаяЧасть.Номенклатура,
        |   ТабличнаяЧасть.Характеристика,
        |   ТабличнаяЧасть.ВидЦеныПоставщика
        |ПОМЕСТИТЬ ВТ_Товары
        |ИЗ
        |   &ТЧ КАК ТабличнаяЧасть;
        |
        |ВЫБРАТЬ
        |   Цены.Номенклатура,
        |   Цены.Цена КАК СтараяЦена
        |ИЗ
        |   РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(&Дата, ) КАК Цены
        |ГДЕ
        |   (Цены.Номенклатура, Цены.Характеристика) В (ВЫБРАТЬ Номенклатура, Характеристика ИЗ ВТ_Товары)";
    
    Запрос.УстановитьПараметр("ТЧ", ДокументОбъект.Товары.Выгрузить());
    Запрос.УстановитьПараметр("Дата", ДокументОбъект.Дата);
    
    // Далее заполняем данные в ТЧ одним проходом
КонецПроцедуры

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

Отключение RLS и проверка прав доступа

Разберем ситуацию, когда задержки вызваны правами доступа. Как было отмечено на форуме, иногда открытие документа под полными правами значительно ускоряет процесс. Это происходит потому, что для администратора 1С не строит сложные SQL-запросы с проверкой каждого ограничения RLS.

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

Техническая профилактика базы данных

Не стоит забывать и о состоянии самой СУБД. Проанализируем регламентные операции, которые могут влиять на скорость выборки из регистра цен:

  1. Обновление статистик SQL: Устаревшие статистики могут заставить SQL-сервер выбирать неоптимальный план запроса при обращении к регистру сведений.
  2. Пересчет итогов: В конфигураторе выполните операцию «Администрирование — Тестирование и исправление» с выбранным пунктом «Пересчет итогов». Это актуализирует данные в таблицах итогов регистров.
  3. Индексация: Проверьте, не слишком ли раздут регистр ЦеныНоменклатурыПоставщиков. Если в нем хранятся миллионы записей многолетней давности, возможно, стоит провести свертку или очистку неактуальных данных.

Подводя итог, можно сказать, что «три часа на открытие документа» — это всегда следствие неоптимальных алгоритмов, наложенных на большой объем данных или сложные права доступа. Используя комплексный подход — от перехода на рабочее место прайс-листов до программной оптимизации запросов в расширении — вы сможете добиться комфортной работы пользователей в 1С:УТ 11.

← На главную