Перем МассивКолонокБезОтбора;
//Перем мИзмененныеВидимостиКолонок;
Перем ДлительностьПредыдущейДозагрузки;
Перем мАктуальныеСвойства;
Перем мБесполезныеКолонки;
Перем мБесполезныеКолонкиТрассы;
Перем мСхемаКомпоновки;
Перем мЧислоПолейПорядка;
Перем мВнешниеНаборыДанных;
Перем ОсновнойАнализТехножурнала;
Перем мОписаниеТехножурнала;
Перем СтарыйОтбор;
Перем мПерваяАктивацияСтрокиЖурналаВыполнена;

Функция СохраняемаяНастройкаФормы(выхНаименование, выхИменаСвойств) Экспорт 
	выхИменаСвойств = "Реквизит.ВключитьСвойстваСИменамиМетаданных, Реквизит.ЗагружатьЖурналКлиента, Реквизит.ЗагружатьЖурналСервера, Реквизит.ЗагружатьТолькоТекущийСеанс, Реквизит.КаталогЖурнала,
	|Реквизит.КомментироватьЗагрузку, Реквизит.КонецПериода, Реквизит.МаксТысячСобытий, Реквизит.НачалоПериода, Реквизит.ПериодПоследниеМинуты, Реквизит.СписокЗагружаемыхТиповСобытий,
	|Реквизит.УдалятьДанныеВнеПериода, Форма.ВключатьВИтогиИнфобазу, Форма.СобытияПолеСортировки1, Форма.СобытияПолеСортировки2, Форма.СобытияНаправлениеСортировки1, Форма.СобытияНаправлениеСортировки2,
	|Форма.СтрокиМодулейПолеСортировки1, Форма.СтрокиМодулейПолеСортировки2, Форма.СтрокиМодулейНаправлениеСортировки1, Форма.СтрокиМодулейНаправлениеСортировки2, Форма.ТекстыSDBLПолеСортировки1,
	|Форма.ТекстыSDBLПолеСортировки2, Форма.ТекстыSDBLНаправлениеСортировки1, Форма.ТекстыSDBLНаправлениеСортировки2, Форма.ПользователиПолеСортировки1, Форма.ПользователиПолеСортировки2,
	|Форма.ПользователиНаправлениеСортировки1, Форма.ПользователиНаправлениеСортировки2, Форма.ОписанияПолеСортировки1, Форма.ОписанияПолеСортировки2, Форма.ОписанияНаправлениеСортировки1,
	|Форма.ОписанияНаправлениеСортировки2, Форма.СтрокиМодулейУчитыватьПустое, Форма.ТекстыSDBLУчитыватьПустое, Форма.ПользователиУчитыватьПустое, Форма.ОписанияУчитыватьПустое,
	|Форма.ТипыИсключенийПолеСортировки1, Форма.ТипыИсключенийПолеСортировки2, Форма.ТипыИсключенийНаправлениеСортировки1, Форма.ТипыИсключенийНаправлениеСортировки2, Форма.ТипыИсключенийУчитыватьПустое,
	|Форма.БлокировкиУпрПолеСортировки1, Форма.БлокировкиУпрПолеСортировки2, Форма.БлокировкиУпрНаправлениеСортировки1, Форма.БлокировкиУпрНаправлениеСортировки2, Форма.БлокировкиУпрУчитыватьПустое,
	|Форма.ТекстыСУБДПолеСортировки1, Форма.ТекстыСУБДПолеСортировки2, Форма.ТекстыСУБДНаправлениеСортировки1, Форма.ТекстыСУБДНаправлениеСортировки2, Форма.ТекстыСУБДУчитыватьПустое,
	|Реквизит.ВыполнятьНаСервере, Реквизит.КоличествоПотоков";
	Возврат Неопределено;
КонецФункции

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

Процедура КнопкаВыбораПериодаНажатие(Элемент)
	
	НастройкаПериода = Новый НастройкаПериода;
	НастройкаПериода.УстановитьПериод(НачалоПериода, ?(КонецПериода='0001-01-01', КонецПериода, КонецДня(КонецПериода)));
	НастройкаПериода.РедактироватьКакИнтервал = Истина;
	НастройкаПериода.РедактироватьКакПериод = Истина;
	НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
	Если НастройкаПериода.Редактировать() Тогда
		НачалоПериода = НастройкаПериода.ПолучитьДатуНачала();
		КонецПериода = НастройкаПериода.ПолучитьДатуОкончания();
	КонецЕсли;

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

Процедура ТаблицаВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	ЗаполнитьСвойстваСИменамиМетаданных(ВыбраннаяСтрока);
	ИмяСвойства = Колонка.Данные;
	ИмяСвойстваБезМета = ПолучитьИмяСвойстваБезМета(ИмяСвойства);
	Если Истина
		И ирОбщий.СтрокиРавныЛкс(ВыбраннаяСтрока.Событие, "TLOCK") 
		//И ЗначениеЗаполнено(ВыбраннаяСтрока.Блокираторы) 
	Тогда
		СтандартнаяОбработка = Ложь;
		ФормаБлокировки = ПолучитьФорму("Блокировка1С", ЭтаФорма, ВыбраннаяСтрока);
		ФормаБлокировки.Открыть();
	ИначеЕсли Истина
		И (Ложь
			Или ирОбщий.СтрокиРавныЛкс(Колонка.Имя, "lka") 
			Или ирОбщий.СтрокиРавныЛкс(Колонка.Имя, "lkaid") 
			Или ирОбщий.СтрокиРавныЛкс(Колонка.Имя, "lkato") 
			Или ирОбщий.СтрокиРавныЛкс(Колонка.Имя, "lkp") 
			Или ирОбщий.СтрокиРавныЛкс(Колонка.Имя, "lkpid") 
			Или ирОбщий.СтрокиРавныЛкс(Колонка.Имя, "lkpto") 
			Или ирОбщий.СтрокиРавныЛкс(Колонка.Имя, "lksrc"))
		И ЗначениеЗаполнено(ВыбраннаяСтрока[Колонка.Имя])
		И ВыбраннаяСтрока[Колонка.Имя] <> Ложь
	Тогда
		СтандартнаяОбработка = Ложь;
		ФормаБлокировки = ПолучитьФорму("БлокировкаСУБД", ЭтаФорма, ВыбраннаяСтрока);
		ФормаБлокировки.Открыть();
	ИначеЕсли Истина
		И ирОбщий.СтрокиРавныЛкс(ИмяСвойстваБезМета, "ПланСУБД")
		И ЭтоСобытиеТрассыСУБД(ВыбраннаяСтрока)
	Тогда
		СтандартнаяОбработка = Ложь;
		ОткрытьПланЗапросаСУБД(ВыбраннаяСтрока.ПланСУБД);
	КонецЕсли; 
	Если Истина
		И СтандартнаяОбработка
		И ЗначениеЗаполнено(Колонка.Данные) 
	Тогда
		ТипЗначения = Метаданные().ТабличныеЧасти.ТаблицаЖурнала.Реквизиты[ИмяСвойства].Тип;
		#Если Сервер И Не Сервер Тогда
		    ТипЗначения = Новый ОписаниеТипов();
		#КонецЕсли
		Если Истина
			И мСвойстваСИменамиБД.Свойство(ИмяСвойстваБезМета)
			//И (Ложь
			//	Или ВыбраннаяСтрока.Инфобаза = ""
			//	Или ирОбщий.СтрокиРавныЛкс(ВыбраннаяСтрока.Инфобаза, НСтр(СтрокаСоединенияИнформационнойБазы(), "Ref")))
		Тогда
			СтандартнаяОбработка = Ложь;
			ОткрытьТекстБДСтрокиЖурнала(ВыбраннаяСтрока, ИмяСвойства);
		ИначеЕсли Истина
			И ТипЗначения.СодержитТип(Тип("Строка"))
			И ТипЗначения.КвалификаторыСтроки.Длина = 0
		Тогда
			СтандартнаяОбработка = Ложь;
			ВариантПросмотра = ПолучитьВариантПросмотраТекстПоИмениРеквизита(ИмяСвойства);
			ирКлиент.ОткрытьТекстЛкс(ВыбраннаяСтрока[Колонка.Данные], Колонка.ТекстШапки, ВариантПросмотра, Истина,
				"" + ВыбраннаяСтрока.МоментВремени + Колонка.Данные);
		КонецЕсли; 
	КонецЕсли; 
	Если СтандартнаяОбработка Тогда
		СтандартнаяОбработка = Ложь;
		//ирКлиент.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка);
		ОткрытьФормуСобытия();
	КонецЕсли; 

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

Функция ЭтоСобытиеТрассыСУБД(Знач ВыбраннаяСтрока)
	
	Возврат Ложь
	Или ирОбщий.СтрокиРавныЛкс(ВыбраннаяСтрока.Событие, "sql_batch_completed") 
	Или ирОбщий.СтрокиРавныЛкс(ВыбраннаяСтрока.Событие, "rpc_completed");

КонецФункции

Процедура ОбновитьТаблицуЖурналаБезПараметров()
	ОбновитьТаблицуЖурнала();
КонецПроцедуры

Процедура ОбновитьТаблицуЖурнала(УдалитьДополнительныеСобытия = Истина, ИменаНеполезныхКолонок = "", РежимТрассы = Ложь, ЖдатьСекунд = 2, СмещениеБазовогоУровня = Неопределено) Экспорт
	
	Кнопка = ЭлементыФормы.ДействияФормы.Кнопки.Загрузить;
	Если Истина
		И Не РежимТрассы
		И Кнопка.Картинка <> ирКэш.КартинкаПоИмениЛкс("ирОстановить") 
	Тогда
		ЭтаФорма.ЭтоТрасса = Ложь;
		ОбновитьДоступность();
		Если Истина
			И ТаблицаЖурнала.Количество() > 0
			И Не ирОбщий.СтрокиРавныЛкс(ПоследнийКаталогЗагрузки, КаталогЖурнала)
		Тогда
			Ответ = Вопрос("Каталог загрузки изменен. Очистить существующие строки?", РежимДиалогаВопрос.ДаНет);
			Если Ответ = КодВозвратаДиалога.Да Тогда
				ОчиститьТаблицы();
			КонецЕсли;
		КонецЕсли; 
		РежимДозагрузки = ТаблицаЖурнала.Количество() > 0;
		ФильтрЗагрузки = Неопределено;
		Если Не РежимДозагрузки И "" + ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок <> "" Тогда
			Ответ = Вопрос("Применить при загрузке текущий фильтр отображения (" + ирОбщий.ПредставлениеСОграничениемДлиныЛкс(ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок, 200) + ")?",
				РежимДиалогаВопрос.ДаНетОтмена,, КодВозвратаДиалога.Нет);
			Если Ответ = КодВозвратаДиалога.Да Тогда 
				ФильтрЗагрузки = ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок;
			ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда 
				Возврат;
			КонецЕсли; 
		КонецЕсли; 
	КонецЕсли;
	Если РежимТрассы Тогда
		ЗагрузитьТрассуСУБД();
	КонецЕсли; 
	ОтборПоСеансу = Неопределено;
	Если ЗагружатьТолькоТекущийСеанс Тогда
		ОтборПоСеансу = НомерСеансаИнформационнойБазы();
	КонецЕсли; 
	ПараметрыЗадания = Новый Структура;
	ПараметрыЗадания.Вставить("ВыполнятьНаСервере", Истина
		И ВыполнятьНаСервере 
		И (Ложь
			Или Не РежимТрассы 
			Или мЛиТрассаПоПользователю));
	ПараметрыЗадания.Вставить("РежимТрассы", РежимТрассы);
	ПараметрыЗадания.Вставить("ФильтрЗагрузки", ФильтрЗагрузки);
	ПараметрыЗадания.Вставить("УдалитьДополнительныеСобытия", УдалитьДополнительныеСобытия);
	ПараметрыЗадания.Вставить("ИменаНеполезныхКолонок", ИменаНеполезныхКолонок);
	ПараметрыЗадания.Вставить("ЖдатьСекунд", ЖдатьСекунд);
	ПараметрыЗадания.Вставить("СмещениеБазовогоУровня", СмещениеБазовогоУровня);
	ПараметрыЗадания.Вставить("ОтборПоСеансу", ОтборПоСеансу);
	ОбработчикЗавершения = "ЗагрузитьЖурналЗавершение";
	#Если Сервер И Не Сервер Тогда
		ПрочитатьЖурнал(ПараметрыЗадания);
		ЗагрузитьЖурналЗавершение();
	#КонецЕсли
	ирОбщий.ВыполнитьЗаданиеФормыЛкс("ПрочитатьЖурнал", ПараметрыЗадания, ЭтаФорма, "ЗагрузкаТехножурнала",, Кнопка, "ЗагрузитьЖурналЗавершение", Не РежимТрассы,,,, Истина,, Истина);

