Ведение лога изменений документов: обработка чтения лога   

Теперь - обработка для чтения лога. В форму вставлен реквизит типа «текст», содержащий вызов функции «ОбрДвижения()». К кнопке «Начать просмотр» привязана процедура «Выполнить()». Форма представлена ниже:

Форма обработки.

Модуль формы:

Перем СпрЛог;
Перем СпрИстория;
Перем СпрЗапись;
Перем Строчка1, Строчка2;
Процедура ДвижениеПоИстории()
    Запись.УдалитьСтроки();
    СпрЗапись.ИспользоватьВладельца(История.Тек);
    Если СпрЗапись.ВыбратьЭлементы()=0 Тогда
        Возврат;
    КонецЕсли;
    Пока СпрЗапись.ПолучитьЭлемент()=1 Цикл
        Запись.НоваяСтрока();
        Запись.Показатель=СпрЗапись.Показатель;
        Запись.Было=СпрЗапись.Было;
        Запись.Стало=СпрЗапись.Стало;
    КонецЦикла;
КонецПроцедуры

Процедура ДвижениеПоДокументам()
    История.УдалитьСтроки();
    СпрИстория.ИспользоватьВладельца(Документы.Тек);
    Если СпрИстория.ВыбратьЭлементы()=0 Тогда
        Возврат;
    КонецЕсли;
    Пока СпрИстория.ПолучитьЭлемент()=1 Цикл
        История.НоваяСтрока();
        История.N=СпрИстория.Код;
        История.Дата=СпрИстория.ДатаПравки;
        История.Время=СпрИстория.ВремяПравки;
        История.Автор=СпрИстория.АвторИзменений;
        История.ПК=СпрИстория.ПК;
        История.НаборПрав=СпрИстория.Права;
        История.Тек=СпрИстория.ТекущийЭлемент();
    КонецЦикла;
    Если История.КоличествоСтрок()=0 Тогда
        возврат;
    КонецЕсли;
    История.ПолучитьСтрокуПоНомеру(1);
    ДвижениеПоИстории();
КонецПроцедуры

Процедура ЗаполнитьВсе()
    Форма.Документы.Видимость(0);
    Документы.УдалитьСтроки();
    СпрЛог.ВыбратьЭлементы();
    Пока СпрЛог.ПолучитьЭлемент()=1 Цикл
        Документы.НоваяСтрока();
        Документы.Документ=СпрЛог.Док;
        Документы.Номер=СпрЛог.НомерДок;
        Документы.Дата=СпрЛог.ДатаДок;
        Документы.Время=СпрЛог.ВремяДок;
        Документы.Вид=СпрЛог.ВидДок;
        Документы.Автор=СпрЛог.Автор;
        Если СпрЛог.Удален=0 Тогда
            Документы.Статус="Норма";
        ИначеЕсли СпрЛог.Удален=1 Тогда
            Документы.Статус="Пометка";
        ИначеЕсли СпрЛог.Удален=2 Тогда
            Документы.Статус="Удален";
        КонецЕсли;
        Документы.Тек=СпрЛог.ТекущийЭлемент();
    КонецЦикла;
    Форма.Документы.Видимость(1);
    Если Документы.КоличествоСтрок()=0 Тогда
        Возврат;
    КонецЕсли;
    Документы.ПолучитьСтрокуПоНомеру(1);
    ДвижениеПоДокументам();
КонецПроцедуры

Процедура ПриОткрытии()
    Документы.Очистить();
    История.Очистить();
    Запись.Очистить();
    Документы.НоваяКолонка("Документ","Документ",,,,41,,);
    Документы.НоваяКолонка("Номер","Число",6,,,9,,);
    Документы.НоваяКолонка("Дата","Дата",,,,11,,);
    Документы.НоваяКолонка("Время",,,,,11,,);
    Документы.НоваяКолонка("Вид",,,,,21,,);
    Документы.НоваяКолонка("Автор");
    Документы.НоваяКолонка("Статус",,,,,7,,);
    Документы.НоваяКолонка("Тек","Справочник.Лог");
    Документы.ВидимостьКолонки("Тек",0,);
    История.НоваяКолонка("N",,,,,6,,);
    История.НоваяКолонка("Дата",,,,,12,,);
    История.НоваяКолонка("Время",,,,,8,,);
    История.НоваяКолонка("Автор");
    История.НоваяКолонка("ПК");
    История.НоваяКолонка("НаборПрав");
    История.НоваяКолонка("Тек","Справочник.История");
    История.ВидимостьКолонки("Тек",0,);
    Запись.НоваяКолонка("Показатель");
    Запись.НоваяКолонка("Было");
    Запись.НоваяКолонка("Стало");
    СпрЛог=СоздатьОбъект("Справочник.Лог");
    СпрИстория=СоздатьОбъект("Справочник.История");
    СпрЗапись=СоздатьОбъект("Справочник.Запись");
КонецПроцедуры

Процедура Выполнить()
    ЗаполнитьВсе();
КонецПроцедуры

Функция ОбрДвижения()
    Если НЕ(Строчка1=Документы.ТекущаяСтрока()) Тогда
        ДвижениеПоДокументам();
    КонецЕсли;
    Если НЕ(Строчка2=История.ТекущаяСтрока()) Тогда
        ДвижениеПоИстории();
    КонецЕсли;
    Строчка1=Документы.ТекущаяСтрока();
    Строчка2=История.ТекущаяСтрока();
    Возврат "";
КонецФункции


Да, чуть не забыл - эту обработку можно загрузить в разделе "Скачать".


[1]-[ 2]-[3]

 

Статьи по этой теме:

Реализация системы логирования для 1С(SQL) 

Программный комплекс "Логирование"


 

Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").