Перем РегВыражение;
Перем мРегВыражение2;
Перем ИсполнительСкрытыхКомандСистемы;
Перем VBScript;
Перем ФайлРаспаковщикаZIP;
Перем мПлатформа;
Перем ТаблицаТиповМетаданных Экспорт;
Перем ТаблицаСокращенияИменТипов Экспорт;
Перем ПоискСсылокНаТип Экспорт;

Процедура ЗаполнитьСтрокуТипа(НоваяСтрока)

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

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

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

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

Процедура СкорректироватьКлючТипа(Структура)
	
	Попытка
		// Выполняется много раз!
		Если Строка(Вычислить(Структура.Слово)) = "Перечисление" + Структура.Слово Тогда
			Структура.Слово = "Перечисление" + Структура.Слово;
		КонецЕсли;
	Исключение
	КонецПопытки;

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

Функция ПолучитьПримитивныеТипыЛкс(Имена = Ложь) Экспорт

	МассивИменТипов = Новый Массив;
	МассивИменТипов.Добавить("Null");
	МассивИменТипов.Добавить("Неопределено");
	МассивИменТипов.Добавить("Число");
	МассивИменТипов.Добавить("Строка");
	МассивИменТипов.Добавить("Дата");
	МассивИменТипов.Добавить("Булево");
	МассивИменТипов.Добавить("Тип");
	Если Имена Тогда
		МассивТипов = МассивИменТипов;
	Иначе
		МассивТипов = Новый Массив;
		Для Каждого ИмяТипа Из МассивИменТипов Цикл
			МассивТипов.Добавить(Тип(ИмяТипа));
		КонецЦикла; 
	КонецЕсли;
	Возврат МассивТипов;

КонецФункции // ЛксПолучитьПримитивныеТипы()

Процедура ЗаполнитьСтатическое()

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

	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "ХранилищаНастроек";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя хранилища>";

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

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