КонецПроцедуры
	
Процедура ЗагрузитьЖурналЗавершение(СостояниеЗадания = Неопределено, РезультатЗадания = Неопределено) Экспорт 
	
	Если Ложь
		Или СостояниеЗадания = Неопределено
		Или СостояниеЗадания = СостояниеФоновогоЗадания.Завершено 
	Тогда
		Если Не РезультатЗадания.Успех Тогда 
			Возврат;
		КонецЕсли; 
		РежимДозагрузки = ТаблицаЖурнала.Количество() > 0;
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, РезультатЗадания, мИменаВозвращаемыхСвойств); 
		СостояниеСтрокПоля = ирКлиент.ТабличноеПолеСостояниеСтрокЛкс(ЭлементыФормы.ТаблицаЖурнала, "МоментВремени, ИмяФайлаЛога");
		Если СостояниеЗадания <> Неопределено Тогда
			ирОбщий.СостояниеЛкс("Загрузка таблицы из фонового задания...");
			ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(РезультатЗадания.ТаблицаЖурнала, ТаблицаЖурнала,,,, мНепустыеКолонкиЖурнала);
			ирОбщий.СостояниеЛкс("");
		КонецЕсли; 
		МоментНачалаЗагрузки = РезультатЗадания.НачалоЗадания;
		ПоследнийКаталогЗагрузки = ЭтотОбъект.КаталогЖурнала;
		КоличествоСтрокЖурнала = ТаблицаЖурнала.Количество();
		КонецИнтервала = ТекущаяДата();
		Состояние("");
		ПороговаяДлительностьЗагрузки = 5;
		ДлительностьИнтервала = КонецИнтервала - МоментНачалаЗагрузки;
		Если ДлительностьИнтервала > ПороговаяДлительностьЗагрузки Тогда
			КолвоЧасов = Цел(ДлительностьИнтервала / 3600);
			ДлительностьИнтервалаДата = '00010101' + (КонецИнтервала - МоментНачалаЗагрузки) - КолвоЧасов * 3600;
			ДлительностьИнтервалаСтр = Формат(КолвоЧасов, "ЧН=; ЧГ=0") + ":" + Формат(ДлительностьИнтервалаДата, "ДФ=мм:сс; ДП=");
			ирОбщий.СообщитьЛкс("Загрузка данных журнала выполнена за " + ДлительностьИнтервалаСтр);
			Если Истина
				И РежимДозагрузки
				И Автообновление > 0
				И ДлительностьИнтервала >= Автообновление
				И ДлительностьПредыдущейДозагрузки >= Автообновление
			Тогда
				Автообновление = Макс(ДлительностьИнтервала, ДлительностьПредыдущейДозагрузки) + 5;
				АвтообновлениеПриИзменении();
			КонецЕсли; 
		КонецЕсли; 
		Если Не РежимДозагрузки Тогда
			ТекущаяСтрокаУстановлена = ирКлиент.ТабличноеПолеВосстановитьСостояниеСтрокЛкс(ЭлементыФормы.ТаблицаЖурнала, СостояниеСтрокПоля);
			Если Не ТекущаяСтрокаУстановлена Тогда
				Если ТаблицаЖурнала.Количество() > 0 Тогда
					ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока = ТаблицаЖурнала[ТаблицаЖурнала.Количество() - 1];
				КонецЕсли; 
			КонецЕсли; 
			ДлительностьПредыдущейДозагрузки = 0;
		Иначе
			ДлительностьПредыдущейДозагрузки = ДлительностьИнтервала;
		КонецЕсли; 
		УстановитьБесполезныеКолонки();
		ПодготовитьФормуДляОтображенияНовыхДанных();
		Если Автообновление > 0 Тогда
			#Если Сервер И Не Сервер Тогда
				ОбновитьТаблицуЖурналаБезПараметров();
			#КонецЕсли
			ПодключитьОбработчикОжидания("ОбновитьТаблицуЖурналаБезПараметров", Автообновление, Истина);
		КонецЕсли; 
	КонецЕсли; 

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

// Предопределеный метод
Процедура ПроверкаЗавершенияФоновыхЗаданий() Экспорт 
	
	ирКлиент.ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма);
	
КонецПроцедуры

Процедура ПодготовитьФормуДляОтображенияНовыхДанных()

	Если ВключитьСвойстваСИменамиМетаданных Тогда
		ОбновитьСвойстваВТерминахМетаданныхВФорме();
	КонецЕсли; 
	УстановитьФлагПересчетаИтогов();
	ОбновитьИтоги();

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

Процедура УстановитьФлагПересчетаИтогов()

	Для Каждого Страница Из ЭлементыФормы.ПанельИтоги.Страницы Цикл
		Страница.Значение.Рассчитано = Ложь;
	КонецЦикла;

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

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

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

Функция РассчитатьИтоги(Принудительно = Ложь)

	ПанельИтоги = ЭлементыФормы.ПанельИтоги;
	ИмяСтраницы = ПанельИтоги.ТекущаяСтраница.Имя;
	Компоновщик.ЗагрузитьНастройки(мСхемаКомпоновки.НастройкиПоУмолчанию);
	Для Счетчик = 1 По мЧислоПолейПорядка Цикл
		ПолеСортировки = ЭтаФорма[ИмяСтраницы + "ПолеСортировки" + Счетчик];
		Если ЗначениеЗаполнено(ПолеСортировки) Тогда
			Если Истина
				И Не ВключатьВИтогиИнфобазу
				И ирОбщий.СтрокиРавныЛкс(ПолеСортировки, "Инфобаза")
			Тогда
				Продолжить;
			КонецЕсли; 
			ЭлементПорядка = ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(Компоновщик.Настройки.Порядок, ПолеСортировки);
			ВозрастаниеСортировки = ЭтаФорма[ИмяСтраницы + "НаправлениеСортировки" + Счетчик];
			Если Не ВозрастаниеСортировки Тогда
				ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
			КонецЕсли; 
		КонецЕсли; 
	КонецЦикла;
	//Если Истина
	//	И Не Принудительно 
	//	И ПанельИтоги.ТекущаяСтраница.Значение.Рассчитано 
	//Тогда
	//	СтрокаПорядка = ирОбщий.ВыражениеПорядкаКомпоновкиНаЯзыкеЗапросовЛкс(Компоновщик.Настройки.Порядок,, "");
	//	Если ЗначениеЗаполнено(СтрокаПорядка) Тогда
	//		ЭтаФорма[ИмяСтраницы].Сортировать(СтрокаПорядка);
	//	КонецЕсли; 
	//	Возврат Неопределено;
	//КонецЕсли;
	Если Ложь
		Или ПанельИтоги.Страницы.Описания = ПанельИтоги.ТекущаяСтраница 
		Или ПанельИтоги.Страницы.ТипыИсключений = ПанельИтоги.ТекущаяСтраница
	Тогда 
		ОсновнойРесурс = "Количество";
	Иначе
		ОсновнойРесурс = "Длительность";
	КонецЕсли; 
	//Если Найти(ПанельИтоги.ТекущаяСтраница.Значение.Группировка, "Шаблон") > 0 Тогда 
	//	ЗаполнитьСвойстваШаблоны();
	//КонецЕсли; 
	СтрокаКлюча = ПанельИтоги.ТекущаяСтраница.Значение.Группировка;
	ГлавноеПоле = ирОбщий.ПервыйФрагментЛкс(СтрокаКлюча, ",");
	Если ВключатьВИтогиИнфобазу Тогда
		СтрокаКлюча = СтрокаКлюча + ",Инфобаза";
	КонецЕсли; 
	ТабличноеПолеИтогов = ЭлементыФормы[ИмяСтраницы];
	ТекущаяСтрока = ТабличноеПолеИтогов.ТекущаяСтрока;
	Если ТекущаяСтрока <> Неопределено Тогда
		КлючТекущейСтроки = Новый Структура(СтрокаКлюча);
		ЗаполнитьЗначенияСвойств(КлючТекущейСтроки, ТекущаяСтрока); 
	Иначе
		КлючТекущейСтроки = Неопределено;
	КонецЕсли; 
	КлючевыеПоля = ирОбщий.СтрРазделитьЛкс(СтрокаКлюча, ",", Истина);
	Если ирОбщий.СтрокиРавныЛкс(ОсновнойРесурс, "Длительность") Тогда
		//
	КонецЕсли; 
	Для Каждого КлючевоеПоле Из КлючевыеПоля Цикл
		ДоступноеПоле = Компоновщик.Настройки.ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных(КлючевоеПоле));
		Если ДоступноеПоле.Ресурс Тогда
			ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(Компоновщик.Настройки.Структура[0].Выбор, КлючевоеПоле);
		Иначе
			ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(Компоновщик.Настройки.Структура[0].ПоляГруппировки, КлючевоеПоле);
		КонецЕсли; 
	КонецЦикла;
	Компоновщик.Настройки.Отбор.Элементы.Очистить();
	Если Не ЭтаФорма[ИмяСтраницы + "УчитыватьПустое"] Тогда
		ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(Компоновщик.Настройки.Отбор, ГлавноеПоле, "", ВидСравненияКомпоновкиДанных.НеРавно);
	КонецЕсли; 
	ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(Компоновщик.Настройки.Отбор, "Действие", "HoldConnection", ВидСравненияКомпоновкиДанных.НеРавно);
	Если Истина
		И ОтборСтрокаМодуля <> Неопределено
		И ОтборСтрокаМодуля <> ""
	Тогда
		ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(Компоновщик.Настройки.Отбор, "СтрокаМодуля", ОтборСтрокаМодуля,
			ВидСравненияКомпоновкиДанных.Содержит);
	КонецЕсли;
	Если Истина
		И ОтборТекстСУБД <> Неопределено
		И ОтборТекстСУБД <> ""
	Тогда
		ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(Компоновщик.Настройки.Отбор, "ТекстСУБД", ПолучитьСтрокуОтбораТекстаСУБД(),
			ВидСравненияКомпоновкиДанных.Содержит);
	КонецЕсли;
	Если Истина
		И ОтборТекстSDBL <> Неопределено
		И ОтборТекстSDBL <> ""
	Тогда
		ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(Компоновщик.Настройки.Отбор, "ТекстSDBL", ПолучитьСтрокуОтбораТекстаSDBL(), 
			ВидСравненияКомпоновкиДанных.Содержит);
	КонецЕсли;
	Если Истина
		И Не Принудительно 
		И ПанельИтоги.ТекущаяСтраница.Значение.Рассчитано 
	Тогда
		СтрокаПорядка = ирОбщий.ВыражениеПорядкаКомпоновкиНаЯзыкеЗапросовЛкс(Компоновщик.Настройки.Порядок,, "");
		Если ЗначениеЗаполнено(СтрокаПорядка) Тогда
			ЭтаФорма[ИмяСтраницы].Сортировать(СтрокаПорядка);
		КонецЕсли; 
		Возврат Неопределено;
	КонецЕсли;
	Если Найти(ПанельИтоги.ТекущаяСтраница.Значение.Группировка, "Шаблон") > 0 Тогда 
		ЗаполнитьСвойстваШаблоны();
	КонецЕсли; 
	РежимОтладкиКомпоновки = Ложь;
	ТаблицаИтогов = ирОбщий.СкомпоноватьВКоллекциюЗначенийПоСхемеЛкс(мСхемаКомпоновки, Компоновщик.Настройки, , мВнешниеНаборыДанных, , , , , РежимОтладкиКомпоновки);
	ЭтаФорма[ПанельИтоги.ТекущаяСтраница.Имя] = ТаблицаИтогов;
	//// Удаляем строку с пустым ключом
	//СтрокаПустогоКлюча = ТаблицаИтогов.Найти("", КлючевоеПоле);
	//Если СтрокаПустогоКлюча <> Неопределено Тогда
	//	ТаблицаИтогов.Удалить(СтрокаПустогоКлюча);
	//КонецЕсли; 
	//ИтогРесурса = ТаблицаИтогов.Итог(ОсновнойРесурс);
	//Если ИтогРесурса > 0 Тогда
	//	Для Каждого СтрокаИтогов Из ТаблицаИтогов Цикл
	//		СтрокаИтогов.Вес = СтрокаИтогов[ОсновнойРесурс] * 100 / ИтогРесурса;
	//	КонецЦикла; 
	//КонецЕсли; 
	Если ПанельИтоги.Страницы.ТекстыSDBL = ПанельИтоги.ТекущаяСтраница Тогда 
		ТекстыSDBL.Колонки.Добавить("СвойстваСИменамиМетаданныхАктуальны", Новый ОписаниеТипов("Булево"));
	ИначеЕсли ПанельИтоги.Страницы.ТекстыСУБД = ПанельИтоги.ТекущаяСтраница Тогда 
		ТекстыСУБД.Колонки.Добавить("СвойстваСИменамиМетаданныхАктуальны", Новый ОписаниеТипов("Булево"));
	ИначеЕсли ПанельИтоги.Страницы.БлокировкиУпр = ПанельИтоги.ТекущаяСтраница Тогда 
		БлокировкиУпр.Колонки.Добавить("СвойстваСИменамиМетаданныхАктуальны", Новый ОписаниеТипов("Булево"));
	КонецЕсли; 
	Если КлючТекущейСтроки <> Неопределено Тогда
		НайденныеСтроки = ТаблицаИтогов.НайтиСтроки(КлючТекущейСтроки);
	Иначе
		НайденныеСтроки = Новый Массив();
	КонецЕсли; 
	Если НайденныеСтроки.Количество() = 0 Тогда
		НайденныеСтроки = ТаблицаИтогов;
	КонецЕсли;
	Если НайденныеСтроки.Количество() > 0 Тогда
		ТабличноеПолеИтогов.ТекущаяСтрока = НайденныеСтроки[0];
	КонецЕсли; 
	ТабличноеПолеИтогов.Колонки.Инфобаза.Видимость = ВключатьВИтогиИнфобазу;
	ПанельИтоги.ТекущаяСтраница.Значение.Рассчитано = Истина;
	Возврат Неопределено;

