Функция СохраняемаяНастройкаФормы(выхНаименование, выхИменаСвойств) Экспорт 
	выхИменаСвойств = "Форма.ПроверятьКороткиеЛитералы, Форма.Автооткрытие, Форма.ИзмененныеПозже";
	Возврат Неопределено;
КонецФункции

Процедура ЗагрузитьНастройкуВФорме(НастройкаФормы, ДопПараметры) Экспорт 
	
	ирКлиент.ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); 
	
КонецПроцедуры

Процедура ПриОткрытии()
	
	ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма);
	ирКлиент.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма);
	ЭтаФорма.КоличествоНайдено = ОшибкиМодуля.Количество();
	//ЭлементыФормы.ИзмененныеПозже.Доступность = мПлатформа.мСвязанныйКонфигуратор <> Неопределено;
	ПриЛюбомОткрытии();

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

Процедура ПриЛюбомОткрытии() Экспорт
	ЭтаФорма.ДатаОбновленияКэша = ирОбщий.ДатаОбновленияКэшаМодулейЛкс();
	ирОбщий.ОбновитьТекстПослеМаркераЛкс(ЭтаФорма.Заголовок,, ПараметрМодуль, ": ");
	//Обновить(); // Не помогает обновить отображаемый заголовок сразу
КонецПроцедуры

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

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

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

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

Процедура ВыделитьСловоОшибки(ВыбраннаяСтрока, Знач МодульМетаданных, Знач ПолеТекстаЛ) Экспорт
	МетодМодуля = мПлатформа.СтрокаМетодаМодуляПоИмени(МодульМетаданных, ВыбраннаяСтрока.Метод);
	Если МетодМодуля = Неопределено Тогда
		НачальнаяПозицияВПоле = мМодульМетаданных.ПозицияПрограммы;
	Иначе 
		НачальнаяПозицияВПоле = МетодМодуля.ПозицияТела;
	КонецЕсли;
	НачальнаяПозицияВПоле = НачальнаяПозицияВПоле + ВыбраннаяСтрока.ПозицияВМетоде;
	ДлинаСлова = СтрДлина(ВыбраннаяСтрока.Слово) - ?(Прав(ВыбраннаяСтрока.Слово, 1) = "(", 1, 0);
	ПолеТекстаЛ.УстановитьГраницыВыделения(НачальнаяПозицияВПоле, НачальнаяПозицияВПоле + ДлинаСлова,,, Истина);
КонецПроцедуры

Процедура ДействияФормыОбновить(Кнопка)
	
	ОбновитьОшибки();
	
КонецПроцедуры

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

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

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

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

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

Процедура НадписьКэшМодулейНажатие(Элемент)
	ПолучитьФорму("ФормаНастройки", ФормаВладелец).Открыть();
КонецПроцедуры

Процедура ПриПовторномОткрытии(СтандартнаяОбработка)
	ПриЛюбомОткрытии();
КонецПроцедуры

Процедура ДействияФормыОбновитьВсе(Кнопка)
	ОбновитьОшибки(Истина);
КонецПроцедуры

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

ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирКлсПолеТекстаПрограммы.Форма.ОшибкиМодуля");
Автооткрытие = Истина; 

