Как ускорить запись справочника Номенклатура при отключенном ЭДО?

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

При массовой загрузке или создании большого количества элементов справочника Номенклатура в конфигурациях 1С (ERP, УНФ) часто возникает проблема критического замедления записи. Запись одного элемента может занимать до нескольких минут. Основная причина кроется в подсистеме БЭД (Библиотека электронных документов), которая при записи любого элемента номенклатуры пытается актуализировать данные в регистре сведений НоменклатураКонтрагентовБЭД и выполняет тяжелые проверки в транзакции.

Шаг 1: Проверка и отключение типовых настроек

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

  1. Перейдите в раздел НСИ и администрирование — Обмен электронными документами — Обмен с контрагентами. Здесь необходимо отключить использование сервисов ЭДО, если они не требуются в вашей бизнес-логике.
  2. Перейдите в раздел НСИ и администрирование — Настройка НСИ и разделов — Номенклатура — Дополнительная информация. Отключите опцию Номенклатура поставщиков, если вы не планируете использовать функционал сопоставления номенклатуры с контрагентами.

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

Шаг 2: Использование свойства ОбменДанными.Загрузка

При выполнении массовой загрузки данных (например, через ЗагрузкуИзФайла или собственные механизмы импорта) наиболее эффективным и безопасным способом является использование свойства ОбменДанными.Загрузка. Этот флаг дает платформе понять, что объект загружается из внешнего источника и не требует выполнения сложных проверок и заполнения служебных регистров.

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


НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
// Заполнение реквизитов...
НоменклатураОбъект.ОбменДанными.Загрузка = Истина;
НоменклатураОбъект.Записать();

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

Шаг 3: Оптимизация процедур в модулях

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

Рассмотрим пример временного отключения проверки прослеживаемости в процедуре модуля объекта (ПриЗаписи):


// Закомментируйте или оберните в условие вызов тяжелых проверок:
// УчетПрослеживаемыхТоваровЛокализация.УстановитьФОИспользуетсяУчетВЕдиницеИзмеренияТНВЭД(ЭтотОбъект);

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

Шаг 4: Асинхронная обработка (Рекомендация)

Если вам критически важно сохранять данные в регистре НоменклатураКонтрагентовБЭД для будущих обменов, но текущая скорость записи не устраивает, рассмотрите вариант переноса записи в этот регистр из основной транзакции записи номенклатуры.

  1. Выполняйте основную запись номенклатуры быстро (с флагом ОбменДанными.Загрузка).
  2. Записывайте необходимые данные в регистр сведений или очередь заданий.
  3. Настройте фоновое задание (РегламентныеЗадания), которое будет считывать данные из этой очереди и актуализировать регистр сопоставления в периоды низкой нагрузки на базу данных.

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

Заключение

Проблема «тормозов» при записи номенклатуры в ERP и УНФ обычно связана с перегруженными событиями записи, которые не учитывают масштаб массовых операций. Используя комбинацию настроек ОбменДанными.Загрузка и очистки избыточных вызовов в подписках, вы сможете значительно повысить производительность системы. Помните, что любые изменения типового кода требуют тщательного тестирования в копии базы данных.

← На главную