КонецФункции

Процедура КоманднаяПанельЖурналРегистрацииЗагрузить(Кнопка)
	
	ОбновитьТаблицуЖурнала();
	
КонецПроцедуры

Процедура ПриОткрытии()
	
	ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма);
	//КлиентЗапущенНаКомпьютереСервера = ирОбщий.ЛиКлиентЗапущенНаКомпьютереСервераЛкс();
	//Если Не КлиентЗапущенНаКомпьютереСервера Тогда
	//	ЭтотОбъект.ЗагружатьЖурналСервера = Ложь;
	//КонецЕсли; 
	Для Каждого МетаРеквизит Из Метаданные().ТабличныеЧасти.ТаблицаЖурнала.Реквизиты Цикл
		ИмяРеквизита = МетаРеквизит.Имя;
		СтрокаСвойстваСобытия = ПолучитьСтрокуОписанияСвойстваПоМестномуИмени(ИмяРеквизита);
		Если СтрокаСвойстваСобытия <> Неопределено Тогда
			Описание = СтрокаСвойстваСобытия.Описание;
			Если Не ЗначениеЗаполнено(Описание) Тогда
				Описание = СтрокаСвойстваСобытия.Представление;
			КонецЕсли; 
			Представление = СтрокаСвойстваСобытия.Представление;
			Подсказка = СтрокаСвойстваСобытия.Имя + " - " + Описание;
			Если ИмяРеквизита <> МетаРеквизит.Имя Тогда
				Подсказка = Подсказка + " в именах метаданных";
				Представление = Представление + " мета";
			КонецЕсли; 
			ЭлементыФормы.ТаблицаЖурнала.Колонки[МетаРеквизит.Имя].ПодсказкаВШапке = Подсказка;
			Если Не мСвойстваСИменамиБД.Свойство(ПолучитьИмяСвойстваБезМета(ИмяРеквизита)) Тогда // Пока решил оставить старые представления для подстраховки
				ЭлементыФормы.ТаблицаЖурнала.Колонки[МетаРеквизит.Имя].ТекстШапки = Представление;
			КонецЕсли; 
		КонецЕсли; 
	КонецЦикла; 
	КоличествоСтрокЖурнала = ТаблицаЖурнала.Количество();
	Если ЗначениеЗаполнено(мТипСУБД) Тогда
		УстановитьТипСУБДВТекстахШапокКолонок();
	КонецЕсли;
	ОбновитьСпискиВыбораПолейСортировки();
	ирКлиент.УстановитьДоступностьВыполненияНаСервереЛкс(ЭтаФорма);
	
	// Перенес в раздел инициализации модуля. Антибаг платформы 8.3.5 https://partners.v8.1c.ru/forum/topic/1323811
	//ОсновнойАнализТехножурнала = ирКэш.АнализТехножурналаЛкс();
	Если Истина
		И ОсновнойАнализТехножурнала <> ЭтотОбъект 
		И Не ЭтоТрасса 
		И ЗначениеЗаполнено(ОсновнойАнализТехножурнала.КонецПериодаКлиента) 
	Тогда
		Ответ = Вопрос("Обнаружена доступная для анализа трасса. Хотите загрузить ее?",
			РежимДиалогаВопрос.ДаНет, 20, КодВозвратаДиалога.Нет);
		Если Ответ = КодВозвратаДиалога.Да Тогда
			ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОсновнойАнализТехножурнала,
				"НачалоПериодаКлиента, НачалоПериодаСервера, КонецПериодаКлиента, КонецПериодаСервера, мИдентификаторТрассы");
			ПоказатьТрассу();
		КонецЕсли; 
		ОсновнойАнализТехножурнала.КонецПериодаКлиента = Неопределено;
	КонецЕсли; 
	ОбновитьДоступность();
	ОбновитьПодменюПоследнихОтборов();

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

Процедура ОбновитьПодменюПоследнихОтборов()
	
	ирКлиент.ОбновитьПодменюПоследнихОтборовЛкс(ЭтаФорма, ЭлементыФормы.КоманднаяПанельЖурнала, ЭлементыФормы.ТаблицаЖурнала);

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

Процедура ПроверитьИзменениеОтбораДляИсторииОтложенно()
	
	ТабличноеПоле = ЭлементыФормы.ТаблицаЖурнала;
	ДобавленВСписок = ирКлиент.ДобавитьОтборВИсториюТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, ТабличноеПоле.ОтборСтрок, СтарыйОтбор);
	Если ДобавленВСписок Тогда
		ОбновитьПодменюПоследнихОтборов();
	КонецЕсли;

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

Процедура ОбработчикИзмененияДанных(ПутьКДанным) Экспорт 
	
	ПутьКДаннымОтбораНайденных = "ЭлементыФормы." + ЭлементыФормы.ТаблицаЖурнала.Имя + ".Отбор";
	Если ирОбщий.СтрНачинаетсяСЛкс(ПутьКДанным, ПутьКДаннымОтбораНайденных) Тогда
		#Если Сервер И Не Сервер Тогда
			ПроверитьИзменениеОтбораДляИсторииОтложенно();
		#КонецЕсли
		ПодключитьОбработчикОжидания("ПроверитьИзменениеОтбораДляИсторииОтложенно", 0.1, Истина);
		ПодключитьОбработчикИзмененияДанных(ПутьКДаннымОтбораНайденных, "ОбработчикИзмененияДанных", Истина);
	КонецЕсли; 

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

Процедура ОбновитьСпискиВыбораПолейСортировки()

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

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

