Перем мПлатформа;
Перем мСтрокаДляПодсветки;
Перем ИмяКлассаПоляТекстаПрограммы;
Перем ФайлСтиля;
Перем ФайлШаблона;
Перем ПрефиксСсылкиВстроенногоЯзыка;
Перем ПрефиксСсылкиЯзыкаЗапросов;
Перем ПрефиксСсылки;
Перем ПутьКЭлементу;
Перем СтароеСловоИндекса;
Перем РазрешитьУстановкуСловаИндекса;
Перем ПодходящиеСлова;
Перем ТекущаяСтраницаУстановлена Экспорт;
Перем ТекущийЯзыкПрограммыСодержания;
Перем ТекущийЯзыкПрограммыИндекса; 
Перем АрхивСинтаксПомощника;
Перем мКниги;

Функция ЗагрузитьНовуюСтраницу(ПутьКЭлементуБезПрефиксаАрхива, ЛиЗагружатьПовторно = Ложь, ИмяАрхива = "")

	#Если Сервер И Не Сервер Тогда
		мПлатформа = Обработки.ирПлатформа.Создать();
	#КонецЕсли
	//ПутьКЭлементуБезПрефиксаАрхива = СтрЗаменить(ПутьКЭлементуБезПрефиксаАрхива, ПрефиксСсылки + "/", "");
	Если ЗначениеЗаполнено(ИмяАрхива) Тогда
		АрхивСинтаксПомощника = ИмяАрхива;
	КонецЕсли; 
	НовыйПутьКЭлементу = "//" + АрхивСинтаксПомощника + ПутьКЭлементуБезПрефиксаАрхива; // Тут смотреть полный логический путь
	Если Истина
		И Не ЛиЗагружатьПовторно
		И НовыйПутьКЭлементу = ПутьКЭлементу 
	Тогда
		Возврат Неопределено;
	КонецЕсли;
	ПутьКЭлементу = НовыйПутьКЭлементу;
	ЭтаФорма.АктивныйЯзыкПрограммы = ЯзыкПрограммыИзПутиКЭлементу();
	НовыйАдрес = РаспаковатьЭлементАрхиваСинтаксПомощника(ПутьКЭлементу);
	Если НовыйАдрес = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	ФайлСтилей = ФайлСтилейСинтаксПомощника();
	ТекстДокумента = ирОбщий.ПрочитатьТекстИзФайлаЛкс(ирОбщий.ПервыйФрагментЛкс(НовыйАдрес, "#"));
	Если Найти(ТекстДокумента, "<head>") > 0 Тогда
		МаркерХед = "<head>";
	ИначеЕсли Найти(ТекстДокумента, "<HEAD>") > 0 Тогда
		МаркерХед = "<HEAD>";
	ИначеЕсли Найти(ТекстДокумента, "<Head>") > 0 Тогда
		МаркерХед = "<Head>";
	КонецЕсли;
	Если МаркерХед <> Неопределено Тогда
		//ТегБазы = "<BASE href=""" + ПрефиксСсылки + "/" + ПутьКЭлементу + """>";
		ТегБазы = "<BASE href=""" + ПрефиксСсылки + ПутьКЭлементуБезПрефиксаАрхива + """>";
		ДобавлятьБазу = Найти(ТекстДокумента, ТегБазы) = 0;
		Если ДобавлятьБазу Тогда
			ТекстДокумента = СтрЗаменить(ТекстДокумента, МаркерХед, МаркерХед + ТегБазы);
		КонецЕсли;
	КонецЕсли;
	Если ирКэш.ЛиПлатформаWindowsЛкс() Тогда
		Документ = ирОбщий.ПолучитьHtmlFileИзТекстаHtmlЛкс(ТекстДокумента);
		Документ.createStyleSheet(ФайлСтилей.ПолноеИмя);
		ТекстДокумента = Документ.documentElement.outerHtml;
	Иначе
		// Грязно
		Позиция = ирОбщий.СтрНайтиЛкс(ТекстДокумента, "</head>",,,, Ложь);
		Если Позиция > 0 Тогда
			ТегСтиля = "<LINK rel=stylesheet href=""" + ФайлСтилей.ПолноеИмя + """>";
			ТекстДокумента = Лев(ТекстДокумента, Позиция - 1) + ТегСтиля + Сред(ТекстДокумента, Позиция);
		Иначе
			Пустышка = 0; // для отладки
		КонецЕсли; 
	КонецЕсли; 
	ирОбщий.ЗаписатьТекстВФайлЛкс(ТекстДокумента, НовыйАдрес);
	Возврат НовыйАдрес; // Новый адрес

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

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

	Если Найти(НовыйАдрес, ПрефиксСсылкиЯзыкаЗапросов) > 0 Тогда
		ПрефиксСсылки = ПрефиксСсылкиЯзыкаЗапросов;
	ИначеЕсли Найти(НовыйАдрес, ПрефиксСсылкиВстроенногоЯзыка) > 0 Тогда
		ПрефиксСсылки = ПрефиксСсылкиВстроенногоЯзыка;
	//Иначе
	//	ПрефиксСсылки = "";
	КонецЕсли;

	МаркерДопАрхива = "v8help://";
	Если Найти(НовыйАдрес, МаркерДопАрхива) = 1 Тогда
		АдресКниги = ирОбщий.ПервыйФрагментЛкс(Сред(НовыйАдрес, СтрДлина(МаркерДопАрхива) + 1), "/");
		НовыйАдрес = Сред(НовыйАдрес, СтрДлина(МаркерДопАрхива) + 1 + СтрДлина(АдресКниги));
		Книга = мКниги.Найти(АдресКниги, "Адрес");
		Если Книга <> Неопределено Тогда
			выхИмяАрхива = Книга.ИмяАрхива;
		Иначе
			выхИмяАрхива = АрхивСинтаксПомощника;
		КонецЕсли;
	Иначе
		НовыйАдрес = ирОбщий.ПоследнийФрагментЛкс(НовыйАдрес, "file://");
	КонецЕсли; 
	Возврат НовыйАдрес;

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

Процедура ПолеHTMLДокументаonclick(Элемент, pEvtObj)
	
	htmlElement = pEvtObj.srcElement;
	Пока htmlElement <> Неопределено И htmlElement <> Null И ВРег(htmlElement.tagName) <> "A" Цикл
		htmlElement = htmlElement.parentElement;
	КонецЦикла;
	Если htmlElement = Неопределено Или htmlElement = Null Тогда
		Возврат;
	КонецЕсли;
	ИмяАрхива = "";
	НовыйАдрес = ПолучитьНовыйАдресИзСсылки(htmlElement.href, ИмяАрхива);
	Если Найти(НовыйАдрес, "http://") = 1 Тогда
		ЗапуститьПриложение(НовыйАдрес);
	Иначе
		НовыйАдрес = ЗагрузитьНовуюСтраницу(НовыйАдрес,, ИмяАрхива);
		//НовыйАдрес = "file:///" + НовыйАдрес;
		htmlElement.href = НовыйАдрес;
	КонецЕсли; 
	
КонецПроцедуры

Процедура ОткрытьАдрес(Знач НовыйОтносительныйАдрес = "", пСтрокаДляПодсветки = "", ЛиАдресСПрефиксомАрхива = Истина) Экспорт
	
	Если ЗначениеЗаполнено(НовыйОтносительныйАдрес) И ЛиАдресСПрефиксомАрхива Тогда
		ЭтаФорма.АктивныйЯзыкПрограммы = ЯзыкПрограммыИзПутиКЭлементу(НовыйОтносительныйАдрес);
		Если Найти(НовыйОтносительныйАдрес, "//") = 1 Тогда
			АрхивСинтаксПомощника = ирОбщий.ПервыйФрагментЛкс(Сред(НовыйОтносительныйАдрес, СтрДлина("//") + 1), "/");
			НовыйОтносительныйАдрес = Сред(НовыйОтносительныйАдрес, СтрДлина("//" + АрхивСинтаксПомощника) + 1);
			ПрефиксСсылки = ПрефиксСсылкиЯзыкаЗапросов; // Криво. Здесь может быть нужно другие префиксы устанавливать
		Иначе
			АрхивСинтаксПомощника = "shcntx_ru";
			ПрефиксСсылки = ПрефиксСсылкиВстроенногоЯзыка;
		КонецЕсли;
	КонецЕсли; 
	//Если ПрефиксАрхива = "" Тогда
	//	НовыйОтносительныйАдрес = ПрефиксСсылкиВстроенногоЯзыка + НовыйОтносительныйАдрес;
	//КонецЕсли; 
	ЛиСтрокаДляПодсветкиИзменилась = мСтрокаДляПодсветки <> пСтрокаДляПодсветки;
	мСтрокаДляПодсветки = пСтрокаДляПодсветки;
	Если Не Открыта() Тогда
		Открыть();
	КонецЕсли;
	Если ЗначениеЗаполнено(НовыйОтносительныйАдрес) Тогда
		НовыйАдрес = ЗагрузитьНовуюСтраницу(НовыйОтносительныйАдрес, ЛиСтрокаДляПодсветкиИзменилась);
		Если НовыйАдрес = Неопределено Тогда
			Возврат;
		КонецЕсли;
		Если ирКэш.НомерВерсииПлатформыЛкс() = 803022 Тогда
			// Антабиг платформы 8.3.22 https://www.hostedredmine.com/issues/954525
			Файл = Новый Файл(ирОбщий.ПервыйФрагментЛкс(НовыйАдрес, "#"));
			Если Не ЗначениеЗаполнено(Файл.Расширение) Тогда
				КопироватьФайл(Файл.ПолноеИмя, Файл.ПолноеИмя + ".html");
				НовыйАдрес = СтрЗаменить(НовыйАдрес, Файл.ПолноеИмя, Файл.ПолноеИмя + ".html");
			КонецЕсли;
		КонецЕсли;
		ЭлементыФормы.ПолеHTMLДокумента.Перейти(НовыйАдрес);
	КонецЕсли; 
	#Если ТолстыйКлиентОбычноеПриложение Тогда
		ЛиАктивизироватьОкноСправкиПриЕгоОткрытии = ирОбщий.ВосстановитьЗначениеЛкс(ИмяКлассаПоляТекстаПрограммы + ".ЛиАктивизироватьОкноСправкиПриЕгоОткрытии");
		Если Истина
			И ЛиАктивизироватьОкноСправкиПриЕгоОткрытии <> Истина
			И ВладелецФормы <> Неопределено
		Тогда
			ирКлиент.Форма_АктивироватьОткрытьЛкс(ВладелецФормы)
		КонецЕсли;
	#КонецЕсли

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

Процедура ПолеHTMLДокументаДокументСформирован(Элемент)
	
	Если ЭлементыФормы.ПолеHTMLДокумента.Документ.location.href = "about:blank" Тогда
		Возврат;
	КонецЕсли;
	Документ = ЭлементыФормы.ПолеHTMLДокумента.Документ;
	//ФайлСтилей = мПлатформа.ФайлСтилейСинтаксПомощника();
	//ЭлементыФормы.ПолеHTMLДокумента.Документ.createStyleSheet(ФайлСтилей.ПолноеИмя);
	СодержаниеСтраницы = Документ.body.innerHTML;
	Если мСтрокаДляПодсветки <> "" Тогда
		СодержаниеСтраницы = СтрЗаменить(СодержаниеСтраницы, мСтрокаДляПодсветки,
			"<font color=""#FF0000""><b>" + мСтрокаДляПодсветки + "</b></font>");
		//мСтрокаДляПодсветки = "";
	КонецЕсли;
	ТекстКорневогоТега = "<div class=""V8SH_textarea"" valign=""bottom"">";
	Если Найти(СодержаниеСтраницы, ТекстКорневогоТега) = 0 Тогда
		Документ.body.innerHTML = "<body>" + ТекстКорневогоТега + СодержаниеСтраницы + "</div></body>";
	Иначе
		// https://www.hostedredmine.com/issues/896283
		ЭлементыФормы.ПолеHTMLДокумента.Документ.location.reload();
	КонецЕсли; 
	ЗаголовокДокумента = ЭлементыФормы.ПолеHTMLДокумента.Документ.getElementsByTagName("HEAD").item(0);
	ТегиБазы = ЗаголовокДокумента.getElementsByTagName("BASE");
	Если ТегиБазы.length > 0 Тогда
		Для Каждого ТегБазы Из ТегиБазы Цикл
			Прервать;
		КонецЦикла; 
		ПолнаяСсылка = ТегБазы.href; // Криво "base"
		ПутьКЭлементу = "//" + АрхивСинтаксПомощника + ПолучитьНовыйАдресИзСсылки(ПолнаяСсылка);
		Если ЭлементыФормы.ВерхняяПанель.ТекущаяСтраница = ЭлементыФормы.ВерхняяПанель.Страницы.Содержание Тогда
			ПодключитьОбработчикОжидания("ЗагрузитьСодержаниеОтложенно", 0.1, Истина);
		КонецЕсли; 
	КонецЕсли;
	// https://www.hostedredmine.com/issues/886483
	ИмяЯкоря = ирОбщий.ПоследнийФрагментЛкс(Документ.URL, "#", Ложь);
	Если ЗначениеЗаполнено(ИмяЯкоря) Тогда
		ЦелевойУзел = Документ.querySelector("[name = " + ИмяЯкоря + "]");
		Если ЦелевойУзел <> Неопределено Тогда
			ЦелевойУзел.scrollIntoView();
		КонецЕсли; 
	КонецЕсли; 
	ПоследниеВыбранныеДобавить();
 
КонецПроцедуры

Процедура ЗагрузитьСодержаниеОтложенно() Экспорт 

	ЗагрузитьСодержание();

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

Процедура ЗагрузитьИндекс(ОпределятьКнигуПоОткрытойСтранице = Ложь) Экспорт

	#Если Сервер И Не Сервер Тогда
		мПлатформа = Обработки.ирПлатформа.Создать();
	#КонецЕсли
	Если ОпределятьКнигуПоОткрытойСтранице Тогда
		ЯзыкПрограммы = ЯзыкПрограммыИзПутиКЭлементу();
	Иначе
		ЯзыкПрограммы = АктивныйЯзыкПрограммы;
	КонецЕсли; 
	Если ТекущийЯзыкПрограммыИндекса = ЯзыкПрограммы Тогда
		Возврат;
	КонецЕсли;
	лТаблицаИндекса = ПрочитатьИндексЯзыкаСинтаксПомощника(ЯзыкПрограммы);
	Если лТаблицаИндекса = Неопределено Тогда
		лТаблицаИндекса = ТаблицаИндекса.ВыгрузитьКолонки();
		КлючПоиска = Новый Структура("НПутьКСлову");
		Если ЯзыкПрограммы = 0 Тогда 
			РабочийКаталог = ПолучитьИмяВременногоФайла();
			СоздатьКаталог(РабочийКаталог);
			ФайлРаспаковщикаZIP = мПлатформа.ПолучитьФайлРаспаковщикаZIP(Истина);
			Для Каждого СтрокаКнига Из мКниги.НайтиСтроки(Новый Структура("ЯзыкПрограммы", ЯзыкПрограммы)) Цикл
				ФайлИндекса = АрхивСинтаксПомощникаПоИмени(2, СтрокаКнига.ИмяАрхива);
				//ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -j " + ФайлСодержания.ПолноеИмя 
				ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -o """ + ФайлИндекса.ПолноеИмя + """ -d """ + РабочийКаталог + """");
				//Shell.Run( + " -o " + ФайлСодержания.ПолноеИмя + " + -d " + РабочийКаталог + "PackBlock", 0, Истина);
				МассивФайлов = НайтиФайлы(РабочийКаталог, "*.*");
				Если МассивФайлов.Количество() > 0 Тогда
					мРегВыражение = мПлатформа.мРегВыражение;
					мРегВыражение.Global = Истина;
					//мРегВыражение.Pattern = """ru"",""([^""]+)"",\d+,\d+,\d+,\d+,""([^""]+)""";
					мРегВыражение.Pattern = """ru"",""([^""]+)"",\d+,\d+,\d+,\d+((?:,""([^""]+)"")+)"; // Там может быть несколько страниц справки на одно слово
					Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(МассивФайлов.Количество(), "Построение индекса справки");
					Для Каждого ФайлЧастиИндекса Из МассивФайлов Цикл
				        ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
						Текст = Новый ТекстовыйДокумент;
						Текст.Прочитать(ФайлЧастиИндекса.ПолноеИмя);
						ТекстФайла = Текст.ПолучитьТекст();
						РезультатПоиска = мРегВыражение.НайтиВхождения(ТекстФайла);
						Для Каждого Вхождение Из РезультатПоиска Цикл
							СтрокаИндекса = лТаблицаИндекса.Добавить();
							СтрокаИндекса.ПутьКСлову = Вхождение.SubMatches(0);
							СтрокаИндекса.НПутьКСлову = НРег(СтрокаИндекса.ПутьКСлову);
							СтрокаИндекса.ПутьКОписанию = СтрЗаменить(Сред(Вхождение.SubMatches(1), 2), """", "");
							ПутиКОписанию = ирОбщий.СтрРазделитьЛкс(СтрокаИндекса.ПутьКОписанию, ",");
							СтрокаИндекса.Варианты = ПутиКОписанию.Количество();
						КонецЦикла; 
					КонецЦикла;
					ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
				КонецЕсли; 
			КонецЦикла;
		Иначе
			// Для остальных языков индекса нет, поэтому строим свой
			мПлатформа.ИнициацияОписанияМетодовИСвойств();
			МассивКоллекций = Новый Массив();
			СтрокиСлов = мПлатформа.ТаблицаКонтекстов.НайтиСтроки(Новый Структура("ЯзыкПрограммы", ЯзыкПрограммы));
			МассивКоллекций.Добавить(СтрокиСлов);
			СтрокиСлов = мПлатформа.ТаблицаШаблоновКонтекстов.НайтиСтроки(Новый Структура("ЯзыкПрограммы", ЯзыкПрограммы));
			МассивКоллекций.Добавить(СтрокиСлов);
			Для Каждого Коллекция Из МассивКоллекций Цикл
				Для Каждого СтрокаСлова Из Коллекция Цикл
					СуществующаяСтрока = лТаблицаИндекса.Найти(СтрокаСлова.НСлово, "НПутьКСлову");
					Если СуществующаяСтрока <> Неопределено Тогда
						СуществующаяСтрока.ПутьКОписанию = ""; // Чтобы было понятно, что неоднозначное слово
						Продолжить;
					КонецЕсли; 
					СтрокаИндекса = лТаблицаИндекса.Добавить();
					СтрокаИндекса.НПутьКСлову = СтрокаСлова.НСлово;
					СтрокаИндекса.ПутьКСлову = СтрокаСлова.Слово;
					СтрокаИндекса.ПутьКОписанию = СтрокаСлова.ПутьКОписанию;
					СтрокаИндекса.Варианты = 1;
				КонецЦикла; 
			КонецЦикла;
		КонецЕсли; 
		//лТаблицаИндекса.Индексы.Добавить("НПутьКСлову");
		лТаблицаИндекса.Сортировать("НПутьКСлову");
		ЗаписатьИндексЯзыкаСинтаксПомощника(ЯзыкПрограммы, лТаблицаИндекса);
	КонецЕсли;
	ТаблицаИндекса.Загрузить(лТаблицаИндекса);
	ТекущийЯзыкПрограммыИндекса = ЯзыкПрограммы;
	
КонецПроцедуры

Процедура ЗагрузитьСодержание(ОпределятьКнигуПоОткрытойСтранице = Ложь) Экспорт

	Если ОпределятьКнигуПоОткрытойСтранице Тогда
		ЯзыкПрограммы = ЯзыкПрограммыИзПутиКЭлементу();
	Иначе
		ЯзыкПрограммы = АктивныйЯзыкПрограммы;
	КонецЕсли; 
	Если ТекущийЯзыкПрограммыСодержания = ЯзыкПрограммы Тогда
		Возврат;
	КонецЕсли;
	лСодержание = СодержанияАрхивовСправки[АктивныйЯзыкПрограммы];
	Если лСодержание = Неопределено Тогда
		лСодержание = Новый ДеревоЗначений;
		лСодержание.Колонки.Добавить("ИмяРаздела");
		лСодержание.Колонки.Добавить("ПутьКЭлементу");
		лСодержание.Колонки.Добавить("ЭтоПапка");
		РабочийКаталог = ПолучитьИмяВременногоФайла();
		СоздатьКаталог(РабочийКаталог);
		ФайлРаспаковщикаZIP = мПлатформа.ПолучитьФайлРаспаковщикаZIP(Истина);
		Для Каждого СтрокаКнига Из мКниги.НайтиСтроки(Новый Структура("ЯзыкПрограммы", ЯзыкПрограммы)) Цикл
			ФайлСодержания = АрхивСинтаксПомощникаПоИмени(1, СтрокаКнига.ИмяАрхива);
			//ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -j " + ФайлСодержания.ПолноеИмя 
			ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -o """ + ФайлСодержания.ПолноеИмя + """ -d """ + РабочийКаталог + """");
			//Shell.Run( + " -o " + ФайлСодержания.ПолноеИмя + " + -d " + РабочийКаталог + "PackBlock", 0, Истина);
			МассивФайлов = НайтиФайлы(РабочийКаталог, "*");
			Если МассивФайлов.Количество() > 0 Тогда
				Текст = Новый ТекстовыйДокумент;
				Текст.Прочитать(МассивФайлов[0].ПолноеИмя);
				мРегВыражение = мПлатформа.мРегВыражение;
				мРегВыражение.Global = Истина;
				мРегВыражение.Pattern = "\{(\d+),(\d+),.*\n\{.*\n\{.*,\n\{""(ru|#)"",""(.*)""}.*\n(?:\{""en"",""(.*)""}\n)?\},""([^""]*)""\}";
				Текст = Новый ТекстовыйДокумент;
				Текст.Прочитать(МассивФайлов[0].ПолноеИмя);
				ТекстФайла = Текст.ПолучитьТекст();
				РезультатПоиска = мРегВыражение.НайтиВхождения(ТекстФайла);
				Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(РезультатПоиска.Количество(), "Построение содержания справки");
				МассивЭлементов = Новый Массив;
				СоответствиеРодителей = Новый Соответствие();
				Для Каждого Вхождение Из РезультатПоиска Цикл
			        ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
					Номер = Число(Вхождение.SubMatches(0));
					НомерРодителя = Число(Вхождение.SubMatches(1));
					Если НомерРодителя = 0 Тогда
						КоллекцияСтрок = лСодержание.Строки;
					Иначе
						КоллекцияСтрок = СоответствиеРодителей.Получить(НомерРодителя).Строки;
					КонецЕсли;
					СтрокаДерева = КоллекцияСтрок.Добавить();
					СтрокаДерева.ЭтоПапка = Вхождение.SubMatches(2) = "#";
					СтрокаДерева.ИмяРаздела = Вхождение.SubMatches(3);
					//СтрокаДерева.АнглийскийИдентификатор = СтрЗаменить(АнглийскийИдентификатор, """" + """", """");
					СтрокаДерева.ПутьКЭлементу = Вхождение.SubMatches(5);
					Если Не ирОбщий.СтрНачинаетсяСЛкс(СтрокаДерева.ПутьКЭлементу, "//") Тогда
						СтрокаДерева.ПутьКЭлементу = "//" + СтрокаКнига.ИмяАрхива + СтрокаДерева.ПутьКЭлементу;
					КонецЕсли;
					//ВычислитьИндексКартинки(СтрокаДерева, ЧислоПодчиненных);
					СоответствиеРодителей.Вставить(Номер, СтрокаДерева);
				КонецЦикла; 
				ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
			КонецЕсли;
		КонецЦикла;
		СодержанияАрхивовСправки[АктивныйЯзыкПрограммы] = лСодержание;
	КонецЕсли;
	Содержание = лСодержание;
	Если Содержание.Строки.Количество() = 1 Тогда
		ЭлементыФормы.Содержание.Развернуть(Содержание.Строки[0]);
	КонецЕсли; 
	ТекущийЯзыкПрограммыСодержания = ФайлСодержания;
	
КонецПроцедуры

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

Процедура КоманднаяПанельХтмлНайтиВДереве(Кнопка)
	
	НайтиТекущуюСтраницуВДереве();
	
КонецПроцедуры

Процедура СодержаниеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт
	
	ЧислоПодчиненных = ДанныеСтроки.Строки.Количество();
	Если Ложь
		Или (Истина
			И ДанныеСтроки.ЭтоПапка 
			И Не ПустаяСтрока(ДанныеСтроки.ПутьКЭлементу))
		Или (Истина
			И ЧислоПодчиненных > 0
			И Не ДанныеСтроки.ЭтоПапка)
	Тогда
		ИндексКартинки = 0;
	ИначеЕсли ДанныеСтроки.ЭтоПапка И ПустаяСтрока(ДанныеСтроки.ПутьКЭлементу) Тогда
		ИндексКартинки = 1;
	Иначе
		ИндексКартинки = 2;
	КонецЕсли;
	ОформлениеСтроки.Ячейки.ИмяРаздела.ИндексКартинки = ИндексКартинки;
	ОформлениеСтроки.Ячейки.ИмяРаздела.ОтображатьКартинку = Истина;
	
КонецПроцедуры

Процедура СодержаниеВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	Если Не ПустаяСтрока(ВыбраннаяСтрока.ПутьКЭлементу) Тогда
		ОткрытьАдрес(ВыбраннаяСтрока.ПутьКЭлементу);
	КонецЕсли;
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

Процедура ЯзыкПрограммыПриИзменении(Элемент = Неопределено)
	
	Для Каждого Страница Из ЭлементыФормы.ВерхняяПанель.Страницы Цикл
		ирКлиент.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Ложь);
	КонецЦикла;
	Если Не ТекущаяСтраницаУстановлена Тогда
		ВерхняяПанельПриСменеСтраницы();
	КонецЕсли;
	
