Подробный журнал регистрации изменений

24.07.17

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

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

Добавить в какой-либо общий модуль функцию и процедуру или создать отдельный серверный модуль



Источник: file:///C:/Users/N.Temirgaliev@greenhouse.kz/Downloads/%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B9/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9%20%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%BE%D0%B2%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%20%D0%B2%201%D0%A1%20%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D0%B8%208.X%20%20%20Aeroion.Ru.htm
В 


// Возвращает значение или структуру с именами и значениями реквизитов произвольного объекта ссылочного типа
// прочитанные из информационной базы
//
// Параметры:
//  Ссылка - произвольный объект ссылочного типа (справочник, документ, план обмена, ПВХ, задача)
//  СтруктураРеквизитов - Необязательно. Может содержать значения:
//                      строка - имя реквизита объекта.
//                      строка - имена реквизитов, перечисленные через запятую, в формате требований к свойствам структуры.
//                      структура - структура с именами реквизитов.
//
//
// Возвращаемое значение:
//  Структура - если СтруктураРеквизитов имеет тип Структура и заполнен - структура с именами и значениями указанных реквизитов
//  Структура - если СтруктураРеквизитов не указан или не заполнен - структура с именами и значениями всех реквизитов объекта
//  Произвольный - если СтруктураРеквизитов строкового типа - значение данного реквизита
//
Функция ПолучитьРеквизитыОбъекта(Знач Ссылка, Знач СтруктураРеквизитов = Неопределено) Экспорт

    МетаданныеОбъекта = Ссылка.Метаданные();
    ИмяТаблицы = МетаданныеОбъекта.ПолноеИмя();

    ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
    ЭтоПланОбмена = ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
    ЭтоПВХ = ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
    ЭтоПланВидовРасчета = ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
    ЭтоДокумент = (Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) ИЛИ БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)));
    ЭтоЗадача = Задачи.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));

    ТекстЗапроса = "ВЫБРАТЬ ";

    //Формируем список реквизитов объекта для запроса
    Если ТипЗнч(СтруктураРеквизитов) = Тип("Строка") И ЗначениеЗаполнено(СтруктураРеквизитов) Тогда

        ТекстЗапроса = ТекстЗапроса + СокрЛП(СтруктураРеквизитов);
        //Если передали список реквизитов, инициализируем структуру
        Если Найти(СтруктураРеквизитов, ",") <> 0 Тогда
            СтруктураРеквизитов = Новый Структура(СтруктураРеквизитов);
        КонецЕсли;

    ИначеЕсли ТипЗнч(СтруктураРеквизитов) = Тип("Структура") И СтруктураРеквизитов.Количество() > 0 Тогда

        Для каждого Реквизит Из СтруктураРеквизитов Цикл ТекстЗапроса = ТекстЗапроса + Реквизит.Ключ + ","; КонецЦикла;

        //Отрезаем последнюю запятую
        ТекстЗапроса = Лев(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 1);

    Иначе

        //Определяем список реквизитов объектов для подстановки в текст запроса
        СписокРеквизитов = "";
        Если ЭтоСправочник ИЛИ ЭтоПланОбмена ИЛИ ЭтоПВХ ИЛИ ЭтоПланВидовРасчета Тогда
            Если МетаданныеОбъекта.ДлинаКода > 0 Тогда
                СписокРеквизитов = "Код,";
            КонецЕсли;
            Если МетаданныеОбъекта.ДлинаНаименования > 0 Тогда
                СписокРеквизитов = СписокРеквизитов + "Наименование,";
            КонецЕсли;
            Если ЭтоСправочник ИЛИ ЭтоПВХ Тогда
                Если МетаданныеОбъекта.Иерархический Тогда
                    СписокРеквизитов = СписокРеквизитов + "Родитель,";
                КонецЕсли;
                Если ЭтоСправочник И (МетаданныеОбъекта.Владельцы.Количество() <> 0) Тогда
                    СписокРеквизитов = СписокРеквизитов + "Владелец,";
                КонецЕсли;
            КонецЕсли;
        ИначеЕсли ЭтоДокумент Тогда
            Если МетаданныеОбъекта.ДлинаНомера > 0 Тогда
                СписокРеквизитов = "Номер,";
            КонецЕсли;
            СписокРеквизитов =  СписокРеквизитов + "Дата,";
        ИначеЕсли ЭтоЗадача Тогда
            Если МетаданныеОбъекта.ДлинаНомера > 0 Тогда
                СписокРеквизитов = "Номер,";
            КонецЕсли;
            СписокРеквизитов =  СписокРеквизитов + "Дата,";
            Если МетаданныеОбъекта.ДлинаНаименования > 0 Тогда
                СписокРеквизитов = СписокРеквизитов + "Наименование,";
            КонецЕсли;
        КонецЕсли;

        СписокРеквизитов = СписокРеквизитов + "ПометкаУдаления,";

        Для каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл СписокРеквизитов = СписокРеквизитов + Реквизит.Имя + ","; КонецЦикла;

        //Отрезаем последнюю запятую
        СписокРеквизитов = Лев(СписокРеквизитов, СтрДлина(СписокРеквизитов) - 1);
        СтруктураРеквизитов = Новый Структура(СписокРеквизитов);

        ТекстЗапроса = ТекстЗапроса + СписокРеквизитов;

    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса + "
        |ИЗ " + ИмяТаблицы + "
        |ГДЕ Ссылка = &Ссылка";

    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("Ссылка", Ссылка);

    РезультатЗапроса = Запрос.Выполнить();
    Если НЕ РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Если Выборка.Следующий() Тогда
            Если ТипЗнч(СтруктураРеквизитов) = Тип("Строка") И ЗначениеЗаполнено(СтруктураРеквизитов) Тогда
                Возврат Выборка[СтруктураРеквизитов];
            Иначе
                ЗаполнитьЗначенияСвойств(СтруктураРеквизитов, Выборка);
                Возврат СтруктураРеквизитов;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

    Возврат Неопределено;

