Журнал регистрации (ЖР) является критически важным инструментом для аудита действий пользователей и анализа ошибок в системе 1С:Предприятие. Однако стандартный встроенный язык 1С предоставляет ограниченные возможности для управления его настройками: мы можем легко прочитать текущее состояние, но не можем изменить его напрямую командой типа "УстановитьИспользованиеЖурналаРегистрации". В рамках данной статьи мы разберем, как обойти это ограничение, используя интерфейсы администрирования и специализированные утилиты.
Прежде всего, проанализируем архитектуру платформы. Настройки журнала регистрации (уровень детализации и разделение по периодам) хранятся на уровне параметров информационной базы в кластере серверов. Встроенный язык 1С предназначен для работы с данными внутри базы, в то время как управление параметрами самой базы вынесено на уровень администрирования кластера. Для этого 1С предоставляет интерфейсы COM, Java API и утилиту командной строки rac.
Если ваша система работает под управлением ОС Windows, наиболее эффективным методом будет использование COM-объектов. Рассмотрим работу с объектом IClusterAdminConnection. Для этого нам потребуется доступ к серверу администрирования (обычно это порт 1545). При возникновении ошибок подключения можно использовать обработку для диагностики V83.COMConnector и конфликтов версий платформ.
Разберем по шагам процесс изменения уровня логирования через код 1С (запускаемый на сервере или в толстом клиенте):
// Создаем соединение с сервером администрирования
Connector = Новый COMОбъект("V83.COMConnector");
AdminConnection = Connector.ConnectAgent("tcp://localhost:1540");
// Проходим по кластерам
Clusters = AdminConnection.GetClusters();
Для Каждого Cluster Из Clusters Цикл
AdminConnection.Authenticate(Cluster, "", ""); // Аутентификация в кластере
// Получаем список информационных баз
InfoBases = AdminConnection.GetInfoBases(Cluster);
Для Каждого IB Из InfoBases Цикл
Если IB.Name = "НашаБаза" Тогда
// Изменяем уровень регистрации событий
// 0 - Не регистрировать, 1 - Ошибки, 4 - Все события
IB.EventLogRecordingLevel = 4;
// Сохраняем изменения в кластере
AdminConnection.UpdateInfoBase(Cluster, IB);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Важно помнить, что свойство EventLogRecordingLevel принимает числовые значения от 0 до 4. Посмотрим на их соответствие:
Для кроссплатформенных решений (особенно если сервер 1С работает на Linux) или для автоматизации через bash/powershell скрипты, рассмотрим использование утилиты rac. Эта утилита взаимодействует с сервисом ras (Remote Administration Server).
Чтобы изменить уровень логирования «на лету», выясним идентификаторы кластера и базы, а затем выполним команду:
rac infobase --cluster=ИД-КЛАСТЕРА update --infobase=ИД-БАЗЫ --event-log-priority=all
Параметр --event-log-priority может принимать значения: none, error, warning, info, all. Преимущество этого метода в том, что изменения вступают в силу мгновенно, без необходимости заходить в Конфигуратор или перезапускать службу сервера.
Настройка "Разделять хранение журнала по периодам" также является частью параметров информационной базы. Однако стоит учитывать формат хранения. В современном формате SQLite (файлы .lgd) разделение по периодам внутри папки 1Cv8Log работает иначе, чем в старом текстовом формате (.lgf).
Если вы используете старый формат, разделение управляется свойством EventLogSplitPeriod объекта IInfoBaseInfo. Проанализируем возможные значения этого свойства (системное перечисление ПериодРазделенияЖурналаРегистрации):
Год, Месяц, Неделя, День, Час.В случае с файловой базой прямого COM-интерфейса администрирования кластера не существует. Рассмотрим подробнее, где хранятся эти настройки. В файловом варианте параметры ЖР записываются в файлы внутри подкаталога 1Cv8Log. Однако прямое редактирование этих файлов (особенно 1Cv8.lgd) через SQLite-редакторы крайне не рекомендуется, так как это может привести к повреждению структуры данных.
Для автоматизации в файловом варианте чаще всего используют запуск Конфигуратора с параметрами командной строки. Например, для конвертации или очистки журнала:
1cv8.exe DESIGNER /F "ПутьКБазе" /ConvertEventLog /Out "log.txt"
Хотя установить настройки напрямую из встроенного языка нельзя, мы можем проверить их состояние. Для этого разберем функцию ПолучитьИспользованиеЖурналаРегистрации(). Она возвращает значение перечисления ИспользованиеЖурналаРегистрации.
ТекущийУровень = ПолучитьИспользованиеЖурналаРегистрации();
Если ТекущийУровень = ИспользованиеЖурналаРегистрации.НеИспользовать Тогда
Сообщить("Внимание! Журнал регистрации отключен.");
КонецЕсли;
Это полезно для самодиагностики системы: например, скрипт может проверить, не отключил ли кто-то логирование перед выполнением критических операций.
Важный момент: для выполнения любых манипуляций через COMConnector или rac, учетная запись, от имени которой запускается код, должна обладать правами администратора кластера 1С. Это не то же самое, что полные права внутри информационной базы. Если вы планируете изменять настройки из кода самой 1С, убедитесь, что серверный процесс имеет соответствующие разрешения для подключения к ras или создания COM-объектов.
Подведем итог: штатного метода "в одну строку" внутри языка 1С не существует из-за разделения уровней приложения и управления. Однако использование внешних инструментов администрирования позволяет полностью автоматизировать управление журналом регистрации, что особенно полезно в крупных инсталляциях с десятками баз. В качестве готовой альтернативы ручным скриптам можно использовать кроссплатформенную панель для администрирования кластеров и сервисов 1С.