Процедура ЗаполнитьВсе()

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

		СписокПараметров = Новый Массив;
		СписокПараметров.Добавить("ИсходнаяДата");
		СписокПараметров.Добавить("ЕдиницаИзмерения");
		СписокПараметров.Добавить("КоличествоЕдиниц");
		Для Счетчик = 1 По СписокПараметров.Количество() Цикл
			НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
			НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
			НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
			Если ЯзыкПрограммы = 1 Тогда
				НоваяСтрокаПараметра.Слово = "ДОБАВИТЬКДАТЕ";
			Иначе
				НоваяСтрокаПараметра.Слово = "ДобавитьКДате";
			КонецЕсли; 
			НоваяСтрокаПараметра.Номер = Счетчик;
			НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
		КонецЦикла;
		
		СписокПараметров = Новый Массив;
		СписокПараметров.Добавить("ВычитаемаяДата");
		СписокПараметров.Добавить("ИсходнаяДата");
		СписокПараметров.Добавить("ЕдиницаИзмерения");
		Для Счетчик = 1 По СписокПараметров.Количество() Цикл
			НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
			НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
			НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
			Если ЯзыкПрограммы = 1 Тогда
				НоваяСтрокаПараметра.Слово = "РАЗНОСТЬДАТ";
			Иначе
				НоваяСтрокаПараметра.Слово = "РазностьДат";
			КонецЕсли; 
			НоваяСтрокаПараметра.Номер = Счетчик;
			НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
		КонецЦикла;
		
		СписокПараметров = Новый Массив;
		СписокПараметров.Добавить("Строка");
		СписокПараметров.Добавить("ПерваяПозиция");
		СписокПараметров.Добавить("ПоследняяПозиция");
		Для Счетчик = 1 По СписокПараметров.Количество() Цикл
			НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
			НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
			НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
			Если ЯзыкПрограммы = 1 Тогда
				НоваяСтрокаПараметра.Слово = "ПОДСТРОКА";
			Иначе
				НоваяСтрокаПараметра.Слово = "Подстрока";
			КонецЕсли; 
			НоваяСтрокаПараметра.Номер = Счетчик;
			НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
		КонецЦикла;
		
		СписокПараметров = Новый Массив;
		СписокПараметров.Добавить("Произвольный");
		СписокПараметров.Добавить("ЗаменаNULL");
		Для Счетчик = 1 По СписокПараметров.Количество() Цикл
			НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
			НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
			НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
			Если ЯзыкПрограммы = 1 Тогда
				НоваяСтрокаПараметра.Слово = "ЕСТЬNULL";
			Иначе
				НоваяСтрокаПараметра.Слово = "ЕстьNull";
			КонецЕсли; 
			НоваяСтрокаПараметра.Номер = Счетчик;
			НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
		КонецЦикла;
	КонецЦикла;
	ТаблицаКорневыхОбъектовКонфигурации = ирКэш.ТипыМетаОбъектов(Ложь, Ложь);
	
	РабочийКаталог = ПолучитьИмяВременногоФайла();
	СоздатьКаталог(РабочийКаталог);
	ФайлРаспаковщикаZIP = мПлатформа.ПолучитьФайлРаспаковщикаZIP(Истина);
	
	// Синтакс-помощник для языка запросов
	МаркерЯзыкаЗапросов = "//shquery_ru";
	Для Каждого СтрокаСлова Из СловаЯзыкаЗапросов Цикл
		МассивЯзыков = Новый Массив;
		Если Ложь
			Или Найти(СтрокаСлова.ПутьКОписанию, МаркерЯзыкаЗапросов) = 1
			Или СтрокаСлова.ПутьКОписанию = "//dcsui_ru/SKD_CharacteristicTypes" // Антибаг платформы http://partners.v8.1c.ru/forum/thread.jsp?id=997975#997975
		Тогда
			МассивЯзыков.Добавить(1);
			Если Ложь
				Или СтрокаСлова.СловоЗапроса = "ДАТАВРЕМЯ"
				Или СтрокаСлова.СловоЗапроса = "ЗНАЧЕНИЕ"
			Тогда
				МассивЯзыков.Добавить(2);
			КонецЕсли;
		Иначе
			МассивЯзыков.Добавить(2);
		КонецЕсли; 
		Для Каждого ЯзыкПрограммы Из МассивЯзыков Цикл
			НоваяСтрока = ТаблицаКонтекстов.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСлова); 
			НоваяСтрока.Слово = СтрокаСлова.СловоЗапроса;
			НоваяСтрока.ТипКонтекста = "Глобальный";
			НоваяСтрока.ЯзыкПрограммы = ЯзыкПрограммы;
			Если НРег(НоваяСтрока.ТипСлова) = НРег("Метод") Тогда
				НайденныеСтроки = ТаблицаПараметров.НайтиСтроки(Новый Структура("Слово, ЯзыкПрограммы", НоваяСтрока.Слово, ЯзыкПрограммы));
				Если НайденныеСтроки.Количество() = 0 Тогда
					НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
					ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, НоваяСтрока, "ТипКонтекста, Слово, ЯзыкПрограммы");
					НоваяСтрокаПараметра.Параметр = "";
					НоваяСтрокаПараметра.Номер = 1;
				КонецЕсли; 
			КонецЕсли;
		КонецЦикла;
	КонецЦикла; 
	
	// Синтакс-помощник для языка выражений компоновки
	ИмяКниги = "dcsui_ru";
	ФайлАрхиваДанных = СинтаксПомощник.АрхивСинтаксПомощникаПоИмени(, ИмяКниги);
	ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -o " + ФайлАрхиваДанных.ПолноеИмя + " -d " + РабочийКаталог);
	ИменаФайлов = Новый Структура;
	ИменаФайлов.Вставить("SKD_Functions", "Метод");
	ИменаФайлов.Вставить("SKD_AgregOperation", "Метод");
	ИменаФайлов.Вставить("SKD_Functions_Date", "Метод"); // 8.3.21+
	ИменаФайлов.Вставить("SKD_Functions_Numbers", "Метод"); // 8.3.21+
	ИменаФайлов.Вставить("SKD_Functions_Expressions", "Метод"); // 8.3.21+
	ИменаФайлов.Вставить("SKD_Functions_Strings", "Метод"); // 8.3.21+
	Хтмл = Новый COMОбъект("HTMLFile");
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
// {ОписаниеРегулярногоВыражения.Начало} конструктор из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru)
// Перем шИмя, ИмяПараметра, ТипПараметра, ПараметрМетода, ИмяФункции, ФункцияСКД;
// {Шаблон.Начало}
// + <шИмя> = [_ЁА-ЯA-Z][_ЁА-ЯA-Z0-9]*
// + <ИмяПараметра> = <шИмя>
// + <ТипПараметра> = [^<]+
// + <ПараметрМетода> = <LI[^>]*>(?:\s*<DIV[^<]*>)?\s*<STRONG[^>]*>(<ИмяПараметра>)\s*</STRONG>[^<_ЁА-Я]+(?:Тип[^<_ЁА-Я]*<STRONG[^>]*>(<ТипПараметра>)</STRONG>)?
// + <ИмяФункции> = <шИмя>
// + <ФункцияСКД> = <H2[^>]*>\s*<a[^>]*?>\s*(?:</a>\s*)?(<ИмяФункции>)[^$]*?(?:Параметр(?:ы)?:[^$:]*?(?:<ПараметрМетода>[^$]*?)+?(?:[^$:]*?)?)?(?:$|(?=<H2))
// {Шаблон.Конец}
шИмя = "[_ЁА-ЯA-Z][_ЁА-ЯA-Z0-9]*";
ИмяПараметра = "" + шИмя + "";
ТипПараметра = "[^<]+";
ПараметрМетода = "<LI[^>]*>(?:\s*<DIV[^<]*>)?\s*<STRONG[^>]*>(" + ИмяПараметра + ")\s*</STRONG>[^<_ЁА-Я]+(?:Тип[^<_ЁА-Я]*<STRONG[^>]*>(" + ТипПараметра + ")</STRONG>)?";
ИмяФункции = "" + шИмя + "";
ФункцияСКД = "<H2[^>]*>\s*<a[^>]*?>\s*(?:</a>\s*)?(" + ИмяФункции + ")[^$]*?(?:Параметр(?:ы)?:[^$:]*?(?:" + ПараметрМетода + "[^$]*?)+?(?:[^$:]*?)?)?(?:$|(?=<H2))";
// {ОписаниеРегулярногоВыражения.Конец}
	РегВыражение.Global = Истина;
	РегВыражение.Multiline = Ложь;
	РегВыражение.Pattern = ФункцияСКД;
	РегВыражение.IgnoreCase = Истина;
	РегВыражениеПараметр = ирОбщий.НовоеРегВыражениеЛкс();
	РегВыражениеПараметр.Global = Истина;
	РегВыражениеПараметр.Multiline = Ложь;
	РегВыражениеПараметр.IgnoreCase = Истина;
	РегВыражениеПараметр.Pattern = ПараметрМетода;
	Для Каждого КлючИЗначение Из ИменаФайлов Цикл
		ФайлСтраницы = Новый Файл(РабочийКаталог + "\" + КлючИЗначение.Ключ);
		Если Не ФайлСтраницы.Существует() Тогда
			Если ирКэш.НомерВерсииПлатформыЛкс() < 803021 Тогда
				Продолжить;
			КонецЕсли;
		КонецЕсли;
		ТекстовыйДокумент.Прочитать(ФайлСтраницы.ПолноеИмя);
		Хтмл.open("text/html");
		Хтмл.write(ТекстовыйДокумент.ПолучитьТекст());
		Хтмл.close();
		ТегиСсылок = Хтмл.GetElementsByTagName("a");
		ИменаПолейКлюча = "ТипКонтекста, Слово, ЯзыкПрограммы";
		КлючПоиска = Новый Структура(ИменаПолейКлюча); 
		Для Каждого ТегСсылки Из ТегиСсылок Цикл
			МассивФрагментов = ирОбщий.СтрРазделитьЛкс(ТегСсылки.href, "#");
			Если Ложь
				Или МассивФрагментов.Количество() < 2 
				Или ТегСсылки.textContent = ""
			Тогда 
				Продолжить;
			КонецЕсли;
			Если МассивФрагментов[0] = "about:blank" Тогда
				ИмяСтраницы = КлючИЗначение.Ключ;
			Иначе
				СтруктураСсылки = ирОбщий.СтруктураURIЛкс(ТегСсылки.href);
				МассивФрагментов = ирОбщий.СтрРазделитьЛкс(СтруктураСсылки.ПутьНаСервере, "#");
				ИмяСтраницы = МассивФрагментов[0]; 
			КонецЕсли;
			Если Не ирОбщий.СтрНачинаетсяСЛкс(ТегСсылки.innerHTML, "<") Тогда
				НоваяСтрока = ТаблицаКонтекстов.Добавить();
				НоваяСтрока.ТипКонтекста = "Глобальный";
				НоваяСтрока.ЯзыкПрограммы = 2;
				НоваяСтрока.ТипСлова = КлючИЗначение.Значение;
				НоваяСтрока.Слово = СокрЛП(ТегСсылки.textContent);
				НоваяСтрока.ПутьКОписанию = "//" + ИмяКниги + "/" + ИмяСтраницы + "#" + МассивФрагментов[1];
				Если НРег(НоваяСтрока.ТипСлова) = НРег("Метод") Тогда
					ЗаполнитьЗначенияСвойств(КлючПоиска, НоваяСтрока);
					Если ТаблицаПараметров.НайтиСтроки(КлючПоиска).Количество() = 0 Тогда // на предыдущих проходах цикла могли быть дубли
						НоваяСтрокаПараметра = ТаблицаПараметров.Добавить(); 
						ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, КлючПоиска);
						НоваяСтрокаПараметра.Параметр = "";
						НоваяСтрокаПараметра.Номер = 1;
					КонецЕсли; 
				КонецЕсли; 
			КонецЕсли; 
		КонецЦикла;  
		Вхождения = РегВыражение.НайтиВхождения(ТекстовыйДокумент.ПолучитьТекст());
		Для каждого Вхождение Из Вхождения Цикл
			ИмяФункции = Вхождение.SubMatches(0);
			ВхожденияПараметров = РегВыражениеПараметр.НайтиВхождения(Вхождение.Value);
			НомерПараметра = 1;
			Для каждого ВхождениеПараметра Из ВхожденияПараметров Цикл
				ИмяПараметра = ВхождениеПараметра.SubMatches(0);
				Если Не ЗначениеЗаполнено(ИмяПараметра) Тогда
					Продолжить;
				КонецЕсли;
				ТипЗначенияПараметра = ВхождениеПараметра.SubMatches(1);
				КлючПоиска = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы, Номер", "Глобальный", ИмяФункции, 2, НомерПараметра);
				НайденныеПараметры = ТаблицаПараметров.НайтиСтроки(КлючПоиска);
				Если НайденныеПараметры.Количество() = 0 Тогда
					НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
					ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, КлючПоиска);
				Иначе
					НоваяСтрокаПараметра = НайденныеПараметры[0];
				КонецЕсли;
				НоваяСтрокаПараметра.Параметр = ИмяПараметра;
				НоваяСтрокаПараметра.ТипЗначения = ТипЗначенияПараметра;
				НомерПараметра = НомерПараметра + 1;
			КонецЦикла;
		КонецЦикла;
	КонецЦикла; 

	// Синтаксис встроенного языка
	ФайлАрхиваСодержания = СинтаксПомощник.АрхивСинтаксПомощникаПоИмени(, "shlang_ru");
	ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -o " + ФайлАрхиваСодержания.ПолноеИмя + " -d " + РабочийКаталог);
	
	//// Добавим ключевые слова встроенного языка
	//Список = Новый Массив;
	//Список.Добавить("Не");
	//Список.Добавить("И");
	//Список.Добавить("Или");
	//Список.Добавить("По");
	//Список.Добавить("Экспорт");
	//Список.Добавить("Перем");
	//Список.Добавить("Процедура");
	//Список.Добавить("КонецПроцедуры");
	//Список.Добавить("Функция");
	//Список.Добавить("КонецФункции");
	//Список.Добавить("Возврат");
	//Список.Добавить("Перейти");
	//Список.Добавить("Для");
	//Список.Добавить("Каждого");
	//Список.Добавить("Из");
	//Список.Добавить("Цикл");
	//Список.Добавить("КонецЦикла");
	//Список.Добавить("Пока");
	//Список.Добавить("Прервать");
	//Список.Добавить("Продолжить");
	//Список.Добавить("Если");
	//Список.Добавить("Тогда");
	//Список.Добавить("Иначе");
	//Список.Добавить("ИначеЕсли");
	//Список.Добавить("КонецЕсли");
	//Список.Добавить("Попытка");
	//Список.Добавить("Исключение");
	//Список.Добавить("КонецПопытки");
	//Список.Добавить("ВызватьИсключение");
	//Список.Добавить("Выполнить");
	//Список.Добавить("Новый");
	//Для Каждого КлючевоеСлово Из Список Цикл
	//	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//	НоваяСтрока.Слово = КлючевоеСлово;
	//	НоваяСтрока.ТипКонтекста = "Общее";
	//	НоваяСтрока.ТипСлова = "Конструкция";
	//КонецЦикла;    
	
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "Строка";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_String";
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "Число";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_Number";
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "Дата";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_Date";
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "Булево";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_Boolean";
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "Тип";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_Type";
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "Неопределено";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_Undefined";
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "Null";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_Null";
	ЗаполнитьСтрокуТипа(НоваяСтрока);

	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "Глобальный";
	НоваяСтрока.Слово = "?";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/root_Quest";
	НоваяСтрока.ТипЗначения = "Произвольный";
	ЗаполнитьОсобыйМетодВстроенногоЯзыка(НоваяСтрока, РабочийКаталог, СинтаксПомощник);
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.Слово = "ВызватьИсключение";
	НоваяСтрока.НомерВерсииПлатформы = 803021;
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_Raise";
	ЗаполнитьОсобыйМетодВстроенногоЯзыка(НоваяСтрока, РабочийКаталог, СинтаксПомощник);
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипЗначения = "Произвольный";
	НоваяСтрока.Слово = "Новый";
	НоваяСтрока.ПутьКОписанию = "//shlang_ru/root_New";
	ЗаполнитьОсобыйМетодВстроенногоЯзыка(НоваяСтрока, РабочийКаталог, СинтаксПомощник);
	
	Слова = ирОбщий.ЗначенияВМассивЛкс("ВызватьИсключение");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_Raise";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Выполнить");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/root_Exec";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Для", "Каждого", "Из");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_ForEach";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("ДобавитьОбработчик");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_AddHandler";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Если", "ИначеЕсли", "Тогда", "КонецЕсли");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_IfThenElif";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Ждать");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/operator_await.html";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Новый");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/root_New";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Перейти");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_Goto";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Пока");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_While";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Попытка", "Исключение", "КонецПопытки");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_TryCatch";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Процедура", "Возврат", "КонецПроцедуры");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_Proc";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("Функция", "Возврат", "КонецФункции");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/def_Func";
	КонецЦикла;
	Слова = ирОбщий.ЗначенияВМассивЛкс("УдалитьОбработчик");
	Для Каждого Слово Из Слова Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		НоваяСтрока.Слово = Слово;
		НоваяСтрока.ТипСлова = "Конструкция";
		НоваяСтрока.ТипКонтекста = "";
		НоваяСтрока.ПутьКОписанию = "//shlang_ru/struct_RemoveHandler";
	КонецЦикла;

	ФайлАрхиваСодержания = СинтаксПомощник.АрхивСинтаксПомощникаПоИмени(1, "shcntx_ru");
	ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -o " + ФайлАрхиваСодержания.ПолноеИмя + " -d " + РабочийКаталог);
	//Shell.Run( + " -o " + ФайлСодержания.ПолноеИмя + " + -d " + РабочийКаталог + "PackBlock", 0, Истина);
	МассивФайлов = НайтиФайлы(РабочийКаталог, "*.*");
	ФайлИндекса = МассивФайлов[0];
	Текст = Новый ТекстовыйДокумент;
	Текст.Прочитать(ФайлИндекса.ПолноеИмя);
	ИндексОписания = Текст.ПолучитьТекст();
	
	ФайлАрхиваДанных = СинтаксПомощник.АрхивСинтаксПомощникаПоИмени(, "shcntx_ru");
	ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -o " + ФайлАрхиваДанных.ПолноеИмя + " -d " + РабочийКаталог);
	ТипыКонтекстовПутей = Новый Соответствие;
	РегВыражение.IgnoreCase = Истина;
	РегВыражение.Multiline = Ложь;
	РегВыражение.Global = Истина;
	РегВыражение.Pattern = "((""ru""\,""([^""]+)""[^}]*}[^{]*{[^{}]*})|({""#"",""([^""]*)""}))[^}]*},""([^""]+)""";
	Результат = РегВыражение.НайтиВхождения(ИндексОписания);
	Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Результат.Количество(), "Обработка синтакс-помощника");
	Для Каждого Item Из Результат Цикл
		ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
		Если Item.SubMatches(4) <> Неопределено Тогда
			НовоеСлово = Item.SubMatches(4);
		Иначе
			НовоеСлово = Item.SubMatches(2);
		КонецЕсли;
		ПутьКОписанию = Item.SubMatches(5);
		НРегПуть = НРег(ПутьКОписанию);
		ПутьКОписаниюКонтекста = "";
		ТипЭлементаКоллекции = "";
		ТипЗначения = "";
		СтрокаВерсииПлатформы = "";
		НомерВерсииПлатформы = 0;
		ЯзыкПрограммы = ?(Найти(НРегПуть, "/tables/") > 0, 1, 0);
		Если ЯзыкПрограммы = 1 Тогда
			ТипСлова = "Таблица";
		Иначе
			ТипСлова = "Свойство";
		КонецЕсли;
		Если Найти(НовоеСлово, "#") > 0 Тогда
			// Почему то в 8.3.19 правильный элемент имеет имя ВыгрузитьЖурналРегистрации#&^@^%&*^#1 https://www.hostedredmine.com/issues/932670
			НовоеСлово = ирОбщий.ПервыйФрагментЛкс(НовоеСлово, "#"); 
		КонецЕсли;
		Если Найти(НРегПуть, "/methods/") > 0 Тогда 
			ТипСлова = "Метод";
			ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/methods/") - 1) + ".html";
		ИначеЕсли Найти(НРегПуть, "/properties/") > 0 Тогда 
			ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/properties/") - 1) + ".html";
		ИначеЕсли Найти(НРегПуть, "/events/") > 0 Тогда 
			ТипСлова = "Событие";
			ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/events/") - 1) + ".html";
		ИначеЕсли Найти(НРегПуть, "/fields/") > 0 Тогда 
			ТипСлова = "Поле";
			ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/fields/") - 1) + ".html";
		ИначеЕсли Найти(НРегПуть, "/ctors/") > 0 Тогда 
			ТипСлова = "Конструктор";
			ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/ctors/") - 1) + ".html";
		ИначеЕсли Найти(НРегПуть, "/params/") > 0 Тогда 
			ТипСлова = "Параметр";
			ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/params/") - 1) + ".html";
		ИначеЕсли Найти(НРегПуть, "/formparams/") > 0 Тогда 
			ТипСлова = "Параметр";
			ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/formparams/") - 1) + ".html";
		Иначе
			//ПутьКОписаниюКонтекста = ПутьКОписанию; // тогда в качестве собственного свойства будет добавляться сам тип котнекста
			Пустышка = 0;
		КонецЕсли;
		Если ЯзыкПрограммы = 0 Тогда 
			РегВыражение.Global = Ложь;
			РегВыражение.Pattern = "/catalog\d+.html$";
			Если РегВыражение.Проверить(ПутьКОписанию) Тогда
				// Это папка
				Продолжить;
			КонецЕсли;
		КонецЕсли; 
		Если ПутьКОписанию = "/objects/Global context/methods/catalog3403/UnloadEventLog2325.html" Тогда
			// Вредный дубль метода ВыгрузитьЖурналРегистрации() https://www.hostedredmine.com/issues/932670
			Продолжить;
		КонецЕсли;
		ФайлОписания = Новый Файл(РабочийКаталог + ПутьКОписанию);
		Попытка
			Текст.Прочитать(ФайлОписания.ПолноеИмя);
			ТекстПрочитан = Истина;
		Исключение
			ТекстПрочитан = Ложь;
		КонецПопытки;
		ДоступностьТонкийКлиент = Истина;
		ДоступностьТолстыйКлиент = Истина;
		ДоступностьСервер = Истина;
		Если ТекстПрочитан Тогда
			ОписаниеХтмл = Текст.ПолучитьТекст();
			Если Найти(НРегПуть, "/tables/") > 0 Тогда 
				РегВыражение.Global = Ложь;
				РегВыражение.Pattern = "Синтаксис" + шТегНеКлюч + "(([А-Я_A-Z0-9\-\s\:]+)(\.([А-Я_A-Z0-9]*&lt;[^&]+&gt;|[А-Я_A-Z0-9\-\s\:]+))*)";
				Результат = РегВыражение.НайтиВхождения(ОписаниеХтмл);
				Если Результат.Количество() > 0 Тогда
					НовоеСлово = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(Результат[0].SubMatches(0));
				КонецЕсли;
			КонецЕсли;
			
			Если Ложь
				Или ТипСлова = "Конструктор" 
				Или ТипСлова = "Событие"
			Тогда
				ТипЗначения = "";
			Иначе
				Если Найти(ОписаниеХтмл, "<Имя") > 0 Тогда
					// Заменяем неэкранированные <>
					ОписаниеХтмл = ирОбщий.ЗаменитьРегВыражениеЛкс(ОписаниеХтмл, "<(Имя [^\>]+)>", "&lt;$1&gt;", Ложь);
				КонецЕсли;
				РегВыражение.Global = Ложь;
				РегВыражение.Pattern = "Тип:" + шТегНеКлюч + "?((?:" + шТип + ")+)(?:<[^>""]+>" + СинтаксПомощник.шТипВложенный + ")?";
				СмещениеИндекса = 0;
				Если ТипСлова = "Метод" Тогда
					РегВыражение.Pattern = "Возвращаемое значение:" + шТег + "?(?:" + РегВыражение.Pattern + ")?";
					СмещениеИндекса = 1;
				КонецЕсли;
				Результат = РегВыражение.НайтиВхождения(ОписаниеХтмл);
				Если Результат.Количество() > 0 Тогда
					мРегВыражение2.Global = Истина;
					мРегВыражение2.Pattern = шТип;
					Результат2 = мРегВыражение2.НайтиВхождения(Результат[0].SubMatches(0));
					СтрокаТипаЗначения = Новый Массив;
					Для Каждого Вхождение2 Из Результат2 Цикл
						СтрокаТипаЗначения.Добавить(СокрЛП(Вхождение2.SubMatches(0)));
					КонецЦикла;
					Если СтрокаТипаЗначения.Количество() = 0 Тогда
						СтрокаТипаЗначения.Добавить("?");
					КонецЕсли; 
					СтрокаТипаЗначения = ирОбщий.СтрСоединитьЛкс(СтрокаТипаЗначения, ",");
					ТипЗначения = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(СтрокаТипаЗначения);
					ТипЗначения = ИмяТипаИзПредставления(ТипЗначения);
					Если Результат[0].SubMatches(4) <> Неопределено Тогда
						ТипЗначенияВложенный = ИмяТипаИзПредставления(СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(Результат[0].SubMatches(4)));
						Если ирОбщий.СтрокиРавныЛкс(ТипЗначенияВложенный, "истина") Тогда
							ТипЗначенияВложенный = "Булево";
						КонецЕсли;
						Если Результат[0].SubMatches(3) <> Неопределено Тогда
							ТипЗначенияВложенный = "Массив[" + ТипЗначенияВложенный + "]";
						КонецЕсли;
					КонецЕсли;
					Если Истина
						И ирОбщий.СтрокиРавныЛкс(ТипЗначения, "Обещание") 
						И Результат[0].SubMatches(2) <> Неопределено
					Тогда
						ТипЗначения = ТипЗначения + "[" + ТипЗначенияВложенный + "]";
					КонецЕсли;
					// Ниже это делаем более универсально
					//Если Истина
					//	И ирОбщий.СтрокиРавныЛкс(ТипЗначения, "Массив") 
					//	И Результат[0].SubMatches(3) <> Неопределено
					//Тогда
					//	ТипЗначения = ТипЗначенияВложенный;
					//КонецЕсли;
				КонецЕсли; 
			КонецЕсли; 
			
			РегВыражение.Global = Ложь;
			РегВыражение.Pattern = "Элементы\x20коллекции:" + шТегНеКлюч + "?((?:" + шТип + ")+)";
			Результат = РегВыражение.НайтиВхождения(ОписаниеХтмл);
			ТипЭлементаКоллекции = "";
			Если Результат.Количество() > 0 Тогда
				мРегВыражение2.Global = Истина;
				мРегВыражение2.Pattern = шТип;
				Результат2 = мРегВыражение2.НайтиВхождения(Результат[0].SubMatches(0));
				СтрокаТипаЗначения = "";
				Для Каждого Вхождение2 Из Результат2 Цикл
					СтрокаТипаЗначения = СтрокаТипаЗначения + ", " + СокрЛП(Вхождение2.SubMatches(0));
				КонецЦикла;
				ТипЭлементаКоллекции = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(Сред(СтрокаТипаЗначения, 3));
				ТипЭлементаКоллекции = ИмяТипаИзПредставления(ТипЭлементаКоллекции);
			КонецЕсли; 
			
			РегВыражение.Global = Истина;
			РегВыражение.Pattern = "Доступен, начиная с версии (8.*?)\.<";
			Результат = РегВыражение.НайтиВхождения(ОписаниеХтмл);
			Если Результат.Количество() > 0 Тогда
				Если Результат.Количество() > 1 Тогда
					Пустышка = 0; // Для отладки
				КонецЕсли; 
				СтрокаВерсииПлатформы = Результат[Результат.Количество() - 1].SubMatches(0);
				НомерВерсииПлатформы = ирОбщий.НомерВерсииПлатформыЛкс(ирОбщий.ПервыйФрагментЛкс(СтрокаВерсииПлатформы, "("));
				Если НомерВерсииПлатформы <= 801000 Тогда
					НомерВерсииПлатформы = 0;
				КонецЕсли; 
			КонецЕсли;

			РегВыражение.Global = Ложь;
			РегВыражение.Pattern = шТегКлюч + "Доступность:" + шКонецТегаКлюч;
			ВхожденияДоступности = РегВыражение.НайтиВхождения(ОписаниеХтмл);
			ОписаниеДоступности = ""; 
			Если ВхожденияДоступности.Количество() > 0 Тогда
				ОписаниеДоступности = Сред(ОписаниеХтмл, ВхожденияДоступности[0].FirstIndex + 1);
				ОписаниеДоступности = ирОбщий.ПервыйФрагментЛкс(ОписаниеДоступности, ".");
				ОписаниеДоступности = НРег(ОписаниеДоступности);
				ДоступностьТонкийКлиент = Найти(ОписаниеДоступности, "тонкий клиент") > 0;
				ДоступностьТолстыйКлиент = Найти(ОписаниеДоступности, "толстый клиент") > 0;
				ДоступностьСервер = Найти(ОписаниеДоступности, "сервер") > 0;
			КонецЕсли;
		КонецЕсли;
		Если Найти(НРегПуть, "/script functions/") > 0 Тогда 
			// Этот раздел был в 8.2. Но в каком то релизе 8.3 убрали
			ТипКонтекста = "Общее";
			ВызватьИсключение "Обнаружен устаревший раздел Общее";
		КонецЕсли;
		
		РегВыражение.Global = Ложь;
		ТипКонтекста = ТипыКонтекстовПутей[ПутьКОписаниюКонтекста];
		Если ТипКонтекста = Неопределено Тогда
			ТипКонтекста = "";
			ФайлКонтекста = Новый Файл(РабочийКаталог + ПутьКОписаниюКонтекста);
			Если Истина
				И ФайлКонтекста.Существует()
				И ФайлКонтекста.ЭтоФайл()
			Тогда
				Текст.Прочитать(ФайлКонтекста.ПолноеИмя);
				ОписаниеКонтекста = Текст.ПолучитьТекст();
				РегВыражение.Pattern = "(<[^>]+>)+([^\(<]+[^\(<\s])";
				Результат = РегВыражение.НайтиВхождения(ОписаниеКонтекста);
				Если Результат.Количество() > 0 Тогда
					ТипКонтекста = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(Результат[0].SubMatches(1));
				КонецЕсли;
			КонецЕсли;
			ТипКонтекста = ИмяТипаИзПредставления(ТипКонтекста, Истина);
			ТипыКонтекстовПутей[ПутьКОписаниюКонтекста] = ТипКонтекста;
		КонецЕсли; 
		Если Истина
			И ТипКонтекста = ""
			И ЯзыкПрограммы = 1
		Тогда 
			Фрагменты = ирОбщий.СтрРазделитьЛкс(НовоеСлово);
			Если Истина
				И Фрагменты.Количество() > 1
				//И Найти( Фрагменты[Фрагменты.ВГраница()], "<") = 0
			Тогда
				ТипЗначения = НовоеСлово;
				НовоеСлово = Фрагменты[Фрагменты.ВГраница()];
				Фрагменты.Удалить(Фрагменты.ВГраница());
				ТипКонтекста = ирОбщий.СтрСоединитьЛкс(Фрагменты, ".");
				// Баг в файлах справки
				Если ТипКонтекста = "РегистрСведений" Тогда
					НовоеСлово  = СтрЗаменить(НовоеСлово , "<Имя регистра>", "<Имя регистра сведений>");
					ТипЗначения = СтрЗаменить(ТипЗначения, "<Имя регистра>", "<Имя регистра сведений>");
				ИначеЕсли ТипКонтекста = "РегистрНакопления" Тогда
					НовоеСлово  = СтрЗаменить(НовоеСлово , "<Имя регистра>", "<Имя регистра накопления>");
					ТипЗначения = СтрЗаменить(ТипЗначения, "<Имя регистра>", "<Имя регистра накопления>");
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		ОписаниеМетодаСырое = ""; 
		СинтаксПомощник.ЗагрузитьОписаниеМетода(ТипКонтекста, НовоеСлово, ОписаниеХтмл, ТипСлова, ЯзыкПрограммы, ТаблицаПараметров, РабочийКаталог,, ОписаниеМетодаСырое);
		Если ТипКонтекста = "" Тогда
			НовоеСлово = ИмяТипаИзПредставления(НовоеСлово);
			СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", НовоеСлово, ЯзыкПрограммы);
			СинтаксПомощник.СкорректироватьЭлементыСтруктуры(СтруктураКлюча);
			СкорректироватьКлючТипа(СтруктураКлюча);
			НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
			Если НайденныеСтроки.Количество() = 0 Тогда 
				НоваяСтрока = ТаблицаОбщихТипов.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураКлюча);
			Иначе
				НоваяСтрока = НайденныеСтроки[0];
			КонецЕсли;
			НоваяСтрока.БазовыйТип = ирОбщий.ПервыйФрагментЛкс(НовоеСлово);
			НоваяСтрока.ПутьКОписанию = ПутьКОписанию;
			НоваяСтрока.ТипЭлементаКоллекции = ТипЭлементаКоллекции;
			НоваяСтрока.НомерВерсииПлатформы = НомерВерсииПлатформы;
			Если Найти(ОписаниеХтмл, "<p>Определяет набор ") > 0 Тогда 
				Если Истина 
					И Найти(ОписаниеХтмл, ">Значения<") > 0 // Отбрасываем ПараметрыЗаписиJSON https://www.hostedredmine.com/issues/946885
					// Отбрасываем перечислимые свойства метаданных. Например ПериодичностьНомераДокумента https://www.hostedredmine.com/issues/946885
					И Не Найти(ОписаниеХтмл, "ПеречислимыеСвойстваОбъектовМетаданных") > 0
				Тогда
					ДобавитьСвойствоГлобальногоКонтекста(НоваяСтрока, НовоеСлово); // У некоторых создаются дубли, например РежимАвтоВремя, РежимДиалогаВопрос, РежимЗаписиДокумента, РежимПроведенияДокумента, РежимРабочейДаты
				Иначе
					Пустышка = 0;
				КонецЕсли;
			КонецЕсли;
			ЗаполнитьСтрокуТипа(НоваяСтрока);
			ЗаполнитьДоступность(НоваяСтрока, ДоступностьСервер, ДоступностьТолстыйКлиент, ДоступностьТонкийКлиент);
		Иначе
			Если Найти(НовоеСлово, "<") > 0 Тогда
				ТаблицаДобавления = ТаблицаШаблоновКонтекстов;
			Иначе
				ТаблицаДобавления = ТаблицаКонтекстов;
			КонецЕсли;
			НоваяСтрока = ТаблицаДобавления.Добавить();
			СтруктураСтроки = ирОбщий.СтруктураСвойствСтрокиТаблицыИлиДереваЛкс(НоваяСтрока);
			СтруктураСтроки.Слово = НовоеСлово;
			СтруктураСтроки.ТипСлова = ТипСлова;
			СтруктураСтроки.ПутьКОписанию = ПутьКОписанию;
			СтруктураСтроки.ЯзыкПрограммы = ЯзыкПрограммы;
			СтруктураСтроки.ТипКонтекста = ТипКонтекста;
			СтруктураСтроки.ТипЗначения = ТипЗначения;
			СтруктураСтроки.НомерВерсииПлатформы = НомерВерсииПлатформы;
			СинтаксПомощник.СкорректироватьЭлементыСтруктуры(СтруктураСтроки);
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураСтроки);
			ЗаполнитьДоступность(НоваяСтрока, ДоступностьСервер, ДоступностьТолстыйКлиент, ДоступностьТонкийКлиент);
			
			СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", ТипКонтекста, ЯзыкПрограммы);
			СинтаксПомощник.СкорректироватьЭлементыСтруктуры(СтруктураКлюча);
			СкорректироватьКлючТипа(СтруктураКлюча);
			НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
			Если НайденныеСтроки.Количество() = 0 Тогда 
				НоваяСтрокаТипа = ТаблицаОбщихТипов.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрокаТипа, СтруктураКлюча);
				ЗаполнитьСтрокуТипа(НоваяСтрокаТипа);
				ЗаполнитьДоступность(НоваяСтрокаТипа, ДоступностьСервер, ДоступностьТолстыйКлиент, ДоступностьТонкийКлиент);
			Иначе
				НоваяСтрокаТипа = НайденныеСтроки[0];
			КонецЕсли;
			НоваяСтрокаТипа.ЕстьКонструктор = НоваяСтрокаТипа.ЕстьКонструктор ИЛИ (ТипСлова = "Конструктор");
			Если ТипСлова = "Поле" Тогда
				// Дублируем поля для языка выражений компоновки
				СтрокаДубля = НоваяСтрока.Владелец().Добавить();
				ЗаполнитьЗначенияСвойств(СтрокаДубля, НоваяСтрока);
				СтрокаДубля.ЯзыкПрограммы = 2;
			КонецЕсли; 
			Если Истина
				И Найти(НоваяСтрока.ТипЗначения, "Массив") > 0 
				И Найти(НоваяСтрока.ТипЗначения, "ТаблицаЗначений") = 0
				И Найти(НоваяСтрока.ТипЗначения, "Структура") = 0
			Тогда
				ТипыЭлементов = Новый СписокЗначений;
				ВхожденияТипов = ирОбщий.НайтиРегВыражениеЛкс(ОписаниеМетодаСырое, СинтаксПомощник.шТипСтрогий);
				#Если Сервер И Не Сервер Тогда 
					ВхожденияТипов = Обработки.ирПлатформа.Создать().ВхожденияРегВыражения;
				#КонецЕсли
				Для Каждого ВхождениеТипа Из ВхожденияТипов Цикл
					ИмяТипаРезультата = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(ВхождениеТипа.Группа0);
					Если Ложь
						Или ИмяТипаРезультата = "Неопределено" 
						Или Найти(НоваяСтрока.ТипЗначения, ИмяТипаРезультата) > 0
						Или ТипыЭлементов.НайтиПоЗначению(ИмяТипаРезультата) <> Неопределено
					Тогда
						Продолжить;
					КонецЕсли;
					Попытка
						Пустышка = Тип(ИмяТипаРезультата);
					Исключение
						//Сообщить("-- " + ИмяТипаРезультата);
						Продолжить;
					КонецПопытки;
					//Сообщить("++ " + ИмяТипаРезультата);
					ТипыЭлементов.Добавить(ИмяТипаРезультата);
				КонецЦикла;
				Если ТипыЭлементов.Количество() > 0 Тогда
					ТипыЭлементов.СортироватьПоЗначению();
					НоваяСтрока.ТипЗначения = ирОбщий.СтрЗаменитьЛкс(НоваяСтрока.ТипЗначения, "Массив", "Массив[" + ирОбщий.СтрСоединитьЛкс(ТипыЭлементов.ВыгрузитьЗначения()) + "]");
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
		
	// Установим типы значений у свойств глобального контекста, открывающих доступ к коллекциям корневых метаданных
	СтрокаКонстанты = ТаблицаКорневыхОбъектовКонфигурации.Найти("Константы", "Множественное");
	СтрокаТаблицКонстант = ТаблицаКорневыхОбъектовКонфигурации.Добавить();
	ЗаполнитьЗначенияСвойств(СтрокаТаблицКонстант, СтрокаКонстанты); 
	СтрокаТаблицКонстант.Множественное = "Константа";
	Для Каждого СтрокаТипа Из ТаблицаКорневыхОбъектовКонфигурации Цикл
		Если СтрокаТипа.Множественное = "Константа" Тогда
			лИмяКоллекции = "Константы";
		Иначе
			лИмяКоллекции = СтрокаТипа.Множественное;
		КонецЕсли; 
		СтрокаВида = ТаблицаИменЭлементовКоллекций.Найти(лИмяКоллекции, "ИмяКоллекции");
		Если СтрокаВида = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Если СтрокаТипа.Множественное = "Константы" Тогда
			ГлавноеСлово = СтрокаТипа.Множественное;
			ГлавныйТипСлова = "Таблица";
			ВторойТипСлова = "Поле";
		Иначе
			ГлавноеСлово = СтрокаТипа.Единственное;
			ГлавныйТипСлова = "Свойство";
			ВторойТипСлова = "Таблица";
		КонецЕсли;
		
		СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы, ТипСлова, ТипЯзыка",
			ГлавноеСлово, СтрокаВида.ИмяЭлементаКоллекции, 1, ВторойТипСлова, "");
		НайденныйСтроки = ТаблицаШаблоновКонтекстов.НайтиСтроки(СтруктураКлюча);
		Если НайденныйСтроки.Количество() = 0 Тогда
			НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураКлюча);
		Иначе
			НоваяСтрока = НайденныйСтроки[0];
		КонецЕсли;
		Если СтрокаТипа.Множественное = "Константы" Тогда
			НоваяСтрока.ТипЗначения = "Произвольный";
		Иначе
			НоваяСтрока.ТипЗначения = СтрокаТипа.Единственное + "." + СтрокаВида.ИмяЭлементаКоллекции;
		КонецЕсли;
		
		// Таблицы для языка запросов
		Если СтрокаТипа.Категория = 3 Тогда // Пропускаем внешние метаданные
			Продолжить;
		КонецЕсли;
		
		СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы, ТипСлова, ТипЯзыка",
			"Глобальный", ГлавноеСлово, 1, ГлавныйТипСлова, "");
		НайденныйСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
		Если НайденныйСтроки.Количество() = 0 Тогда
			НоваяСтрока = ТаблицаКонтекстов.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураКлюча);
		Иначе
			НоваяСтрока = НайденныйСтроки[0];
		КонецЕсли;
		НоваяСтрока.ТипЗначения = ГлавноеСлово;
		
		СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы",
			СтрокаТипа.Единственное + "." + СтрокаВида.ИмяЭлементаКоллекции, 1);
		СинтаксПомощник.СкорректироватьЭлементыСтруктуры(СтруктураКлюча);
		СкорректироватьКлючТипа(СтруктураКлюча);
		НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
		Если НайденныеСтроки.Количество() = 0 Тогда 
			НоваяСтрока = ТаблицаОбщихТипов.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураКлюча);
		Иначе
			НоваяСтрока = НайденныеСтроки[0];
		КонецЕсли;
		ЗаполнитьСтрокуТипа(НоваяСтрока);
	КонецЦикла;
	
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//НоваяСтрока.ТипКонтекста = "Общее";
	//НоваяСтрока.ТипСлова = "Свойство";
	//НоваяСтрока.ТипЗначения = "Неопределено";
	//НоваяСтрока.Слово = "Неопределено";
	//НоваяСтрока.ЯзыкПрограммы = 0;
	//
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//НоваяСтрока.ТипКонтекста = "Общее";
	//НоваяСтрока.ТипСлова = "Свойство";
	//НоваяСтрока.ТипЗначения = "Null";
	//НоваяСтрока.Слово = "Null";
	//НоваяСтрока.ЯзыкПрограммы = 0;
	//
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//НоваяСтрока.ТипКонтекста = "Общее";
	//НоваяСтрока.ТипСлова = "Свойство";
	//НоваяСтрока.ТипЗначения = "Булево";
	//НоваяСтрока.Слово = "Истина";
	//НоваяСтрока.ЯзыкПрограммы = 0;
	//
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//НоваяСтрока.ТипКонтекста = "Общее";
	//НоваяСтрока.ТипСлова = "Свойство";
	//НоваяСтрока.ТипЗначения = "Булево";
	//НоваяСтрока.Слово = "Ложь";
	//НоваяСтрока.ЯзыкПрограммы = 0;
	
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//НоваяСтрока.ТипКонтекста = "Глобальный";
	//НоваяСтрока.ТипСлова = "Свойство";
	//НоваяСтрока.ТипЗначения = "Null";
	//НоваяСтрока.Слово = "NULL";
	//НоваяСтрока.ЯзыкПрограммы = 1;
	//
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//НоваяСтрока.ТипКонтекста = "Глобальный";
	//НоваяСтрока.ТипСлова = "Свойство";
	//НоваяСтрока.ТипЗначения = "Неопределено";
	//НоваяСтрока.Слово = "НЕОПРЕДЕЛЕНО";
	//НоваяСтрока.ЯзыкПрограммы = 1;
	//
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//НоваяСтрока.ТипКонтекста = "Глобальный";
	//НоваяСтрока.ТипСлова = "Свойство";
	//НоваяСтрока.ТипЗначения = "Булево";
	//НоваяСтрока.Слово = "ИСТИНА";
	//НоваяСтрока.ЯзыкПрограммы = 1;
	//
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();
	//НоваяСтрока.ТипКонтекста = "Глобальный";
	//НоваяСтрока.ТипСлова = "Свойство";
	//НоваяСтрока.ТипЗначения = "Булево";
	//НоваяСтрока.Слово = "ЛОЖЬ";
	//НоваяСтрока.ЯзыкПрограммы = 1;
	
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ОбъектМетаданныхПодсистема";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "КоллекцияОбъектовМетаданных";
	НоваяСтрока.Слово = "Подсистемы";
	НоваяСтрока.ЯзыкПрограммы = 0;
	
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.Таблица";
	НоваяСтрока.Слово = "Таблица";
	НоваяСтрока.ЯзыкПрограммы = 1;
	
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.Таблица";
	НоваяСтрока.Слово = "Таблица";
	НоваяСтрока.ЯзыкПрограммы = 2;
	
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.ВременнаяТаблица";
	НоваяСтрока.Слово = "ВременнаяТаблица";
	НоваяСтрока.ЯзыкПрограммы = 1;
	
	// Добавим колонки временной таблицы
	НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ВременнаяТаблица";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "Произвольный";
	НоваяСтрока.Слово = "<Имя колонки>";
	НоваяСтрока.ЯзыкПрограммы = 1;

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

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

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

	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "ОформлениеСтроки", "Ячейки");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НоваяСтрока = НайденныеСтроки[0];
	НоваяСтрока.ТипЗначения = "ОформленияЯчеек";
	НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ОформленияЯчеек";
	НоваяСтрока.Слово = "<Имя колонки>";
	НоваяСтрока.ТипЗначения = "ОформлениеЯчейки";
	НоваяСтрока.ТипСлова = "Свойство"; 
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "ОформленияЯчеек";
	НоваяСтрока.ТипЭлементаКоллекции = "ОформлениеЯчейки";
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ОформленияЯчеек";
	НоваяСтрока.Слово = "Найти";
	НоваяСтрока.ТипЗначения = "ОформлениеЯчейки";
	НоваяСтрока.ТипСлова = "Метод"; 
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.ТипКонтекста = "ОформленияЯчеек";
	СтрокаПараметра.Слово = "Найти";
	СтрокаПараметра.Параметр = "ИмяКолонки";
	СтрокаПараметра.Номер = 1;
	СтрокаПараметра.ТипЗначения = "Строка";  
	СтрокаПараметра.ЯзыкПрограммы = ВременныйНомерВстроенногоЯзыка();
	
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ФормаКлиентскогоПриложения";
	НоваяСтрока.Слово = "ЭтаФорма";
	НоваяСтрока.ТипЗначения = "ФормаКлиентскогоПриложения";
	НоваяСтрока.ТипСлова = "Свойство";
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "КоллекцияДвижений", "<Имя регистра>");
	НайденныеСтроки = ТаблицаШаблоновКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "Набор записей регистра";
	
	// Метод ФоновоеЗадание.ОжидатьЗавершения устарел в 8.3.13. Видимо поэтому удалили его параметры из описания.
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.ТипКонтекста = "ФоновоеЗадание";
	СтрокаПараметра.Слово = "ОжидатьЗавершения";
	СтрокаПараметра.Параметр = "Таймаут";
	СтрокаПараметра.Номер = 1;
	СтрокаПараметра.ТипЗначения = "Число";  
	СтрокаПараметра.Необязательный = Истина;
	СтрокаПараметра.ЯзыкПрограммы = ВременныйНомерВстроенногоЯзыка();
	
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.ТипКонтекста = "AutomationСервер";
	СтрокаПараметра.Слово = "NewObject";
	СтрокаПараметра.Параметр = "Параметры";
	СтрокаПараметра.Номер = 2;
	СтрокаПараметра.ТипЗначения = "Массив";
	СтрокаПараметра.Необязательный = Истина;
	СтрокаПараметра.ЯзыкПрограммы = ВременныйНомерВстроенногоЯзыка();   
	
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.ТипКонтекста = "ВнешнееСоединение";
	СтрокаПараметра.Слово = "NewObject";
	СтрокаПараметра.Параметр = "Параметры";
	СтрокаПараметра.Номер = 2;
	СтрокаПараметра.ТипЗначения = "Массив";
	СтрокаПараметра.Необязательный = Истина;
	СтрокаПараметра.ЯзыкПрограммы = ВременныйНомерВстроенногоЯзыка();
	
	СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", "ФиксированныйМассив", 0);
	НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЭлементаКоллекции = "Произвольный";     
	
	СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", "ОписаниеПараметровЗапроса", 0);
	НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЭлементаКоллекции = "ОписаниеПараметраЗапроса";
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", "Форма", "ТекущийЭлемент", 0);
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "ТабличноеПоле, ПолеВвода, ПолеТабличногоДокумента, ПолеHTMLДокумента"; 
	
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "ActiveX"; // В синтакс-помощнике не описан
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	
	// ЛюбаяСсылка
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "ЛюбаяСсылка";
	ЗаполнитьСтрокуТипа(НоваяСтрока);
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", "УдалениеОбъекта", "Ссылка", 0);
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "ЛюбаяСсылка"; 
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", "МоментВремени", "Ссылка", 0);
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "ЛюбаяСсылка, Неопределено";
	СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", "XMLЗначение", 0);
	Для Каждого СтрокаСлова Из ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча) Цикл
		СтрокаСлова.ТипЗначения = СтрокаСлова.ТипЗначения + ", ЛюбаяСсылка";
	КонецЦикла; 
	НоваяСтрока = ТаблицаОбщихТипов.Добавить();
	НоваяСтрока.Слово = "СсылочныйОбъект";
	ЗаполнитьСтрокуТипа(НоваяСтрока);

	// Антибаг 8.3.1 
	СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", "ВложенныеНаборыДанныхМакетаКомпоновкиДанных", 0);
	НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЭлементаКоллекции = "ВложенныйНаборДанныхМакетаКомпоновкиДанных";
	
	// Антибаг 8.3.17 https://partners.v8.1c.ru/forum/t/1911561/m/1911561 , http://www.hostedredmine.com/issues/872563
	СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", "ОкнаКлиентскогоПриложения", 0);
	НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
	НоваяСтрока = НайденныеСтроки[0];
	НоваяСтрока.ТипТипа = "Основной";
	НоваяСтрока.ИД = "f09b329b-17f5-4740-9758-4a1657686858";

	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ПолеHTMLДокумента";
	НоваяСтрока.Слово = "OnClick";
	НоваяСтрока.ТипСлова = "Событие";

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

	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ТипСлова, ЯзыкПрограммы", "ТаблицаФормы", "ТекущиеДанные", "Свойство", 0);
	НоваяСтрока = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча)[0];
	НоваяСтрока.ТипЗначения = НоваяСтрока.ТипЗначения + ", Неопределено";
	
	// ПрочитатьXML
	СтруктураКлюча = Новый Структура("ТипЗначения, ЯзыкПрограммы", "ЗначениеСчитанногоТипа, Неопределено", 0);
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
		НайденнаяСтрока.ТипЗначения = "Произвольный";
	КонецЦикла;
	
	// КАК
	СтруктураКлюча = Новый Структура("Слово, ПутьКОписанию, ЯзыкПрограммы", "КАК", "//shquery_ru/query_cast.html", 1);
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
		НайденнаяСтрока.ТипКонтекста = "ВЫРАЗИТЬ";
	КонецЦикла;
	
	// ОбъектМетаданныхКоманда.ТипПараметраКоманды
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", "ОбъектМетаданныхКоманда", "ТипПараметраКоманды", 0);
	НоваяСтрока = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча)[0];
	НоваяСтрока.ТипЗначения = "ОписаниеТипов";
	
	// Антибаг платформы 8.3.1 НайтиЗначениеПараметра
	СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", "НайтиЗначениеПараметра", 0);
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
		Если Ложь
			Или НайденнаяСтрока.ТипКонтекста = "ЗначенияПараметровДанныхКомпоновкиДанных"
		Тогда
			НайденнаяСтрока.ТипЗначения = "ЗначениеПараметраНастроекКомпоновкиДанных, Неопределено"; // Вместо ЗначениеПараметраКомпоновкиДанных 
		КонецЕсли;
	КонецЦикла;

	// Бесполезно, т.к. типы параметров мы берем прямо из страницы синтакс-помощника
	//СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, Параметр", "МенеджерРегламентныхЗаданий", "НайтиПредопределенное", "Метаданные");
	//НайденныеСтроки = ТаблицаПараметров.НайтиСтроки(СтруктураКлюча);
	//НайденныеСтроки[0].ТипЗначения = СтрЗаменить(НайденныеСтроки[0].ТипЗначения, "Метаданные", "ОбъектМетаданныхРегламентноеЗадание"); 

	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "ПолеHTMLДокумента", "Документ");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "HTMLDocument {HTMLFile}";
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "РасширениеПоляФормыДляПоляHTMLДокумента", "Документ");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "HTMLDocument {HTMLFile}";
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "МенеджерРасширенийКонфигурации", "Создать");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "РасширениеКонфигурации"; 
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "Запрос", "ВыполнитьПакет");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения= "Массив[РезультатЗапроса]";
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "Запрос", "ВыполнитьПакетСПромежуточнымиДанными");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения= "Массив[РезультатЗапроса]";  
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "ФабрикаXDTO", "ПрочитатьXML");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "ОбъектXDTO"; 
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "ФабрикаXDTO", "ПрочитатьJSON");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "ОбъектXDTO";  
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "Структура", "<Имя ключа>");
	НайденныеСтроки = ТаблицаШаблоновКонтекстов.НайтиСтроки(СтруктураКлюча);
	НайденныеСтроки[0].ТипЗначения = "Произвольный"; // Антибаг платформы. Там указано "Строка"

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

