Внедрение истории данных

11.06.21

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

Рассматривается решение задачи начального заполнения истории и блокировки записи истории, если данные неизменны.

Файлы

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

Наименование Скачано Купить файл
 УправлениеИОчисткаИсторииДанных.epf :
.epf 8,08Kb
2 3 050 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

1. Начальное заполнение истории по всем данным нерационально, предлагается вместо этого выполнять запись в историю только при первом изменений объекта. 

2. Если объект сохраняется при отсутствии изменений, тогда прсто выполняем отказ от записи. Объект для сравнения объекта записывается в регистр сведения для временного хранения данных.

3. Обновление истории в ФормаИсторииИзмененийИсторииДанных отключаем и выполняем обновление через регламентное задание.

4. Для скачивания размещена  обработка УправлениеИОчисткаИсторииДанных.epf позволяет управлять механизмом истории в режиме 1С Предприятии. Полезно для включения/отключать механизм истории данных, очистки истории. Полезно также для отключения историии в подчиненных узлах РИБ (если этот механизм не нужен).

Проверено на платформе 1С:Предприятие 8.3 (8.3.13.1809).

Для примера запись истории для справочника (используется подписка на события):
 

// Вставляем в подписку на события: Справочник Объект, ПередЗаписью
Процедура Справочники_ПередЗаписью(Источник, Отказ) Экспорт
    Попытка
        Если Источник.Метаданные().ИсторияДанных =Метаданные.СвойстваОбъектов.ИспользованиеИсторииДанных.Использовать Тогда
            Настройки = ИсторияДанных.ПолучитьНастройки(Источник.Метаданные());
            Если Настройки = Неопределено Тогда
                Использование=Истина;
            Иначе
                Использование=Настройки.Использование;
            КонецЕсли;
            Если НЕ Источник.ЭтоНовый () И НЕ Отказ И Использование Тогда
                ЗаписьJSON = Новый ЗаписьJSON;
                ЗаписьJSON.УстановитьСтроку();
                СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Источник.Ссылка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
                СериализованныйОбъект=ЗаписьJSON.Закрыть();    
                
                ЗапРег=РегистрыСведений.ОбъектВХранилище.СоздатьМенеджерЗаписи();
                ЗапРег.СсылкаОбъекта=Источник.Ссылка;
                ЗапРег.ОбъектВХранилище=Новый ХранилищеЗначения(СериализованныйОбъект);
                ЗапРег.Записать();
                
                Отбор = Новый Структура;
                Отбор.Вставить(    "Данные", Источник.Ссылка);
                Версии = ИсторияДанных.ВыбратьВерсии(Отбор,    "НомерВерсии, Дата",,1);
                
                Если Версии.Количество()=0 Тогда
                    ТекущийПользовательИБ=ПользователиИнформационнойБазы.ТекущийПользователь();
                    
                    ЗапРег=РегистрыСведений.РегистрацияВерсииИсторииДанных.СоздатьМенеджерЗаписи();
                    ЗапРег.СсылкаОбъекта=Источник.Ссылка;
                    ЗапРег.ОбъектВХранилище=Новый ХранилищеЗначения(СериализованныйОбъект);
                    ЗапРег.Дата=ТекущаяДата();
                    ЗапРег.ВидИзмененияДанных=Строка(ВидИзмененияДанных.Добавление);
                    ЗапРег.Комментарий="Начальное заполнение истории данных";
                    ЗапРег.ТекущийПользователь=Новый ХранилищеЗначения (ТекущийПользовательИБ);
                    ЗапРег.Записать();                     
                КонецЕсли;
            Иначе
                Если  НЕ Отказ Тогда
                    
                КонецЕсли;
            КонецЕсли;
            
        КонецЕсли;
    Исключение
        Сообщить ( ОписаниеОшибки());    
    КонецПопытки;
    
КонецПроцедуры