КонецПроцедуры

Процедура КоманднаяПанельХтмлВверх(Кнопка)
	
	Если НайтиТекущуюСтраницуВДереве() Тогда
		Родитель = ЭлементыФормы.Содержание.ТекущаяСтрока.Родитель;
		Если Родитель <> Неопределено Тогда
			Если Не ПустаяСтрока(Родитель.ПутьКЭлементу) Тогда
				ОткрытьАдрес(Родитель.ПутьКЭлементу, , Ложь);
			КонецЕсли;
			ЭлементыФормы.Содержание.ТекущаяСтрока = Родитель;
		КонецЕсли; 
	КонецЕсли; 
	
КонецПроцедуры

Процедура ПриОткрытии()
	
	ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма);
	Если Не ТекущаяСтраницаУстановлена Тогда
		ТекущаяСтраница = ирОбщий.ВосстановитьЗначениеЛкс(Метаданные().ПолноеИмя() + ".ТекущаяСтраница");
		Страница = ЭлементыФормы.ВерхняяПанель.Страницы.Найти(ТекущаяСтраница);
		Если Страница <> Неопределено Тогда
			ЭлементыФормы.ВерхняяПанель.ТекущаяСтраница = Страница;
		КонецЕсли; 
	КонецЕсли; 
	Если ЭтаФорма.ВладелецФормы = Неопределено Тогда
		ОткрытьАдрес(, мСтрокаДляПодсветки);
	КонецЕсли;
	ЯзыкПрограммыПриИзменении();
	Если ирКэш.ЛиПлатформаWindowsЛкс() Тогда
		Попытка
			Пустышка = Новый COMОбъект("Forms.TextBox.1");
		Исключение
			ирОбщий.СообщитьЛкс("Для работы закладки ""Индекс"" необходимо зарегистрировать библиотеки FM20.dll и FM20ENU.dll из состава MS Office 97-2007.
			|Это можно сделать с помощью формы ""Регистрация COM-компонент"" из состава подсистемы");
		КонецПопытки; 
	КонецЕсли;
	ЭтаФорма.ТекущаяСтраницаУстановлена = Ложь;
	УстановитьНовыйПриемОбъекта();
	ОбновитьПодменюПоследниеВыбранные();
	КнопкиКоманднойПанели = ЭлементыФормы.КоманднаяПанельХтмл.Кнопки.ПоследниеВыбранные.Кнопки;
	Если Истина
		И КнопкиКоманднойПанели.Количество() 
	Тогда
		ПоследниеВыбранныеНажатие(КнопкиКоманднойПанели[0]);
	КонецЕсли;
	ПодключитьОбработчикОжидания("УстановитьПрикреплениеФормыВУправляемомПриложении", Истина, 0.1);
	
КонецПроцедуры

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

Процедура ОбновитьПодменюПоследниеВыбранные()
	ирКлиент.ПоследниеВыбранныеЗаполнитьПодменюЛкс(ЭтаФорма, ЭлементыФормы.КоманднаяПанельХтмл.Кнопки.ПоследниеВыбранные, "История");
КонецПроцедуры

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

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

Процедура ДеревоТиповСловаВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	Если ВыбраннаяСтрока.Уровень() = 1 Тогда
		ОткрытьСтраницуСтрокиПоиска();
	КонецЕсли;
	
КонецПроцедуры

Процедура ВыбратьИскомуюСтроку(СтрокаДереваТиповСлова, БезусловнаяАктивизацияРезультатов = Истина) Экспорт 

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

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

Функция ЯзыкПрограммыИзПутиКЭлементу(Знач НовыйПутьКЭлементу = "")

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

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

Процедура ОткрытьСтраницуСтрокиПоиска(СтрокаОписания = Неопределено)

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

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

Процедура ОбновитьРезультатыПоиска(БезусловнаяАктивизацияРезультатов = Истина) Экспорт

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

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

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

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

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

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

Процедура СодержаниеПриАктивизацииСтроки(Элемент)
	
	ПутьВДереве = "";
	ТекущаяСтрока = Элемент.ТекущаяСтрока;
	Пока ТекущаяСтрока <> Неопределено Цикл
		Если ПутьВДереве <> "" Тогда
			ПутьВДереве = "\" + ПутьВДереве;
		КонецЕсли; 
		ПутьВДереве = ТекущаяСтрока.ИмяРаздела + ПутьВДереве;
		ТекущаяСтрока = ТекущаяСтрока.Родитель;
	КонецЦикла; 
	
КонецПроцедуры

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

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

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

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

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

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

Процедура ОбновитьЦветФонаСловаИндекса()
	
	Если Истина
		И ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока <> Неопределено
		И Лев(ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока.НПутьКСлову, СтрДлина(СловоИндекса)) = НРег(СловоИндекса)
	Тогда
		ЭлементыФормы.СловоИндекса.BackColor = 16777215; // Новый Цвет(255, 255, 255);
	Иначе
		ЭлементыФормы.СловоИндекса.BackColor = 16448255; // Новый Цвет(255, 250, 250);
	КонецЕсли; 

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

Процедура ПриЗакрытии()
	
	ирОбщий.СохранитьЗначениеЛкс(Метаданные().ПолноеИмя() + ".ТекущаяСтраница", ЭлементыФормы.ВерхняяПанель.ТекущаяСтраница.Имя);
	ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма);
	