//.
// Параметры:
//    НоваяСтрока - СтрокаТаблицыЗначений - 
//    ДоступностьСервер - Булево, Число - 
//    ДоступностьТолстыйКлиент - Булево, Число - 
//    ДоступностьТонкийКлиент - Булево, Число - 
Процедура ЗаполнитьДоступность(Знач НоваяСтрока, Знач ДоступностьСервер, Знач ДоступностьТолстыйКлиент, Знач ДоступностьТонкийКлиент) Экспорт
	НоваяСтрока.НеТолстыйКлиент = Не ДоступностьТолстыйКлиент;
	НоваяСтрока.НеТонкийКлиент = Не ДоступностьТонкийКлиент;
	НоваяСтрока.НеСервер = Не ДоступностьСервер;
КонецПроцедуры

Функция ВременныйНомерВстроенногоЯзыка() Экспорт
	Возврат 190;
КонецФункции

Процедура ЗаполнитьОсобыйМетодВстроенногоЯзыка(Знач НоваяСтрока, Знач РабочийКаталог, Знач СинтаксПомощник)
	
	НоваяСтрока.ТипКонтекста = "Глобальный";
	НоваяСтрока.ТипСлова = "Метод";
	ПутьКОписанию = ирОбщий.СтрЗаменитьЛкс(НоваяСтрока.ПутьКОписанию, "//shlang_ru", "");
	Текст = Новый ТекстовыйДокумент;
	Текст.Прочитать(РабочийКаталог + ПутьКОписанию);
	СинтаксПомощник.ЗагрузитьОписаниеМетода(НоваяСтрока.ТипКонтекста, НоваяСтрока.Слово, Текст.ПолучитьТекст(), НоваяСтрока.ТипСлова, НоваяСтрока.ЯзыкПрограммы, ТаблицаПараметров, РабочийКаталог);

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

