Имя: Пароль:
1C
 
Создать свой Журнала Регистрации mlg для обмена
0 dzksoft
 
13.02.08
15:27
Нужна такая вещь как журнал регистрации обмена чтобы можно было видеть загрузилась ли база, с ошибкой ли, и так далее. Дело в том что стандарный МЛГ можно бы использовать, но он много ресурсов системы "ЖРЕД"
1 dzksoft
 
13.02.08
15:32
Наверное с такой ф....й ни кто не стричался, жаль
2 dk
 
13.02.08
15:33

//******************************************************************************
// глСохранитьЛогВФайл()
//
// Параметры:
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Процедура глСохранитьЛогВФайл()
   Перем Сч, ИмяФайлаЛога;
   
   Если гл_ТЗ_Лог.КоличествоСтрок() > 0 Тогда
       
       ИмяФайлаЛога = КаталогИБ() + "Syslog\test.mlg";
       
       Попытка
           fso = CreateObject("Scripting.FileSystemObject");
           f = fso.OpenTextFile(ИмяФайлаЛога, 8, 1);
       Исключение
           Возврат;
       КонецПопытки;
       
///--------------------------------------------------------------------------------
//        ВремНач = _GetPerformanceCounter();
///--------------------------------------------------------------------------------
       
       гл_ТЗ_Лог.ВыбратьСтроки();
       Пока гл_ТЗ_Лог.ПолучитьСтроку() > 0 Цикл
           ПечПарам1    = Формат(гл_ТЗ_Лог.Дата, "дГГГГММДД");
           ПечПарам2    = СокрЛП(гл_ТЗ_Лог.Время);
           ПечПарам3    = СокрЛП(гл_ТЗ_Лог.Пользователь);
           ПечПарам4    = "E";
           
           Если гл_ТЗ_Лог.ТипОбъекта = "Справочник" Тогда
               ПечПарам5    = "Refs";
               ПечПарам6    = "RefWrite";
               ПечПарам7    = "2";
               ПечПарам8    = СокрЛП(гл_ТЗ_Лог.Сотрудник) + " *** " + СокрЛП(гл_ТЗ_Лог.Реквизит) + " : " +
                               "Было:" + глПолучитьПредставлениеОбъектаДляЛога(гл_ТЗ_Лог.Было) + " *** " +
                               "Стало:" + глПолучитьПредставлениеОбъектаДляЛога(гл_ТЗ_Лог.Стало);
               ПечПарам9    = глПолучитьИдентификаторОбъектаДляЛога(гл_ТЗ_Лог.Объект);
               ПечПарам10    = Метаданные.Справочник(гл_ТЗ_Лог.Объект.Вид()).Синоним;
               Если ПустоеЗначение(ПечПарам10) = 1 Тогда
                   ПечПарам10    = гл_ТЗ_Лог.Объект.Вид();
               КонецЕсли;    //"Если ПустоеЗначение(ПечПарам10) = 1 Тогда
               ПечПарам10 = ПечПарам10 + " " + СокрЛП(гл_ТЗ_Лог.Объект.Код) + " " + СокрЛП(гл_ТЗ_Лог.Объект.Наименование) + ";";
               
           ИначеЕсли гл_ТЗ_Лог.ТипОбъекта = "Документ" Тогда
               ПечПарам5    = "Docs";
               ПечПарам6    = "DocWrite";
               ПечПарам7    = "2";
               ПечПарам8    = СокрЛП(гл_ТЗ_Лог.Сотрудник) + " *** " + СокрЛП(гл_ТЗ_Лог.Реквизит) + " : " +
                           "Было: " + глПолучитьПредставлениеОбъектаДляЛога(гл_ТЗ_Лог.Было) +
                           " *** Стало:" + глПолучитьПредставлениеОбъектаДляЛога(гл_ТЗ_Лог.Стало);
               ПечПарам9    = глПолучитьИдентификаторОбъектаДляЛога(гл_ТЗ_Лог.Объект);
               
               ПечПарам10    = Метаданные.Документ(гл_ТЗ_Лог.Объект.Вид()).Синоним;
               Если ПустоеЗначение(ПечПарам10) = 1 Тогда
                   ПечПарам10 = гл_ТЗ_Лог.Объект.Вид();
               КонецЕсли;    //"Если ПустоеЗначение(ПечПарам10) = 1 Тогда
               ПечПарам10 = ПечПарам10 + " " + гл_ТЗ_Лог.Объект.НомерДок + " " + гл_ТЗ_Лог.Объект.ДатаДок + " " + гл_ТЗ_Лог.Объект.ПолучитьВремя() + ";";
               
           ИначеЕсли гл_ТЗ_Лог.ТипОбъекта = "Константа" Тогда
               
               ПечПарам5    = "Consts";
               ПечПарам6    = "ConstWrite";
               ПечПарам7    = "2";
               ПечПарам8    = СокрЛП(гл_ТЗ_Лог.Сотрудник) + " *** " + СокрЛП(гл_ТЗ_Лог.Реквизит) + " : " +
                               "Было:" + глПолучитьПредставлениеОбъектаДляЛога(гл_ТЗ_Лог.Было) + " *** " +
                               "Стало:" + глПолучитьПредставлениеОбъектаДляЛога(гл_ТЗ_Лог.Стало);
               ПечПарам9    = СокрЛП(гл_ТЗ_Лог.Реквизит);
               ПечПарам10    = "";
               
           Иначе
               
               ПечПарам5    = "";
               ПечПарам6    = "";
               ПечПарам7    = "";
               ПечПарам8    = "";
               ПечПарам9    = "";
               ПечПарам10    = ";";
               
           КонецЕсли;    //"Если гл_ТЗ_Лог.ТипОбъекта = "Справочник" Тогда
           
           ВремСтр        = ПечПарам1 + ";" + ПечПарам2 + ";" +  ПечПарам3 + ";" + ПечПарам4 + ";" + ПечПарам5 + ";" +
                       ПечПарам6 + ";" + ПечПарам7 + ";" + ПечПарам8 + ";" + ПечПарам9 + ";" + ПечПарам10;
           f.WriteLine(ВремСтр);
       КонецЦикла;    //@Пока гл_ТЗ_Лог.ПолучитьСтроку() > 0 Цикл
       
       f.Close();
       
       гл_ТЗ_Лог.УдалитьСтроки();