Функция УстановитьВидимостьКолонок(ТабличноеПоле = Неопределено, РазрешитьКолонкиШаблон = Ложь)

	Если ТабличноеПоле = Неопределено Тогда
		ТабличноеПоле = ЭлементыФормы.ТаблицаЖурнала;
	КонецЕсли; 
	Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл
		ИмяКолонкиДанных = КолонкаТП.Данные;
		Если Не ЗначениеЗаполнено(ИмяКолонкиДанных) Тогда
			ИмяКолонкиДанных = КолонкаТП.ДанныеФлажка;
		КонецЕсли; 
		Если Ложь
			Или Не ЗначениеЗаполнено(ИмяКолонкиДанных)
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "Контекст")
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "МоментВремени")
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "МоментВремениНачала")
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ИмяФайлаЛога")
		Тогда
			Продолжить;
		КонецЕсли; 
		СтрокаСвойстваСобытия = ПолучитьСтрокуОписанияСвойстваПоМестномуИмени(ИмяКолонкиДанных);
		Если Истина
			И Не РазрешитьКолонкиШаблон
			И (Ложь
				Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ТекстSDBLШаблон")
				Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ТекстСУБДШаблон")
				Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ОписаниеШаблон"))
		Тогда
			Продолжить;
		КонецЕсли; 
		НоваяВидимостьКолонки = Ложь
			Или СтрокаСвойстваСобытия = Неопределено
			Или мАктуальныеСвойства = Неопределено
			Или мАктуальныеСвойства.Свойство(СтрокаСвойстваСобытия.Имя);
		НоваяВидимостьКолонки = Истина
			И НоваяВидимостьКолонки
			И Не мБесполезныеКолонки.Свойство(ИмяКолонкиДанных);
		Если мСвойстваСИменамиБД.Свойство(ИмяКолонкиДанных) Тогда
			Если ИмяКолонкиДанных = КолонкаТП.Данные Тогда
				НоваяВидимостьКолонки = Истина
					И НоваяВидимостьКолонки
					И СвойстваВоВнутреннихИменах;
			Иначе // Мета
				НоваяВидимостьКолонки = Истина
					И НоваяВидимостьКолонки
					И ВключитьСвойстваСИменамиМетаданных;
			КонецЕсли; 
		//ИначеЕсли Истина
		//	И НоваяВидимостьКолонки
		//	И Не мИзмененныеВидимостиКолонок.Свойство(КолонкаТП.Имя)
		//Тогда
		//	Продолжить;
		КонецЕсли; 
		Если НоваяВидимостьКолонки <> КолонкаТП.Видимость Тогда
			КолонкаТП.Видимость = НоваяВидимостьКолонки;
			//мИзмененныеВидимостиКолонок.Вставить(КолонкаТП.Имя);
		КонецЕсли; 
	КонецЦикла;
	ЭлементыФормы.ТаблицаЖурнала.Колонки.ТекстБД.Видимость = Ложь
		Или ЭлементыФормы.ТаблицаЖурнала.Колонки.ТекстSDBL.Видимость
		Или ЭлементыФормы.ТаблицаЖурнала.Колонки.ТекстСУБД.Видимость;
	ЭлементыФормы.ТаблицаЖурнала.Колонки.ТекстБДМета.Видимость = Ложь
		Или ЭлементыФормы.ТаблицаЖурнала.Колонки.ТекстSDBLМета.Видимость
		Или ЭлементыФормы.ТаблицаЖурнала.Колонки.ТекстСУБДМета.Видимость;
	ЭлементыФормы.ТаблицаЖурнала.Колонки.СтрокаМодуляБазовогоУровня.Видимость = Истина
		И БазовыйУровеньСтека > 0
		И ЭлементыФормы.ТаблицаЖурнала.Колонки.СтрокаМодуля.Видимость;
	Возврат Неопределено;

КонецФункции

Процедура УстановитьБесполезныеКолонки(БесполезныеКолонкиТрассы = Неопределено, Знач БесполезныеКолонки = "") Экспорт
	
	мБесполезныеКолонки = Новый Структура();
	Если ирКэш.ЛиФайловаяБазаЛкс() Тогда
		мБесполезныеКолонки.Вставить("НаСервере");
	КонецЕсли; 
	Если ЭтоТрасса Тогда
		мБесполезныеКолонки.Вставить("Пользователь");
		//мБесполезныеКолонки.Вставить("Сеанс");
		мБесполезныеКолонки.Вставить("Инфобаза");
		мБесполезныеКолонки.Вставить("Компьютер");
		Если ирКэш.ЛиФайловаяБазаЛкс() Тогда
			мБесполезныеКолонки.Вставить("ТипПроцессаОС");
			мБесполезныеКолонки.Вставить("ПроцессОС");
		Иначе
		КонецЕсли; 
	КонецЕсли; 
	КоличествоСтрокЖурнала = ТаблицаЖурнала.Количество();
	Если КоличествоСтрокЖурнала = 0 Тогда
		Возврат;
	КонецЕсли; 
	РеквизитыТаблицы = Метаданные().ТабличныеЧасти.ТаблицаЖурнала.Реквизиты;
	Если БесполезныеКолонкиТрассы <> Неопределено Тогда
		Если ТипЗнч(БесполезныеКолонкиТрассы) = Тип("Строка") Тогда
			мБесполезныеКолонкиТрассы = ирОбщий.СтрРазделитьЛкс(БесполезныеКолонкиТрассы, ",", Истина, Ложь);
		Иначе
			мБесполезныеКолонкиТрассы = БесполезныеКолонкиТрассы;
		КонецЕсли; 
	КонецЕсли; 
	Если ЗначениеЗаполнено(БесполезныеКолонки) Тогда
		Для Каждого ИмяКолонки Из ирОбщий.СтрРазделитьЛкс(БесполезныеКолонки, ",", Истина, Ложь) Цикл
			мБесполезныеКолонки.Вставить(ИмяКолонки);
		КонецЦикла;
	КонецЕсли;
	Если мБесполезныеКолонкиТрассы <> Неопределено Тогда
		Для Каждого ИмяКолонки Из мБесполезныеКолонкиТрассы Цикл
			мБесполезныеКолонки.Вставить(ИмяКолонки);
		КонецЦикла;
	КонецЕсли; 
	Для Каждого КолонкаТП Из ЭлементыФормы.ТаблицаЖурнала.Колонки Цикл
		ИмяКолонкиДанных = КолонкаТП.Данные;
		Если Не ЗначениеЗаполнено(ИмяКолонкиДанных) Тогда
			ИмяКолонкиДанных = КолонкаТП.ДанныеФлажка;
		КонецЕсли; 
		Если Ложь
			Или Не ЗначениеЗаполнено(ИмяКолонкиДанных)
			//Или мТаблицаКолонок.Найти(ИмяКолонкиДанных, "ИмяВТаблице") = Неопределено
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ТипПроцессаОС")
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ТекстSDBLШаблон")
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ТекстSDBLШаблонМета")
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ТекстСУБДШаблон")
			Или ирОбщий.СтрокиРавныЛкс(ИмяКолонкиДанных, "ТекстСУБДШаблонМета")
			Или мБесполезныеКолонки.Свойство(ИмяКолонкиДанных)
		Тогда
			Продолжить;
		КонецЕсли; 
		Если Не мНепустыеКолонкиЖурнала.Свойство(ИмяКолонкиДанных) Тогда
			мБесполезныеКолонки.Вставить(ИмяКолонкиДанных);
		КонецЕсли; 
	КонецЦикла;
	УстановитьВидимостьКолонок();
	
КонецПроцедуры

Процедура УстановитьТипСУБДВТекстахШапокКолонок()
	
	Колонки = ЭлементыФормы.ТаблицаЖурнала.Колонки;
	Колонки.ТекстСУБД.ТекстШапки = "Текст " + мТипСУБД;
	Колонки.ТекстСУБД.ТекстШапки = "Текст " + мТипСУБД + " мета";
	Колонки.ПланСУБД.ТекстШапки = "План " + мТипСУБД;
	Колонки.ПланСУБД.ТекстШапки = "План " + мТипСУБД + " мета";
	
КонецПроцедуры

// выхМестноеИмя - Строка, из имени удаляется окончание "мета" если присутствует
Функция ПолучитьСтрокуОписанияСвойстваПоМестномуИмени(выхМестноеИмя)
	
	выхМестноеИмя = ПолучитьИмяСвойстваБезМета(выхМестноеИмя);
	СтрокаВнутреннегоИмени = мТаблицаКолонок.Найти(выхМестноеИмя, "ИмяВТаблице");
	Если СтрокаВнутреннегоИмени <> Неопределено Тогда
		СтрокаСвойстваСобытия = мСвойстваСобытий.Найти(НРег(СтрЗаменить(СтрокаВнутреннегоИмени.ВнутреннееИмя, ":", "_")), "НИмя");
	Иначе
		// Грязный прием
		СтрокаСвойстваСобытия = мСвойстваСобытий.Найти(НРег(выхМестноеИмя), "НИмя");
	КонецЕсли; 
	Возврат СтрокаСвойстваСобытия;
	
КонецФункции

Процедура КонецПериодаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	
	ирКлиент.ПолеВводаГраницыПериода_ОбновитьСписокЛкс(Элемент, СтандартнаяОбработка, НачалоПериода, 1);
	
КонецПроцедуры

Процедура НачалоПериодаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	
	ирКлиент.ПолеВводаГраницыПериода_ОбновитьСписокЛкс(Элемент, СтандартнаяОбработка, КонецПериода, -1);

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

Процедура КаталогЖурналаНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	ирКлиент.ПолеФайловогоКаталога_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

Процедура КаталогЖурналаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	
	ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма);

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

Процедура КаталогЖурналаПриИзменении(Элемент)
	
	ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма);

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

Процедура КаталогЖурналаОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ЗапуститьПриложение(Элемент.Значение);
	
КонецПроцедуры

Процедура ДействияФормыОчиститьКаталогЖурнала(Кнопка)
	
	ирОбщий.ОчиститьКаталогТехножурналаЛкс(КаталогЖурнала);
	
КонецПроцедуры

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

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

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

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

Процедура ОчиститьТаблицы()
	
	ОчиститьТаблицуЖурнала();
	Для Каждого Страница Из ЭлементыФормы.ПанельИтоги.Страницы Цикл
		ЭтаФорма[Страница.Имя].Очистить();
		Страница.Значение.Рассчитано = Истина;
	КонецЦикла;
	ЭтаФорма.КоличествоСтрокЖурнала = 0;
	//ЭтотОбъект.ПоследнееВремяНачалаЗагрузки = Неопределено;
	//ЭтотОбъект.ПоследнееВремяНачалаЗагрузкиСервера = Неопределено;
	//ЭтотОбъект.МинимальнаяДатаЗагрузки = ТекущаяДата() + 100000;

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

Процедура ОбновитьСвойстваВТерминахМетаданныхВФорме(Принудительно = Ложь)
	
	Для Каждого СтрокаЗапроса Из ТекстыSDBL Цикл
		ЗаполнитьСвойстваСИменамиМетаданных(СтрокаЗапроса, Принудительно);
	КонецЦикла;
	Для Каждого СтрокаЗапроса Из ТекстыСУБД Цикл
		ЗаполнитьСвойстваСИменамиМетаданных(СтрокаЗапроса, Принудительно);
	КонецЦикла;
	Для Каждого СтрокаЗапроса Из БлокировкиУпр Цикл
		ЗаполнитьСвойстваСИменамиМетаданных(СтрокаЗапроса, Принудительно);
	КонецЦикла;
	ЭлементыФормы.ТаблицаЖурнала.Колонки.ТаблицыМетаданных.Видимость = Истина;
	ОбновитьИтоги();
	
КонецПроцедуры

Процедура СвойстваВТерминахМетаданныхПриИзменении(Элемент = Неопределено)
	
	УстановитьВидимостьКолонок();
	УстановитьВидимостьКолонок(ЭлементыФормы.ТекстыSDBL, Истина);
	УстановитьВидимостьКолонок(ЭлементыФормы.ТекстыСУБД, Истина);
	УстановитьВидимостьКолонок(ЭлементыФормы.БлокировкиУпр);
	
КонецПроцедуры