// Вставляем в подписку на события: Справочник Объект, ПриЗаписи
Процедура Справочники_ПриЗаписи(Источник, Отказ) Экспорт
    
    Попытка         
        Если  Источник.Метаданные().ИсторияДанных =Метаданные.СвойстваОбъектов.ИспользованиеИсторииДанных.Использовать Тогда
            
            Настройки = ИсторияДанных.ПолучитьНастройки(Источник.Метаданные());
            Если Настройки = Неопределено Тогда
                Использование=Истина;
            Иначе
                Использование=Настройки.Использование;
            КонецЕсли;
            
            Если НЕ Источник.ЭтоНовый () И НЕ Отказ И Использование Тогда
                ЗапРег=РегистрыСведений.ОбъектВХранилище.Получить( Новый Структура("СсылкаОбъекта",Источник.Ссылка));
                ЗапРег=РегистрыСведений.ОбъектВХранилище.СоздатьМенеджерЗаписи();
                ЗапРег.СсылкаОбъекта= Источник.Ссылка;
                ЗапРег.Прочитать();
                
                Если ЗапРег.Выбран() Тогда
                    ОбъектПередЗаписью =ЗапРег.ОбъектВХранилище.Получить();
                    ЗаписьJSON = Новый ЗаписьJSON;
                    ЗаписьJSON.УстановитьСтроку();
                    СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Источник, НазначениеТипаXML.Явное);
                    ОбъектПриЗаписи=ЗаписьJSON.Закрыть();
                    
                    СравнениеСтр= Новый СравнениеЗначений  ;
                    Если СравнениеСтр.Сравнить(ОбъектПередЗаписью, ОбъектПриЗаписи)= 0 Тогда 
                        Отказ=Истина;
                    КонецЕсли; 
                    ЗапРег.ОбъектВХранилище= Неопределено;
                    ЗапРег.Удалить();
                Иначе
                    Источник.УстановитьКомментарийВерсииИсторииДанных("создание нового объекта");
                КонецЕсли;
                
            КонецЕсли;
        Иначе
            Если  НЕ Отказ Тогда
                    //Источник.УстановитьКомментарийВерсииИсторииДанных("новый объект");
            КонецЕсли;
        КонецЕсли;
    Исключение
        Сообщить ( ОписаниеОшибки());    
    КонецПопытки;
КонецПроцедуры

//Процедуроа стандартной формы ФормаИсторииИзмененийИсторииДанных
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Перем МетаданныеДанных, ЭтоПодчиненныйРегистрСведений;
    МетаданныеДанных = Параметры.Данные.Метаданные();
    Если Не ПравоДоступа("ПросмотрИсторииДанных", МетаданныеДанных) Тогда
        Отказ = Истина;
        Возврат;
    КонецЕсли;
    Отбор.Вставить("Данные", Параметры.Данные);
    
    Элементы.ВерсииКомментарий.ТолькоПросмотр = Не ПравоДоступа("РедактированиеКомментарияВерсииИсторииДанных", МетаданныеДанных);
    
    ЭтоПодчиненныйРегистрСведений = Метаданные.РегистрыСведений.Содержит(МетаданныеДанных) 
        И МетаданныеДанных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору;
        
    Если ЭтоПодчиненныйРегистрСведений 
        Или Не ПравоДоступа("ПереходНаВерсиюИсторииДанных", МетаданныеДанных) Тогда
        Элементы.ФормаПерейтиНаВерсию.Видимость = Ложь;
        Элементы.ВерсииКонтекстноеМенюПерейтиНаВерсию.Видимость = Ложь;
    КонецЕсли;
    
    Заголовок = 
        ПолучитьПредставлениеДанных(МетаданныеДанных, Параметры.Данные) +  " (" + 
        NStr("ru = 'История изменений'; SYS = 'DataHistory.VersionsTitle'", "ru")
         + ")";        
    //ИсторияДанных.ОбновитьИсторию(Параметры.Данные);
    ВыбратьВерсии();
    ОбновитьДоступностьОтключенияОтбора();
    КоманднаяПанель.ПодчиненныеЭлементы.ФормаОбновитьРучками.Видимость= РольДоступна("ПолныеПрава");
КонецПроцедуры

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Журнал регистрации Системный администратор 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

История изменений реквизитов и табличных частей справочников, документов, независимых регистров сведений, возможность отката изменения, восстановление удаленных объектов, сбор статистики использования базы 1С. Альтернативный журнал регистрации.

22800 руб.

22.02.2018    37161    61    55    

58

Журнал регистрации Системный администратор Программист 1С v8.3 1C:Бухгалтерия Платные (руб)

Журнал регистрации платформы 1С в SQL. Общая база хранения всех журналов. Через com-подключение регламентным заданием периодически догружает журналы регистраций из рабочих баз. Предоставляет настраиваемый доступ к журналам по правам подразделений. Формирует отчеты по пользователям и данным.

12000 руб.

23.05.2014    57832    53    17    

48

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

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

20.11.2024    4291    user1913000    13    

22

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

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

21.10.2024    6013    leemuar    8    

24

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

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

1 стартмани

29.12.2023    3696    52    dima_gsv    4    

14

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

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

1 стартмани

19.11.2023    2853    7    AlexSTAL    0    

8

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

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

1 стартмани

13.11.2023    7494    12    AlexSTAL    0    

48

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

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

3 стартмани

26.09.2023    4379    28    doom2good    16    

14
Для отправки сообщения требуется регистрация/авторизация