Процедура ДобавитьСистемныеСвойстваСистемнойТЧ(Знач КорневойТип, Знач ТипСтрокиТабличнойЧасти, Знач ТипТабличнойЧастиЗапроса, Знач АтрибутШаблона)
	
	ДополнительнаяСтрокаКонтекста = ТаблицаКонтекстов.Добавить();
	ДополнительнаяСтрокаКонтекста.ТипКонтекста = ТипСтрокиТабличнойЧасти;
	ДополнительнаяСтрокаКонтекста.ТипСлова = "Свойство";
	ДополнительнаяСтрокаКонтекста.Слово = "НомерСтроки";
	ДополнительнаяСтрокаКонтекста.ТипЗначения = "Число";
	ДополнительнаяСтрокаКонтекста.ЯзыкПрограммы = 0;
	
	ДополнительнаяСтрокаКонтекста = ТаблицаКонтекстов.Добавить();
	ДополнительнаяСтрокаКонтекста.ТипКонтекста = ТипТабличнойЧастиЗапроса;
	ДополнительнаяСтрокаКонтекста.ТипСлова = "Поле";
	ДополнительнаяСтрокаКонтекста.Слово = "НомерСтроки";
	ДополнительнаяСтрокаКонтекста.ТипЗначения = "Число";
	ДополнительнаяСтрокаКонтекста.ЯзыкПрограммы = 1;

	ДополнительнаяСтрокаКонтекста = ТаблицаКонтекстов.Добавить();
	ДополнительнаяСтрокаКонтекста.ТипКонтекста = ТипТабличнойЧастиЗапроса;
	ДополнительнаяСтрокаКонтекста.ТипСлова = "Поле";
	ДополнительнаяСтрокаКонтекста.Слово = "Ссылка";
	ДополнительнаяСтрокаКонтекста.ТипЗначения = КорневойТип + "." + АтрибутШаблона;
	ДополнительнаяСтрокаКонтекста.ЯзыкПрограммы = 1;
	
