Готовое решение для протоколирования записи и удаления данных в регистре сведений

18.05.20

База данных - Журнал регистрации

Представляю написанную мной процедуру, которая, будучи своевременно встроена в программу 1С Предприятие 8.2, позволит отследить внесение изменений (запись/удаление) в любом регистре сведений (или в нескольких регистрах одновременно). Процедура встраивается в конфигурацию путём добавления её в общий модуль, далее нужно создать подписку на событие ПередЗаписью требуемых регистров сведений и назначить эту процедуру обработчиком этого события.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ЖурнализированиеРегистраСведенийПередЗаписью.txt
.txt 4,34Kb
28
28 Скачать (10 SM) Купить за 4 550 руб.

Результатом работы процедуры являются записи в журнале регистрации, в которых кратко записывается суть производимых с регистром сведений изменений (одна-две строки в журнале регистрации на каждую транзакцию в регистре). При написании процедуры я руководствовался принципом : результат работы процедуры в журнале регистрации должен быть хорошо читаем и быстро осознаваем человеком.

Особенности реализации : если в наборе записей регистра сведений больше одной записи, то подробно протоколируется только первая запись набора и количество записей в наборе.

Программный код написан в стиле этюда : в тесте процедуры закомментирован код, который позволит ещё более усовершенствовать работу этой процедуры (в частности : получить информацию, которая будет вытеснена из регистра после записи набора). Мне это усовершенствование на практике пока не потребовалось, поэтому данная ветка на момент написания этой статьи не получила развитие.

О практической пользе этой процедуры. Эта процедура, будучи своевременно встроена в базу 1С Зарплата и управление персоналом 8.2, реально помогла мне отследить порчу конкретным пользователем штатного расписания в базе 1С Зарплата и Управление персоналом 8.2 и переклассифицировать инцидент «порча данных штатного расписания» из разряда «программный сбой» в «ошибку пользователя».

 

Процедура ЖурнализированиеРегистраСведенийПередЗаписью(Источник, Отказ, Замещение) Экспорт

   
НаборЗаписей = Источник;

   
ТаблицаДляПечати1 = НаборЗаписей.Выгрузить();

   
ОписаниеИзменений1 = "";

   
СсылкаДляОтраженияВЖурналеРегистрации1 = Неопределено;

    Если
ТаблицаДляПечати1.Количество() = 0 Тогда
       
// в регистр пишется пустой набор записей, т.е. происходит удаление из регистра сведений по наложенному в наборе отбору

       
ЧтоПроисходит1 = "Удаление в регистре сведений";

       
МетаданныеНабора = НаборЗаписей.Метаданные();

       
ИмяРегистра = МетаданныеНабора.ПолноеИмя();

       
// Формируем текст условия блока ГДЕ основного запроса,
        // в соответствии с установленным отбором для набора записей

       
Запрос = Новый Запрос;

       
СписокПолейУсловияОтбораТекст = "";
       
Итерация = 0;
        Для каждого
ЭлементОтбора Из НаборЗаписей.Отбор Цикл
            Если не
ЭлементОтбора.Использование Тогда
                Продолжить;
            КонецЕсли;

            Если
Итерация = Тогда
               
ОписаниеИзменений1 = ОписаниеИзменений1 + "Отбор : ";
            Иначе
               
СписокПолейУсловияОтбораТекст = СписокПолейУсловияОтбораТекст  + " И ";
            КонецЕсли;

           
СписокПолейУсловияОтбораТекст = СписокПолейУсловияОтбораТекст +" Набор." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя;

           
// здесь нужно сохранить в журнале регистрации значения отборов
           
ОписаниеИзменений1 = ОписаниеИзменений1 + "" + ЭлементОтбора.Имя + " = " + СокрЛП(Формат(ЭлементОтбора.Значение, "ДФ=dd.MM.yyyy")) + "" + Символы.ПС;

            Если
