Сокращение журнала регистрации в 1С:Предприятие версии 8.3
![]() |
Для многих тема данной статьи является «избитой», однако для меня при попытке вникнуть в суть изложенной ниже проблемы нашлось много нюансов, которые я постараюсь раскрыть для заинтересованных. |
Как известно, работа с журналом регистрации в 1С:Предприятие версии 8.3 существенно отличается от того, что было в предыдущих версиях. А именно, по какой-то причине разработчики убрали возможность настройки автоматического разделения журнала по периодам, из-за чего хранящий данные записи файл может разрастаться до огромных размеров (в одной известной мне организации размер журнала регистрации достиг 150 гигабайт, из-за чего исчерпалось место на системном диске и существенно снизилась производительность работы с данной базой в кластере 1С).
В 1С:Предприятие версии 8.2 в режиме конфигуратора имелась возможность разделения файла журнала регистрации по периодам (пункт меню Администрирование -> Настройка журнала регистрации):

И при такой настройке в папке данной базы в кластере 1С мы имели список усечённых файлов регистрации, которые мы могли перемещать и хранить в другом месте:
В режиме конфигуратора 1С:Предприятия версии 8.3 мы имеем возможность только ручного сокращения журнала регистрации по определённую дату с сохранением удаляемых записей в обозначенный нами файл. Согласитесь – это не слишком удобно:

В интернете находится много решений, чтобы автоматизировать этот процесс. Я остановился на способе с применением внешних обработок (изложенный в статье по ссылке, указанной в самом конце моей заметки):
Нам предлагалось воспользоваться внешними обработками:
- РаботаСЖурналомРегистрации83.epf — позволяющей из программы 1С сокращать журнал до даты, копировать его в указанное место и восстанавливать из файла;
- СократитьЖурналРегистрацииПериод.epf — позволяющей автоматически из командной строки обрезать файл журнала регистрации до указанного периода (День / Неделя / Месяц / Год).
Но, как оказалось, те внешние обработки имели существенный недостаток. При попытке загрузить, например, обработку РаботаСЖурналомРегистрации83.epf в базу 1С:Предприятие версии 8.3 появлялась следующая ошибка:
Обработка не подключена Невозможно подключить дополнительную обработку из файла. Возможно, она не подходит для этой версии программы.

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

Как оказалось в той внешней обработке не была обозначена функция СведенияОВнешнейОбработке. Сам я не являюсь программистом 1С, но мне удалось добиться, чтобы эта обработка установилась и выполняла своё предназначение.
Предлагаю вам скачать исправленные внешние обработки:
- РаботаСЖурналомРегистрации83.epf — скачайть (размер – 8.45 кб; формат – epf);
- СократитьЖурналРегистрацииПериод.epf — скачать (размер – 7.34 кб; формат – epf).
Для исправления ошибок первоначальных файлов внешних обработок необходимо было в режиме конфигуратора открыть их (пункт меню Файл -> Открыть) и в модуле объекта (пункт меню Действия -> Открыть модуль объекта):

