https://infostart.ru/1c/tools/2177724/
Для windows. Тестировалось на платформе 8.3.21.1393.
Используются библиотека: https://github.com/oscript-library/sql https://github.com/Tavalik/TLog https://github.com/Tavalik/TMail/tree/master
Выложен исходник который можно доработать и готовый exe.
Зачем это надо и что помогает решить:
- Если один ЖР пишет на несколько серверов то при просмотре ЖР будут видны записи только текущего активного файла.
- Если ЖР большой и случайно сделали что-то не то на рабочей базе, есть вероятность что рабочий сервер зависнет. Реализация дает возможность выгружать ЖР на тестовый сервер и запускать с тестовых баз
- При необходимости можно добавить изменить индексы для быстрого поиска в отличии от типового журнала
- В cf выложен удобный отчет на скд. Есть возможность группировать записи и анализировать проблемные места
Скорость переноса в базу SQL зависит от мощности сервера. Например на рабочем сервере 150000 записей обрабатывает около 1м 30секунд. На домашнем ноутбуке 150000 записей обрабатывает около 4м.
Можно загружать в одну базу сразу несколько журналов регистрации. Для этого нужно указывать уникальное ИмяИнформационнойБазы. При запуске ищем информационную базу по имени, если ее нет то добавляем ИмяИнформационнойБазы с ПредставлениеИнформационнойБазы и ОписаниеИнформационнойБазы иначе просто работаем с уже существующей. ПредставлениеИнформационнойБазы и ОписаниеИнформационнойБазы заполняется только при создании(если база с таким именем уже создана не обновляет поля), если нужно изменить то через sql.
Отслеживать несколько баз - запустить несколько exe. При ошибке можно отправлять письмо на почту.
В дополнительно есть cf с внешним источником и отчетом. Отборы в отчете сделаны на подобии ЖР БСП.
При завершении чтения и запуске снова продолжается с последней записи(при соответствующих настройках).
В sql создать новую базу данных. Скопировать скрипт из файла "SQL Server. Скрипт создания базы для хранения данных журнала регистрации.sql" и запустить его для созданной базы. Открыть файл "setting.Json" и установить настройки.
"НастройкиПочты": {
"ОтправитьТестовоеПисьмо": "Ложь", При запуске пробуем отправить письмо, можно использовать один раз для проверки
"ОтправлятьПисьмоПриОшибке": "Истина", Отпарвляет письмо если что-то пошло не так
"АдресSMTP": "smtp.gmail.com",
"ПортSMTP": 465,
"ПользовательSMTP": "test@gmail.com",
"ПарольSMTP": "test",
"ИспользоватьSSL": "Истина",
"АдресЭлектроннойПочтыПолучателя": "test@gmail.com;"
},
"НастройкиЧтенияЖурнала": {
"ЧитатьЖурнал": "Истина", - Нужно ли читать журнал. Первый раз можно указать ОтправитьТестовоеПисьмо истина и ЧитатьЖурнал ложь для проверки работы с почтой
"ПутьКВнешнейКомпонентеSqlLite": "sql.dll", - путь к файлу. Лежит в папке. По умолчанию менять не нужно.
"ПутьКSqlLite": "1Cv8.lgd", - Путь к файлу журнала регистрации. Пример "C:/Program Files/1cv8/srvinfo/reg_1541/9b6f817a-404b-43f4-9fb2-41d33022db41/1Cv8Log/1Cv8.lgd"
"СтрокаСоединенияСSQL": "server=ИмяСервера;uid=ПользовательСервера;pwd=ПарольСервера;database=ИмяБазыДанныхДляЗагрузки", - подключение к sql
"ИмяИнформационнойБазы": "МойПервыйТест",
"ПредставлениеИнформационнойБазы": "Мой первый тест",
"ОписаниеИнформационнойБазы": "моя база для тестов",
"ЧислоСтрокДляЗаписи": 1000, - число строк которые будет переносить за один запрос к sql. Максимум 1000. Например если за паузу между загрузкой успели создать в журнале только 500 новых записей, то загрузит 500, не дожидаясь полного пакета.
"НачатьСПервойВSQLLite": "Ложь", - Если мы загружаем базу первый раз, то Истина. Например есть журнал который сокращался и сейчас хранятся записи с id от 500 до 10000. Мы получим минимальный айди и начнем загрузку с него. Для таблицы ЗаписиДанных.
"ОбрабатываемаяСтрокаСобытий": 0, - Если по какой то причине у нас затерлись данные или пропустили часть строк то можно начать загрузку с конкретного айди что бы догрузить. Для таблицы ЗаписиДанных.
"ПаузаСекунд": 60, - Пауза между обращением к базам. Мы получаем таблицы последних айди для каждой таблицы в SQL и журнале регистрации. После чего проходим все таблицы по очереди загружая новые записи. После этого пауза на указанное время перед новой итерацией.
"ВыводитьЛог": "Истина", - Если истина выводится информация по количеству итераций, загрузке таблиц.
"ПродолжатьПриОшибке": "Ложь", - Если истина не прекратит работу при ошибке. Автоматически попробует еще раз через таймаут.
"ПаузаСекундПриОшибке": 1800 - Пауза до повторного запуска если произошла ошибка
}