СсылкаДляОтраженияВЖурналеРегистрации1 = Неопределено Тогда
                Если
ТипЗнч(ЭлементОтбора.Значение) <> Тип("Дата") Тогда // дата в качестве представления объекта не нужна! лучше любой ссылочный тип
                   
СсылкаДляОтраженияВЖурналеРегистрации1 = ЭлементОтбора.Значение;
                КонецЕсли;
            КонецЕсли;
           
Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение);

           
Итерация = 1;
        КонецЦикла;

        Если
Итерация = 1 Тогда
           
СписокПолейУсловияОтбораТекст = " ГДЕ " + СписокПолейУсловияОтбораТекст;
        КонецЕсли;

       
Запрос.Текст = "ВЫБРАТЬ * ИЗ " + ИмяРегистра + " КАК Набор
        | "
+ СписокПолейУсловияОтбораТекст + "";

       
// ТаблицаДляПечати1 = Запрос.Выполнить().Выгрузить();
        // а тут лежат старые данные в регистре (которые перетираются!!!)
        // их можно анализировать и печатать

   
Иначе // записывается непустой набор записей

       
ЧтоПроисходит1 = "Запись в регистр сведений";

        Для каждого
Запись1 Из ТаблицаДляПечати1 Цикл

            Для каждого
Колонка1 Из ТаблицаДляПечати1.Колонки Цикл

               
ЗначениеКолонки1 = Запись1[Колонка1.Имя];
                Если
ЗначениеЗаполнено(ЗначениеКолонки1) Тогда // печатаем почти все значения непустых измерений, ресурсов, реквизитов!

                   
ТипЗнач1 = ТипЗнч(ЗначениеКолонки1);

                   
МожноПечататьПолноеЗначениеКолонки1 = Истина;
                    Если
ТипЗнач1 = Тип("Число") Тогда
                        Если
ЗначениеКолонки1 > 1000 Тогда
                           
// защита данных в журнале регистрации : не печатаем числовые значения колонок, если они превышают 1000 !
                            // например, это могут быть вилки окладов!
                           
МожноПечататьПолноеЗначениеКолонки1 = Ложь;
                        КонецЕсли;
                    КонецЕсли;

                    Если
МожноПечататьПолноеЗначениеКолонки1 Тогда
                       
ОписаниеИзменений1 = ОписаниеИзменений1 + Колонка1.Имя + " = " + Формат(ЗначениеКолонки1, "ДФ=dd.MM.yyyy") + Символы.ПС;

                        Если
СсылкаДляОтраженияВЖурналеРегистрации1 = Неопределено Тогда
                            Если
ТипЗнач1 <> Тип("Дата") Тогда
                               
СсылкаДляОтраженияВЖурналеРегистрации1 = ЗначениеКолонки1;
                            КонецЕсли;
                        КонецЕсли;

                    Иначе
                       
ОписаниеИзменений1 = ОписаниеИзменений1 + Колонка1.Имя + " > 1000" + Символы.ПС;
                    КонецЕсли;

                КонецЕсли;
            КонецЦикла;

            Прервать;
// прочтём только первую запись

       
КонецЦикла;

        Если
ТаблицаДляПечати1.Количество() > 1 Тогда

           
// по остальным записям - укажем только полное количество записей

           
ОписаниеИзменений1 = "Всего записей набора = " + ТаблицаДляПечати1.Количество() + "; первая запись :" + Символы.ПС + ОписаниеИзменений1;

        КонецЕсли;

    КонецЕсли;

   
ЗаписьЖурналаРегистрации(ЧтоПроисходит1, УровеньЖурналаРегистрации.Предупреждение, МетаданныеНабора, СсылкаДляОтраженияВЖурналеРегистрации1, СокрЛП(ОписаниеИзменений1));

КонецПроцедуры

 

См. также

Журнал регистрации Мониторинг Системный администратор Программист Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Платные (руб)

