вторник, 14 ноября 2017 г.

Парсинг файла MLG (журнал регистрации 1С:Предприятие 7.7)

(С) Код не мой, где взял не помню :) Полежит тут на память.
 
///////////////////////////////////////////////////////////////////////
Функция вед0(ч)
    Если ч<10 Тогда
        Возврат "0"+ч;
    Иначе 
        Возврат ""+ч;
    КонецЕсли;
КонецФункции

///////////////////////////////////////////////////////////////////////
Функция ДатаВСтроку(прм_Дата)
    Возврат ""+ДатаГод(прм_Дата)+вед0(ДатаМесяц(прм_Дата))+ вед0(ДатаЧисло(прм_Дата));
КонецФункции

///////////////////////////////////////////////////////////////////////
Функция СтрокаВДату(прм_стр)
    гг=0+Лев(прм_стр,4);
    мм=0+Сред(прм_стр,5,2);
    дд=0+Сред(прм_стр,7,2);
    Возврат Дата(гг,мм,дд);
КонецФункции


///////////////////////////////////////////////////////////////////////
Функция ОбъектПоСтроке(прм_стр)
//Возвращает ссылку на объект (например, документ или справочник) 
//по строке вида O/7549/2093806
    
    стр=""""+СтрЗаменить(прм_стр,"/", """,""")+"""";
    сп=СоздатьОбъект("СписокЗначений");
    сп.ИзСтрокиСРазделителями(стр);
    
    Вид=сп.ПолучитьЗначение(1);
    Тип=сп.ПолучитьЗначение(2);
    Код=сп.ПолучитьЗначение(3);
    
    стр="{"""+Вид+""",""0"",""0"","""+тип+""",""0"",""0"","""+Код+"""}";
    Возврат ЗначениеИзСтрокиВнутр(стр);
КонецФункции


//*******************************************
Процедура Сформировать()
    ф_тз.Очистить();
    ф_тз.НоваяКолонка("Дата","Дата");
    ф_тз.НоваяКолонка("Время","Строка",8);
    ф_тз.НоваяКолонка("Пользователь","Строка");
    ф_тз.НоваяКолонка("Где","Строка",1);
    ф_тз.НоваяКолонка("Действие","Строка",8);
    ф_тз.НоваяКолонка("Событие","Строка",20);
    ф_тз.НоваяКолонка("ДопКод","Число",5);
    ф_тз.НоваяКолонка("Описание","Строка");
    ф_тз.НоваяКолонка("ИД","Строка");
    ф_тз.НоваяКолонка("Представление","Строка");
    ф_тз.НоваяКолонка("Объект");
    
    Если ПустоеЗначение(НачДата)=1 Тогда
        Предупреждение("Укажите начальную дату.");
        Возврат;
    КонецЕсли;
    Если ПустоеЗначение(КонДата)=1 Тогда
        Предупреждение("Укажите конечную дату.");
        Возврат;
    КонецЕсли;
    сч=0;
    
        fso=СоздатьОбъект("Scripting.FileSystemObject");
        
    ИмяФайла=КаталогИБ()+"SYSLOG\1cv7.mlg";

        file=fso.OpenTextFile(ИмяФайла, 1, 0, 0); //Открываем файл в режиме "только чтение"           
        
        стрНачДата=ДатаВСтроку(НачДата);
        стрКонДата=ДатаВСтроку(КонДата);
        
        Пока file.AtEndOfStream=0 Цикл  //Читаем следующую строку файла
            сч=сч+1;
            стр=file.ReadLine(); 
            
            стрДата1=Лев(стр,17);
            стрДата=Лев(стр,8);
            
            Если сч%10=0 Тогда
                Состояние(стрДата1);
            КонецЕсли;

//Пропускаем события вне указанного диапазона
            
            Если стрДата<стрНачДата Тогда
                Продолжить;
            КонецЕсли;
            Если стрДата>стрКонДата Тогда
                Продолжить;
            КонецЕсли;
            
            
            стр=СтрЗаменить(стр,";",""",""");
            стр=""""+стр+"""";
            сп=СоздатьОбъект("СписокЗначений");
            сп.ИзСтрокиСРазделителями(стр);
            пДата=СтрокаВДату(сп.ПолучитьЗначение(1));
            пВремя=сп.ПолучитьЗначение(2);
            пПользователь=сп.ПолучитьЗначение(3);
            пГде=сп.ПолучитьЗначение(4);
            пДействие=сп.ПолучитьЗначение(5);
            пСобытие=СокрЛП(сп.ПолучитьЗначение(6));
            пДопКод=сп.ПолучитьЗначение(7);
            пОписание=сп.ПолучитьЗначение(8);
            Если сп.РазмерСписка()>=9 Тогда
                пИД=сп.ПолучитьЗначение(9);
            КонецЕсли;
            Если сп.РазмерСписка()>=10 Тогда
                пПредставление=сп.ПолучитьЗначение(10);
            КонецЕсли;
            
            
            ф_тз.НоваяСтрока();
            ф_тз.Дата=пДата;
            ф_тз.Время=пВремя;
            ф_тз.Пользователь=пПользователь;
            ф_тз.Где=пГде;
            ф_тз.Действие=пДействие;
            ф_тз.Событие=пСобытие;
            ф_тз.ДопКод=пДопКод;
            ф_тз.Описание=пОписание;
            ф_тз.ИД=пИД;
            ф_тз.Представление=пПредставление;
            ф_тз.Объект=ОбъектПоСтроке(пИД);
            
        КонецЦикла;

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

Комментариев нет: