Как отключить запись в журнал регистрации при массовой записи в регистр сведений?

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

Работа с высоконагруженными системами, такими как интеграция с системой маркировки «Честный ЗНАК», часто приводит к техническим сложностям. Одной из наиболее частых проблем является «раздувание» журнала регистрации (ЖР) из-за выполнения тысяч операций записи в базу данных. В этой статье мы разберем, как оптимизировать этот процесс и избежать переполнения логов, сохранив производительность системы.

Оптимизация метода записи: использование наборов записей

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

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

При проектировании регистра сведений для таких задач важно грамотно определить структуру измерений:

  1. ИдентификаторПакета — для логической группировки данных.
  2. КодМарки — собственно значение маркировки.
  3. ХэшКода — для корректного сравнения строковых значений, так как регистрозависимые данные могут вызывать дублирование или ошибки поиска.

Программное управление регистрацией событий

Если массовая загрузка выполняется программно, вы можете временно отключить регистрацию событий создания и обновления данных для конкретного сеанса. Для этого используется объект ИспользованиеСобытияЖурналаРегистрации и метод глобального контекста УстановитьИспользованиеСобытияЖурналаРегистрации.

Разберем пример реализации такой функции:


Процедура РегистрироватьСобытияЖурналаРегистрацииПриМассовойЗаписи(Регистрировать) Экспорт
    УстановитьПривилегированныйРежим(Истина);
    
    ИспользованиеСобытия = Новый ИспользованиеСобытияЖурналаРегистрации();
    ИспользованиеСобытия.Использование = Регистрировать;
    
    // Отключаем регистрацию событий создания и обновления
    УстановитьИспользованиеСобытияЖурналаРегистрации("_$Data$_.New", ИспользованиеСобытия);
    УстановитьИспользованиеСобытияЖурналаРегистрации("_$Data$_.Update", ИспользованиеСобытия);
    
    УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

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

Альтернативные подходы к обслуживанию ЖР

Если полностью отключить логирование не удается, необходимо пересмотреть стратегию обслуживания журнала регистрации:

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

← На главную