В сферу обязанностей при работе с клиентами входит контроль работы баз данных и серверов 1С. Нужно понимать что происходит в базах, есть ли ошибки, зависания у пользователей и фоновых задач, блокировки или какое-то необычное поведение системы, получение информации о причинах возникновения проблем и их оперативное устранение и т.д. В качестве источников информации использую консоль кластеров 1С, технологический журнал 1С, журналы регистрации базы 1С. Для автоматизации части операций мониторинга и анализа создал инструмент на основе 1С.

9000 руб.

28.08.2019    34547    22    21    

76

Журнал регистрации Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Конфигурация LogiCH эффективно решает проблему хранения и анализа записей журналов регистрации. Разработка использует столбцовую СУБД ClickHouse, одну из самых быстрых Big Data OLAP СУБД. Любой анализ журнала можно выполнить в одном отчете, в котором доступны все возможности СКД с учетом ограничений RLS. Количество подключаемых баз не ограничено и не влияет на скорость построения анализа.

6000 руб.

28.11.2018    21096    17    7    

42

Журнал регистрации Программист Россия Бесплатно (free)

В материале рассматривается сравнение двух инструментов для работы с журналом регистрации 1С: утилиты ibcmd и платформы Vector. Описаны их функциональные возможности, тестирование производительности и практическое применение для преобразования логов в формат JSON.

20.11.2024    1443    user1913000    12    

20

Журнал регистрации Тестирование QA Программист Бесплатно (free)

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

21.10.2024    3459    leemuar    8    

24

Инструменты администратора БД Журнал регистрации Системный администратор Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Внешняя обработка для регламентного сокращения журнала регистрации для конфигураций на базе БСП и платформы 8.3.20+

1 стартмани

29.12.2023    2384    36    dima_gsv    3    

14

Журнал регистрации Мониторинг Системный администратор Программист Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

19.11.2023    1653    5    AlexSTAL    0    

8

Мониторинг Журнал регистрации Технологический журнал Системный администратор Программист Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

13.11.2023    5153    11    AlexSTAL    0    

47

Журнал регистрации Инструменты администратора БД Мониторинг Мессенджеры и боты Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Абонемент ($m)

Внешняя обработка для БСП-конфигураций с простым программным интерфейсом. Предназначена для мониторинга состояния системы. Базово реализована отправка ошибок из журнала регистрации, но можно легко добавить мониторинг других журналов, каких-либо действий пользователей, состояния системы (например закрытие месяца).

3 стартмани

26.09.2023    3052    20    doom2good    16    

14
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. w-divin 20.03.13 18:35 Сейчас в теме
Полезненько... спасибки...
megatrend; +1 Ответить
2. sstar90 21.03.13 10:01 Сейчас в теме
спасибо, сам задумывался над этим
megatrend; +1 Ответить
3. Alex1Cnic 150 27.11.13 10:19 Сейчас в теме
О как раз то что доктор прописал.... У меня тоже аналогичная задачка есть: добавлять в журнал регистрации дополнительные данные. Супер! Плюсую!
megatrend; +1 Ответить
4. b-dm 175 27.10.14 18:09 Сейчас в теме
Чудесная вещь. сейчас проверим :-) А в текстовом файле выложено то же самое что написано в публикации ?)
megatrend; +1 Ответить
5. megatrend 131 27.10.14 22:28 Сейчас в теме
(4) b-dm, да, файл не отличается от статьи.
6. primara 55 13.05.15 16:33 Сейчас в теме
Спасибо, очень помогло!
megatrend; +1 Ответить
7. ASV085 3 25.06.15 09:35 Сейчас в теме
Спасибо, как раз нужно было на регистр сведений вести запись в журанал, кто его меняет, а кто его портит.
megatrend; +1 Ответить
8. kosmo0 111 05.04.17 08:47 Сейчас в теме
Журналирование изменений регистров сведений

Переделанный вариант. С описанием почему реализовано именно так.
afk; Infected; megatrend; +3 Ответить
Оставьте свое сообщение