Процедура АвтообновлениеПриИзменении(Элемент = Неопределено)
	
	Если Автообновление = 0 Тогда
		ОтключитьОбработчикОжидания("ОбновитьТаблицуЖурналаБезПараметров");
	Иначе
		ОбновитьТаблицуЖурналаБезПараметров();
	КонецЕсли; 
	
КонецПроцедуры

Процедура ПанельИтогиПриСменеСтраницы(Элемент = Неопределено, ТекущаяСтраница = Неопределено)
	
	ОбновитьИтоги();
	ПриАктивизацииСтрокиИтогов();
	
КонецПроцедуры

Процедура ПриАктивизацииСтрокиИтогов(Элемент = Неопределено)
	
	ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
	мАктуальныеСвойства = Неопределено;
	БесполезныеКолонки = "";
	Если ИтогиВключены Тогда
		ПанельИтоги = ЭлементыФормы.ПанельИтоги;
		СтруктуруКлюча = ПанельИтоги.ТекущаяСтраница.Значение.Группировка;
		
		////Если ПанельИтоги.Страницы.ТекстыSDBL = ПанельИтоги.ТекущаяСтраница Тогда 
		////	СтруктуруКлюча = "ТекстSDBLШаблон";
		////ИначеЕсли ПанельИтоги.Страницы.ТекстыСУБД = ПанельИтоги.ТекущаяСтраница Тогда 
		////	СтруктуруКлюча = "ТекстСУБДШаблон";
		////ИначеЕсли ПанельИтоги.Страницы.БлокировкиУпр = ПанельИтоги.ТекущаяСтраница Тогда 
		////	СтруктуруКлюча = "Regions";
		////КонецЕсли; 
		//Если СтрЧислоВхождений(СтруктуруКлюча, ",") = 1 И СтрЧислоВхождений(СтруктуруКлюча, "Мета") = 1 Тогда
		//	СтруктуруКлюча = ирОбщий.ПервыйФрагментЛкс(СтруктуруКлюча, ",");
		//КонецЕсли; 
		СтруктуруКлюча = ирОбщий.ПервыйФрагментЛкс(СтруктуруКлюча, ",");
		
		КлючСтроки = Новый Структура(СтруктуруКлюча);
		Если ВключатьВИтогиИнфобазу Тогда
			КлючСтроки.Вставить("Инфобаза");
		КонецЕсли; 
		ТабличноеПоле = ЭлементыФормы[ПанельИтоги.ТекущаяСтраница.Имя]; // ТабличноеПоле
		ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока;
		Если ТекущаяСтрока <> Неопределено Тогда
			ЗаполнитьЗначенияСвойств(КлючСтроки, ТекущаяСтрока);
			ОтборТаблицыЖурнала = ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок;
			ОтборТаблицыЖурнала.Сбросить();
			Для Каждого КлючИЗначение Из КлючСтроки Цикл
				ДоступноеПоле = Компоновщик.Настройки.ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных(КлючИЗначение.Ключ));
				Если ДоступноеПоле.Ресурс Тогда
					Продолжить;
				КонецЕсли; 
				ЭлементОтбора = ОтборТаблицыЖурнала[КлючИЗначение.Ключ];
				ЭлементОтбора.Установить(КлючИЗначение.Значение);
				УстановитьВидСравненияНаРавенство(ЭлементОтбора);
				КолонкаПоля = ЭлементыФормы.ТаблицаЖурнала.Колонки.Найти(КлючИЗначение.Ключ);
				Если КолонкаПоля <> Неопределено Тогда
					КолонкаПоля.Видимость = Ложь;
				КонецЕсли; 
				//мИзмененныеВидимостиКолонок.Вставить(КлючИЗначение.Ключ);
			КонецЦикла;
			
			// специальный отбор по событию
			СкрытьКолонкиПоСобытию = "";
			СкрытьКолонкуСобытия = Истина;
			Если ПанельИтоги.ТекущаяСтраница = ПанельИтоги.Страницы.События Тогда
				СкрытьКолонкиПоСобытию = ТекущаяСтрока.Событие;
			ИначеЕсли ПанельИтоги.ТекущаяСтраница = ПанельИтоги.Страницы.ТекстыSDBL Тогда
				СкрытьКолонкиПоСобытию = "SDBL";
			ИначеЕсли ПанельИтоги.ТекущаяСтраница = ПанельИтоги.Страницы.ТекстыСУБД Тогда
				//СкрытьКолонкиПоСобытию = "СУБД"; 
				БесполезныеКолонки = "ТекстSDBL, ТекстSDBLМета";
			ИначеЕсли ПанельИтоги.ТекущаяСтраница = ПанельИтоги.Страницы.БлокировкиУпр Тогда
				СкрытьКолонкиПоСобытию = "TLOCK";
			ИначеЕсли ПанельИтоги.ТекущаяСтраница = ПанельИтоги.Страницы.Описания Тогда
				СкрытьКолонкиПоСобытию = "EXCP";
				СкрытьКолонкуСобытия = Ложь;
			КонецЕсли; 
			СкрытьКолонкиПоСобытию(СкрытьКолонкиПоСобытию, СкрытьКолонкуСобытия);
		Иначе
			ТаблицаИтогов = ЭлементыФормы[ПанельИтоги.ТекущаяСтраница.Имя].Значение;
			Если ТаблицаИтогов.Количество() > 0 Тогда
				ЭлементыФормы[ПанельИтоги.ТекущаяСтраница.Имя].ТекущаяСтрока = ТаблицаИтогов[0];
				Возврат;
			КонецЕсли; 
		КонецЕсли;
	КонецЕсли; 
	УстановитьБесполезныеКолонки(, БесполезныеКолонки);
	
КонецПроцедуры

Процедура СкрытьКолонкиПоСобытию(СкрытьКолонкиПоСобытию = "<ALL>", СкрытьКолонкуСобытия = Истина)

	Если ЗначениеЗаполнено(СкрытьКолонкиПоСобытию) Тогда
		Если ирОбщий.СтрокиРавныЛкс(СкрытьКолонкиПоСобытию, "<ALL>") Тогда
			//
		Иначе
			мАктуальныеСвойства = мОписаниеТехножурнала.ПолучитьСтруктуруСвойствСобытия(СкрытьКолонкиПоСобытию, Не СкрытьКолонкуСобытия);
		КонецЕсли; 
	КонецЕсли; 

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

Функция УстановитьВидСравненияНаРавенство(ЭлементОтбора)

	Если Истина
		И ЭлементОтбора.ТипЗначения.СодержитТип(Тип("Строка"))
		И ЭлементОтбора.ТипЗначения.КвалификаторыСтроки.Длина = 0 
	Тогда
		Если ЭлементОтбора.Значение <> "" Тогда
			ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит;
		Иначе
			ЭлементОтбора.ВидСравнения = ВидСравнения.НеСодержит;
		КонецЕсли; 
	Иначе
		ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
	КонецЕсли; 
	Возврат Неопределено;

КонецФункции

Функция УстановитьВидСравненияНаНеРавенство(ЭлементОтбора)

	Если Истина
		И ЭлементОтбора.ТипЗначения.СодержитТип(Тип("Строка"))
		И ЭлементОтбора.ТипЗначения.КвалификаторыСтроки.Длина = 0 
	Тогда
		Если ЭлементОтбора.Значение = "" Тогда
			ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит;
		Иначе
			ЭлементОтбора.ВидСравнения = ВидСравнения.НеСодержит;
		КонецЕсли; 
	Иначе
		ЭлементОтбора.ВидСравнения = ВидСравнения.НеРавно;
	КонецЕсли; 
	Возврат Неопределено;

КонецФункции

Процедура ИтогиВключеныПриИзменении(Элемент) Экспорт
	
	УстановитьРежимИтогов(ИтогиВключены);

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

Процедура УстановитьРежимИтогов(НовыйРежим = Ложь, РазрешитьСбросОтбора = Истина) Экспорт
	
	Если НовыйРежим <> ИтогиВключены Тогда
		ЭтаФорма.ИтогиВключены = НовыйРежим;
		ирКлиент.ИзменитьСвернутостьЛкс(ЭтаФорма, ИтогиВключены, ЭлементыФормы.ПанельИтоги, ЭтаФорма.ЭлементыФормы.гРазделительИтогиЖурнал, ЭтаФорма.Панель, "верх");
	КонецЕсли; 
	Если Не ИтогиВключены Тогда
		мАктуальныеСвойства = Неопределено;
		Если РазрешитьСбросОтбора Тогда
			ОтборТаблицыЖурнала = ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок;
			ОтборТаблицыЖурнала.Сбросить();
		КонецЕсли;
		УстановитьБесполезныеКолонки();
	Иначе
		//УстановитьБесполезныеКолонки();
		ПанельИтогиПриСменеСтраницы();
	КонецЕсли;
	ЭлементыФормы.КоманднаяПанельЖурнала.Кнопки.ПоказыватьПанельИтогов.Пометка = ИтогиВключены;
	
КонецПроцедуры

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

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

Процедура ПериодПоследниеМинутыПриИзменении(Элемент)
	
	ОбновитьДоступность();
	
КонецПроцедуры

Процедура ОбновитьДоступность() Экспорт
	
	ДоступностьПериода = ПериодПоследниеМинуты = 0;
	ЭлементыФормы.НачалоПериода.Доступность = ДоступностьПериода;
	ЭлементыФормы.КонецПериода.Доступность = ДоступностьПериода;
	ЭлементыФормы.КнопкаВыбораПериода.Доступность = ДоступностьПериода;
	ЭлементыФормы.ЭтоТрасса.Доступность = ЭтоТрасса;
	ЭлементыФормы.ЗагружатьЖурналСервера.Доступность = Истина
		И Не мПлатформа.ЭтоФайловаяБаза
		//И ЗагружатьТолькоТекущийСеанс
		//И КлиентЗапущенНаКомпьютереСервера
		;
	ЭлементыФормы.КаталогЖурнала.Доступность = Истина
		И Не ЗагружатьЖурналКлиента
		И Не ЗагружатьЖурналСервера;
	ЭлементыФормы.ТекущийСеанс.Доступность = Ложь
		Или ЗагружатьЖурналКлиента
		Или ЗагружатьЖурналСервера;
	ПредставлениеСпискаТиповСобытий = "" + СписокЗагружаемыхТиповСобытий;
	Если ПустаяСтрока(ПредставлениеСпискаТиповСобытий) Тогда
		ПредставлениеСпискаТиповСобытий = "Все";
	КонецЕсли; 
	ЭлементыФормы.ЗагружатьЖурналКлиента.Доступность = Не ВыполнятьНаСервере;
	ирОбщий.ОбновитьТекстПослеМаркераЛкс(ЭлементыФормы.НадписьСписокТиповСобытий.Заголовок,, ПредставлениеСпискаТиповСобытий, ": ");
	УстановитьВидимостьКолонок();
	
КонецПроцедуры

Процедура ЭтоТрассировкаПриИзменении(Элемент)
	
	Если Не ЭтоТрасса Тогда
		мБесполезныеКолонкиТрассы = Неопределено;
	КонецЕсли; 
	УстановитьБесполезныеКолонки();
	ОбновитьДоступность();
	
КонецПроцедуры

