Почему 1С:Бухгалтерия начинает сильно тормозить при записи номенклатуры после обновления и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Рассмотрим типичную, но крайне неприятную ситуацию: после планового обновления конфигурации 1С:Бухгалтерия предприятия 3.0 (начиная с версий 3.0.80 и выше) пользователи начинают жаловаться на «жуткие тормоза». Операции, которые раньше занимали доли секунды — запись карточки товара, выставление счета или реализация — теперь длятся по 30–90 секунд. При этом серверные мощности (процессор, оперативная память) практически не загружены, а база данных является файловой и расположена на быстром SSD.

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

Шаг 1. Локализация проблемы с помощью замера производительности

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

Проанализировав результат замера, мы увидим, что основное время (более 90%) тратится не на запись данных в таблицу справочника, а на выполнение запросов в общих модулях, связанных с подсистемой БЭД (Библиотека электронного документооборота). Конкретно внимание стоит обратить на функции в модуле ОбменСКонтрагентамиСлужебный (в более новых версиях — СопоставлениеНоменклатурыКонтрагентовСлужебный).

Задержка происходит в функции ИсключитьИзТаблицыСловНезначимые. Внутри этой функции программа пытается выполнить запрос к регистру сведений СловарьСопоставленияНоменклатурыБЭД. Выясним причину такого поведения.

Шаг 2. Разбор причины: механизм «умного» сопоставления номенклатуры

Начиная с версии 3.0.80, разработчики 1С внедрили механизм автоматического индексирования слов в наименованиях товаров. Это сделано для облегчения работы с ЭДО (Электронным документооборотом). Когда вы записываете номенклатуру, система:

  1. Разбивает наименование товара на отдельные слова.
  2. Вычисляет хеш-суммы для каждого слова.
  3. Сверяет эти слова со словарем (регистр СловарьСопоставленияНоменклатурыБЭД).
  4. Обновляет статистику использования слов в базе.

Проблема заключается в том, что в файловом варианте работы 1С (особенно на больших справочниках номенклатуры) пакетные запросы к этому регистру выполняются крайне неэффективно. Регистр может содержать сотни тысяч записей, и попытка найти в нем соответствия через конструкцию ГДЕ ... В (ВЫБРАТЬ ПЕРВЫЕ 1 ...) заставляет файловый движок базы данных «задумываться» на десятки секунд.

Шаг 3. Программное решение (исправление запроса)

Если вы имеете навыки программирования или возможность вносить изменения в конфигурацию (или создавать расширения), наиболее эффективным способом будет оптимизация проблемного запроса. В функции ИсключитьИзТаблицыСловНезначимые формируется динамический текст запроса. Разберем, как его изменить, чтобы ускорить работу.

Найдем фрагмент кода, где формируется текст запроса через функцию ТекстЗапросаПроверкиСловПоСтатистикиИспользованияВСловаре. Проблема кроется в использовании подзапроса внутри условия ГДЕ. Перепишем этот фрагмент, заменив неоптимальную конструкцию на более простую для файлового движка.

Было (неэффективно):


| И ИСТИНА В 
| (ВЫБРАТЬ ПЕРВЫЕ 1 
| ИСТИНА 
| ИЗ 
| ТаблицаОтобранныхСлов КАК ТаблицаОтобранныхСлов 
| ГДЕ 
| ТаблицаОтобранныхСлов.СсылкаНаОбъект = СловарьСопоставленияНоменклатурыБЭД.СсылкаНаОбъект)

Стало (оптимизировано):


| И СловарьСопоставленияНоменклатурыБЭД.СсылкаНаОбъект В 
| (ВЫБРАТЬ 
|   ТаблицаОтобранныхСлов.СсылкаНаОбъект 
| ИЗ 
|   ТаблицаОтобранныхСлов КАК ТаблицаОтобранныхСлов)

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

Шаг 4. Административные методы решения (без правки кода)

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

  1. Обновление конфигурации: Данная проблема была официально признана ошибкой производительности и исправлена разработчиками в версии 3.0.90 и выше. Самый простой способ решить вопрос — обновиться до актуального релиза.
  2. Очистка регистра сведений: Если вы не используете ЭДО или вам не нужно интеллектуальное сопоставление, можно очистить регистр СловарьСопоставленияНоменклатурыБЭД. Это можно сделать с помощью обработки «Групповое изменение реквизитов» (выбрав этот регистр) или написав простую внешнюю обработку для удаления записей. После очистки «тормоза» пропадут до тех пор, пока регистр снова не наполнится данными.
  3. Отключение Полнотекстового поиска: Хотя это напрямую не лечит проблему запроса, отключение ПП в разделе Администрирование -> Обслуживание -> Полнотекстовый поиск снижает общую нагрузку на файловую систему при записи объектов, что может дать небольшой прирост скорости.
  4. Настройка электропитания сервера: Убедимся, что на сервере (или компьютере с базой) в настройках электропитания Windows установлен режим «Максимальная производительность». В режиме «Сбалансированный» частота процессора может падать в моменты ожидания дисковых операций, что критично для 1С.

Шаг 5. Работа с платформой и кэшем

Иногда проблема усугубляется некорректной работой платформы с временными таблицами. Посмотрим на версию платформы: для конфигураций ветки 3.0.83+ рекомендуется использовать версию не ниже 8.3.17.1851 или 8.3.18.1201. Более старые сборки платформы 8.3.17 имели внутренние дефекты обработки тяжелых запросов в файловом режиме.

Также не забудем про очистку кэша. Проанализируем ситуацию: если «перекладывание» файла базы данных 1Cv8.1CD в другой каталог (с созданием нового подключения в списке баз) не помогает — значит, дело не в локальном кэше пользователя, а именно в структуре данных и алгоритмах конфигурации, что подтверждает теорию о проблеме в подсистеме БЭД.

Резюме

Подведем итог. Если после обновления ваша файловая «Бухгалтерия» начала виснуть при записи номенклатуры:

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

← На главную