КонецПроцедуры

Процедура ИскомоеСловоОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ИскомоеСловоПриИзменении();
	
КонецПроцедуры

Процедура ТаблицаИндексаПриАктивизацииСтроки(Элемент)
	
	Если РазрешитьУстановкуСловаИндекса Тогда
		Если Элемент.ТекущаяСтрока <> Неопределено Тогда
			СловоИндекса = Элемент.ТекущаяСтрока.ПутьКСлову;
		КонецЕсли; 
	КонецЕсли;
	РазрешитьУстановкуСловаИндекса = Истина;
	
КонецПроцедуры

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

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

Процедура ПолеОтбораПоПодстрокеChange(Элемент = Неопределено)
	
	ОбновитьПодходящиеСлова();
	СловоИндексаChange();
	
КонецПроцедуры

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

Процедура ИндексКлавишаНажата(KeyCode, Shift)

	// очень похожий фрагмент есть в Обработка.ирКлсПолеТекстаПрограммы.Форма.Подсказки
	СтруктураКлюча = Новый Структура("НПутьКСлову");
	Если KeyCode.Value = 13 Тогда // {ENTER} 
		Если Истина
			И ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока <> Неопределено
			И ЭлементыФормы.ТаблицаИндекса.ВыделенныеСтроки.Содержит(ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока)
		Тогда 
			ВыбратьСтрокуИндекса(ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока);
		КонецЕсли;
	ИначеЕсли KeyCode.Value = 40 Тогда // {DOWN}
		Если ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока <> Неопределено Тогда
			Смещение = + 1;
			ЗаполнитьЗначенияСвойств(СтруктураКлюча, ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока);
			ИндексТекущейСтроки = ПодходящиеСлова.Индекс(ПодходящиеСлова.НайтиСтроки(СтруктураКлюча)[0]);
			НовыйИндекс = Мин(ИндексТекущейСтроки + Смещение, ПодходящиеСлова.Количество() - 1);
			ЗаполнитьЗначенияСвойств(СтруктураКлюча, ПодходящиеСлова[НовыйИндекс]);
			ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока = ТаблицаИндекса.НайтиСтроки(СтруктураКлюча)[0];
		КонецЕсли;
	ИначеЕсли KeyCode.Value = 38 Тогда // {UP} 
		Если ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока <> Неопределено Тогда
			Смещение = - 1;
			ЗаполнитьЗначенияСвойств(СтруктураКлюча, ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока);
			ИндексТекущейСтроки = ПодходящиеСлова.Индекс(ПодходящиеСлова.НайтиСтроки(СтруктураКлюча)[0]);
			НовыйИндекс = Макс(ИндексТекущейСтроки + Смещение, 0);
			ЗаполнитьЗначенияСвойств(СтруктураКлюча, ПодходящиеСлова[НовыйИндекс]);
			ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока = ТаблицаИндекса.НайтиСтроки(СтруктураКлюча)[0];
		КонецЕсли;
	ИначеЕсли KeyCode.Value = 34 Тогда // {PGDW} 
		Если ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока <> Неопределено Тогда
			Смещение = + 20;
			ЗаполнитьЗначенияСвойств(СтруктураКлюча, ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока);
			ИндексТекущейСтроки = ПодходящиеСлова.Индекс(ПодходящиеСлова.НайтиСтроки(СтруктураКлюча)[0]);
			НовыйИндекс = Мин(ИндексТекущейСтроки + Смещение, ПодходящиеСлова.Количество() - 1);
			ЗаполнитьЗначенияСвойств(СтруктураКлюча, ПодходящиеСлова[НовыйИндекс]);
			ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока = ТаблицаИндекса.НайтиСтроки(СтруктураКлюча)[0];
		КонецЕсли;
	ИначеЕсли KeyCode.Value = 33 Тогда // {PGUP} 
		Если ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока <> Неопределено Тогда
			Смещение = - 20;
			ЗаполнитьЗначенияСвойств(СтруктураКлюча, ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока);
			ИндексТекущейСтроки = ПодходящиеСлова.Индекс(ПодходящиеСлова.НайтиСтроки(СтруктураКлюча)[0]);
			НовыйИндекс = Макс(ИндексТекущейСтроки + Смещение, 0);
			ЗаполнитьЗначенияСвойств(СтруктураКлюча, ПодходящиеСлова[НовыйИндекс]);
			ЭлементыФормы.ТаблицаИндекса.ТекущаяСтрока = ТаблицаИндекса.НайтиСтроки(СтруктураКлюча)[0];
		КонецЕсли;
	//ИначеЕсли KeyCode.Value = 191 Тогда // "."
	//	ОткрытьДочерние();
	КонецЕсли;

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