Процедура КоманднаяПанельЖурналРегистрацииУстановитьХронологическийПорядок(Кнопка)
	
	Ответ = Вопрос("Сортировать по хронологии конца (Да) или начала (Нет) события?", РежимДиалогаВопрос.ДаНет);
	Если Ответ = КодВозвратаДиалога.Да Тогда
		СтрокаСортировки = "МоментВремени";
	Иначе
		СтрокаСортировки = "МоментВремениНачала";
	КонецЕсли;
	ТаблицаЖурнала.Сортировать(СтрокаСортировки);
	
КонецПроцедуры

Процедура ДействияФормыНастройкаЧтение(Кнопка)
	
	ФормаНастройки = ПолучитьФорму("НастройкаЧтения", ЭтаФорма);
	ФормаНастройки.Открыть();
	
КонецПроцедуры

Процедура ДействияФормыТрасса(Кнопка)
	
	Если Не Кнопка.Пометка Тогда
		Если НачатьТрассу(, Истина) Тогда
			Кнопка.Пометка = Не Кнопка.Пометка;
		КонецЕсли; 
	Иначе
		Кнопка.Пометка = Не Кнопка.Пометка;
		КончитьТрассу();
		ПоказатьТрассу();
	КонецЕсли;
	ЭлементыФормы.ДействияФормы.Кнопки.Загрузить.Доступность = Не Кнопка.Пометка;
	
КонецПроцедуры

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

Процедура ЗагружатьЖурналКлиентаСервераПриИзменении(Элемент = Неопределено)
	
	ОбновитьДоступность();
	Если Истина
		И Не ЗагружатьЖурналКлиента
		И Не ЗагружатьЖурналСервера
	Тогда
		ЭтотОбъект.ЗагружатьТолькоТекущийСеанс = Ложь;
	КонецЕсли; 
	
КонецПроцедуры

Процедура ТекущийСеансПриИзменении(Элемент)
	
	ОбновитьДоступность();
	
КонецПроцедуры

Процедура КоманднаяПанельЖурналРегистрацииТрассы(Кнопка)
	
	ПостроительЗапроса = Новый ПостроительЗапроса;
	ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЖурнала);
	ЭлементОтбора = ПостроительЗапроса.Отбор.Добавить("Описание");
	ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит;
	ЭлементОтбора.Значение = "НачалоТрассы_";
	СтрокиНачалаТрасс = ПостроительЗапроса.Результат.Выгрузить();
	ЭлементОтбора.Значение = "КонецТрассы_";
	СтрокиКонцовТрасс = ПостроительЗапроса.Результат.Выгрузить();
	СтрокиНачалаТрасс.Свернуть("НаСервере, ПроцессОС, Сеанс, МоментВремени, Дата, Пользователь, Инфобаза, Описание");
	СтрокиНачалаТрасс.Колонки.Дата.Имя = "ДатаНачала";
	СтрокиНачалаТрасс.Колонки.МоментВремени.Имя = "МоментВремениНачала";
	СтрокиНачалаТрасс.Колонки.Добавить("ДатаКонца");
	СтрокиНачалаТрасс.Колонки.Добавить("МоментВремениКонца");
	мРегВыражение = мПлатформа.мРегВыражение;
	мРегВыражение.Pattern = "НачалоТрассы_([^_]*)_";
	Трассы.Очистить();
	Для Каждого СтрокаНачалаТрассы Из СтрокиНачалаТрасс Цикл
		CтрокаТрассы = Трассы.Добавить();
		ЗаполнитьЗначенияСвойств(CтрокаТрассы, СтрокаНачалаТрассы); 
		Вхождения = мРегВыражение.НайтиВхождения(СтрокаНачалаТрассы.Описание); 
		Если Вхождения.Количество() > 0 Тогда
			CтрокаТрассы.Префикс = Вхождения[0].SubMatches(0);
		КонецЕсли; 
		СтрокаКонцаТрассы = СтрокиКонцовТрасс.Найти(СтрЗаменить(СтрокаНачалаТрассы.Описание, "НачалоТрассы", "КонецТрассы"), "Описание");
		Если СтрокаКонцаТрассы <> Неопределено Тогда
			CтрокаТрассы.ДатаКонца = СтрокаКонцаТрассы.Дата;
			CтрокаТрассы.МоментВремениКонца = СтрокаКонцаТрассы.МоментВремени;
		КонецЕсли; 
	КонецЦикла;
	ФормаВыбора = ПолучитьФорму("Трассы");
	РезультатФормы = ФормаВыбора.ОткрытьМодально();
	Если РезультатФормы <> Неопределено Тогда
		ЭтаФорма.ЭтоТрасса = Истина;
		ОбновитьДоступность();
		ОтборТаблицы = ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок;
		ОтборТаблицы.Сеанс.Установить(РезультатФормы.Сеанс);
		ОтборТаблицы.ПроцессОС.Установить(РезультатФормы.ПроцессОС);
		ОтборТаблицы.НаСервере.Установить(РезультатФормы.НаСервере);
		ОтборТаблицы.Действие.Установить("getExecSQLStatistics");
		ОтборТаблицы.Действие.ВидСравнения = ВидСравнения.НеРавно;
		//ОтборТаблицы.Описание.Установить("Трассы_" + РезультатФормы.Префикс + "_");
		//ОтборТаблицы.Описание.ВидСравнения = ВидСравнения.НеСодержит;
		ОтборНачало = ОтборТаблицы.МоментВремени;
		ОтборНачало.Использование = Истина;
		Если ЗначениеЗаполнено(РезультатФормы.МоментВремениКонца) Тогда
			ОтборНачало.ВидСравнения = ВидСравнения.Интервал;
			ОтборНачало.ЗначениеС = РезультатФормы.МоментВремениНачала;
			ОтборНачало.ЗначениеПо = РезультатФормы.МоментВремениКонца;
		Иначе
			ОтборНачало.ВидСравнения = ВидСравнения.БольшеИлиРавно;
			ОтборНачало.Значение = РезультатФормы.МоментВремениНачала;
		КонецЕсли; 
		УстановитьБесполезныеКолонки();
	КонецЕсли; 
	
КонецПроцедуры

Процедура ОбновлениеОтображения()
	
	ирКлиент.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма);
	
КонецПроцедуры

Процедура ОтборТекстSDBLНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)

	ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма);
	
КонецПроцедуры

Процедура ДействияФормыКонверторТекстаБД(Кнопка)
	
	Форма = ПолучитьФорму("КонверторТекстаСУБД");
	Форма.Открыть();
	
КонецПроцедуры

Процедура ДействияФормыЖурналРегистрации(Кнопка)
	
	АнализЖурналаРегистрации = ирОбщий.СоздатьОбъектПоИмениМетаданныхЛкс("Обработка.ирАнализЖурналаРегистрации");
	#Если Сервер И Не Сервер Тогда
		АнализЖурналаРегистрации = Обработки.ирАнализЖурналаРегистрации.Создать();
	#КонецЕсли
	Отбор = Новый Структура;
	ПараметрНачалоПериода = НачалоПериода;
	ПараметрКонецПериода = КонецПериода;
	ПараметрНомерСеанса = НомерСеансаИнформационнойБазы();
	Если ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока <> Неопределено Тогда
		Ответ = Вопрос("Отобрать по текущему событию?", РежимДиалогаВопрос.ДаНет);
		Если Ответ = КодВозвратаДиалога.Да Тогда
			ПараметрНачалоПериода = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока.ДатаНачала - 10;
			ПараметрКонецПериода = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока.Дата + 10;
		КонецЕсли;
		ПараметрНомерСеанса = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока.Сеанс;
		Если Не ЗначениеЗаполнено(ПараметрНомерСеанса) Тогда
			ПараметрПользователь = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока.Пользователь;
		КонецЕсли;
	КонецЕсли; 
	Если ЗначениеЗаполнено(ПараметрНомерСеанса) Тогда
		Отбор.Вставить("Сеанс", ПараметрНомерСеанса);
	ИначеЕсли ЗначениеЗаполнено(ПараметрПользователь) Тогда 
		Отбор.Вставить("Пользователь", ПараметрПользователь);
	КонецЕсли; 
	АнализЖурналаРегистрации.ОткрытьСОтбором(ПараметрНачалоПериода, ПараметрКонецПериода, Отбор, 1000);
	
КонецПроцедуры

Процедура БазовыйУровеньСтекаПриИзменении(Элемент)
	
	ОбновитьСтрокиБазовогоУровня();
	УстановитьВидимостьКолонок();
	УстановитьВидимостьКолонок(ЭлементыФормы.СтрокиМодулей, Истина);
	
КонецПроцедуры

Процедура ТаблицаДляПоискаПриИзменении(Элемент)
	
	ЭлементОтбора = ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.ТекстSDBL;
	Если СсылкаДляПоиска = Неопределено Тогда
		ЭлементОтбора.Использование = Ложь;
	Иначе
		ЭлементОтбора.Использование = Истина;
		ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит;
		ЭлементОтбора.Значение = ПреобразоватьЗначениеВSDBL(СсылкаДляПоиска);
	КонецЕсли; 
	ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма);

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

Процедура ТаблицаДляПоискаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	
	ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма);
	
КонецПроцедуры

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

Процедура ПанельТекущейСтрокиПриСменеСтраницы(Элемент, ТекущаяСтраница)
	
	ОбновитьТекущуюСтраницуПанелиЭлемента();
	
КонецПроцедуры

Процедура ОбновитьТекущуюСтраницуПанелиЭлемента()

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

КонецПроцедуры // ОбновитьТекущуюСтраницуПанелиЭлемента()

Процедура ОбновитьТаблицуКонтекста(ЗначениеКонтекста)
	
	Контекст.Очистить();
	Если Не ЗначениеЗаполнено(ЗначениеКонтекста) Тогда
		Возврат;
	КонецЕсли; 
	ТекущаяСтрока = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока;
	мРегВыражение = мПлатформа.мРегВыражение;
	мРегВыражение.Pattern = "\s*([^:\n]*)\:\s+(\d+)\s+:\s+([^:\n]*)(\n|$)";
	РезультатПоиска = мРегВыражение.НайтиВхождения(ЗначениеКонтекста);
	Уровень = 1;
	ТекстыМодулейКэш = Неопределено;
	Для Каждого Вхождение Из РезультатПоиска Цикл
		СтрокаСтека = Контекст.Добавить();
		СтрокаСтека.Модуль = СокрЛП(Вхождение.SubMatches(0));
		СтрокаСтека.НомерСтроки = Число(Вхождение.SubMatches(1));
		СтрокаСтека.СтрокаМодуля = Вхождение.SubMatches(2);
		СтрокаСтека.Метод = мПлатформа.НайтиИмяМетодаСтрокиМодуля(СтрокаСтека.Модуль, СтрокаСтека.НомерСтроки, СтрокаСтека.СтрокаМодуля, ТекстыМодулейКэш);
		СтрокаСтека.Уровень = Уровень;
		СтрокаСтека.Ссылка = ирОбщий.СсылкаСтрокиМодуляЛкс(СтрокаСтека.Модуль, СтрокаСтека.НомерСтроки, СтрокаСтека.Метод);
		Уровень = Уровень + 1;
	КонецЦикла;

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