///--------------------------------------------------------------------------------        
//        ВремКон = _GetPerformanceCounter();
//        
//        Сообщить("--------------------------------------------------------------------------------");
//        Сообщить("Время записи в файл лога:" + СокрЛП(Формат((ВремКон - ВремНач) / 1000, "Ч15.3")));
//        Сообщить("Количество строк в файле лога:" + СокрЛП(КолСтр));
///--------------------------------------------------------------------------------        
   КонецЕсли;    //@Если гл_ТЗ_Лог.КоличествоСтрок() > 0 Тогда
   
КонецПроцедуры // глСохранитьЛогВФайл()
3 savaB
 
13.02.08
15:35
Вот это мне встречалось

Цель проэкта. Передо мной была поставлена задача :
за любой интервал дат получить успешные подгрузки в УРБД.
У нас подгрузки могут осуществляться как автоматически так
и в ручном режиме ( по срочной необходимости).
Проанализировав ситуацию оказалось, что информация об успешных подгрузках
храниться только в mlg файле. Средствами 1с анализировать mlg файл нереально -
поэтому был написан com server для обработки mlg файла. Две другие обработки
были написаны в дополнение к отчету по успешные подгрузки

Основная идея com servera : выбирать из всего mlg файла только те строки,
которые отвечают заданным  критериям, передавать эти строки 1с программе,
и там их отображать.

В поставку входит com server так и три работающих отчета.
Разработку можно использовать двояко :
1. использовать имеющиеся три отчета ( настроив в них параметры)
2. написать свои отчеты, решающие Ваши задачи.
4 romix
 
модератор
13.02.08
15:37
5 romix
 
модератор
13.02.08
15:42
(+4) На больших файлах не тормозит, т.к. читает построчно.
6 dzksoft
 
13.02.08
15:47
глПолучитьПредставлениеОбъектаДляЛога ???? а Здеся что ???
7 dk
 
13.02.08
15:51

//******************************************************************************
// глПолучитьИдентификаторОбъектаДляЛога(Объект)
//
// Параметры:
//  Объект
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция глПолучитьИдентификаторОбъектаДляЛога(Объект)
   Перем Результат, Стр_, Стр, Стр1, Стр2, Стр3;
   
   Результат = "";
   
   Стр_ = СтрЗаменить(ЗначениеВСтрокуВнутр(Объект), """", РазделительСтрок);
   
   Если СтрКоличествоСтрок(Стр_) = 15 Тогда
       Стр = СтрПолучитьСтроку(Стр_, 14);
       Стр1 = СтрПолучитьСтроку(Стр_, 8);
       Стр2 = СокрЛП(Лев(Стр, 10));
       Стр3 = СокрЛП(Прав(Стр, 3));
       
       Если ПустоеЗначение(Стр3) <> 1 Тогда
           Стр3 = "/(" + Стр3 + ")";
       Иначе
           Стр3 = "/";
       КонецЕсли;
       
       Если ТипЗначенияСтр(Объект) = "Справочник" Тогда
           Результат = "B/";
       ИначеЕсли ТипЗначенияСтр(Объект) = "Документ" Тогда
           Результат = "O/";
       КонецЕсли;
       
       Результат = Результат + Стр1 + Стр3 + Стр2;
       
   КонецЕсли;    //"Если СтрКоличествоСтрок(Стр_) = 15 Тогда
   
   Возврат Результат;
   
КонецФункции // глПолучитьИдентификаторОбъектаДляЛога()

---

//******************************************************************************
// глПолучитьПредставлениеОбъектаДляЛога(Объект)
//
// Параметры:
//  Объект
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция глПолучитьПредставлениеОбъектаДляЛога(Объект)
   Перем Результат, Стр1, Стр2;
   
   Результат = "";
   
   Стр1    = ЗначениеВСтроку(Объект);
   Стр2    = СтрЗаменить(Стр1, ";", ":");
   Результат    = СтрЗаменить(Стр2, """", "'");
   
   Возврат Результат;
   
КонецФункции // глПолучитьПредставлениеОбъектаДляЛога()
8 dzksoft
 
13.02.08
16:03
dk (2),(7), плиз не много расшифруй, я так понял этот файл ставится в конфиг который пишет отдельный лог... !!! так иль нет
9 dk
 
13.02.08
16:05
угу, это отдельный лог по интерактивным (пользователями) изменениям объектов (доки, справочники, константы) в базе. С описание как было и как стало.
10 dk
 
13.02.08
16:05
потом удобно открывать в 1с и делать фильмтрацию по объектам измененным
11 Mikeware
 
13.02.08
16:21
(4,5) все равно долго - пробовал.
выделяй сегодняшний кусок, и его уже разбирай. Обычно хватает 5 секунд
Процедура ОбновитьТЗОбмена()
   ТЗОбмена.УдалитьСтроки();
   Фильтр=Строка(Строка(ДатаГод(ТекущаяДата()))+Прав("00"+Строка(ДатаМесяц(ТекущаяДата())),2)+Прав("00"+Строка(ДатаЧисло(ТекущаяДата())),2));
   ДатаЛог=СокрЛП(Фильтр);
   ЧасЛог=Лев(ТекущееВремя(),3);
   ВремяНачалаПарсинга=ТекущееВремя();                            
   Форма.текстСостояниеОбмена.Цвет(255,0,0);
   Форма.текстСостояниеОбмена.Заголовок("Идет выполнение запроса");
   Если ПустоеЗначение(Фильтр)=1 Тогда
       Стр=Шаблон("[ДатаЛог];[ЧасЛог]");
   Иначе
       Стр=СокрЛП(Фильтр);
   КонецЕсли;                                                              
   ФайлЛог=СокрЛП(КаталогВременныхФайлов()+_GetPerformanceCounter()+".txt");
   ЗапуститьПриложение(Шаблон("cmd /c start /MIN cmd /c ""findstr /b /c:""""[Стр]"""" """"[КаталогИБ()]syslog\1cv7.mlg"""">""""[ФайлЛог]"""""));
   Форма.ОбработкаОжидания("ПроверкаФайлаЛога",15);
КонецПроцедуры
Закон Брукера: Даже маленькая практика стоит большой теории.