КонецФункции //ПолучитьРеквизитыОбъекта()


Источник: file:///C:/Users/N.Temirgaliev@greenhouse.kz/Downloads/%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B9/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9%20%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%BE%D0%B2%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%20%D0%B2%201%D0%A1%20%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D0%B8%208.X%20%20%20Aeroion.Ru.htm#
В 


// Универсальная процедура, регистрирующая изменения реквизитов объекта (справочник, документ, план обмена, ПВХ)
// в журнале регистрации
//
Процедура РегистрацияИзмененийРеквизитовОбъекта(Объект) Экспорт
    Перем МетаданныеОбъекта;

    Если НЕ Объект.Ссылка.Пустая() Тогда

        МетаданныеОбъекта = Объект.Метаданные();

        СтрокаСобытие = "Данные.ИзменениеРеквизитов." + МетаданныеОбъекта.Имя;
        ПрежнийОбъект = Объект.Ссылка;
        РеквизитыПрежнегоОбъекта = ДополнительныеПроцедурыСервер.ПолучитьРеквизитыОбъекта(ПрежнийОбъект);

        СтрокаСообщениеРеквизит = "Изменён реквизит ";
        СтрокаСообщениеТабЧасть = "Изменена таб.часть ";
        СтрокаСообщениеТабЧастьУдалено = "Удалено ";
        СтрокаСообщениеТабЧастьДобавлено = "Добавлено ";

        Для Каждого Элемент из РеквизитыПрежнегоОбъекта Цикл
            ПрежнийРеквизитЗначение = Элемент.Значение;
            НовыйРеквизитЗначение = Объект[Элемент.Ключ];
            Если ТипЗнч(НовыйРеквизитЗначение) = Тип("Строка") Тогда
                НовыйРеквизитЗначение = СокрЛП(НовыйРеквизитЗначение);
            КонецЕсли;
            Если ТипЗнч(ПрежнийРеквизитЗначение) = Тип("Строка") Тогда
                ПрежнийРеквизитЗначение = СокрЛП(ПрежнийРеквизитЗначение);
            КонецЕсли;
            Если ПрежнийРеквизитЗначение <> НовыйРеквизитЗначение Тогда
                ЗаписьЖурналаРегистрации(СтрокаСобытие, УровеньЖурналаРегистрации.Предупреждение, МетаданныеОбъекта, ПрежнийОбъект, СтрокаСообщениеРеквизит + Элемент.Ключ + Символы.ВК + "Прежний: " + Строка(ПрежнийРеквизитЗначение) + Символы.ВК + "Новый: " + Строка(НовыйРеквизитЗначение));
            КонецЕсли;
        КонецЦикла;

        Если МетаданныеОбъекта.ТабличныеЧасти.Количество() > 0 Тогда

            // Определяем список проверяемых реквизитов табличных частей,
            // чтобы не забивать журнал регистрации лишними записями.
            // Для каждой конфигурации определить свой список, либо удалить проверку
            // Здесь приведён пример для Управления Торговлей.
            ПроверяемыеРеквизитыТабЧасти = Новый Структура("Номенклатура, ЕдиницаИзмерения, Количество, Цена, Сумма, СтавкаНДС, СерияНоменклатуры, ХарактеристикаНоменклатуры, СерияНоменклатурыНовая, ХарактеристикаНоменклатурыНовая, СерияНоменклатурыСтарая, ХарактеристикаНоменклатурыСтарая, Проект, ЗаказПокупателя, Сделка, ДокументПартии, ДокументРасчетовСКонтрагентом, СуммаВзаиморасчетов, ДоговорКонтрагента, Контрагент, СтатьяДвиженияДенежныхСредств, ПроцентСкидкиНаценки, НаименованиеТовара, ЗаказПоставщику, ДокументПоступления, ДокументОснование, ИсходноеРазмещение, НовоеРазмещение, СуммаТовара, СуммаПлатежа, Размещение, УвеличениеДолгаКонтрагента, УменьшениеДолгаКонтрагента, КоличествоУчет, ДокументРезерва, ТипЦен, Валюта, Пользователь, ВидЗадолженности, ВидОперации");

      
            Для Каждого МДТЧ ИЗ МетаданныеОбъекта.ТабличныеЧасти Цикл
                ИмяТЧ = МДТЧ.Имя;
                ТЧ1 = Объект[ИмяТЧ];
                ТЧ2 = ПрежнийОбъект[ИмяТЧ];
                ТЧ1Количество = ТЧ1.Количество();
                ТЧ2Количество = ТЧ2.Количество();
                Если ТЧ1Количество <> ТЧ2Количество Тогда
                    ЗаписьЖурналаРегистрации(СтрокаСобытие, УровеньЖурналаРегистрации.Предупреждение, МетаданныеОбъекта, Объект.Ссылка, СтрокаСообщениеТабЧасть + ИмяТЧ + Символы.ВК + "Прежняя: " + Строка(ТЧ2Количество) + ". Новая: " + Строка(ТЧ1Количество));
                КонецЕсли;
                Если ТЧ1Количество = ТЧ2Количество Тогда
                    СтрокаСообщение = СтрокаСообщениеРеквизит;
                ИначеЕсли ТЧ2Количество > ТЧ1Количество Тогда
                    СтрокаСообщение = СтрокаСообщениеТабЧастьУдалено;
                ИначеЕсли ТЧ2Количество < ТЧ1Количество Тогда
                    СтрокаСообщение = СтрокаСообщениеТабЧастьДобавлено;
                КонецЕсли;

                Для Инд = 0 По Макс(ТЧ1Количество - 1, ТЧ2Количество - 1) Цикл

                    Для Каждого МДРТЧ ИЗ МДТЧ.Реквизиты Цикл
                        Реквизит = МДРТЧ.Имя;

                        // При необходимости проверку можно удалить
                        Если НЕ ПроверяемыеРеквизитыТабЧасти.Свойство(Реквизит) Тогда
                            Продолжить;
                        КонецЕсли;

                        Если Инд >= ТЧ1Количество Тогда
                            НовыйРеквизитЗначение = Неопределено;
                        Иначе
                            НовыйРеквизитЗначение = ТЧ1[Инд][Реквизит];
                        КонецЕсли;
                        Если Инд >= ТЧ2Количество Тогда
                            ПрежнийРеквизитЗначение = Неопределено;
                        Иначе
                            ПрежнийРеквизитЗначение = ТЧ2[Инд][Реквизит];
                        КонецЕсли;

                        Если (ЗначениеЗаполнено(ПрежнийРеквизитЗначение) И ЗначениеЗаполнено(НовыйРеквизитЗначение)) ИЛИ (НЕ ЗначениеЗаполнено(ПрежнийРеквизитЗначение) И ЗначениеЗаполнено(НовыйРеквизитЗначение)) ИЛИ (ЗначениеЗаполнено(ПрежнийРеквизитЗначение) И НЕ ЗначениеЗаполнено(НовыйРеквизитЗначение)) Тогда
                            Если ТипЗнч(НовыйРеквизитЗначение) = Тип("Строка") Тогда
                                НовыйРеквизитЗначение = СокрЛП(НовыйРеквизитЗначение);
                            КонецЕсли;
                            Если ТипЗнч(ПрежнийРеквизитЗначение) = Тип("Строка") Тогда
                                ПрежнийРеквизитЗначение = СокрЛП(ПрежнийРеквизитЗначение);
                            КонецЕсли;
                            Если НовыйРеквизитЗначение <> ПрежнийРеквизитЗначение Тогда
                                ЗаписьЖурналаРегистрации(СтрокаСобытие, УровеньЖурналаРегистрации.Предупреждение, МетаданныеОбъекта, Объект.Ссылка, СтрокаСообщение + ИмяТЧ + "." + Реквизит + " в строке " + (Инд + 1) + Символы.ВК + "Прежний: " + Строка(ПрежнийРеквизитЗначение) + Символы.ВК + "Новый: " + Строка(НовыйРеквизитЗначение));
                            КонецЕсли;
                        КонецЕсли;

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

    КонецЕсли;

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

Создать подписку на событие для документов

Источник = ДокументОбъект
Событие = ПередЗаписью
Назначить обработчик события



Источник: file:///C:/Users/N.Temirgaliev@greenhouse.kz/Downloads/%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B9/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9%20%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%BE%D0%B2%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%20%D0%B2%201%D0%A1%20%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D0%B8%208.X%20%20%20Aeroion.Ru.htm#
В 


Источник: file:///C:/Users/N.Temirgaliev@greenhouse.kz/Downloads/%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B9/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9%20%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%BE%D0%B2%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%20%D0%B2%201%D0%A1%20%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D0%B8%208.X%20%20%20Aeroion.Ru.htm#
В 

//Обработчик события подписки на событие
//Регистрируем изменения для документа
//
Процедура ПередЗаписьюДокументаРегистрацияИзмененийРеквизитов(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

    //Изменения будем регистрировать для случаев проведения или отмены проведения,
    //так как для простой записи или вновь создаваемых документов контроль не имеет особого смысла
    Если НЕ Отказ И ((РежимЗаписи = РежимЗаписиДокумента.Проведение) ИЛИ (РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения)) Тогда
        РегистрацияИзмененийРеквизитовОбъекта(Источник);
    КонецЕсли;

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


Источник: file:///C:/Users/N.Temirgaliev@greenhouse.kz/Downloads/%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B9/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9%20%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%BE%D0%B2%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%20%D0%B2%201%D0%A1%20%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D0%B8%208.X%20%20%20Aeroion.Ru.htm#
В 

Создать подписку на событие для справочников (ПВХ, планов обменов, задач, бизнес-процессов)

Источник = БизнесПроцессОбъект, ПланВидовРасчетаОбъект, ПланВидовХарактеристикОбъект, ПланОбменаОбъект, СправочникОбъект, ЗадачаОбъект

Событие = ПередЗаписью

Назначить обработчик события



Источник: file:///C:/Users/N.Temirgaliev@greenhouse.kz/Downloads/%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B9/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9%20%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%BE%D0%B2%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%20%D0%B2%201%D0%A1%20%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D0%B8%208.X%20%20%20Aeroion.Ru.htm#
В 

//Обработчик события подписки на событие
//Регистрируем изменения для справочника, плана обмена, ПВХ, задачи, бизнесс-процесса
//
Процедура ПередЗаписьюОбъектаРегистрацияИзмененийРеквизитов(Источник, Отказ) Экспорт

    Если НЕ Отказ Тогда
        РегистрацияИзмененийРеквизитовОбъекта(Источник);
    КонецЕсли;

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


Источник: file:///C:/Users/N.Temirgaliev@greenhouse.kz/Downloads/%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B9/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9%20%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%BE%D0%B2%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2%20%D0%B2%201%D0%A1%20%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D0%B8%208.X%20%20%20Aeroion.Ru.htm#
В 

журнал регистрации с периодом реквизит

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

19200 руб.

15.05.2017    42518    10    24    

38

Версионирование объектов для Альфа-авто, ред 4 и 5.

Оптовая торговля Розничная торговля Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Автомобили, автосервисы Управленческий учет Платные (руб)

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

4800 руб.

03.09.2016    42252    33    24    

37

LogManager - Внешний журнал регистрации в SQL

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

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

10000 руб.

23.05.2014    55468    52    16    

47

Мониторинг баз и серверов 1С

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

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

9000 руб.

28.08.2019    30953    14    21    

66

LogiCH - хранение и анализ журнала регистрации в сверхбыстрой СУБД ClickHouse

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

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

5000 руб.

28.11.2018    19543    13    6    

36

Регламентное сокращение журнала регистрации

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

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

1 стартмани

29.12.2023    1243    12    dima_gsv    1    

12

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

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

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

1 стартмани

13.11.2023    2967    4    AlexSTAL    0    

42

Мониторинг состояния с отправкой в telegram

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

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

3 стартмани

26.09.2023    1752    11    doom2good    10    

13
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alex.msk 34 24.07.17 15:43 Сейчас в теме
А использовать версионирование из БСП религия не позволяет?
DrAku1a; Bassgood; +2 Ответить
2. Bassgood 1425 24.07.17 15:46 Сейчас в теме
(0) И чем же это решение лучше всех тех разработок, коих в интернете как грязи?
3. alex.msk 34 24.07.17 17:00 Сейчас в теме
(2) Своя грязь ближе к сердцу )))
4. Altair777 644 24.07.17 17:19 Сейчас в теме
Поскольку внедрять в рабочую конфу какие-то навороченные подсистемы, коих в сети как грязи, не хотелось