Процедура ОбновитьТаблицыМетаданных(ТаблицыМетаданныхСтрокой)

	ТаблицыМетаданных.Очистить();
	Массив = ирОбщий.СтрРазделитьЛкс(ТаблицыМетаданныхСтрокой, ",", Истина, Ложь);
	Для Каждого ИмяТаблицы Из Массив Цикл
		СтрокаТаблицы = ТаблицыМетаданных.Добавить();
		СтрокаТаблицы.Имя = ИмяТаблицы;
	КонецЦикла;

КонецПроцедуры // ОбновитьТаблицыМетаданных()
 

Процедура ТаблицаЖурналаПриАктивизацииКолонки(Элемент)
	
	ТекущаяКолонка = ЭлементыФормы.ТаблицаЖурнала.ТекущаяКолонка;
	ТекущаяСтраница = ЭлементыФормы.ПанельСвойств.Страницы.Найти(ТекущаяКолонка.Данные);
	Если ТекущаяСтраница <> Неопределено Тогда
		ЭлементыФормы.ПанельСвойств.ТекущаяСтраница = ТекущаяСтраница;
	КонецЕсли; 
	ирКлиент.ТабличноеПолеПриАктивацииКолонкиЛкс(ЭтаФорма, Элемент);
	
КонецПроцедуры

Процедура КоманднаяПанельЖурналРегистрацииПоказыватьПанельСвойств(Кнопка)
	
	Кнопка.Пометка = Не Кнопка.Пометка;
	ирКлиент.ИзменитьСвернутостьЛкс(ЭтаФорма, Кнопка.Пометка, ЭлементыФормы.ПанельСвойств, ЭтаФорма.ЭлементыФормы.гРазделительЖурналСвойства, ЭтаФорма.Панель, "низ");
	ОбновитьТекущуюСтраницуПанелиЭлемента();

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

Процедура КоманднаяПанельЖурналРегистрацииПоказыватьПанельИтогов(Кнопка)
	
	УстановитьРежимИтогов(Не ИтогиВключены);

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

Процедура ПриИзмененииПараметраИтогов(Элемент)
	
	ОбновитьИтоги(Истина);
	
КонецПроцедуры

Процедура ПриИзмененииСортировкиИтогов(Элемент)
	
	ОбновитьИтоги();
	
КонецПроцедуры

Процедура ВключатьВИтогиИнфобазуПриИзменении(Элемент)
	
	УстановитьФлагПересчетаИтогов();
	//ОбновитьСпискиВыбораПолейСортировки();
	ОбновитьИтоги();
	
КонецПроцедуры

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

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

Процедура ЗагрузитьГотовуюТаблицуЖурнала(Знач ДанныеЖурнала) Экспорт 
	
	ТаблицаЖурнала.Загрузить(ДанныеЖурнала);
	ОпределитьНепустыеКолонки();
	ПодготовитьФормуДляОтображенияНовыхДанных();

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

Процедура ОтборТекстSDBLПриИзменении(Элемент)
	
	ОбновитьИтоги(Истина);
	ЭлементОтбора = ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.ТекстSDBL;
	Если Ложь
		Или ОтборТекстSDBL = Неопределено 
		Или ОтборТекстSDBL = ""
	Тогда
		ЭлементОтбора.Использование = Ложь;
	Иначе
		ЭлементОтбора.Использование = Истина;
		ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит;
		ЭлементОтбора.Значение = ПолучитьСтрокуОтбораТекстаSDBL();
	КонецЕсли; 
	ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма);
	
КонецПроцедуры

Процедура ОтборСтрокаМодуляПриИзменении(Элемент)
	
	ОбновитьИтоги(Истина);
	ЭлементОтбора = ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.СтрокаМодуля;
	Если ОтборСтрокаМодуля = "" Тогда
		ЭлементОтбора.Использование = Ложь;
	Иначе
		ЭлементОтбора.Использование = Истина;
		ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит;
		ЭлементОтбора.Значение = ОтборСтрокаМодуля;
	КонецЕсли; 
	ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма);
	
КонецПроцедуры

Функция ПолучитьСтрокуОтбораТекстаСУБД()
	
	Если Ложь
		Или ОтборТекстСУБД = Неопределено 
		Или ОтборТекстСУБД = ""
	Тогда
		Результат = Неопределено;
	Иначе
		Результат = ОтборТекстСУБД;
		//лРезультат = _ПолучитьИмяТаблицыХраненияДляОтбора(Результат, Истина);
		//Если лРезультат <> Неопределено Тогда
		//	Результат = лРезультат;
		//КонецЕсли; 
	КонецЕсли; 
	Возврат Результат;
	
КонецФункции

Функция ПолучитьСтрокуОтбораТекстаSDBL()
	
	Если Ложь
		Или ОтборТекстSDBL = Неопределено 
		Или ОтборТекстSDBL = ""
	Тогда
		Результат = Неопределено;
	Иначе
		Результат = ОтборТекстSDBL;
		Если ТипЗнч(ОтборТекстSDBL) <> Тип("Строка") Тогда
			Результат = ПреобразоватьЗначениеВSDBL(ОтборТекстSDBL)
		КонецЕсли; 
	КонецЕсли;
	Возврат Результат;
	
КонецФункции

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

Процедура ОтборТекстSDBLНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда
		СтандартнаяОбработка = Ложь;
		ФормаВыбора = ирКлиент.ПолучитьФормуВыбораТаблицыСтруктурыБДЛкс(Ложь, Элемент.Значение);
		ИмяТаблицыХранения = ФормаВыбора.ОткрытьМодально();
		Если ИмяТаблицыХранения = Неопределено Тогда
			Возврат;
		КонецЕсли; 
		ирКлиент.ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, ИмяТаблицыХранения);
	КонецЕсли;
	
КонецПроцедуры

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

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

Процедура ОтборТекстСУБДНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	
	ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма);
	
КонецПроцедуры

Процедура ТекстыБДВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	ТекущаяСтрокаТаблицыЖурнала = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока;
	Если ТекущаяСтрокаТаблицыЖурнала = Неопределено Тогда
		Возврат;
	КонецЕсли; 
	ИмяРеквизита = Колонка.Данные;
	ИмяСвойстваБезМета = ПолучитьИмяСвойстваБезМета(ИмяРеквизита);
	Если мСвойстваСИменамиБД.Свойство(ИмяСвойстваБезМета) Тогда
		ОткрытьТекстБДВКонверторе(ТекущаяСтрокаТаблицыЖурнала[ИмяСвойстваБезМета], Не ирОбщий.СтрокиРавныЛкс(ИмяСвойстваБезМета, ИмяРеквизита),
			"" + ТекущаяСтрокаТаблицыЖурнала.МоментВремени + ИмяСвойстваБезМета, Найти(ИмяСвойстваБезМета, "SDBL") > 0);
	КонецЕсли; 
	
КонецПроцедуры

Процедура КоманднаяПанельЖурналРегистрацииПоказатьВнутренниеСобытия(Кнопка)
	
	ТекущаяСтрока = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока;
	Если ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ФормаПросмотра = ПолучитьФорму("Форма",, ТекущаяСтрока.МоментВремени);
	ЗаполнитьЗначенияСвойств(ФормаПросмотра, ЭтаФорма); 
	ФормаПросмотра.КлючСохраненияПоложенияОкна = "ВнутренниеСобытия";
	ФормаПросмотра.УстановитьРежимИтогов(Ложь);
	ФормаПросмотра.Открыть();
	ЭлементОтбораНачала = ФормаПросмотра.ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.МоментВремениНачала;
	ЭлементОтбораНачала.ВидСравнения = ВидСравнения.БольшеИлиРавно;
	ЭлементОтбораНачала.Использование = Истина;
	ЭлементОтбораНачала.Значение = ТекущаяСтрока.МоментВремениНачала;
	ЭлементОтбораКонца = ФормаПросмотра.ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.МоментВремени;
	ЭлементОтбораКонца.ВидСравнения = ВидСравнения.МеньшеИлиРавно;
	ЭлементОтбораКонца.Использование = Истина;
	ЭлементОтбораКонца.Значение = ТекущаяСтрока.МоментВремени;
	
КонецПроцедуры

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт
	
	ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); 

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

Процедура КлсКомандаНажатие(Кнопка) Экспорт 
	
	ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка);
	
КонецПроцедуры

Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт 
	
	ирКлиент.ОбработчикОжиданияСПараметрамиЛкс();

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

Процедура МинимальнаяДлительностьПриИзменении(Элемент)
	
	ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.Длительность.Использование = Истина;
	
КонецПроцедуры

Процедура ПриЗакрытии()
	
	ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма);
	
КонецПроцедуры

Процедура ДействияФормыСхемаБД(Кнопка)
	
	ПолучитьФорму("СхемаБД").Открыть();
	
КонецПроцедуры

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

Процедура ОбновитьСвойстваМетаНажатие(Элемент)
	
	Если ВключитьСвойстваСИменамиМетаданных Тогда
		ОбновитьСвойстваВТерминахМетаданных();
		Принудительно = ТаблицаЖурнала.Найти(Истина, "СвойстваСИменамиМетаданныхАктуальны") = Неопределено;
		ОбновитьСвойстваВТерминахМетаданныхВФорме(Принудительно);
	КонецЕсли; 
	
КонецПроцедуры

Процедура КонтекстПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт
	
	ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);

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

Процедура КонтекстПриАктивизацииСтроки(Элемент)
	
	ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);

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

Процедура КонтекстВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	Если Колонка = ЭлементыФормы.Контекст.Колонки.Ссылка Тогда
		ирКлиент.ПоказатьСсылкуНаСтрокуМодуляЛкс(ВыбраннаяСтрока.Ссылка);
	ИначеЕсли Колонка = ЭлементыФормы.Контекст.Колонки.Метод Тогда
		//Если ЗначениеЗаполнено(ВыбраннаяСтрока.Метод) Тогда
		//	ирКлиент.ОткрытьМетодМодуляПоИмениЛкс(ВыбраннаяСтрока.Метод);
		//КонецЕсли; 
	ИначеЕсли Колонка = ЭлементыФормы.Контекст.Колонки.Модуль Тогда
		ирКлиент.ОткрытьОбъектМетаданныхПоИмениМодуляЛкс(ВыбраннаяСтрока.Модуль);
		ирКлиент.ПоказатьСсылкуНаМодульКонфигурацииЛкс(ВыбраннаяСтрока.Модуль);
	КонецЕсли; 
	
КонецПроцедуры

Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт
	
	ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные);

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