КонецПроцедуры

Процедура РаспаковатьФайлВнешнейОбработки(ПолноеИмяФайла, ПутьРаспаковки) Экспорт 

	ИмяФайлаПакера = "v8unpack.exe";
	//ПроверитьСоздатьФайлЗапаковщика1С();
	мПлатформа.ПолучитьМакет("v8unpack").Записать(ПутьРаспаковки + "\" + ИмяФайлаПакера);
	мПлатформа.ПолучитьМакет("Zlib1").Записать(ПутьРаспаковки + "\" + "Zlib1.dll");
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.УстановитьТекст("
	|" + ИмяФайлаПакера + " -unpack  %1 .\
	|FOR %%I IN (*.data) DO " + ИмяФайлаПакера + " -undeflate %%I %%~nI.data.und
	|FOR %%I IN (*.und)  DO " + ИмяФайлаПакера + " -unpack    %%I %%~nI.und.unp
	|");
	ТекстовыйДокумент.Записать(ПутьРаспаковки + "\" + "unpack.bat", КодировкаТекста.ANSI);
	ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс("unpack.bat """ + ПолноеИмяФайла + """", ПутьРаспаковки);

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

Процедура ЗаполнитьТаблицы(Кнопка = Неопределено)
		
	ЗаполнитьВсе();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура КоманднаяПанель1ОткрытьТаблицу(Кнопка)
	
	Если ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") Тогда
		Возврат;
	КонецЕсли; 
	ирКлиент.ОткрытьЗначениеЛкс(ТекущийЭлемент.Значение, Ложь,,,,, ТекущийЭлемент);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