А при чем тут в сети? Есть "штатная" подсистема "Версионирование объектов". А засорять и без того тормознутый ЖР, совсем нехорошо.
А вот какие еще фичи при этом есть.
P.S. Прочитал, отвлекли. А пока писал коммент, уже и без меня объяснили :)
Прикрепленные файлы:
5. emettre1 25.07.17 00:34 Сейчас в теме
Версионирование объектов дает более полную информацию (типовой функционал).
Смысла второй раз изобретать велосипед нет
6. user700035_6550355 29 25.07.17 05:49 Сейчас в теме
Данная доработка у меня для 8.1, но работает на всех версиях, кроме 7.7. Теперь объем логов станет больше. Но решается чисткой время от времени.
7. alex.msk 34 25.07.17 09:38 Сейчас в теме
(6) Причем тут то, что она у тебя работает? Суть в том, что этот виноградный велосипед работает плохо и нелогично, потому что "объем логов станет больше. Но решается чисткой время от времени"..

Журнал регистрации неудобен, громоздок, бесполезен, и он адски тупит.
Версионирование - отлаженный, стабильный функционал, по возможностям сильно превосходящий твою "доработку".

Но suum cuique..
15. setverg 30.08.18 13:25 Сейчас в теме
(6)
Спасибо очень помогло.
16. user700035_6550355 29 04.09.18 06:19 Сейчас в теме
8. user700035_6550355 29 25.07.17 10:25 Сейчас в теме
на 8.1 нет версионирования
9. Altair777 644 25.07.17 11:46 Сейчас в теме
(8) А что по Вашему означает версионирование? Это просто пару регистров и код.
Более того, Вы удивитесь, но оно как объект (История данных) появится только в 8.3.11
alex.msk; +1 Ответить
10. alex.msk 34 25.07.17 12:57 Сейчас в теме
(8) Так естественно)) В вашей базе его, версионирования нет, потому что это дополнительны функционал, который "кагбэ" надо интегрировать.. собственно, как и ваш изобретенный "велосипед"..
11. Altair777 644 25.07.17 13:39 Сейчас в теме
(10) В моих-то базах он есть. Изобретать велосипед - дело неблагодарное и скучное.
12. alex.msk 34 25.07.17 13:41 Сейчас в теме
13. realist14 27.07.17 13:56 Сейчас в теме
здраствуйте, а где-то обработка готовая есть, чтобы потом можно было ее доработать
14. корум 287 01.08.17 12:03 Сейчас в теме
(13) копипасти из публикации, "готовая обработка" не нужна.
17. igrned 30.11.22 19:56 Сейчас в теме
Оставьте свое сообщение