Процедура СловоИндексаKeyDown(Элемент, KeyCode, Shift)
	
	ИндексКлавишаНажата(KeyCode, Shift);

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

Процедура ПолеОтбораПоПодстрокеKeyDown(Элемент, KeyCode, Shift)

	ИндексКлавишаНажата(KeyCode, Shift);
	
КонецПроцедуры

Процедура КнопкаОчисткиФильтраИндексаНажатие(Элемент)
	
	ЭлементыФормы.ПолеОтбораПоПодстроке.Значение = "";
	
КонецПроцедуры

Процедура КнопкаОчисткиСловаИндексаНажатие(Элемент)
	
	ЭлементыФормы.СловоИндекса.Значение = "";
	
КонецПроцедуры

Процедура КоманднаяПанельХтмлКнопкаПоУмолчанию(Кнопка)
	// Вставить содержимое обработчика.
КонецПроцедуры

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

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

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

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

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

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

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

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

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

Процедура КоманднаяПанельХтмлСписокИзмененийПлатформы(Кнопка)
	ИзмененияПлатформы = Новый ТаблицаЗначений;
	ИзмененияПлатформы.Колонки.Добавить("Раздел", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)),, 10);
	ИзмененияПлатформы.Колонки.Добавить("Функциональность", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)),, 20);
	ИзмененияПлатформы.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)),, 5);
	ИзмененияПлатформы.Колонки.Добавить("СсылкаЛокальная", Новый ОписаниеТипов("Строка"), "Ссылка локальная", 5);
	ИзмененияПлатформы.Колонки.Добавить("СсылкаВеб", Новый ОписаниеТипов("Строка"), "Ссылка веб", 5);
	ИзмененияПлатформы.Колонки.Добавить("КакСтало", Новый ОписаниеТипов("Строка"), "Как стало", 60);
	ИзмененияПлатформы.Колонки.Добавить("КакБыло", Новый ОписаниеТипов("Строка"), "Как было", 50);
	ИзмененияПлатформы.Колонки.Добавить("РезультатИзменения", Новый ОписаниеТипов("Строка"), "Результат изменения", 30);
	ИзмененияПлатформы.Колонки.Добавить("Примечание", Новый ОписаниеТипов("Строка"),, 5);
	ИзмененияПлатформы.Колонки.Добавить("СсылкиНаДокументацию", Новый ОписаниеТипов("Строка"), "Ссылки на документацию", 5);
	ПутьКФайлу = КаталогПрограммы();
	ПутьКФайлу = СтрЗаменить(ПутьКФайлу, "\bin\", "\") + "docs\ru\V8Update.htm";
	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.ОткрытьФайл(ПутьКФайлу, "UTF-8");
	ПостроительDOM = Новый ПостроительDOM;
	ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);    
	БазовыйАдресЛокальногоФайла = Сред(ДокументHTML.URIДокумента, 2); // Зачем то в начале добавляется "s" 
	Если ирКэш.НомерВерсииПлатформыЛкс() > 803001 Тогда
		БазовыйАдресЛокальногоФайла = Вычислить("КодироватьСтроку(БазовыйАдресЛокальногоФайла, СпособКодированияСтроки.URLВКодировкеURL)");
		БазовыйАдресЛокальногоФайла = СтрЗаменить(БазовыйАдресЛокальногоФайла, "file://", "file:///");
	КонецЕсли;
	СисИнфо = Новый СистемнаяИнформация;
	ИмяВерсии = СтрЗаменить(СисИнфо.ВерсияПриложения, ".", "_");
	БазовыйАдресВебФайла = "https://dl03.1c.ru/content/Platform/" + ИмяВерсии + "/1cv8upd_" + ИмяВерсии + ".htm";
	Для Каждого Узел Из ДокументHTML.Тело.ДочерниеУзлы Цикл
		#Если Сервер И Не Сервер Тогда
			Узел = ДокументHTML.СоздатьЭлемент();
		#КонецЕсли
		Если Узел.ИмяУзла = "table" Тогда
			Раздел = "";
			КоличествоСтолбцовЗаголовка = 0;
			НоваяСтрока = Неопределено;
			СтрокиТаблицы = Узел.ДочерниеУзлы;
			Для Каждого СтрокаТаблицы Из СтрокиТаблицы Цикл
				#Если Сервер И Не Сервер Тогда
					СтрокаТаблицы = ДокументHTML.СоздатьЭлемент();
				#КонецЕсли
				Если СтрокаТаблицы.ИмяУзла = "thead" Тогда
					Раздел = Узел.ПредыдущийСоседний.ТекстовоеСодержимое;
					КоличествоСтолбцовЗаголовка = СтрокаТаблицы.ДочерниеУзлы[0].ДочерниеУзлы.Количество();
					Продолжить;
				КонецЕсли;
				КоличествоКолонок = СтрокаТаблицы.ДочерниеУзлы.Количество();
				Если КоличествоКолонок = КоличествоСтолбцовЗаголовка Тогда
					Если КоличествоКолонок = 4 Тогда
						НоваяСтрока = ИзмененияПлатформы.Добавить();
						НоваяСтрока.Раздел = Раздел;
						НоваяСтрока.Функциональность = СтрокаТаблицы.ДочерниеУзлы[0].ТекстовоеСодержимое;
						ЯкорьСтроки = СтрокаТаблицы.ДочерниеУзлы[0].ДочерниеУзлы[0].Имя;
						НоваяСтрока.СсылкаЛокальная = БазовыйАдресЛокальногоФайла + "#" + ЯкорьСтроки;
						НоваяСтрока.СсылкаВеб = БазовыйАдресВебФайла + "#" + ЯкорьСтроки;
						НоваяСтрока.Версия = Сред(СтрокаТаблицы.Заголовок, 8);
						НоваяСтрока.КакСтало = СтрокаТаблицы.ДочерниеУзлы[1].ТекстовоеСодержимое;
						НоваяСтрока.КакБыло = СтрокаТаблицы.ДочерниеУзлы[2].ТекстовоеСодержимое;
						НоваяСтрока.РезультатИзменения = СтрокаТаблицы.ДочерниеУзлы[3].ТекстовоеСодержимое;
					ИначеЕсли КоличествоКолонок = 3 Тогда
						НоваяСтрока = ИзмененияПлатформы.Добавить();
						НоваяСтрока.Раздел = Раздел;
						НоваяСтрока.Функциональность = Раздел;
						НоваяСтрока.Версия = Сред(СтрокаТаблицы.Заголовок, 8);
						НоваяСтрока.КакСтало = СтрокаТаблицы.ДочерниеУзлы[2].ТекстовоеСодержимое;
						НоваяСтрока.КакБыло = СтрокаТаблицы.ДочерниеУзлы[1].ТекстовоеСодержимое;
						НоваяСтрока.РезультатИзменения = СтрокаТаблицы.ДочерниеУзлы[0].ТекстовоеСодержимое;
					КонецЕсли;
				Иначе
					Если НоваяСтрока <> Неопределено Тогда
						НоваяСтрока.Примечание = СтрокаТаблицы.ТекстовоеСодержимое; 
						ТекстСсылок = Новый Массив;
						Для Каждого УзелСсылки Из СтрокаТаблицы.ДочерниеУзлы[1].ДочерниеУзлы Цикл
							Если ирОбщий.СтрокиРавныЛкс(УзелСсылки.ИмяУзла, "a") Тогда
								//! УзелСсылки = 0 // ЭлементСвязьHTML
								ТекстСсылок.Добавить(УзелСсылки.Гиперссылка);
							КонецЕсли;
						КонецЦикла;
						НоваяСтрока.СсылкиНаДокументацию = ирОбщий.СтрСоединитьЛкс(ТекстСсылок, Символы.ПС);
					Иначе
						Сообщить(Строка(КоличествоКолонок) + " - " + СтрокаТаблицы.ИмяУзла + " / " + СтрокаТаблицы.ТипУзла + " / " + СтрокаТаблицы.ТекстовоеСодержимое);
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	ирКлиент.ОткрытьТаблицуЗначенийЛкс(ИзмененияПлатформы,, Ложь, "Изменения платформы",,,, "ИзмененияПлатформы");
КонецПроцедуры