Процедура ТаблицаЖурналаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт

	ОформлениеСтроки.Ячейки.ТекстБД.Видимость = Ложь;
	ОформлениеСтроки.Ячейки.ТекстБДМета.Видимость = Ложь;
	ЭтоSDBL = ЗначениеЗаполнено(ДанныеСтроки.ТекстSDBL);
	ОформлениеСтроки.Ячейки.ТекстSDBL.Видимость = ЭтоSDBL;
	ОформлениеСтроки.Ячейки.ТекстSDBLМета.Видимость = ЭтоSDBL;
	ОформлениеСтроки.Ячейки.ТекстСУБД.Видимость = Не ЭтоSDBL;
	ОформлениеСтроки.Ячейки.ТекстСУБДМета.Видимость = Не ЭтоSDBL;
	ОформлениеСтроки.Ячейки.Картинка.ОтображатьКартинку = Истина;
	Если Ложь
		Или НРег(ДанныеСтроки.Событие) = НРег("EXCP") 
		Или НРег(ДанныеСтроки.Событие) = НРег("EXCPCNTX")
		Или НРег(ДанныеСтроки.Событие) = НРег("QERR")
	тогда
		ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки = 3;
	КонецЕсли;
	Если Истина
		И ЭтоСобытиеТрассыСУБД(ДанныеСтроки) 
		И ДанныеСтроки.ПланСУБД <> МаркерПланЗапросаНеНайден()
	Тогда
		ОформлениеСтроки.Ячейки.ПланСУБД.УстановитьТекст("<Открыть>");
		ОформлениеСтроки.Ячейки.ПланСУБДМета.УстановитьТекст("<Открыть>");
	КонецЕсли;
	ТекущаяСтрока = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока;
	Если Истина
		И ТекущаяСтрока <> Неопределено
		И ДанныеСтроки.Инфобаза = ТекущаяСтрока.Инфобаза
		И ДанныеСтроки.Соединение_ = ТекущаяСтрока.Соединение_
		И ДанныеСтроки.МоментВремениНачала > ТекущаяСтрока.МоментВремениНачала
		И ДанныеСтроки.МоментВремени < ТекущаяСтрока.МоментВремени
	Тогда
		ОформлениеСтроки.ЦветФона = Новый Цвет(238, 255, 238);
	ИначеЕсли Истина
		//И Не ЗагружатьТолькоТекущийСеанс
		И (Ложь
			Или (Истина
				//И ирКэш.ЛиФайловаяБазаЛкс()
				И ДанныеСтроки.ПроцессОС = ирКэш.ИдентификаторПроцессаОСЛкс()
				И ДанныеСтроки.Компьютер = "")
			Или (Истина
				И Не ирКэш.ЛиФайловаяБазаЛкс()
				И ДанныеСтроки.Сеанс = НомерСеансаИнформационнойБазы()
				И ирОбщий.СтрокиРавныЛкс(ДанныеСтроки.Инфобаза, НСтр(СтрокаСоединенияИнформационнойБазы(), "Ref")))) 
	Тогда
		ОформлениеСтроки.ЦветФона = Новый Цвет(245, 255, 245);
	КонецЕсли; 
	ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);

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

Процедура ИтогиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт
	
	ОформлениеСтроки.Ячейки.НомерСтроки.Значение = Элемент.Значение.Индекс(ДанныеСтроки) + 1;
	ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);

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

Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт 
	
	ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок);

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

Процедура ДействияФормыИТС(Кнопка)
	
	ирКлиент.ОткрытьСсылкуИТСЛкс("https://its.1c.ru/db/v?doc/bookmark/adm/TI000000151");
	
КонецПроцедуры

Процедура ВыполнятьНаСервереПриИзменении(Элемент)
	
	ОбновитьДоступность();
	
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	ирОбщий.ПроверитьПлатформаНеWindowsЛкс(Отказ,, Истина);
КонецПроцедуры

Процедура ТаблицыМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	ирКлиент.ОткрытьОбъектМетаданныхЛкс(ВыбраннаяСтрока.Имя);
	
КонецПроцедуры

Процедура ДействияФормыПросмотрТекстаПланаЗапроса(Кнопка)
	
	ПолучитьФорму("ПланЗапросаMSSQL").Открыть();
	
КонецПроцедуры

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

Процедура НачалоПериодаРегулирование(Элемент, Направление, СтандартнаяОбработка)
	ирКлиент.ПолеВводаРегулированиеЛкс(Элемент, Направление, СтандартнаяОбработка);
КонецПроцедуры

Процедура КонецПериодаРегулирование(Элемент, Направление, СтандартнаяОбработка)
	ирКлиент.ПолеВводаРегулированиеЛкс(Элемент, Направление, СтандартнаяОбработка);
КонецПроцедуры

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

Процедура ДействияФормыПараметрыСУБД(Кнопка)
	
	ирКлиент.ОткрытьФормуСоединенияСУБДЛкс();
	
КонецПроцедуры

Процедура ДействияФормыАварийныеКонцыПроцессов(Кнопка)
	ЭтотОбъект.ПериодПоследниеМинуты = 10;
	ЭтотОбъект.ЗагружатьЖурналСервера = Истина;
	ЭтотОбъект.ЗагружатьЖурналКлиента = Истина;
	ЭтотОбъект.ЗагружатьТолькоТекущийСеанс = Ложь;
	СтарыйФильтрСобытий = ЭтотОбъект.СписокЗагружаемыхТиповСобытий.ВыгрузитьЗначения();
	ЭтотОбъект.СписокЗагружаемыхТиповСобытий.Очистить();
	ЭтотОбъект.СписокЗагружаемыхТиповСобытий.Добавить("EXCP");
	ОбновитьДоступность();
	ОбновитьТаблицуЖурнала();
	ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.Сбросить();
	ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.ИсключениеОС.Установить("");
	ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.ИсключениеОС.ВидСравнения = ВидСравнения.НеРавно;
	Построитель = ирКлиент.ПостроительТабличногоПоляСОтборомКлиентаЛкс(ЭлементыФормы.ТаблицаЖурнала);
	//! Построитель.Результат = 0 // см. ТаблицаЖурнала
	Отобранные = Построитель.Результат.Выгрузить();
	Если Отобранные.Количество() Тогда
		ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока = ТаблицаЖурнала.Найти(Отобранные[Отобранные.Количество()-1].МоментВремени, "МоментВремени");
	КонецЕсли;
	ЭтотОбъект.СписокЗагружаемыхТиповСобытий.ЗагрузитьЗначения(СтарыйФильтрСобытий);
КонецПроцедуры

ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Форма");

// Установим ключевые группировки для страниц итогов
ПанельИтоги = ЭлементыФормы.ПанельИтоги;
ПанельИтоги.Страницы.События.Значение = Новый Структура("Группировка, Рассчитано", "Событие", Ложь);
ПанельИтоги.Страницы.ТекстыSDBL.Значение = Новый Структура("Группировка, Рассчитано", "ТекстSDBLШаблон, ТекстSDBLШаблонМета", Ложь);
ПанельИтоги.Страницы.ТекстыСУБД.Значение = Новый Структура("Группировка, Рассчитано", "ТекстСУБДШаблон, ТекстСУБДШаблонМета", Ложь);
ПанельИтоги.Страницы.БлокировкиУпр.Значение = Новый Структура("Группировка, Рассчитано", "Regions, RegionsМета", Ложь);
ПанельИтоги.Страницы.СтрокиМодулей.Значение = Новый Структура("Группировка, Рассчитано", "СтрокаМодуля", Ложь);
ПанельИтоги.Страницы.Пользователи.Значение = Новый Структура("Группировка, Рассчитано", "Пользователь", Ложь);
ПанельИтоги.Страницы.Описания.Значение = Новый Структура("Группировка, Рассчитано", "ОписаниеШаблон", Ложь);
ПанельИтоги.Страницы.ТипыИсключений.Значение = Новый Структура("Группировка, Рассчитано", "ТипИсключения, ПримерОписания", Ложь);
ЭтаФорма.СобытияПолеСортировки1 = "Количество";
ЭтаФорма.СтрокиМодулейПолеСортировки1 = "Длительность";
ЭтаФорма.ТекстыSDBLПолеСортировки1 = "Длительность";
ЭтаФорма.ТекстыСУБДПолеСортировки1 = "Длительность";
ЭтаФорма.БлокировкиУпрПолеСортировки1 = "Длительность";
ЭтаФорма.ПользователиПолеСортировки1 = "Длительность";
ЭтаФорма.ОписанияПолеСортировки1 = "Количество";
ЭтаФорма.ТипыИсключенийПолеСортировки1 = "Количество";

МассивКолонокБезОтбора = Новый Массив;
МассивКолонокБезОтбора.Добавить("ПредставлениеПриложения");
МассивКолонокБезОтбора.Добавить("ПредставлениеСобытия");
МассивКолонокБезОтбора.Добавить("ИмяПользователя");
МассивКолонокБезОтбора.Добавить("Дата");
МассивКолонокБезОтбора.Добавить("ДатаНачала");
МассивКолонокБезОтбора.Добавить("Соединение");
МассивКолонокБезОтбора.Добавить("ПредставлениеМетаданных");

СписокВыбора = ЭлементыФормы.Автообновление.СписокВыбора;
СписокВыбора.Добавить(5);
СписокВыбора.Добавить(10);
СписокВыбора.Добавить(30);

СписокВыбора = ЭлементыФормы.МаксТысячСобытий.СписокВыбора;
СписокВыбора.Добавить(1);
СписокВыбора.Добавить(10);
СписокВыбора.Добавить(100);
СписокВыбора.Добавить(500);

СписокВыбора = ЭлементыФормы.ПериодПоследниеМинуты.СписокВыбора;
СписокВыбора.Добавить(5);
СписокВыбора.Добавить(10);
СписокВыбора.Добавить(30);
СписокВыбора.Добавить(60);
СписокВыбора.Добавить(120);
СписокВыбора.Добавить(360);

ЭлементыФормы.ТаблицаЖурнала.ОтборСтрок.Длительность.ВидСравнения = ВидСравнения.БольшеИлиРавно;
//мИзмененныеВидимостиКолонок = Новый Структура();
мЧислоПолейПорядка = 2;
мВнешниеНаборыДанных = Новый Структура("Основной", ТаблицаЖурнала);
мОписаниеТехножурнала = ирОбщий.СоздатьОбъектПоИмениМетаданныхЛкс("Обработка.ирНастройкаТехножурнала");
#Если Сервер И Не Сервер Тогда
мОписаниеТехножурнала = Обработки.ирНастройкаТехножурнала.Создать();    
#КонецЕсли
//мСоставСвойствСобытий = мОписаниеТехножурнала.ПолучитьСоставСвойствСобытий();
мОписаниеТехножурнала.ЗаполнитьСписокСвойствСобытий();
мСвойстваСобытий = мОписаниеТехножурнала.Свойства;
ЭтаФорма.ИтогиВключены = Истина;
ЭтаФорма.СобытияУчитыватьПустое = Истина;
СвойстваВоВнутреннихИменах = Истина;
мБесполезныеКолонки = Новый Структура();
Если НЕ ЗначениеЗаполнено(НачалоПериода) Тогда
	НачалоПериода = НачалоДня(ТекущаяДата());
КонецЕсли;

// Антибаг платформы. В портативном варианте очищается свойство "Данные", если оно указывает на отбор табличной части
ЭлементыФормы.ФлажокДлительность.Данные = "ЭлементыФормы.ТаблицаЖурнала.Отбор.Длительность.Использование";
ЭлементыФормы.НадписьДлительность.Данные = "ЭлементыФормы.ТаблицаЖурнала.Отбор.Длительность.Значение";
ЭлементыФормы.МинимальнаяДлительность.Данные = "ЭлементыФормы.ТаблицаЖурнала.Отбор.Длительность.Значение";

ОсновнойАнализТехножурнала = ирКэш.АнализТехножурналаЛкс();

