При массовой загрузке или создании большого количества элементов справочника Номенклатура в конфигурациях 1С (ERP, УНФ) часто возникает проблема критического замедления записи. Запись одного элемента может занимать до нескольких минут. Основная причина кроется в подсистеме БЭД (Библиотека электронных документов), которая при записи любого элемента номенклатуры пытается актуализировать данные в регистре сведений НоменклатураКонтрагентовБЭД и выполняет тяжелые проверки в транзакции.
Первым делом необходимо убедиться, что функционал ЭДО и сопутствующие сервисы действительно отключены в интерфейсе программы. Рассмотрим, какие настройки влияют на работу этих алгоритмов:
НСИ и администрирование — Обмен электронными документами — Обмен с контрагентами. Здесь необходимо отключить использование сервисов ЭДО, если они не требуются в вашей бизнес-логике.НСИ и администрирование — Настройка НСИ и разделов — Номенклатура — Дополнительная информация. Отключите опцию Номенклатура поставщиков, если вы не планируете использовать функционал сопоставления номенклатуры с контрагентами.Обратите внимание, что даже при отключении этих опций программный код в ПриЗаписи может продолжать исполняться, поэтому переход к следующим шагам обязателен для полноценной оптимизации.
При выполнении массовой загрузки данных (например, через ЗагрузкуИзФайла или собственные механизмы импорта) наиболее эффективным и безопасным способом является использование свойства ОбменДанными.Загрузка. Этот флаг дает платформе понять, что объект загружается из внешнего источника и не требует выполнения сложных проверок и заполнения служебных регистров.
При программном создании элементов номенклатуры обязательно устанавливайте это свойство:
НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
// Заполнение реквизитов...
НоменклатураОбъект.ОбменДанными.Загрузка = Истина;
НоменклатураОбъект.Записать();
Использование этого флага автоматически блокирует выполнение многих процедур в подписках на события, что значительно ускоряет процесс записи.
Если штатные средства не помогают, проанализируйте подписки на события, которые срабатывают при записи номенклатуры. В некоторых случаях тяжелые процедуры, связанные с прослеживаемостью товаров или проверкой ТН ВЭД, могут быть избыточны для вашего процесса.
Рассмотрим пример временного отключения проверки прослеживаемости в процедуре модуля объекта (ПриЗаписи):
// Закомментируйте или оберните в условие вызов тяжелых проверок:
// УчетПрослеживаемыхТоваровЛокализация.УстановитьФОИспользуетсяУчетВЕдиницеИзмеренияТНВЭД(ЭтотОбъект);
Важно: Данный метод является «хирургическим» вмешательством. Перед применением обязательно протестируйте влияние этого изменения на корректность ведения учета в системе.
Если вам критически важно сохранять данные в регистре НоменклатураКонтрагентовБЭД для будущих обменов, но текущая скорость записи не устраивает, рассмотрите вариант переноса записи в этот регистр из основной транзакции записи номенклатуры.
ОбменДанными.Загрузка).РегламентныеЗадания), которое будет считывать данные из этой очереди и актуализировать регистр сопоставления в периоды низкой нагрузки на базу данных.Такой подход позволит избежать блокировок таблиц базы данных MSSQL и обеспечит высокую скорость работы основного потока импорта или ввода данных пользователями.
Проблема «тормозов» при записи номенклатуры в ERP и УНФ обычно связана с перегруженными событиями записи, которые не учитывают масштаб массовых операций. Используя комбинацию настроек ОбменДанными.Загрузка и очистки избыточных вызовов в подписках, вы сможете значительно повысить производительность системы. Помните, что любые изменения типового кода требуют тщательного тестирования в копии базы данных.