Разделение единого файла журнала регистрации 1С:8.2 на отдельные файлы по дням (v1.01)

Единый (в одном файле) журнал регистрации может вырасти до нескольких гигабайт, а потом вдруг дать сбой. Допустим, решение о сохранении журнала по дням принято, но что делать с тем единым файлом, что уже успел прилично вырасти? Предлагаемая обработка "порежет" его на отдельные файлы по дням.

На форме обработки выбирается исходный (единый, большой) файл и каталог, куда сохранять отдельные файлы по дням. После «нарезки» исходный файл можно удалить. Подходит и для файловых и для клиент-серверных баз данных. Напомню, что в файловом варианте журнал регистрации хранится в подкаталоге базы данных, а в клиент-серверном — в каталоге программы, куда установлен сервер 1С (путь примерно такой: C:Program Files1cv82srvinfo
eg_1541бла-бла-бла1Cv8Log)

 

UPD: v1.01

Исправлено: При определении границ записи по символам «{» и «}» теперь игнорируются эти символы внутри строковых значений (комментарии, примечания, и т.п.)

 

6 Comments

  1. Антон Ширяев

    Расскажите алгоритм пожалуйста.

    Моя обработка (Анализ и редактирование файлов журнала регистрации 1С 8.1/8.2 — ELF/LOG/LGF/LGP) тоже такое умеет, но в более расширенном варианте — год, месяц, неделя, день, час. Причем как разделять, так и объединять.

    Было замечено что после разделения завершенные транзакции проходящие через границу разделения помечались как незавершенные. В вашем алгоритме это как-то учитывается?

    Reply
  2. Фоур

    Алгоритм простой:

    1. Берем из файла заголовок (3 строки)

    2. Открываем ЧтениеТекста и ЗаписьТекста. Читаем и пишем записи по одной. Записью считается блок, в котором количество «{» равно количеству «}»

    3. Если видим, что изменилась дата (без учета времени), закрываем текущий файл и открываем новый, с названием равным дате, пишем в него заголовок, затем записи до следующей даты

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

    Reply
  3. Антон Ширяев

    По сути это сверхсильное упрощение моей обработки под конкретную узкую задачу.

    Все ошибки получается переехали, а именно

    1) Внутри кавычек можно размещать непарные {} и 1С это проглотит, а обработки — нет

    2) Граница транзакции при переходе через день будет установлена неправильно. Как показала практика 1С это проглатывает, но помечает транзакцию незавершенной. Как делать правильно у меня руки еще не дошли. Скорее всего просто начатую транзакцию надо оставлять в предыдущем дне.

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

    Стоит добавить, что здесь не любят когда при наличии универсальной обработки покрывающей потребности пишется узкоспециализированная…

    Reply
  4. Фоур

    Возможно, я не внимательно исследовал функционал Вашей обработки, но, насколько я понял, для того, чтобы ЗАПИСАТЬ файл с разделением по дням, Вашей обработке требуется сначала его ПРОЧИТАТЬ. А это абсолютно не реально для файла, размером в 12 ГБ, ради которого, собственно, была написана моя обработка.

    Специализация моей обработки: потоковое онлайн разделение журнала без предварительного чтения и анализа, именно для очень больших файлов журнала.

    Reply
  5. Фоур

    (3) Антон Ширяев,

    >1) Внутри кавычек можно размещать непарные {} и 1С это проглотит, а обработки — нет

    Спасибо за подсказку. Исправлено.

    Reply
  6. help1Ckr

    Спасибо, вот берусь за журнал регистрации. Спасибо за подсказку алгоритма

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *