diff --git a/parsing-tech-log/.settings/ManagedEnvironments.prefs b/parsing-tech-log/.settings/ManagedEnvironments.prefs
new file mode 100644
index 0000000..7f3994c
--- /dev/null
+++ b/parsing-tech-log/.settings/ManagedEnvironments.prefs
@@ -0,0 +1,10 @@
+CLIENT=false
+EXTERNAL_CONN=false
+MNG_CLIENT=false
+MOBILE_CLIENT=false
+MOBILE_SERVER=false
+MOBILE_THIN_CLIENT=false
+SERVER=true
+THIN_CLIENT=true
+WEB_CLIENT=false
+eclipse.preferences.version=1
diff --git a/parsing-tech-log/.settings/RuntimePropertyLaunch.prefs b/parsing-tech-log/.settings/RuntimePropertyLaunch.prefs
new file mode 100644
index 0000000..41c3528
--- /dev/null
+++ b/parsing-tech-log/.settings/RuntimePropertyLaunch.prefs
@@ -0,0 +1,2 @@
+ClientServer=true
+eclipse.preferences.version=1
diff --git a/parsing-tech-log/src/CommonModules/ОбновлениеДанных/Module.bsl b/parsing-tech-log/src/CommonModules/ОбновлениеДанных/Module.bsl
index d4b9667..f5f061f 100644
--- a/parsing-tech-log/src/CommonModules/ОбновлениеДанных/Module.bsl
+++ b/parsing-tech-log/src/CommonModules/ОбновлениеДанных/Module.bsl
@@ -29,7 +29,8 @@
//пропуск пустых файлов
ФайлТЖ = Новый Файл(ИмяФайлаДляРазбора);
- Если ФайлТЖ.Размер()<=3 Тогда
+ РазмерФайла = ФайлТЖ.Размер();
+ Если РазмерФайла <=3 Тогда
Возврат 0;
КонецЕсли;
@@ -45,7 +46,14 @@
Если СтрокаТекста = Неопределено Тогда
//может быть прочитано строк не поменялось а полностью поменялось
- РегистрыСведений.ГраницыЧтенияДанных.УстановитьСостояние(Замер, Процесс, ПроцессID, Период, ПрочитаноСтрок, ДатаНачалаЧтения);
+ РегистрыСведений.ГраницыЧтенияДанных.УстановитьСостояние(
+ Замер,
+ Процесс,
+ ПроцессID,
+ Период,
+ ПрочитаноСтрок,
+ ДатаНачалаЧтения,
+ РазмерФайла);
Возврат 0;
КонецЕсли;
@@ -149,7 +157,14 @@
Текст.Закрыть();
// Обвновление инфорации о количестве прочитанных строк
- РегистрыСведений.ГраницыЧтенияДанных.УстановитьСостояние(Замер, Процесс, ПроцессID, Период, ПрочитаноСтрок, ДатаНачалаЧтения);
+ РегистрыСведений.ГраницыЧтенияДанных.УстановитьСостояние(
+ Замер,
+ Процесс,
+ ПроцессID,
+ Период,
+ ПрочитаноСтрок,
+ ДатаНачалаЧтения,
+ РазмерФайла);
Возврат РазобраноСтрок;
КонецФункции
@@ -173,6 +188,62 @@
Возврат СокрЛП(Результат);
КонецФункции
+Функция ПолучитьВременныеПараметрыПоСвойствамФайла(Знач ФайлТЖ) Экспорт
+
+ СвойстваФайла = новый Структура("Год,День,Месяц,Час,ДатаФайла");
+
+ СвойстваФайла.Год = Число(Лев(ФайлТЖ.Имя, 2));
+ СвойстваФайла.Месяц = Число(Сред(ФайлТЖ.Имя, 3, 2));
+ СвойстваФайла.День = Число(Сред(ФайлТЖ.Имя, 5, 2));
+ СвойстваФайла.Час = Число(Прав(ФайлТЖ.ИмяБезРасширения, 2));
+ СвойстваФайла.ДатаФайла = Дата(СвойстваФайла.Год + 2000, СвойстваФайла.Месяц, СвойстваФайла.День, СвойстваФайла.Час, 0, 0);
+
+ Возврат СвойстваФайла;
+
+КонецФункции // ПрочитатьЖурналПоРегистру
+
+#КонецОбласти
+
+#Область ЧтениеИзОбработки
+
+Процедура ЗагрузкаЖурнала(Замер=Неопределено,КаталогТЖ="",КлючФоновогоЗадания="") Экспорт
+ //TODO: объединить с ЗагрузкаЖурналаПредварительноОчистить
+ Если Замер=Неопределено Тогда
+ ЗамерОбъект = Справочники.Замеры.СоздатьЭлемент();
+ ЗамерОбъект.Наименование = "Новый Замер";
+ ЗамерОбъект.ПолныйПуть = КаталогТЖ;
+ ЗамерОбъект.Записать();
+ Замер = ЗамерОбъект.Ссылка;
+ КонецЕсли;
+
+ ПрочитатьЖурнал(Замер,КаталогТЖ,КлючФоновогоЗадания);
+КонецПроцедуры
+
+Процедура ЗагрузкаЖурналаПредварительноОчистить(Замер=Неопределено,КаталогТЖ="", ЗагрузитьФоново=Ложь) Экспорт
+
+ Если Замер=Неопределено Тогда
+ ЗамерОбъект = Справочники.Замеры.СоздатьЭлемент();
+ ЗамерОбъект.Наименование = "Новый Замер";
+ ЗамерОбъект.ПолныйПуть = КаталогТЖ;
+ ЗамерОбъект.Записать();
+ Замер = ЗамерОбъект.Ссылка;
+ Иначе
+ ОчиститьЖурналы(Замер);
+ КонецЕсли;
+
+ //TODO: переренести проверку состояния загрузки из ПрочитатьЖурнал
+ Если ЗагрузитьФоново Тогда
+ Если Константы.МаксимальноеКолВоПотоковДляОднойЗагрузки.Получить()>1 Тогда
+ ОбновлениеДанных.ЗагрузкаТЖПотоками(Замер,КаталогТЖ);
+ Иначе
+ ОбновлениеДанных.ПрочитатьЖурнал(Замер,КаталогТЖ);
+ КонецЕсли;
+ Иначе
+ ПрочитатьЖурнал(Замер,КаталогТЖ);
+ КонецЕсли;
+
+КонецПроцедуры
+
Процедура ПрочитатьЖурнал(Замер=Неопределено,КаталогТЖ="",КлючФоновогоЗадания="") Экспорт
ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеНачато",УровеньЖурналаРегистрации.Предупреждение,,,КлючФоновогоЗадания);
@@ -283,188 +354,6 @@
ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеЗавершено",УровеньЖурналаРегистрации.Предупреждение,,,КлючФоновогоЗадания);
КонецПроцедуры // ПрочитатьЖурнал
-Процедура ПрочитатьЖурналПоРегистру(Замер=Неопределено,КлючФоновогоЗадания="") Экспорт
-
- ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеНачато",УровеньЖурналаРегистрации.Предупреждение,,,КлючФоновогоЗадания);
-
- Если НЕ ЗначениеЗаполнено(КлючФоновогоЗадания) Тогда
- ВызватьИсключение "Ключ фонового задания быть заполнен!";
- КонецЕсли;
-
- ФайлыТЖ = ПолучитьНеОбработаннеФайлыПоРегистру(Замер,КлючФоновогоЗадания);
-
- Индекс = 0;
-// МоментНачалаЧтения = ТекущаяУниверсальнаяДатаВМиллисекундах();
- НужноКопировать = ?(ЗначениеЗаполнено(Замер),НЕ Замер.НеРабочийКаталог,Истина);
-
- Попытка
- ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеНачато");
-
- // временный файл нужен для копирования в него файлов логов, т.к. те которые в текущий момент пишуться не могут быть помещены во временное хранилище (1с ругается на невозможность получить доступ)
- ИмяВрФайла = ПолучитьИмяВременногоФайла("log");
-
- Индекс = Индекс + 1;
-
- Для Каждого ФайлТЖ Из ФайлыТЖ Цикл
-
- ИмяПапки = ФайлТЖ.ИмяПапки;
-
- МассивПапок = новый Массив;
-
- Если Найти(ИмяПапки,"\") Тогда
- МассивПапок = СтрРазделить(ИмяПапки,"\",Ложь);
- Иначе
- МассивПапок = СтрРазделить(ИмяПапки,"/",Ложь);
- КонецЕсли;
-
- ИмяПапки = МассивПапок[МассивПапок.ВГраница()];
-
- ИмяПапки = СтрЗаменить(ИмяПапки, "_", Символы.ПС);
- Процесс = СтрПолучитьСтроку(ИмяПапки, 1);
- ПроцессID = СтрПолучитьСтроку(ИмяПапки, 2);
-// КоличествоФайловТЖ = ФайлыТЖ.Количество();
- ИндексФайла = 0;
-
- СвойстваФайла = ПолучитьВременныеПараметрыПоСвойствамФайла(ФайлТЖ);
-
- ДатаФайла = СвойстваФайла.ДатаФайла;
-// Год = СвойстваФайла.Год;
-// День = СвойстваФайла.День;
-// Месяц = СвойстваФайла.Месяц;
-// Час = СвойстваФайла.Час;
- ДатаНачалаОбработки = ТекущаяДата();
-
- УстановитьСвойствоУправленияФоновымиЗаданиями(Замер,ФайлТЖ.ПолноеИмя,КлючФоновогоЗадания,"ДатаНачала",ДатаНачалаОбработки);
-
-
- ИндексФайла = ИндексФайла + 1;
-
- СостояниеЧтения = РегистрыСведений.ГраницыЧтенияДанных.ПолучитьСостояние(Замер, Процесс, ПроцессID, ДатаФайла);
- Если СостояниеЧтения.ПрочитанПолностью Тогда
- Продолжить;
- КонецЕсли;
-
- //Определение не получались ли уже по этому процессу данные за более поздний час
-// Если Не ПроверитьНаличиеДанныхПоПроцессуЗаПериод(Замер,Процесс, ПроцессID, Дата(Год + 2000, Месяц, День, 0, 0, 0), Час) Тогда
-
- //... Если данные за более поздний час не получались - чтение файла, разбор и помещение в регистр
-// АдресФайла = "";
- Если НужноКопировать=Истина Тогда
- КопироватьФайл(ФайлТЖ.ПолноеИмя, ИмяВрФайла);
- Иначе
- ИмяВрФайла = ФайлТЖ.ПолноеИмя;
- КонецЕсли;
- РазобраноСтрок = РазобратьФайл(Процесс, ПроцессID, ДатаФайла, ИмяВрФайла, Замер);
- УстановитьСвойствоУправленияФоновымиЗаданиями(Замер,ФайлТЖ.ПолноеИмя,КлючФоновогоЗадания,"Разобрано",РазобраноСтрок);
- ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.РазобранФайл",УровеньЖурналаРегистрации.Предупреждение,,,КлючФоновогоЗадания+" строк:"+РазобраноСтрок);
- Если НужноКопировать=Истина Тогда
- УдалитьФайлы(ИмяВрФайла);
- КонецЕсли;
-
-// КонецЕсли;
-
- УстановитьСвойствоУправленияФоновымиЗаданиями(Замер,ФайлТЖ.ПолноеИмя,КлючФоновогоЗадания,"Обработан",Истина);
- УстановитьСвойствоУправленияФоновымиЗаданиями(Замер,ФайлТЖ.ПолноеИмя,КлючФоновогоЗадания,"Длительность",ТекущаяДата()-ДатаНачалаОбработки);
-
- КонецЦикла;
-
- Исключение
- ТекстОшибки = ОписаниеОшибки();
- ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеПрервано",УровеньЖурналаРегистрации.Ошибка,Неопределено,Замер,ТекстОшибки,);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
-
- ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеЗавершено",УровеньЖурналаРегистрации.Предупреждение,,,КлючФоновогоЗадания);
-
-КонецПроцедуры
-
-Функция ПолучитьВременныеПараметрыПоСвойствамФайла(Знач ФайлТЖ) Экспорт
-
- СвойстваФайла = новый Структура("Год,День,Месяц,Час,ДатаФайла");
-
- СвойстваФайла.Год = Число(Лев(ФайлТЖ.Имя, 2));
- СвойстваФайла.Месяц = Число(Сред(ФайлТЖ.Имя, 3, 2));
- СвойстваФайла.День = Число(Сред(ФайлТЖ.Имя, 5, 2));
- СвойстваФайла.Час = Число(Прав(ФайлТЖ.ИмяБезРасширения, 2));
- СвойстваФайла.ДатаФайла = Дата(СвойстваФайла.Год + 2000, СвойстваФайла.Месяц, СвойстваФайла.День, СвойстваФайла.Час, 0, 0);
-
- Возврат СвойстваФайла;
-
-КонецФункции // ПрочитатьЖурналПоРегистру
-
-Функция ПолучитьНеОбработаннеФайлыПоРегистру(Замер,КлючФоновогоЗадания)
-
- Запрос = новый Запрос;
- Запрос.Текст = "ВЫБРАТЬ
- | Т.Замер КАК Замер,
- | Т.ПутьКФайлу КАК ПутьКФайлу,
- | Т.Обработан КАК Обработан,
- | Т.КлючФоновогоЗадания КАК КлючФоновогоЗадания,
- | Т.ДатаФайла КАК ДатаФайла,
- | Т.Длительность КАК Длительность,
- | Т.ДатаНачала КАК ДатаНачала,
- | Т.РазмерФайла КАК РазмерФайла,
- | Т.Имя КАК Имя,
- | Т.ИмяБезРасширения КАК ИмяБезРасширения,
- | Т.ПолноеИмя КАК ПолноеИмя,
- | Т.КоличествоФайловВсего КАК КоличествоФайловВсего,
- | Т.ИмяПапки КАК ИмяПапки,
- | ВЫРАЗИТЬ(Т.ИмяПапки КАК СТРОКА(250)) КАК ИмяПапкиДляУпорядочивания
- |ИЗ
- | РегистрСведений.УправлениеФоновымиЗаданиямиЗагрузки КАК Т
- |ГДЕ
- | Т.Замер = &Замер
- | И Т.КлючФоновогоЗадания = &КлючФоновогоЗадания
- | И Т.Обработан = ЛОЖЬ
- |
- |УПОРЯДОЧИТЬ ПО
- | ИмяПапкиДляУпорядочивания,
- | ДатаФайла";
- Запрос.УстановитьПараметр("Замер",Замер);
- Запрос.УстановитьПараметр("КлючФоновогоЗадания",КлючФоновогоЗадания);
-
- Возврат Запрос.Выполнить().Выгрузить();
-
-КонецФункции
-
-Процедура ЗагрузкаЖурнала(Замер=Неопределено,КаталогТЖ="",КлючФоновогоЗадания="") Экспорт
- //TODO: объединить с ЗагрузкаЖурналаПредварительноОчистить
- Если Замер=Неопределено Тогда
- ЗамерОбъект = Справочники.Замеры.СоздатьЭлемент();
- ЗамерОбъект.Наименование = "Новый Замер";
- ЗамерОбъект.ПолныйПуть = КаталогТЖ;
- ЗамерОбъект.Записать();
- Замер = ЗамерОбъект.Ссылка;
- КонецЕсли;
-
- ПрочитатьЖурнал(Замер,КаталогТЖ,КлючФоновогоЗадания);
-КонецПроцедуры
-
-Процедура ЗагрузкаЖурналаПредварительноОчистить(Замер=Неопределено,КаталогТЖ="", ЗагрузитьФоново=Ложь) Экспорт
-
- Если Замер=Неопределено Тогда
- ЗамерОбъект = Справочники.Замеры.СоздатьЭлемент();
- ЗамерОбъект.Наименование = "Новый Замер";
- ЗамерОбъект.ПолныйПуть = КаталогТЖ;
- ЗамерОбъект.Записать();
- Замер = ЗамерОбъект.Ссылка;
- Иначе
- ОчиститьЖурналы(Замер);
- КонецЕсли;
-
- //TODO: переренести проверку состояния загрузки из ПрочитатьЖурнал
- Если ЗагрузитьФоново Тогда
- Если Константы.МаксимальноеКолВоПотоковДляОднойЗагрузки.Получить()>1 Тогда
- ОбновлениеДанных.ЗагрузкаТЖПотоками(Замер,КаталогТЖ);
- Иначе
- ОбновлениеДанных.ПрочитатьЖурнал(Замер,КаталогТЖ);
- КонецЕсли;
- Иначе
- ПрочитатьЖурнал(Замер,КаталогТЖ);
- КонецЕсли;
-
-КонецПроцедуры
-
#КонецОбласти
#Область ЧтениеЖурналаПотоками
@@ -670,6 +559,136 @@
КонецПроцедуры
+Функция ПолучитьНеОбработаннеФайлыПоРегистру(Замер,КлючФоновогоЗадания)
+
+ Запрос = новый Запрос;
+ Запрос.Текст = "ВЫБРАТЬ
+ | Т.Замер КАК Замер,
+ | Т.ПутьКФайлу КАК ПутьКФайлу,
+ | Т.Обработан КАК Обработан,
+ | Т.КлючФоновогоЗадания КАК КлючФоновогоЗадания,
+ | Т.ДатаФайла КАК ДатаФайла,
+ | Т.Длительность КАК Длительность,
+ | Т.ДатаНачала КАК ДатаНачала,
+ | Т.РазмерФайла КАК РазмерФайла,
+ | Т.Имя КАК Имя,
+ | Т.ИмяБезРасширения КАК ИмяБезРасширения,
+ | Т.ПолноеИмя КАК ПолноеИмя,
+ | Т.КоличествоФайловВсего КАК КоличествоФайловВсего,
+ | Т.ИмяПапки КАК ИмяПапки,
+ | ВЫРАЗИТЬ(Т.ИмяПапки КАК СТРОКА(250)) КАК ИмяПапкиДляУпорядочивания
+ |ИЗ
+ | РегистрСведений.УправлениеФоновымиЗаданиямиЗагрузки КАК Т
+ |ГДЕ
+ | Т.Замер = &Замер
+ | И Т.КлючФоновогоЗадания = &КлючФоновогоЗадания
+ | И Т.Обработан = ЛОЖЬ
+ |
+ |УПОРЯДОЧИТЬ ПО
+ | ИмяПапкиДляУпорядочивания,
+ | ДатаФайла";
+ Запрос.УстановитьПараметр("Замер",Замер);
+ Запрос.УстановитьПараметр("КлючФоновогоЗадания",КлючФоновогоЗадания);
+
+ Возврат Запрос.Выполнить().Выгрузить();
+
+КонецФункции
+
+Процедура ПрочитатьЖурналПоРегистру(Замер=Неопределено,КлючФоновогоЗадания="") Экспорт
+
+ ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеНачато",УровеньЖурналаРегистрации.Предупреждение,,,КлючФоновогоЗадания);
+
+ Если НЕ ЗначениеЗаполнено(КлючФоновогоЗадания) Тогда
+ ВызватьИсключение "Ключ фонового задания быть заполнен!";
+ КонецЕсли;
+
+ ФайлыТЖ = ПолучитьНеОбработаннеФайлыПоРегистру(Замер,КлючФоновогоЗадания);
+
+ Индекс = 0;
+// МоментНачалаЧтения = ТекущаяУниверсальнаяДатаВМиллисекундах();
+ НужноКопировать = ?(ЗначениеЗаполнено(Замер),НЕ Замер.НеРабочийКаталог,Истина);
+
+ Попытка
+ ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеНачато");
+
+ // временный файл нужен для копирования в него файлов логов, т.к. те которые в текущий момент пишуться не могут быть помещены во временное хранилище (1с ругается на невозможность получить доступ)
+ ИмяВрФайла = ПолучитьИмяВременногоФайла("log");
+
+ Индекс = Индекс + 1;
+
+ Для Каждого ФайлТЖ Из ФайлыТЖ Цикл
+
+ ИмяПапки = ФайлТЖ.ИмяПапки;
+
+ МассивПапок = новый Массив;
+
+ Если Найти(ИмяПапки,"\") Тогда
+ МассивПапок = СтрРазделить(ИмяПапки,"\",Ложь);
+ Иначе
+ МассивПапок = СтрРазделить(ИмяПапки,"/",Ложь);
+ КонецЕсли;
+
+ ИмяПапки = МассивПапок[МассивПапок.ВГраница()];
+
+ ИмяПапки = СтрЗаменить(ИмяПапки, "_", Символы.ПС);
+ Процесс = СтрПолучитьСтроку(ИмяПапки, 1);
+ ПроцессID = СтрПолучитьСтроку(ИмяПапки, 2);
+// КоличествоФайловТЖ = ФайлыТЖ.Количество();
+ ИндексФайла = 0;
+
+ СвойстваФайла = ПолучитьВременныеПараметрыПоСвойствамФайла(ФайлТЖ);
+
+ ДатаФайла = СвойстваФайла.ДатаФайла;
+// Год = СвойстваФайла.Год;
+// День = СвойстваФайла.День;
+// Месяц = СвойстваФайла.Месяц;
+// Час = СвойстваФайла.Час;
+ ДатаНачалаОбработки = ТекущаяДата();
+
+ УстановитьСвойствоУправленияФоновымиЗаданиями(Замер,ФайлТЖ.ПолноеИмя,КлючФоновогоЗадания,"ДатаНачала",ДатаНачалаОбработки);
+
+
+ ИндексФайла = ИндексФайла + 1;
+
+ СостояниеЧтения = РегистрыСведений.ГраницыЧтенияДанных.ПолучитьСостояние(Замер, Процесс, ПроцессID, ДатаФайла);
+ Если СостояниеЧтения.ПрочитанПолностью Тогда
+ Продолжить;
+ КонецЕсли;
+
+ //Определение не получались ли уже по этому процессу данные за более поздний час
+// Если Не ПроверитьНаличиеДанныхПоПроцессуЗаПериод(Замер,Процесс, ПроцессID, Дата(Год + 2000, Месяц, День, 0, 0, 0), Час) Тогда
+
+ //... Если данные за более поздний час не получались - чтение файла, разбор и помещение в регистр
+// АдресФайла = "";
+ Если НужноКопировать=Истина Тогда
+ КопироватьФайл(ФайлТЖ.ПолноеИмя, ИмяВрФайла);
+ Иначе
+ ИмяВрФайла = ФайлТЖ.ПолноеИмя;
+ КонецЕсли;
+ РазобраноСтрок = РазобратьФайл(Процесс, ПроцессID, ДатаФайла, ИмяВрФайла, Замер);
+ УстановитьСвойствоУправленияФоновымиЗаданиями(Замер,ФайлТЖ.ПолноеИмя,КлючФоновогоЗадания,"Разобрано",РазобраноСтрок);
+ ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.РазобранФайл",УровеньЖурналаРегистрации.Предупреждение,,,КлючФоновогоЗадания+" строк:"+РазобраноСтрок);
+ Если НужноКопировать=Истина Тогда
+ УдалитьФайлы(ИмяВрФайла);
+ КонецЕсли;
+
+// КонецЕсли;
+
+ УстановитьСвойствоУправленияФоновымиЗаданиями(Замер,ФайлТЖ.ПолноеИмя,КлючФоновогоЗадания,"Обработан",Истина);
+ УстановитьСвойствоУправленияФоновымиЗаданиями(Замер,ФайлТЖ.ПолноеИмя,КлючФоновогоЗадания,"Длительность",ТекущаяДата()-ДатаНачалаОбработки);
+
+ КонецЦикла;
+
+ Исключение
+ ТекстОшибки = ОписаниеОшибки();
+ ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеПрервано",УровеньЖурналаРегистрации.Ошибка,Неопределено,Замер,ТекстОшибки,);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ ЗаписьЖурналаРегистрации("ЧтениеЖурналаРегистрации.ЧтениеЗавершено",УровеньЖурналаРегистрации.Предупреждение,,,КлючФоновогоЗадания);
+
+КонецПроцедуры
+
#КонецОбласти
#Область Служебные
diff --git a/parsing-tech-log/src/CommonModules/ОбновлениеДанныхРегламентное/Module.bsl b/parsing-tech-log/src/CommonModules/ОбновлениеДанныхРегламентное/Module.bsl
index 3625038..333b6f5 100644
--- a/parsing-tech-log/src/CommonModules/ОбновлениеДанныхРегламентное/Module.bsl
+++ b/parsing-tech-log/src/CommonModules/ОбновлениеДанныхРегламентное/Module.bsl
@@ -27,14 +27,15 @@
СписокФайлов = НайтиФайлы(РеквизитыЗадания.ПолныйПуть, "*.log", Истина);
Для Каждого Файл из СписокФайлов Цикл
+ //пропускать каталоги
Если Файл.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
-
+ //пропускать пустые файлы
Если Файл.Размер()<=3 Тогда
Продолжить;
КонецЕсли;
-
+ //пропускать если не в периоде загрузки
ПериодФайла = ПолучитьПериодПоИмениФайла(Файл.ИмяБезРасширения);
Если ИспользуетсяОграничениеПериода Тогда
Если ЗначениеЗаполнено(РеквизитыЗадания.НачалоПериода) И ПериодФайла < НачалоЧаса(РеквизитыЗадания.НачалоПериода)
@@ -42,12 +43,11 @@
Продолжить;
КонецЕсли;
КонецЕсли;
-
+ //пропускать файл текущего периода если не загрузка в реальном времени
Если НЕ РеквизитыЗадания.ЗагрузкаВРеальномВремени
И Файл.ИмяБезРасширения = ИмяТекущегоФайла Тогда
Продолжить;
- КонецЕсли;
-
+ КонецЕсли;
//получение параметров процесса по каталогу
//c:\v8\log\rphost_1234\
// ^^^^^^^^^^^
@@ -55,9 +55,14 @@
ИмяИД = СтрРазделить(КаталогПроцесса, "_");
СостояниеЧтения = РегистрыСведений.ГраницыЧтенияДанных.ПолучитьСостояние(РеквизитыЗадания.Замер, ИмяИД[0], ИмяИД[1], ПериодФайла);
+ //пропускать прочитанные
Если СостояниеЧтения.ПрочитанПолностью Тогда
Продолжить;
КонецЕсли;
+ //пропускать если размер с прошного сеанса не изменился
+ Если Файл.Размер() = СостояниеЧтения.РазмерФайла Тогда
+ Продолжить;
+ КонецЕсли;
строкарезультата = Результат.Добавить();
строкарезультата.ПолноеИмя = Файл.ПолноеИмя;
diff --git a/parsing-tech-log/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/parsing-tech-log/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl
index 9a24462..d85d39a 100644
--- a/parsing-tech-log/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl
+++ b/parsing-tech-log/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl
@@ -585,30 +585,30 @@
//
// Примечание:
// Функцию нельзя использовать для объектных типов (СправочникОбъект, ДокументОбъект и т.п.).
-Функция СкопироватьРекурсивно(Источник) Экспорт
-
- Перем Приемник;
-
- ТипИсточника = ТипЗнч(Источник);
- Если ТипИсточника = Тип("Структура") Тогда
- Приемник = СкопироватьСтруктуру(Источник);
- ИначеЕсли ТипИсточника = Тип("Соответствие") Тогда
- Приемник = СкопироватьСоответствие(Источник);
- ИначеЕсли ТипИсточника = Тип("Массив") Тогда
- Приемник = СкопироватьМассив(Источник);
- ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда
- Приемник = СкопироватьСписокЗначений(Источник);
-#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
- ИначеЕсли ТипИсточника = Тип("ТаблицаЗначений") Тогда
- Приемник = Источник.Скопировать();
-#КонецЕсли
- Иначе
- Приемник = Источник;
- КонецЕсли;
-
- Возврат Приемник;
-
-КонецФункции
+//Функция СкопироватьРекурсивно(Источник) Экспорт
+//
+// Перем Приемник;
+//
+// ТипИсточника = ТипЗнч(Источник);
+// Если ТипИсточника = Тип("Структура") Тогда
+// Приемник = СкопироватьСтруктуру(Источник);
+// ИначеЕсли ТипИсточника = Тип("Соответствие") Тогда
+// Приемник = СкопироватьСоответствие(Источник);
+// ИначеЕсли ТипИсточника = Тип("Массив") Тогда
+// Приемник = СкопироватьМассив(Источник);
+// ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда
+// Приемник = СкопироватьСписокЗначений(Источник);
+//#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+// ИначеЕсли ТипИсточника = Тип("ТаблицаЗначений") Тогда
+// Приемник = Источник.Скопировать();
+//#КонецЕсли
+// Иначе
+// Приемник = Источник;
+// КонецЕсли;
+//
+// Возврат Приемник;
+//
+//КонецФункции
// Создает копию значения типа Структура.
//
@@ -618,17 +618,17 @@
// Возвращаемое значение:
// Структура - копия исходной структуры.
//
-Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт
-
- СтруктураРезультат = Новый Структура;
-
- Для Каждого КлючИЗначение Из СтруктураИсточник Цикл
- СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение));
- КонецЦикла;
-
- Возврат СтруктураРезультат;
-
-КонецФункции
+//Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт
+//
+// СтруктураРезультат = Новый Структура;
+//
+// Для Каждого КлючИЗначение Из СтруктураИсточник Цикл
+// СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение));
+// КонецЦикла;
+//
+// Возврат СтруктураРезультат;
+//
+//КонецФункции
// Создает копию значения типа Соответствие.
//
@@ -638,61 +638,61 @@
// Возвращаемое значение:
// Соответствие - копия исходного соответствия.
//
-Функция СкопироватьСоответствие(СоответствиеИсточник) Экспорт
-
- СоответствиеРезультат = Новый Соответствие;
-
- Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл
- СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение));
- КонецЦикла;
-
- Возврат СоответствиеРезультат;
-
-КонецФункции
-
-// Создает копию значения типа Массив.
+//Функция СкопироватьСоответствие(СоответствиеИсточник) Экспорт
+//
+// СоответствиеРезультат = Новый Соответствие;
+//
+// Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл
+// СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение));
+// КонецЦикла;
+//
+// Возврат СоответствиеРезультат;
//
-// Параметры:
-// МассивИсточник - Массив - массив, копию которого необходимо получить.
-//
-// Возвращаемое значение:
-// Массив - копия исходного массива.
+//КонецФункции
//
-Функция СкопироватьМассив(МассивИсточник) Экспорт
-
- МассивРезультат = Новый Массив;
-
- Для Каждого Элемент Из МассивИсточник Цикл
- МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент));
- КонецЦикла;
-
- Возврат МассивРезультат;
-
-КонецФункции
-
-// Создает копию значения типа СписокЗначений.
+//// Создает копию значения типа Массив.
+////
+//// Параметры:
+//// МассивИсточник - Массив - массив, копию которого необходимо получить.
+////
+//// Возвращаемое значение:
+//// Массив - копия исходного массива.
+////
+//Функция СкопироватьМассив(МассивИсточник) Экспорт
+//
+// МассивРезультат = Новый Массив;
+//
+// Для Каждого Элемент Из МассивИсточник Цикл
+// МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент));
+// КонецЦикла;
+//
+// Возврат МассивРезультат;
+//
+//КонецФункции
//
-// Параметры:
-// СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить.
-//
-// Возвращаемое значение:
-// СписокЗначений - копия исходного списка значений.
-//
-Функция СкопироватьСписокЗначений(СписокИсточник) Экспорт
-
- СписокРезультат = Новый СписокЗначений;
-
- Для Каждого ЭлементСписка Из СписокИсточник Цикл
- СписокРезультат.Добавить(
- СкопироватьРекурсивно(ЭлементСписка.Значение),
- ЭлементСписка.Представление,
- ЭлементСписка.Пометка,
- ЭлементСписка.Картинка);
- КонецЦикла;
-
- Возврат СписокРезультат;
-
-КонецФункции
+//// Создает копию значения типа СписокЗначений.
+////
+//// Параметры:
+//// СписокИсточник - СписокЗначений - список значений, копию которого необходимо получить.
+////
+//// Возвращаемое значение:
+//// СписокЗначений - копия исходного списка значений.
+////
+//Функция СкопироватьСписокЗначений(СписокИсточник) Экспорт
+//
+// СписокРезультат = Новый СписокЗначений;
+//
+// Для Каждого ЭлементСписка Из СписокИсточник Цикл
+// СписокРезультат.Добавить(
+// СкопироватьРекурсивно(ЭлементСписка.Значение),
+// ЭлементСписка.Представление,
+// ЭлементСписка.Пометка,
+// ЭлементСписка.Картинка);
+// КонецЦикла;
+//
+// Возврат СписокРезультат;
+//
+//КонецФункции
// Сравнивает элементы списков значений или массивов по значениям.
Функция СпискиЗначенийИдентичны(Список1, Список2) Экспорт
@@ -1441,30 +1441,30 @@
// - ТипПлатформы - разделитель пути файловой системы для
// указанного типа платформы.
//
-Функция РазделительПути(Платформа = Неопределено) Экспорт
-
- Если Платформа = Неопределено Тогда
-
- #Если ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
- СистемнаяИнфо = Новый СистемнаяИнформация;
- Платформа = СистемнаяИнфо.ТипПлатформы;
- #ИначеЕсли Клиент Тогда
- Платформа = ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента();
- #Иначе
- Платформа = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера();
- #КонецЕсли
-
- КонецЕсли;
-
- Если Платформа = ТипПлатформы.Windows_x86
- ИЛИ Платформа = ТипПлатформы.Windows_x86_64 Тогда
-
- Возврат "\";
- Иначе
- Возврат "/";
- КонецЕсли;
-
-КонецФункции
+//Функция РазделительПути(Платформа = Неопределено) Экспорт
+//
+// Если Платформа = Неопределено Тогда
+//
+// #Если ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+// СистемнаяИнфо = Новый СистемнаяИнформация;
+// Платформа = СистемнаяИнфо.ТипПлатформы;
+// #ИначеЕсли Клиент Тогда
+// Платформа = ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента();
+// #Иначе
+// Платформа = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера();
+// #КонецЕсли
+//
+// КонецЕсли;
+//
+// Если Платформа = ТипПлатформы.Windows_x86
+// ИЛИ Платформа = ТипПлатформы.Windows_x86_64 Тогда
+//
+// Возврат "\";
+// Иначе
+// Возврат "/";
+// КонецЕсли;
+//
+//КонецФункции
// Возвращает имя файла с расширением.
// Если расширение пустое, тогда точка не добавляется.
@@ -2357,19 +2357,19 @@
// ЛюбаяСсылка - Ссылка предопределенного элемента.
// Неопределено - Если элемент не найден.
//
-Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт
- Если ВРег(Прав(ПолноеИмяПредопределенного, 13)) = ".ПУСТАЯССЫЛКА" Тогда
- // Для получения пустых ссылок используется стандартная функция платформы.
- Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного);
- КонецЕсли;
-
-#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ ТолстыйКлиентУправляемоеПриложение Тогда
- Возврат СтандартныеПодсистемыПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного);
-#Иначе
- Возврат СтандартныеПодсистемыКлиентПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного);
-#КонецЕсли
-
-КонецФункции
+//Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт
+// Если ВРег(Прав(ПолноеИмяПредопределенного, 13)) = ".ПУСТАЯССЫЛКА" Тогда
+// // Для получения пустых ссылок используется стандартная функция платформы.
+// Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного);
+// КонецЕсли;
+//
+//#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ ТолстыйКлиентУправляемоеПриложение Тогда
+// Возврат СтандартныеПодсистемыПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного);
+//#Иначе
+// Возврат СтандартныеПодсистемыКлиентПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного);
+//#КонецЕсли
+//
+//КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Прочие функции
@@ -2520,13 +2520,13 @@
КонецФункции
// Возвращает код основного языка конфигурации, например "ru".
-Функция КодОсновногоЯзыка() Экспорт
- #Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
- Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
- #Иначе
- Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().КодОсновногоЯзыка;
- #КонецЕсли
-КонецФункции
+//Функция КодОсновногоЯзыка() Экспорт
+// #Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
+// Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
+// #Иначе
+// Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().КодОсновногоЯзыка;
+// #КонецЕсли
+//КонецФункции
// Возвращает Истина, если клиентское приложение подключено к базе через веб-сервер.
// Если нет клиентского приложения, возвращается Ложь.
@@ -2797,11 +2797,11 @@
// Устаревшие процедуры и функции.
// Устарела. Следует использовать РазделительПути.
-Функция ПолучитьСлеш(Платформа = Неопределено) Экспорт
-
- Возврат РазделительПути(Платформа);
-
-КонецФункции
+//Функция ПолучитьСлеш(Платформа = Неопределено) Экспорт
+//
+// Возврат РазделительПути(Платформа);
+//
+//КонецФункции
// Устарела. Следует удалить все использования этой функции и ветки кода при значении Ложь.
//
diff --git a/parsing-tech-log/src/Configuration/ManagedApplicationModule.bsl b/parsing-tech-log/src/Configuration/ManagedApplicationModule.bsl
index 621095e..e69de29 100644
--- a/parsing-tech-log/src/Configuration/ManagedApplicationModule.bsl
+++ b/parsing-tech-log/src/Configuration/ManagedApplicationModule.bsl
@@ -1,4 +0,0 @@
-&НаКлиенте
-Процедура ОбновитьСтатус() Экспорт
- СтруктураСостояния = ПолучитьИзВременногоХранилища("asdf");
-КонецПроцедуры // ОбновитьСтатус
\ No newline at end of file
diff --git a/parsing-tech-log/src/InformationRegisters/ГраницыЧтенияДанных/ManagerModule.bsl b/parsing-tech-log/src/InformationRegisters/ГраницыЧтенияДанных/ManagerModule.bsl
index 5f26447..c6a6ff4 100644
--- a/parsing-tech-log/src/InformationRegisters/ГраницыЧтенияДанных/ManagerModule.bsl
+++ b/parsing-tech-log/src/InformationRegisters/ГраницыЧтенияДанных/ManagerModule.bsl
@@ -1,13 +1,14 @@
#Если Сервер ИЛИ ВнешнееСоединение Тогда
Функция ПолучитьСостояние(Замер, Процесс, ПроцессИД, ПериодФайла) Экспорт
- Результат = Новый Структура("ПрочитаноСтрок,ПрочитанПолностью", 0, Ложь);
+ Результат = Новый Структура("ПрочитаноСтрок,ПрочитанПолностью,РазмерФайла", 0, Ложь, 0);
ПроцессСсылка = СправочникиСерверПовтИсп.ПолучитьПроцесс(Процесс);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ГраницыЧтенияДанных.ПрочитаноСтрок,
- | ГраницыЧтенияДанных.ПрочитанПолностью
+ | ГраницыЧтенияДанных.ПрочитанПолностью,
+ | ГраницыЧтенияДанных.РазмерФайла
|ИЗ
| РегистрСведений.ГраницыЧтенияДанных КАК ГраницыЧтенияДанных
|ГДЕ
@@ -27,7 +28,7 @@
Возврат Результат;
КонецФункции
-Процедура УстановитьСостояние(Замер, Процесс, ПроцессID, Период, ПрочитаноСтрок, ДатаНачалаЧтения) Экспорт
+Процедура УстановитьСостояние(Замер, Процесс, ПроцессID, Период, ПрочитаноСтрок, ДатаНачалаЧтения, ПрочитаноРазмер) Экспорт
//если дата начала чтения больше чем конец часа (запас в 5 минут)
//считаем что файл больше дополняться не будет
@@ -46,6 +47,7 @@
МенеджерЗаписи.ДатаФайла = Период;
МенеджерЗаписи.ПрочитаноСтрок = ПрочитаноСтрок;
МенеджерЗаписи.ПрочитанПолностью = ПрочитанПолностью;
+ МенеджерЗаписи.РазмерФайла = ПрочитаноРазмер;
МенеджерЗаписи.Записать();
КонецПроцедуры
diff --git a/parsing-tech-log/src/InformationRegisters/ГраницыЧтенияДанных/ГраницыЧтенияДанных.mdo b/parsing-tech-log/src/InformationRegisters/ГраницыЧтенияДанных/ГраницыЧтенияДанных.mdo
index 8b23ff5..e43ea5c 100644
--- a/parsing-tech-log/src/InformationRegisters/ГраницыЧтенияДанных/ГраницыЧтенияДанных.mdo
+++ b/parsing-tech-log/src/InformationRegisters/ГраницыЧтенияДанных/ГраницыЧтенияДанных.mdo
@@ -50,6 +50,21 @@
Use
Use
+
+ РазмерФайла
+
+ ru
+ Размер файла
+
+
+ Number
+
+ 15
+
+
+ Use
+ Use
+
Замер
diff --git a/parsing-tech-log/src/InformationRegisters/УправлениеФоновымиЗаданиямиЗагрузки/УправлениеФоновымиЗаданиямиЗагрузки.mdo b/parsing-tech-log/src/InformationRegisters/УправлениеФоновымиЗаданиямиЗагрузки/УправлениеФоновымиЗаданиямиЗагрузки.mdo
index dc1441d..eb9b389 100644
--- a/parsing-tech-log/src/InformationRegisters/УправлениеФоновымиЗаданиямиЗагрузки/УправлениеФоновымиЗаданиямиЗагрузки.mdo
+++ b/parsing-tech-log/src/InformationRegisters/УправлениеФоновымиЗаданиямиЗагрузки/УправлениеФоновымиЗаданиямиЗагрузки.mdo
@@ -285,7 +285,7 @@
String
- 1000
+ 256
@@ -293,9 +293,6 @@
Use
Use
-
-
-
true