Процедура КоманднаяПанельХтмлТабличноеОписаниеПлатформы(Кнопка)
	
	ОписаниеПлатформы = ирКлиент.ПолучитьФормуЛкс("Обработка.ирПлатформа.Форма.ОписаниеПлатформы");
	ОписаниеПлатформы.Открыть();
	
КонецПроцедуры

Процедура КоманднаяПанельХтмлСсылкиНаТип(Кнопка)
	ПолноеИмяСвойства = СтрЗаменить(ПолноеИмяСвойства(), ": ", "");
	ТипКонтекста = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяСвойства);
	ОписаниеПлатформы = ирКлиент.ПолучитьФормуЛкс("Обработка.ирПлатформа.Форма.ОписаниеПлатформы",,, ТипКонтекста);
	ОписаниеПлатформы.ПоискСсылокНаТип = ТипКонтекста;
	ОписаниеПлатформы.Открыть();
КонецПроцедуры

Функция ПолноеИмяСвойства()
	
	ДОМ = ирОбщий.ПолучитьHtmlFileИзТекстаHtmlЛкс(ЭлементыФормы.ПолеHTMLДокумента.ПолучитьТекст());
	УзлыСтраницы = ДОМ.getElementsByClassName("V8SH_title");
	Если УзлыСтраницы.length > 0 Тогда
		ПолноеИмяСвойства = ирОбщий.ПервыйФрагментЛкс(УзлыСтраницы.Item(0).innerText, " (");
		УзлыСтраницы = ДОМ.getElementsByClassName("V8SH_heading");
		Если УзлыСтраницы.length > 0 Тогда
			ПолноеИмяСвойства = ПолноеИмяСвойства + "." + ирОбщий.ПервыйФрагментЛкс(УзлыСтраницы.Item(0).innerText, " (");
		КонецЕсли;
	Иначе
		Если ДОМ.body.childNodes.length > 0 Тогда
			ПолноеИмяСвойства = ирОбщий.ПервыйФрагментЛкс(ДОМ.body.childNodes.Item(0).innerText, " ");
		КонецЕсли;
	КонецЕсли;
	Возврат ПолноеИмяСвойства;

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

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