Прописать недостающую функцию СведенияОВнешнейОбработке():
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Работа с журналом регистрации 8.3'"));
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Работа с журналом регистрации 8.3'"));
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
НСтр("ru = 'Работа с журналом регистрации 8.3'"),
"РаботаСЖурналомРегистрации83",
"ОткрытиеФормы",
Истина,
"");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
После сохранения данной внешней обработки, её следует подключить в необходимые базы. Делается это следующим образом. В режиме 1С:Предприятие, в меню Администрирование -> Печатные формы, отчеты и обработки (в примере используется интерфейс «Такси»):
Проследите, чтобы была установлена галочка напротив Дополнительные отчеты и обработки и загрузите нашу внешнюю обработку, нажав “Дополнительные отчеты и обработки”:
В открывшемся окне нажмите “Создать” и выберите необходимую внешнюю обработку:
После её загрузки настройте пункт меню, где она будет отображаться (я выбираю пункт “Администрирование”), и определите пользователей в колонке “Быстрый доступ”, которым будет разрешено запускать данную обработку:
Я сделал возможным доступ к данной внешней обработке пользователю “администратор”:
После выполнения данных настроек нажмите “Записать и закрыть”:
Теперь, перейдите в пункт меню, который вы обозначили (в примере – “Администрирование”, подменю “Поддержка и обслуживание -> Дополнительные обработки по администрированию”):
И запустите установленную внешнюю обработку:
В окне запущенной таким образом внешней обработки РаботаСЖурналомРегистрации83.epf вы можете увидеть весь функционал по работе с журналом регистрации:
Для примера, я скопировал и сократил журнал регистрации одной из баз в файл backup.lgd:
Операция занимает некоторое время, зависящее от производительности сервера и от объёма обрабатываемой информации из файла регистрации. После завершения работы внешней обработки (внизу вы увидите соответствующее информационное сообщение):
В папке, которую вы указали в строке “Скопировать в файл” вы увидите скопированный журнал регистрации:
Проверяем, что реальный файл журнала регистрации обрезан. Идём в меню Администрирование -> Поддержка и обслуживание -> Журнал регистрации и проконтролируем, что записей старше даты, по которую мы обрезали журнал регистрации, в нём не имеется:
Выше мы рассмотрели способ ручной обработки журнала регистрации 1С:Предприятие версии 8.3. Теперь изучим алгоритм автоматического сокращения журнала регистрации из командной строки.
В предыдущей версии данной статьи мной был описан довольно туманный способ с использованием внешней обработки СократитьЖурналРегистрацииПериод.epf. Теперь приведу полностью рабочий алгоритм автоматического (по расписанию) выполнения сокращения журнала регистрации в 1с версии 8.3:
Предлагаю небольшой скрипт, написанный на PowerShell (взят отсюда):
#
# backup & shrink 1c logs
#
param (
[string]$1cexe = "C:\Program Files (x86)\1cv8\8.3.7.1860\bin\1cv8.exe",
[string]$1cbase = "server:port\basename",
[string]$1cuser = "user",
[string]$1cupassword = "passwd",
[string]$1coperlog = "E:\scripts\log\1cshrink.log",
[string]$1cdaysoflogstore = N,
[string]$1clogsarchive = "E:\scripts\journal\",
[string]$1clogfilename = $env:COMPUTERNAME.ToLower() + "-1clog-" + ($1cbase.split("\"))[1] + "-" + (get-date).Date.ToString("yyyyMMdd") + ".elf"
)
$1clog = $1clogsarchive + $1clogfilename
cmd /c "`"`"$1cexe`" CONFIG `/s$1cbase `/N`"$1cuser`" `/P`"$1cupassword`" `/Out$1coperlog `/ReduceEventLogSize $((get-date).Date.AddDays(-$1cdaysoflogstore).ToString("yyyy-MM-dd")) -saveAs`"$1clog`"`""
где:
- C:\Program Files (x86)\1cv8\8.3.7.1860\bin\1cv8.exe — путь до необходимой вам версии 1с;
- server:port — сервер 1С и порт (если кластер работает на отличном от 1541);
- basename — имя базы данных;
- user — имя пользователя с полными правами на указанную базу;
- passwd — пароль указанного пользователя;
- E:\scripts\log\1cshrink.log — путь до файла лога выполняемой операции;
- N — количество дней, по которым необходимо оставить данные в журнале (неделя – 7);
- E:\scripts\journal\ — путь до обрезаемой и сохраняемой части файла регистрации в формате .elf;
- в переменную $1clogfilename — заносится автоматически формируемое имя файла для обрезаемой и сохраняемой части файла регистрации в формате .elf (его вид – computer-1clog-basename-date.elf);
- $1clog — путь и автоматически сформированное имя файла для обрезаемой и сохраняемой части файла регистрации в формате .elf;
- следующей командой производится непосредственно обрезание и сохранение части файла регистрации.
P.S. вы можете так же скачать данный скрипт (размер – 804 байта; формат – PS1) и, изменив его под свои нужды, использовать в своих целях.
Сохраните данный скрипт с необходимыми вам изменениями в файл с расширением .ps1. Для того, чтобы у вас была возможность исполнять данные файлы-скрипты на сервере, проделайте от имени администратора следующее: Win+R -> powershell -> ввод. В открывшемся окне наберите команду Set-ExecutionPolicy RemoteSigned, подразумевающую, что теперь вы можете запускать локальные не подписанные скрипты PowerShell, и подтвердите своё намерение, напечатав Y.
В результате отработки данного PowerShell скрипта в папке E:\scripts\journal\ вы получите файл с обрезанными данными из файла регистрации 1С вида computer-1clog-basename-date.elf, в папке E:\scripts\log\ вы получите файл-лог 1cshrink.log с результатами работы скрипта:
Сокращение журнала регистрации успешно завершено Сокращенные записи скопированы в файл E:\scripts\journal\computer-1clog-basename-20170215.elf
Создайте теперь cmd файл и поместите туда следующие строки:
@echo off powershell -file "E:\scripts\clearJR.ps1"
который осуществит вызов указанного скрипта (пропишите свои пути!). На основе данного cmd файла теперь можно создать задачу, которая будет выполняться в необходимое для вас время.
Как вы уже заметили, при сокращении журнала регистрации любым из описанных выше способов, высвобождающееся место не возвращается системе. Журнал регистрации хранится в файле 1Cv8.lgd и представляет собой базу данных формата sqlite. Чтобы уменьшить его размер, необходимо остановить службу агента соответствующего кластера, выполнить команду sqlite3 с ключом vacuum, а затем снова запустить службу агента кластера 1С.
Sqlite3 можно скачать с официального сайта: www.sqlite.org. Вам необходим zip архивы из секции Precompiled Binaries for Windows:
- sqlite-dll-win32-x86-3170000.zip — 32-х битная библиотека, если вы планируете запускать sqlite3 на х86 windows платформе;
- sqlite-dll-win64-x64-3170000.zip — 64-х битная библиотека, если вы планируете запускать sqlite3 на х64 windows платформе;
- sqlite-tools-win32-x86-3170000.zip — непосредственно средство sqlite3 для командной строки.
Цифры 3170000 в названиях архивов будут меняться разработчиками. Эти – означают последнюю на момент написания статьи версию – 3.17.0.
Разархивируйте библиотеку необходимой вам разрядности и положите в одну папку вместе с файлом sqlite3.exe из третьего архива. У вас должно получится что-то вроде этого:
e:\scripts\journal\sqlite>dir
Содержимое папки e:\scripts\journal\sqlite
13.02.2017 08:45 5 293 sqlite3.def
13.02.2017 08:45 1 716 224 sqlite3.dll
13.02.2017 23:27 701 952 sqlite3.exe
3 файлов 2 423 469 байт
Выполните последовательность команд (создайте cmd файл):
@echo off sc stop "1С:Предприятие 8.3 Агент Сервера" ping -n 30 -w 2000 localhost > NUL rem basename e:\scripts\journal\sqlite\sqlite3.exe "C:\Program Files\1cv8\srvinfo\reg_1541\cdf40893-c3a4-4665-8c64-ba6f6cde503c\1Cv8Log\1Cv8.lgd" vacuum sc start "1С:Предприятие 8.3 Агент Сервера"
где:
- 1С:Предприятие 8.3 Агент Сервера — наименование службы агента необходимого кластера 1С (не забудьте про один момент, что если ваша служба, как и у меня, написана русскими буквами, файл cmd надо сохранять в кодировке OEM 866);
- ping -n 30 -w 2000 localhost > null – команда, дающая вам 30-тисекундную задержку для того, чтобы подождать полного завершения работы 1С;
- e:\scripts\journal\sqlite\ — папка с разархивированной утилитой sqlite3.exe и библиотекой dll необходимой разрядности;
- C:\Program Files\1cv8\srvinfo\reg_1541\cdf40893-c3a4-4665-8c64-ba6f6cde503c\1Cv8Log\ — полный путь до журнала регистрации необходимой базы 1С подлежащего уменьшению.
Но основе данного cmd файла вы можете так же создать задачу и выполнять её по расписанию, или же объединить данные команды с предыдущими. Всё на ваше усмотрение.
На этом задачу по описанию процесса сокращения файла регистрации считаю завершённой.
_______________
По мотивам этой статьи.



























Спасибо за информацию, многое для себя почерпнул. Часто приходится копаться в Предприятии по работе)
Спасибо, помогло.
Классная статься, очень помогла!
Как тебя отблагодарить за данную статью?