Процедура КоманднаяПанельХтмлПриемОбъекта(Кнопка)
	
	УстановитьНовыйПриемОбъекта(Не Кнопка.Пометка);
	
КонецПроцедуры

Процедура УстановитьНовыйПриемОбъекта(Знач НовыйПриемОбъекта = Неопределено) Экспорт 
	
	ирКлиент.УстановитьРежимПриемаОбъектаФормеЛкс(ЭтаФорма, ЭлементыФормы.КоманднаяПанельХтмл.Кнопки.ПриемОбъекта, НовыйПриемОбъекта,, Истина);

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

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

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

мПлатформа = ирКэш.Получить();
ИмяКлассаПоляТекстаПрограммы = "ПолеТекстаПрограммы";
ПрефиксСсылкиВстроенногоЯзыка = "v8help://SyntaxHelperContext";
ПрефиксСсылкиЯзыкаЗапросов = "v8help://SyntaxHelperQueries";
СписокВыбора = ЭлементыФормы.АктивныйЯзыкПрограммы.СписокВыбора;
СписокВыбора.Добавить(0, "Встроенный язык");
СписокВыбора.Добавить(1, "Язык запросов");
СписокВыбора.Добавить(2, "Язык выражений компоновки данных");
//СписокВыбора.СортироватьПоПредставлению();
АктивныйЯзыкПрограммы = 0;
ЭлементОтбора = ЭлементыФормы.ТаблицаИндекса.ОтборСтрок.ПутьКСлову;
ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит;
ЭлементОтбора.Использование = истина;
СтароеСловоИндекса = "";
ТекущаяСтраницаУстановлена = Ложь;
РазрешитьУстановкуСловаИндекса = Истина;
мКниги = ирОбщий.ТаблицаЗначенийИзТабличногоДокументаЛкс(ПолучитьМакет("Книги"),,,, Истина);
