Перем RegExp;
Перем RegExp2;

Перем СоответствиеЗамены;
Перем шТип;
Перем типСтрока;
Перем ЗаменыВнешнихОбъектов;
Перем АрхивСинтаксПомощника;
Перем ИсполнительСкрытыхКомандСистемы;
Перем VBScript;
Перем ФайлРаспаковщикаZIP;
Перем мПлатформа;

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

	НоваяСтрока.БазовыйТип = ирОбщий.ПолучитьПервыйФрагментЛкс(НоваяСтрока.Слово);

	НоваяСтрока.ТипТипа = "Основной";

	Если НоваяСтрока.ЯзыкПрограммы = 0 Тогда 
		МаркерПеречисления = "Перечисление";

		Если Лев(НоваяСтрока.Слово, СтрДлина(МаркерПеречисления)) = МаркерПеречисления Тогда 
			ИмяСистемногоПеречисления = СтрЗаменить(НоваяСтрока.Слово, МаркерПеречисления, "");

			Попытка
				Если Строка(Вычислить(ИмяСистемногоПеречисления)) = "Перечисление" + ИмяСистемногоПеречисления Тогда

					НоваяСтрока.ТипТипа = "Перечисление";
					
					СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", ИмяСистемногоПеречисления, НоваяСтрока.ЯзыкПрограммы);

					НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);

					Если НайденныеСтроки.Количество() = 0 Тогда 

						НоваяСтрокаТипа = ТаблицаОбщихТипов.Добавить();

						ЗаполнитьЗначенияСвойств(НоваяСтрокаТипа, НоваяСтрока);

						ЗаполнитьЗначенияСвойств(НоваяСтрокаТипа, СтруктураКлюча);

						
						// Закомментировал 16.09.2011. Раскомментировал 22.12.2011
						ЗаполнитьСтрокуТипа(НоваяСтрокаТипа);
						
						НоваяСтрока.Представление = НоваяСтрока.БазовыйТип;
						
						//НоваяСтрокаТипа.ПутьКОписанию = "";

					КонецЕсли;

					
					НоваяСтрокаКонтекста = ТаблицаКонтекстов.Добавить();

					НоваяСтрокаКонтекста.ТипКонтекста = "Глобальный контекст";

					НоваяСтрокаКонтекста.Слово = ИмяСистемногоПеречисления;

					НоваяСтрокаКонтекста.ТипЗначения = НоваяСтрока.Слово;

					НоваяСтрокаКонтекста.ЯзыкПрограммы = НоваяСтрока.ЯзыкПрограммы;

					НоваяСтрокаКонтекста.ПутьКОписанию = НоваяСтрока.ПутьКОписанию;

					НоваяСтрокаКонтекста.ТипСлова = "Свойство";

				КонецЕсли;

			Исключение

			КонецПопытки;
		КонецЕсли;

		Если Ложь
			Или Найти(НоваяСтрока.Слово, "<") > 0 
			Или Найти(НоваяСтрока.Слово, "ВнешняяОбработка") > 0
			Или Найти(НоваяСтрока.Слово, "ВнешнийОтчет") > 0
		Тогда 

			Представление = ирОбщий.ПолучитьПредставлениеИзИдентификатораЛкс(НоваяСтрока.БазовыйТип);
		Иначе
			Представление = НоваяСтрока.БазовыйТип;
		КонецЕсли;
		Идентификатор = "";

		Если Истина

			И Найти(НоваяСтрока.Слово, "<") = 0 

			И Найти(НоваяСтрока.Слово, " ") = 0
			И Найти(НоваяСтрока.Слово, "ВнешняяОбработка") = 0
			И Найти(НоваяСтрока.Слово, "ВнешнийОтчет") = 0

		Тогда

			Попытка
				// Обычные типы
				ЗначениеТип = Тип(НоваяСтрока.Слово);
				Идентификатор = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс("" + ЗначениеВСтрокуВнутр(ЗначениеТип), ",", "}", Ложь);
			Исключение
				//Сообщить("Неверное имя типа - " + НоваяСтрока.Слово);

				//Представление = "*";

				ЗначениеТип = НоваяСтрока.Слово;
				Если НоваяСтрока.ТипТипа = "Основной"  Тогда
					НоваяСтрока.ТипТипа = "Расширение";

				КонецЕсли;
			КонецПопытки;
			Представление = Строка(ЗначениеТип);

		КонецЕсли;
		НоваяСтрока.ИД = Идентификатор;

		НоваяСтрока.Представление = Представление;
	Иначе // НоваяСтрока.ЯзыкПрограммы = 1
		Если Ложь

			Или НоваяСтрока.БазовыйТип = "Константа"

			Или НоваяСтрока.БазовыйТип = "Константы"

		Тогда

			НоваяСтрока.ТипТипа = "Расширение";

		КонецЕсли;

	КонецЕсли;
	RegExp.Global = Ложь;
	RegExp.Pattern = "<[^>]+>|([^<>]* [^<>]*)";
	Результат = RegExp.Execute(НоваяСтрока.Слово);
	Для Каждого Item Из Результат Цикл
		Если Item.SubMatches(0) <> Неопределено Тогда
			НоваяСтрока.ТипТипа = "Расширение";
			Прервать;

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

КонецПроцедуры // ЗаполнитьСтрокуТипа()

Процедура СкорректироватьКлючТипа(Структура)

	
	Попытка
		// Выполняется много раз!

		Если Строка(Вычислить(Структура.Слово)) = "Перечисление" + Структура.Слово Тогда

			Структура.Слово = "Перечисление" + Структура.Слово;
		КонецЕсли;

	Исключение

	КонецПопытки;



КонецПроцедуры // СкорректироватьКлючТипа()


Процедура СкорректироватьЭлементыСтруктуры(Структура)

	

	Перем СтрокаЗаменыИмениРегистра;

	

	Для Каждого ЭлементСтруктуры Из Структура Цикл

		Если ТипЗнч(ЭлементСтруктуры.Значение) <> типСтрока Тогда

			Продолжить;

		КонецЕсли; 

		Если Найти(ЭлементСтруктуры.Значение, "<Имя регистра>") > 0 Тогда

			Если Найти(ЭлементСтруктуры.Значение, "РегистрСведений") > 0 Тогда

				СтрокаЗаменыИмениРегистра = "<Имя регистра сведений>";

			ИначеЕсли Найти(ЭлементСтруктуры.Значение, "РегистрНакопления") > 0 Тогда

				СтрокаЗаменыИмениРегистра = "<Имя регистра накопления>";

			КонецЕсли;

			Прервать;

		КонецЕсли;

	КонецЦикла;

	

	Для Каждого ЭлементСтруктуры Из Структура Цикл

		ЗначениеЭлемента = ЭлементСтруктуры.Значение;

		Если ТипЗнч(ЗначениеЭлемента) <> типСтрока Тогда

			Продолжить;

		КонецЕсли; 

		Если Истина

			И Структура.Свойство("ЯзыкПрограммы")

			И Структура.ЯзыкПрограммы = 1 

			И ЗначениеЭлемента <> "Ссылка"

		Тогда

			ЗначениеЭлемента = СтрЗаменить(ЗначениеЭлемента, "Ссылка", "");

		КонецЕсли;

		Если СтрокаЗаменыИмениРегистра <> Неопределено Тогда

			ЗначениеЭлемента = СтрЗаменить(ЗначениеЭлемента, "<Имя регистра>", СтрокаЗаменыИмениРегистра);

		КонецЕсли;
		// Выполняется много раз!

		Для Каждого ЭлементЗамены Из СоответствиеЗамены Цикл

			ЗначениеЭлемента = СтрЗаменить(ЗначениеЭлемента, ЭлементЗамены.Ключ, ЭлементЗамены.Значение);

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

	КонецЦикла;



КонецПроцедуры // СкорректироватьКлючТипа()


Функция ЗаменитьТегиУгловыхСкобок(Строка)

	Строка = СокрЛП(Строка);
	Строка = СтрЗаменить(Строка, "&lt;", "<");
	Результат = СтрЗаменить(Строка, "&gt;", ">");
	// **** пробный режим для ускорения
	//RegExp.Global = Истина;

	//RegExp.Pattern = "([^&]+)&lt;([^&]+)&gt;";

	//Результат = RegExp.Replace(Строка, "$1<$2>");

	Возврат Результат;

КонецФункции // ЗаменитьТегиУгловыхСкобок()

// Получает массив имен всех примитивных типов.
//
// Параметры:
//  Нет.
//
// Возвращаемое значение:
//  Массив – имен типов.
//
Функция ПолучитьПримитивныеТипыЛкс(Имена = Ложь) Экспорт

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

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

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

	ТаблицаИменЭлементовКоллекций.Очистить();

	

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

	НоваяСтрока.ИмяКоллекции = "Структура";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя ключа>";

	

	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "Рисунки";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя рисунка>";
	
	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "ВидыСубконто";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя вида субконто>";
	
	// Тут не совсем прямо, т.к. у метаданного нет такой коллекции =(
	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "ВнешниеОбработки";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя внешней обработки>";
	
	// Тут не совсем прямо, т.к. у метаданного нет такой коллекции =(
	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "ВнешниеОтчеты";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя внешнего отчета>";
	
	// Тут не совсем прямо, т.к. у метаданного нет такой коллекции =(
	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "ТочкиМаршрута";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя точки маршрута бизнес-процесса>";
	
	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "Области";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя области>";
	
	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "ПризнакиУчетаСубконто";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя флага учета субконто>";
	
	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();

	НоваяСтрока.ИмяКоллекции = "Параметры";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя параметра>";

	

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

	НоваяСтрока.ИмяКоллекции = "УсловноеОформление";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента оформления>";

	

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

	НоваяСтрока.ИмяКоллекции = "ВидыСубконто";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Номер субконто>";

	

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

	НоваяСтрока.ИмяКоллекции = "Источники";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя источника>";

	

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

	НоваяСтрока.ИмяКоллекции = "Колонки";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя колонки>";

	НоваяСтрока.ИмяОбщегоТипа = "СтрокаТаблицыЗначений";  // было закомментировано
	
	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "ОформленияЯчеек";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя колонки>";
	НоваяСтрока.ИмяОбщегоТипа = "Ячейки";
	
	// Заглушка

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

	НоваяСтрока.ИмяКоллекции = "Поля";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя поля>";

	

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

	НоваяСтрока.ИмяКоллекции = "Свойства";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя свойства>";

	

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

	НоваяСтрока.ИмяКоллекции = "Методы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя метода>";

	

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

	НоваяСтрока.ИмяКоллекции = "ОбщиеМодули";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общего модуля>";

	

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

	НоваяСтрока.ИмяКоллекции = "ТабличныеЧасти";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя табличной части>";

	

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

	НоваяСтрока.ИмяКоллекции = "Реквизиты";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя реквизита>";

	

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

	НоваяСтрока.ИмяКоллекции = "Ресурсы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя ресурса>";

	

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

	НоваяСтрока.ИмяКоллекции = "Измерения";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя измерения>";

	

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

	НоваяСтрока.ИмяКоллекции = "РеквизитыАдресации";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя реквизита адресации>";

	

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

	НоваяСтрока.ИмяКоллекции = "ЗначенияПеречисления";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя значения перечисления>";

	

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

	НоваяСтрока.ИмяКоллекции = "Графы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя графы журнала>";

	

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

	НоваяСтрока.ИмяКоллекции = "Перерасчеты";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя перерасчета>";

	

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

	НоваяСтрока.ИмяКоллекции = "Формы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя формы>";

	

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

	НоваяСтрока.ИмяКоллекции = "Стили";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя стиля>";

	

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

	НоваяСтрока.ИмяКоллекции = "ЭлементыСтиля";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента стиля>";

	

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

	НоваяСтрока.ИмяКоллекции = "Отбор";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента отбора>";

	

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

	НоваяСтрока.ИмяКоллекции = "Движения";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра>";

	

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

	НоваяСтрока.ИмяКоллекции = "Картинки";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя картинки>";

	

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

	НоваяСтрока.ИмяКоллекции = "РегистрыСведений";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра сведений>";

	

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

	НоваяСтрока.ИмяКоллекции = "РегистрыРасчета";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра расчета>";

	

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

	НоваяСтрока.ИмяКоллекции = "РегистрыНакопления";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра накопления>";

	

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

	НоваяСтрока.ИмяКоллекции = "РегистрыБухгалтерии";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра бухгалтерии>";

	

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

	НоваяСтрока.ИмяКоллекции = "Справочники";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя справочника>";

	

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

	НоваяСтрока.ИмяКоллекции = "Документы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя документа>";

	

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

	НоваяСтрока.ИмяКоллекции = "ПланыВидовХарактеристик";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя плана видов характеристик>";

	

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

	НоваяСтрока.ИмяКоллекции = "ПланыВидовРасчета";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя плана видов расчета>";

	

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

	НоваяСтрока.ИмяКоллекции = "ПланыСчетов";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя плана счетов>";

	

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

	НоваяСтрока.ИмяКоллекции = "ПризнакиУчета";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя признака учета>";

	

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

	НоваяСтрока.ИмяКоллекции = "ПланыОбмена";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя плана обмена>";

		

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

	НоваяСтрока.ИмяКоллекции = "Константы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя константы>";

	

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

	НоваяСтрока.ИмяКоллекции = "БизнесПроцессы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя бизнес-процесса>";

	

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

	НоваяСтрока.ИмяКоллекции = "Задачи";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя задачи>";

	

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

	НоваяСтрока.ИмяКоллекции = "Обработки";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя обработки>";

	

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

	НоваяСтрока.ИмяКоллекции = "Отчеты";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя отчета>";

	

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

	НоваяСтрока.ИмяКоллекции = "ЖурналыДокументов";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя журнала документов>";

	

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

	НоваяСтрока.ИмяКоллекции = "Перечисления";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя перечисления>";

	

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

	НоваяСтрока.ИмяКоллекции = "Операции";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя операции>";

	

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

	НоваяСтрока.ИмяКоллекции = "Макеты";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя макета>";

	

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

	НоваяСтрока.ИмяКоллекции = "Последовательности";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя последовательности>";

	

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

	НоваяСтрока.ИмяКоллекции = "КритерииОтбора";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя критерия отбора>";

	

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

	НоваяСтрока.ИмяКоллекции = "Интерфейсы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя интерфейса>";

	

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

	НоваяСтрока.ИмяКоллекции = "ОбщиеМакеты";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общего макета>";

	

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

	НоваяСтрока.ИмяКоллекции = "ОбщиеФормы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общей формы>";

	

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

	НоваяСтрока.ИмяКоллекции = "НумераторыДокументов";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя нумератора документов>";

	

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

	НоваяСтрока.ИмяКоллекции = "WebСервисы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя WebСервиса>";

	

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

	НоваяСтрока.ИмяКоллекции = "WSСсылки";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя WS-Ссылки>";

	

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

	НоваяСтрока.ИмяКоллекции = "Подсистемы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя подсистемы>";

	

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

	НоваяСтрока.ИмяКоллекции = "Роли";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя роли>";

		

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

	НоваяСтрока.ИмяКоллекции = "ПараметрыСеанса";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя параметра сеанса>";

	

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

	НоваяСтрока.ИмяКоллекции = "ПакетыXDTO";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя ПакетаXDTO>";

	

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

	НоваяСтрока.ИмяКоллекции = "ОбщиеКартинки";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общей картинки>";

	

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

	НоваяСтрока.ИмяКоллекции = "РегламентныеЗадания";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регламентного задания>";

	

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

	НоваяСтрока.ИмяКоллекции = "ПодпискиНаСобытия";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя подписки на событие>";

	

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

	НоваяСтрока.ИмяКоллекции = "Языки";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя языка>";

	

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

	НоваяСтрока.ИмяКоллекции = "Предопределенные";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя предопределенного элемента справочника>";

	

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

	НоваяСтрока.ИмяКоллекции = "Предопределенные";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя предопределенного вида характеристик>";

	

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

	НоваяСтрока.ИмяКоллекции = "Предопределенные";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя предопределенного счета>";

	

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

	НоваяСтрока.ИмяКоллекции = "Предопределенные";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя предопределенного объекта>";

	

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

	НоваяСтрока.ИмяКоллекции = "ЭлементыФормы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента управления>";
	НоваяСтрока.ИмяОбщегоТипа = "ЭлементыФормы";
	

	НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
	НоваяСтрока.ИмяКоллекции = "Элементы";
	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента управления>";
	НоваяСтрока.ИмяОбщегоТипа = "ВсеЭлементыФормы";
	

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

	НоваяСтрока.ИмяКоллекции = "Кнопки";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя кнопки>";

	

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

	НоваяСтрока.ИмяКоллекции = "ВстроенныеТаблицы";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя встроенной таблицы>";

	

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

	НоваяСтрока.ИмяКоллекции = "<Имя коллекции метаданных>";

	НоваяСтрока.ИмяЭлементаКоллекции = "<Имя объекта описания метаданного>";

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

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

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

	ТаблицаШаблоновКонтекстов.Очистить();

	ТаблицаОбщихТипов.Очистить();
	ТаблицаПараметров.Очистить();
	

	ЗаполнитьСтатическое();
	

	// Добавим функции языка запросов

	//Список = Новый СписокЗначений;

	//Список.Добавить("СУММА", "Число");

	//Список.Добавить("МАКСИМУМ", "Произвольный");

	//Список.Добавить("МИНИМУМ", "Произвольный");

	//Список.Добавить("ЗНАЧЕНИЕ", "Произвольный");

	//Список.Добавить("СРЕДНЕЕ", "Число");

	//Список.Добавить("КОЛИЧЕСТВО", "Число");

	//Список.Добавить("ВЫРАЗИТЬ", "Произвольный");

	//Список.Добавить("ЕСТЬNULL", "Произвольный");

	//Список.Добавить("ПРЕДСТАВЛЕНИЕ", "Строка");

	//Список.Добавить("ПРЕДСТАВЛЕНИЕССЫЛКИ", "Строка");

	//Список.Добавить("ПОДСТРОКА", "Строка");

	//Список.Добавить("РАЗНОСТЬДАТ", "Число");

	//Список.Добавить("ДАТАВРЕМЯ", "Дата");

	//Список.Добавить("НАЧАЛОПЕРИОДА", "Дата");

	//Список.Добавить("КОНЕЦПЕРИОДА", "Дата");

	//Список.Добавить("ДЕНЬНЕДЕЛИ", "Число");

	//Список.Добавить("ЧАС", "Число");

	//Список.Добавить("МИНУТА", "Число");

	//Список.Добавить("СЕКУНДА", "Число");

	//Список.Добавить("МЕСЯЦ", "Число");

	//Список.Добавить("ДЕНЬГОДА", "Число");

	//Список.Добавить("НЕДЕЛЯ", "Число");

	//Список.Добавить("ДЕНЬНЕДЕЛИ", "Число");

	//Список.Добавить("ГОД", "Число");

	//Список.Добавить("КВАРТАЛ", "Число");
	//Список.Добавить("ДОБАВИТЬКДАТЕ", "Дата");


	//// Добавим ключевые слова встроенного языка
	//Список = Новый Массив;

	//Список.Добавить("Не");

	//Список.Добавить("И");

	//Список.Добавить("Или");

	//Список.Добавить("По");

	//Список.Добавить("Экспорт");

	//Список.Добавить("Перем");

	//Список.Добавить("Процедура");

	//Список.Добавить("КонецПроцедуры");

	//Список.Добавить("Функция");

	//Список.Добавить("КонецФункции");

	//Список.Добавить("Возврат");

	//Список.Добавить("Перейти");
	//Список.Добавить("Для");

	//Список.Добавить("Каждого");

	//Список.Добавить("Из");

	//Список.Добавить("Цикл");

	//Список.Добавить("КонецЦикла");

	//Список.Добавить("Пока");

	//Список.Добавить("Прервать");

	//Список.Добавить("Продолжить");

	//Список.Добавить("Если");

	//Список.Добавить("Тогда");

	//Список.Добавить("Иначе");

	//Список.Добавить("ИначеЕсли");

	//Список.Добавить("КонецЕсли");

	//Список.Добавить("Попытка");

	//Список.Добавить("Исключение");

	//Список.Добавить("КонецПопытки");

	//Список.Добавить("ВызватьИсключение");

	//Список.Добавить("Выполнить");
	//Список.Добавить("Новый");


	//Для Каждого КлючевоеСлово Из Список Цикл

	//	НоваяСтрока = ТаблицаКонтекстов.Добавить();

	//	НоваяСтрока.Слово = КлючевоеСлово;

	//	НоваяСтрока.ТипКонтекста = "Общее";

	//	НоваяСтрока.ТипСлова = "Конструкция";

	//КонецЦикла;

	

	// Добавим специальные шаблоны

	НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();

	НоваяСтрока.Слово = "<Имя свойства>";

	НоваяСтрока.ТипКонтекста = "COMОбъект";

	НоваяСтрока.ТипСлова = "Свойство";

	

	НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();

	НоваяСтрока.Слово = "<Имя метода>";

	НоваяСтрока.ТипКонтекста = "COMОбъект";

	НоваяСтрока.ТипСлова = "Метод";

	
	// На это просто забили в синтакс-помощнике

	НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
	НоваяСтрока.Слово = "<Имя страницы>";
	НоваяСтрока.ТипКонтекста = "СтраницыПанели";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "СтраницаПанели";
	
	ТаблицаКорневыхОбъектовКонфигурации = ирКэш.Получить().ПолучитьТаблицуТиповМетаОбъектов(Ложь, Ложь);
	
	РабочийКаталог = ПолучитьИмяВременногоФайла();
	СоздатьКаталог(РабочийКаталог);
	ФайлРаспаковщикаZIP = мПлатформа.ПолучитьФайлРаспаковщикаZIP(Истина);
	
	// Синтакс-помощник для языка запросов
	МаркерЯзыкаЗапросов = "//shquery_ru";
	Для Каждого СтрокаСлова Из СловаЯзыкаЗапросов Цикл
		НоваяСтрока = ТаблицаКонтекстов.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСлова); 
		НоваяСтрока.Слово = СтрокаСлова.СловоЗапроса;
		НоваяСтрока.ТипКонтекста = "Глобальный контекст";
		Если Ложь
			Или Найти(НоваяСтрока.ПутьКОписанию, МаркерЯзыкаЗапросов) = 1
			Или СтрокаСлова.ПутьКОписанию = "//dcsui_ru/SKD_CharacteristicTypes" // Антибаг платформы http://partners.v8.1c.ru/forum/thread.jsp?id=997975#997975
		Тогда
			НоваяСтрока.ЯзыкПрограммы = 1;
		Иначе
			НоваяСтрока.ЯзыкПрограммы = 2;
		КонецЕсли; 
		Если НРег(НоваяСтрока.ТипСлова) = НРег("Метод") Тогда
			НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, НоваяСтрока, "ТипКонтекста, Слово, ЯзыкПрограммы");
			НоваяСтрокаПараметра.Параметр = "";
			НоваяСтрокаПараметра.Номер = 1;
		КонецЕсли; 
	КонецЦикла;
	
	// Синтакс-помощник для языка выражений компоновки
	ИмяКниги = "dcsui_ru";
	ФайлАрхиваДанных = мПлатформа.ПолучитьАрхивСинтаксПомощникаПоИмени(, ИмяКниги);
	мПлатформа.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения(ФайлРаспаковщикаZIP.Имя + " -o " + ФайлАрхиваДанных.ПолноеИмя + " -d " + РабочийКаталог);
	ИменаФайлов = Новый Структура;
	ИменаФайлов.Вставить("SKD_Functions", "Метод");
	ИменаФайлов.Вставить("SKD_AgregOperation", "Метод");
	Хтмл = Новый COMОбъект("HtmlFile");
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	Для Каждого КлючИЗначение Из ИменаФайлов Цикл
		ИмяФайлаСтраницы = КлючИЗначение.Ключ;
		ТекстовыйДокумент.Прочитать(РабочийКаталог + "\" + ИмяФайлаСтраницы);
		Хтмл.open("text/html");
		Хтмл.write(ТекстовыйДокумент.ПолучитьТекст());
		Хтмл.close();
		ТегиСсылок = Хтмл.GetElementsByTagName("a");
		Для Каждого ТегСсылки Из ТегиСсылок Цикл
			МассивФрагментов = ирОбщий.ПолучитьМассивИзСтрокиСРазделителемЛкс(ТегСсылки.href, "#");
			Если МассивФрагментов[0] = "about:blank" Тогда
				НоваяСтрока = ТаблицаКонтекстов.Добавить();
				НоваяСтрока.ТипКонтекста = "Глобальный контекст";
				НоваяСтрока.ЯзыкПрограммы = 2;
				НоваяСтрока.ТипСлова = КлючИЗначение.Значение;
				НоваяСтрока.Слово = ТегСсылки.textContent;
				НоваяСтрока.ПутьКОписанию = "//" + ИмяКниги + "/" + ИмяФайлаСтраницы + "#" + МассивФрагментов[1];
				Если НРег(НоваяСтрока.ТипСлова) = НРег("Метод") Тогда
					НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
					ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, НоваяСтрока, "ТипКонтекста, Слово, ЯзыкПрограммы");
					НоваяСтрокаПараметра.Параметр = "";
					НоваяСтрокаПараметра.Номер = 1;
				КонецЕсли; 
			КонецЕсли; 
		КонецЦикла;  
	КонецЦикла; 

	ФайлАрхиваСодержания = мПлатформа.ПолучитьАрхивСинтаксПомощникаПоИмени(Истина, "shcntx_ru");
	мПлатформа.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения(ФайлРаспаковщикаZIP.Имя + " -o " + ФайлАрхиваСодержания.ПолноеИмя + " -d " + РабочийКаталог);
	//Shell.Run( + " -o " + ФайлСодержания.ПолноеИмя + " + -d " + РабочийКаталог + "PackBlock", 0, Истина);
	МассивФайлов = НайтиФайлы(РабочийКаталог, "*.*");
	ФайлИндекса = МассивФайлов[0];
	Текст = Новый ТекстовыйДокумент;
	Текст.Прочитать(ФайлИндекса.ПолноеИмя);
	ИндексОписания = Текст.ПолучитьТекст();
	
	ФайлАрхиваДанных = мПлатформа.ПолучитьАрхивСинтаксПомощникаПоИмени(, "shcntx_ru");
	мПлатформа.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения(ФайлРаспаковщикаZIP.Имя + " -o " + ФайлАрхиваДанных.ПолноеИмя + " -d " + РабочийКаталог);
	
	RegExp.IgnoreCase = Истина;

	RegExp.Multiline = Истина;
	RegExp.Global = Истина;

	RegExp.Pattern = "((""ru""\,""([^""]+)""[^}]*}[^{]*{[^{}]*})|({""#"",""([^""]*)""}))[^}]*},""([^""]+)""";

	Результат = RegExp.Execute(ИндексОписания);
	Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Результат.Count, "Обработка синтакс-помощника");
	Для Каждого Item Из Результат Цикл
		ирОбщий.ОбработатьИндикаторЛкс(Индикатор);

		Если Item.SubMatches(4) <> Неопределено Тогда
			НовоеСлово = Item.SubMatches(4);
		Иначе
			НовоеСлово = Item.SubMatches(2);
		КонецЕсли;
		ПутьКОписанию = Item.SubMatches(5);

		НРегПуть = НРег(ПутьКОписанию);

		ПутьКОписаниюКонтекста = "";

		ТипЭлементаКоллекции = "";

		ТипКонтекста = "";

		ТипЗначения = "";

		ЯзыкПрограммы = ?(Найти(НРегПуть, "/tables/") > 0, 1, 0);

		Если ЯзыкПрограммы = 1 Тогда

			ТипСлова = "Таблица";

		Иначе

			ТипСлова = "Свойство";

		КонецЕсли;

		Если Найти(НРегПуть, "/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";
		Иначе
			ппп = 0;

		КонецЕсли;
		ФайлОписания = Новый Файл(РабочийКаталог + ПутьКОписанию);
		Попытка
			Текст.Прочитать(ФайлОписания.ПолноеИмя);
			ТекстПрочитан = Истина;
		Исключение
			ТекстПрочитан = Ложь;
		КонецПопытки;

		Если ТекстПрочитан Тогда

			Описание = Текст.ПолучитьТекст();

			Если Найти(НРегПуть, "/tables/") > 0 Тогда 

				RegExp.Global = Ложь;

				RegExp.Pattern = "Синтаксис(?:<[^>""]+>)(([А-Яа-я_A-Za-z0-9\-\s\:]+)(\.(&lt;[^&]+&gt;|[А-Яа-я_A-Za-z0-9\-\s\:]+))*)";

				Результат = RegExp.Execute(Описание);

				Если Результат.Count > 0 Тогда

					НовоеСлово = ЗаменитьТегиУгловыхСкобок(Результат.Item(0).SubMatches(0));

				КонецЕсли;
			КонецЕсли;
						

			RegExp.Global = Ложь;

			RegExp.Pattern = "Тип:(?:<[^>""]+>)?((?:" + шТип + ")+)";

			СмещениеИндекса = 0;

			Если ТипСлова = "Метод" Тогда

				RegExp.Pattern = "Возвращаемое значение:(?:<[^>]+>)?(?:" + RegExp.Pattern + ")?";

				СмещениеИндекса = 1;
			КонецЕсли;

			Результат = RegExp.Execute(Описание);

			Если Результат.Count > 0 Тогда
				RegExp2.Global = Истина;

				RegExp2.Pattern = шТип;

				Результат2 = RegExp2.Execute(Результат.Item(0).SubMatches(0));
				СтрокаТипаЗначения = "";
				Для Каждого Вхождение2 Из Результат2 Цикл
					СтрокаТипаЗначения = СтрокаТипаЗначения + ", " + СокрЛП(Вхождение2.SubMatches(0));
				КонецЦикла;

				ТипЗначения = ЗаменитьТегиУгловыхСкобок(Сред(СтрокаТипаЗначения, 3));

			КонецЕсли; 
			

			RegExp.Global = Ложь;

			RegExp.Pattern = "Элементы\x20коллекции:(?:<[^>""]+>)?((?:" + шТип + ")+)";

			Результат = RegExp.Execute(Описание);

			ТипЭлементаКоллекции = "";

			Если Результат.Count > 0 Тогда

				RegExp2.Global = Истина;

				RegExp2.Pattern = шТип;

				Результат2 = RegExp2.Execute(Результат.Item(0).SubMatches(0));
				СтрокаТипаЗначения = "";

				Для Каждого Вхождение2 Из Результат2 Цикл

					СтрокаТипаЗначения = СтрокаТипаЗначения + ", " + СокрЛП(Вхождение2.SubMatches(0));

				КонецЦикла;

				ТипЭлементаКоллекции = ЗаменитьТегиУгловыхСкобок(Сред(СтрокаТипаЗначения, 3));

			КонецЕсли; 

			
		КонецЕсли;

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

			ОписаниеКонтекста = Текст.ПолучитьТекст();

			RegExp.Pattern = "(<[^>]+>)+([^\(<]+[^\(<\s])";

			Результат = RegExp.Execute(ОписаниеКонтекста);

			Если Результат.Count > 0 Тогда

				ТипКонтекста = ЗаменитьТегиУгловыхСкобок(Результат.Item(0).SubMatches(1));
			КонецЕсли;
		КонецЕсли;

		Если Найти(НРегПуть, "/global context/") > 0 Тогда 

			ТипКонтекста = "Глобальный контекст";

		ИначеЕсли Найти(НРегПуть, "/script functions/") > 0 Тогда 
			ТипКонтекста = "Общее";

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

				НовоеСлово = Фрагметны[Фрагметны.ВГраница()];

				Фрагметны.Удалить(Фрагметны.ВГраница());

				ТипКонтекста = ирОбщий.ПолучитьСтрокуСРазделителемИзМассиваЛкс(Фрагметны, ".");
				// Баг в файлах справки

				Если ТипКонтекста = "РегистрСведений" Тогда
					НовоеСлово  = СтрЗаменить(НовоеСлово , "<Имя регистра>", "<Имя регистра сведений>");
					ТипЗначения = СтрЗаменить(ТипЗначения, "<Имя регистра>", "<Имя регистра сведений>");
				ИначеЕсли ТипКонтекста = "РегистрНакопления" Тогда

					НовоеСлово  = СтрЗаменить(НовоеСлово , "<Имя регистра>", "<Имя регистра накопления>");

					ТипЗначения = СтрЗаменить(ТипЗначения, "<Имя регистра>", "<Имя регистра накопления>");

				КонецЕсли;

			КонецЕсли;
		КонецЕсли;
			
		// Параметры

		//RegExp.Pattern = "<div class=""V8SH_chapter"">Параметры:?</div>(.*)<div class=""V8SH_chapter"">Описание:?</div>";

		RegExp.Pattern = "<div class=""V8SH_chapter"">\s*(?:<p[^>]*>)?Параметры:?</div>(.*)<div class=""V8SH_chapter"">\s*(?:<p[^>]*>)?Описание:?</div>";
		Результат = RegExp.Execute(Описание);

		Если Результат.Count > 0 Тогда

			ОписаниеПараметров = Результат.Item(0).SubMatches(0);

			RegExp.Global = Истина;
			Если ТипСлова = "Таблица" Тогда
				RegExp.Pattern = "(<a href=""v8help://SyntaxHelperContext(/[А-Яа-я_A-Za-z0-9/]+params/[А-Яа-я_A-Za-z0-9/]+.html)"">"
					+ "[А-Яа-я_A-Za-z0-9\-\s\(\)]+</a>)()?()?";
			Иначе
				//RegExp.Pattern = "(&lt;[А-Яа-я_A-Za-z0-9\-\s]*&gt;)";
				RegExp.Pattern = "(&lt;[А-Яа-я_A-Za-z0-9\-\s]*&gt;)" 
					+ "()?(?:\s*(?:\((необязательный|обязательный)?\)\s*)?</div>Тип:(?:<[^>""]+>)?((?:" + шТип + ")+))?";
			КонецЕсли;

			Результат = RegExp.Execute(ОписаниеПараметров);

			ЧтениеХмлПараметра = Новый ЧтениеXML;
			НомерПараметра = 1;

			Для Каждого Item Из Результат Цикл
				НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();

				СтруктураСтроки = ирОбщий.ПолучитьСтруктуруСвойствОбъектаЛкс(НоваяСтрокаПараметра);

				СтруктураСтроки.ТипКонтекста = ТипКонтекста;

				СтруктураСтроки.Слово = НовоеСлово;

				СтруктураСтроки.ЯзыкПрограммы = ЯзыкПрограммы;

				СтруктураСтроки.Номер = НомерПараметра;
				ТекстПараметра = Item.SubMatches(0);
				
				// Для параметров виртуальных таблиц надо убрать оберку <A>...</A>. В ней находится ссылка на страницу описания параметра, которую пока не используем.
				ЧтениеХмлПараметра.УстановитьСтроку(ТекстПараметра);
				Попытка
					ЧтениеХмлПараметра.Прочитать();
					ЧтениеХмлПараметра.Прочитать();
				Исключение
				КонецПопытки;
				Если ЧтениеХмлПараметра.ТипУзла = ТипУзлаXML.Текст Тогда
					ТекстПараметра = ЧтениеХмлПараметра.Значение;
				КонецЕсли;
				
				СтруктураСтроки.Параметр = ТекстПараметра;
				Если Item.SubMatches(2) = "необязательный" Тогда
					СтруктураСтроки.Необязательный = Истина;
				КонецЕсли;
				ТекстПоискаТипов = Неопределено;
				Если Item.SubMatches(1) <> "" Тогда
					СтруктураСтроки.ПутьКОписанию = Item.SubMatches(1);
					ФайлОписанияПараметра = Новый Файл(РабочийКаталог + СтруктураСтроки.ПутьКОписанию);
					Если Истина
						И ФайлОписанияПараметра.Существует()
						И ФайлОписанияПараметра.ЭтоФайл()
					Тогда
						Текст.Прочитать(ФайлОписанияПараметра.ПолноеИмя);
						RegExp2.Pattern = "Тип параметра:(?:<[^>""]+>)?((?:" + шТип + ")+)";
						Результат2 = RegExp2.Execute(Текст.ПолучитьТекст());
						Если Результат2.Count > 0 Тогда
							ТекстПоискаТипов = Результат2.Item(0).SubMatches(0);
						КонецЕсли;
					КонецЕсли;
				Иначе
					ТекстПоискаТипов = Item.SubMatches(3);
				КонецЕсли;


				Если ТекстПоискаТипов <> Неопределено Тогда
					RegExp2.Global = Истина;
					RegExp2.Pattern = шТип;
					Результат2 = RegExp2.Execute(ТекстПоискаТипов);
					СтрокаТипаЗначения = "";
					Для Каждого Вхождение2 Из Результат2 Цикл
						СтрокаТипаЗначения = СтрокаТипаЗначения + ", " + СокрЛП(Вхождение2.SubMatches(0));
					КонецЦикла;
					СтруктураСтроки.ТипЗначения = ЗаменитьТегиУгловыхСкобок(Сред(СтрокаТипаЗначения, 3));
				КонецЕсли;
				
				СкорректироватьЭлементыСтруктуры(СтруктураСтроки);

				ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, СтруктураСтроки);

				НомерПараметра = НомерПараметра + 1;

				
			КонецЦикла;

		КонецЕсли;

		

		Если ТипКонтекста = "" Тогда
			СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", НовоеСлово, ЯзыкПрограммы);

			СкорректироватьЭлементыСтруктуры(СтруктураКлюча);
			СкорректироватьКлючТипа(СтруктураКлюча);

			НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);

			Если НайденныеСтроки.Количество() = 0 Тогда 

				НоваяСтрока = ТаблицаОбщихТипов.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураКлюча);
			Иначе
				НоваяСтрока = НайденныеСтроки[0];
			КонецЕсли;

			НоваяСтрока.БазовыйТип = ирОбщий.ПолучитьПервыйФрагментЛкс(НовоеСлово);

			НоваяСтрока.ПутьКОписанию = ПутьКОписанию;

			НоваяСтрока.ТипЭлементаКоллекции = ТипЭлементаКоллекции;

			ЗаполнитьСтрокуТипа(НоваяСтрока);
		Иначе
			Если Найти(НовоеСлово, "<") > 0 Тогда
				ТаблицаДобавления = ТаблицаШаблоновКонтекстов;
			Иначе
				ТаблицаДобавления = ТаблицаКонтекстов;

			КонецЕсли;
			НоваяСтрока = ТаблицаДобавления.Добавить();
			СтруктураСтроки = ирОбщий.ПолучитьСтруктуруСвойствОбъектаЛкс(НоваяСтрока);

			СтруктураСтроки.Слово = НовоеСлово;

			СтруктураСтроки.ТипСлова = ТипСлова;

			СтруктураСтроки.ПутьКОписанию = ПутьКОписанию;

			СтруктураСтроки.ЯзыкПрограммы = ЯзыкПрограммы;

			СтруктураСтроки.ТипКонтекста = ТипКонтекста;

			СтруктураСтроки.ТипЗначения = ТипЗначения;

			СкорректироватьЭлементыСтруктуры(СтруктураСтроки);
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураСтроки);
			

			СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", ТипКонтекста, ЯзыкПрограммы);
			СкорректироватьЭлементыСтруктуры(СтруктураКлюча);

			СкорректироватьКлючТипа(СтруктураКлюча);

			НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
			Если НайденныеСтроки.Количество() = 0 Тогда 

				НоваяСтрокаТипа = ТаблицаОбщихТипов.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрокаТипа, СтруктураКлюча);
				ЗаполнитьСтрокуТипа(НоваяСтрокаТипа);
			Иначе
				НоваяСтрокаТипа = НайденныеСтроки[0];

			КонецЕсли;

			НоваяСтрокаТипа.ЕстьКонструктор = НоваяСтрокаТипа.ЕстьКонструктор ИЛИ (ТипСлова = "Конструктор");

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

		

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

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

			ГлавноеСлово = СтрокаТипа.Множественное;
			ГлавныйТипСлова = "Таблица";
			ВторойТипСлова = "Поле";
		Иначе

			ГлавноеСлово = СтрокаТипа.Единственное;
			ГлавныйТипСлова = "Свойство";
			ВторойТипСлова = "Таблица";

		КонецЕсли;

		

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

		КонецЕсли;

		Если СтрокаТипа.Множественное = "Константы" Тогда
			НоваяСтрока.ТипЗначения = "Произвольный";
		Иначе
			НоваяСтрока.ТипЗначения = СтрокаТипа.Единственное + "." + СтрокаВида.ИмяЭлементаКоллекции;

		КонецЕсли;

		

		// Таблицы для языка запросов
		Если СтрокаТипа.Категория = 3 Тогда // Пропускаем внешние метаданные
			Продолжить;
		КонецЕсли;
		
		СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы, ТипСлова, ТипЯзыка",

			"Глобальный контекст", ГлавноеСлово, 1, ГлавныйТипСлова, "");

		НайденныйСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);

		Если НайденныйСтроки.Количество() = 0 Тогда

			НоваяСтрока = ТаблицаКонтекстов.Добавить();

			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураКлюча);

		Иначе

			НоваяСтрока = НайденныйСтроки[0];

		КонецЕсли;

		НоваяСтрока.ТипЗначения = ГлавноеСлово;

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

		СкорректироватьКлючТипа(СтруктураКлюча);

		НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);

		Если НайденныеСтроки.Количество() = 0 Тогда 

			НоваяСтрока = ТаблицаОбщихТипов.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураКлюча);

		Иначе

			НоваяСтрока = НайденныеСтроки[0];

		КонецЕсли;
		ЗаполнитьСтрокуТипа(НоваяСтрока);

	КонецЦикла;
	
	// Добавим системные константы
	
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();

	//НоваяСтрока.ТипКонтекста = "Общее";

	//НоваяСтрока.ТипСлова = "Свойство";

	//НоваяСтрока.ТипЗначения = "Неопределено";

	//НоваяСтрока.Слово = "Неопределено";

	//НоваяСтрока.ЯзыкПрограммы = 0;

	//
	//НоваяСтрока = ТаблицаКонтекстов.Добавить();

	//НоваяСтрока.ТипКонтекста = "Общее";

	//НоваяСтрока.ТипСлова = "Свойство";

	//НоваяСтрока.ТипЗначения = "Null";

	//НоваяСтрока.Слово = "Null";

	//НоваяСтрока.ЯзыкПрограммы = 0;

	//

	//НоваяСтрока = ТаблицаКонтекстов.Добавить();

	//НоваяСтрока.ТипКонтекста = "Общее";

	//НоваяСтрока.ТипСлова = "Свойство";

	//НоваяСтрока.ТипЗначения = "Булево";

	//НоваяСтрока.Слово = "Истина";

	//НоваяСтрока.ЯзыкПрограммы = 0;

	//

	//НоваяСтрока = ТаблицаКонтекстов.Добавить();

	//НоваяСтрока.ТипКонтекста = "Общее";

	//НоваяСтрока.ТипСлова = "Свойство";

	//НоваяСтрока.ТипЗначения = "Булево";
	//НоваяСтрока.Слово = "Ложь";

	//НоваяСтрока.ЯзыкПрограммы = 0;

	

	НоваяСтрока = ТаблицаКонтекстов.Добавить();

	НоваяСтрока.ТипКонтекста = "Глобальный контекст";

	НоваяСтрока.ТипСлова = "Свойство";

	НоваяСтрока.ТипЗначения = "Null";

	НоваяСтрока.Слово = "NULL";

	НоваяСтрока.ЯзыкПрограммы = 1;

	

	НоваяСтрока = ТаблицаКонтекстов.Добавить();

	НоваяСтрока.ТипКонтекста = "Глобальный контекст";

	НоваяСтрока.ТипСлова = "Свойство";

	НоваяСтрока.ТипЗначения = "Неопределено";

	НоваяСтрока.Слово = "НЕОПРЕДЕЛЕНО";

	НоваяСтрока.ЯзыкПрограммы = 1;

	

	НоваяСтрока = ТаблицаКонтекстов.Добавить();

	НоваяСтрока.ТипКонтекста = "Глобальный контекст";

	НоваяСтрока.ТипСлова = "Свойство";

	НоваяСтрока.ТипЗначения = "Булево";

	НоваяСтрока.Слово = "ИСТИНА";

	НоваяСтрока.ЯзыкПрограммы = 1;

	

	НоваяСтрока = ТаблицаКонтекстов.Добавить();

	НоваяСтрока.ТипКонтекста = "Глобальный контекст";

	НоваяСтрока.ТипСлова = "Свойство";

	НоваяСтрока.ТипЗначения = "Булево";

	НоваяСтрока.Слово = "ЛОЖЬ";
	НоваяСтрока.ЯзыкПрограммы = 1;
	

	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.Таблица";
	НоваяСтрока.Слово = "Таблица";
	НоваяСтрока.ЯзыкПрограммы = 1;
	
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.Таблица";
	НоваяСтрока.Слово = "Таблица";
	НоваяСтрока.ЯзыкПрограммы = 2;
	
	НоваяСтрока = ТаблицаКонтекстов.Добавить();
	НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
	НоваяСтрока.ТипСлова = "Свойство";
	НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.ВременнаяТаблица";
	НоваяСтрока.Слово = "ВременнаяТаблица";
	НоваяСтрока.ЯзыкПрограммы = 1;
	
	// Добавим колонки временной таблицы
	НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();

	НоваяСтрока.ТипКонтекста = "ВременнаяТаблица";

	НоваяСтрока.ТипСлова = "Свойство";

	НоваяСтрока.ТипЗначения = "Произвольный";

	НоваяСтрока.Слово = "<Имя колонки>";

	НоваяСтрока.ЯзыкПрограммы = 1;



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

			Если МассивФрагментов.Количество() > 1 Тогда

				ПозицияКонцаШаблона = Найти(МассивФрагментов[МассивФрагментов.ВГраница() - 1], "<");
				Если Лев(ВременнаяСтрока.Слово, 1) <> "<" Тогда 

					Если ПозицияКонцаШаблона > 0 Тогда

						АтрибутШаблона = МассивФрагментов[МассивФрагментов.ВГраница()];

						МассивФрагментов.Удалить(МассивФрагментов.ВГраница());

						СтруктураКлюча = Новый Структура;

						СтруктураКлюча.Вставить("ТипКонтекста", ирОбщий.ПолучитьСтрокуСРазделителемИзМассиваЛкс(МассивФрагментов, "."));

						СтруктураКлюча.Вставить("Слово", АтрибутШаблона);
						Если Ложь
							Или ВременнаяСтрока.ТипСлова = "Поле"
							Или ВременнаяСтрока.ТипСлова = "Параметр"

							Или (Истина
								И ВременнаяСтрока.ТипСлова = "Таблица"
								И МассивФрагментов.Количество() > 1)
						Тогда

							СтруктураКлюча.Вставить("ТипСлова", "Таблица");

						Иначе
							СтруктураКлюча.Вставить("ТипСлова", "Свойство");
						КонецЕсли;

						Если Найти(АтрибутШаблона, "<") > 0 Тогда

							ТаблицаДобавления = ТаблицаШаблоновКонтекстов;

						Иначе

							ТаблицаДобавления = ТаблицаКонтекстов;

						КонецЕсли;

						Если ТаблицаДобавления.НайтиСтроки(СтруктураКлюча).Количество() = 0 Тогда

							ДополнительнаяСтрока = ТаблицаДобавления.Добавить();

							ЗаполнитьЗначенияСвойств(ДополнительнаяСтрока, СтруктураКлюча);

							ДополнительнаяСтрока.ТипЗначения = ВременнаяСтрока.ТипКонтекста;
							ДополнительнаяСтрока.ЯзыкПрограммы = ВременнаяСтрока.ЯзыкПрограммы;

							//СтруктураКлюча = Новый Структура;

							//СтруктураКлюча.Вставить("Слово", ДополнительнаяСтрока.ТипКонтекста);

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

							//КонецЕсли; 

						КонецЕсли;

					КонецЕсли;
				КонецЕсли;

				Если ВременнаяСтрока.Слово = "<Имя табличной части>" Тогда

					АтрибутШаблона = МассивФрагментов[МассивФрагментов.ВГраница()];

					ГлавныйТип = МассивФрагментов[0];

					МаркерОбъекта = "Объект";

					Если ВременнаяСтрока.ЯзыкПрограммы = 0 Тогда

						КорневойТип = СтрЗаменить(ГлавныйТип, МаркерОбъекта, "");
						ТипТабличнойЧастиЗапроса = КорневойТип + "." 

							+ АтрибутШаблона + "." + ВременнаяСтрока.Слово;
						ТипСтрокиТабличнойЧасти = КорневойТип + "ТабличнаяЧастьСтрока." 

							+ АтрибутШаблона + "." + ВременнаяСтрока.Слово;

						ТипТабличнойЧасти = КорневойТип + "ТабличнаяЧасть."
							+ АтрибутШаблона + "." + ВременнаяСтрока.Слово;
						//ВременнаяСтрока.ТипЗначения = ТипТабличнойЧасти;

						Если Прав(ГлавныйТип, СтрДлина(МаркерОбъекта)) = МаркерОбъекта Тогда
							СтруктураДобавляемыхТипов = Новый Соответствие;
							СтруктураДобавляемыхТипов.Вставить(ТипСтрокиТабличнойЧасти,);

							СтруктураДобавляемыхТипов.Вставить(ТипТабличнойЧасти, ТипСтрокиТабличнойЧасти);
							Для Каждого ДобавляемыйТип Из СтруктураДобавляемыхТипов Цикл
								СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", ДобавляемыйТип.Ключ,

									ВременнаяСтрока.ЯзыкПрограммы);
								СкорректироватьЭлементыСтруктуры(СтруктураКлюча);

								СкорректироватьКлючТипа(СтруктураКлюча);

								НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);

								Если НайденныеСтроки.Количество() = 0 Тогда 

									НоваяСтрокаТипа = ТаблицаОбщихТипов.Добавить();

									ЗаполнитьЗначенияСвойств(НоваяСтрокаТипа, СтруктураКлюча);

								Иначе

									НоваяСтрокаТипа = НайденныеСтроки[0];

								КонецЕсли;

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

								ЗаполнитьСтрокуТипа(НоваяСтрокаТипа);

							КонецЦикла;

						КонецЕсли;

					Иначе

						// **** Для вложенных запросов придется переделать

						ТипКонтекстаШаблона = ВременнаяСтрока.ТипКонтекста + "." + ВременнаяСтрока.Слово;

						ВременнаяСтрока.ТипЗначения = ТипКонтекстаШаблона;

					КонецЕсли;
					Если Прав(ГлавныйТип, СтрДлина(МаркерОбъекта)) = МаркерОбъекта Тогда
						

						ДополнительнаяСтрокаШаблона = ТаблицаШаблоновКонтекстов.Добавить();

						ДополнительнаяСтрокаШаблона.ТипКонтекста = ТипТабличнойЧастиЗапроса;

						ДополнительнаяСтрокаШаблона.ТипСлова = "Поле";
						ДополнительнаяСтрокаШаблона.Слово = "<Имя реквизита>";

						ДополнительнаяСтрокаШаблона.ТипЗначения = "Произвольный";

						ДополнительнаяСтрокаШаблона.ЯзыкПрограммы = 1;
						

						ДополнительнаяСтрокаШаблона = ТаблицаШаблоновКонтекстов.Добавить();

						ДополнительнаяСтрокаШаблона.ТипКонтекста = ТипСтрокиТабличнойЧасти;

						ДополнительнаяСтрокаШаблона.ТипСлова = "Свойство";

						ДополнительнаяСтрокаШаблона.Слово = "<Имя реквизита>";

						ДополнительнаяСтрокаШаблона.ТипЗначения = "Произвольный";

						ДополнительнаяСтрокаШаблона.ЯзыкПрограммы = 0;

						

						ДополнительнаяСтрокаКонтекста = ТаблицаКонтекстов.Добавить();

						ДополнительнаяСтрокаКонтекста.ТипКонтекста = ТипТабличнойЧастиЗапроса;

						ДополнительнаяСтрокаКонтекста.ТипСлова = "Поле";

						ДополнительнаяСтрокаКонтекста.Слово = "НомерСтроки";

						ДополнительнаяСтрокаКонтекста.ТипЗначения = "Число";

						ДополнительнаяСтрокаКонтекста.ЯзыкПрограммы = 1;
						
						ДополнительнаяСтрокаКонтекста = ТаблицаКонтекстов.Добавить();

						ДополнительнаяСтрокаКонтекста.ТипКонтекста = ТипТабличнойЧастиЗапроса;

						ДополнительнаяСтрокаКонтекста.ТипСлова = "Поле";

						ДополнительнаяСтрокаКонтекста.Слово = "Ссылка";

						ДополнительнаяСтрокаКонтекста.ТипЗначения = КорневойТип + "." + АтрибутШаблона;

						ДополнительнаяСтрокаКонтекста.ЯзыкПрограммы = 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];
	НоваяСтрока.ТипЭлементаКоллекции = "Произвольный";
	
	СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "ПолеHTMLДокумента", "Документ");
	НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
	НоваяСтрока = НайденныеСтроки[0];
	НоваяСтрока.ТипЗначения = "COMОбъект.{htmlfile}";
	
	
	// Удалим строку общего шаблона коллекции метаданных
	СтруктураКлюча = Новый Структура("ТипКонтекста, ЯзыкПрограммы", "КоллекцияОбъектовМетаданных", 0);

	НайденныеСтроки = ТаблицаШаблоновКонтекстов.НайтиСтроки(СтруктураКлюча);

	ТаблицаШаблоновКонтекстов.Удалить(НайденныеСтроки[0]);

	

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

	Для Каждого СтрокаТаблицы Из ТаблицаКонтекстов Цикл
		СтрокаТаблицы.НСлово = НРег(СтрокаТаблицы.Слово);
	КонецЦикла;
	Для Каждого СтрокаТаблицы Из ТаблицаОбщихТипов Цикл
		СтрокаТаблицы.НСлово = НРег(СтрокаТаблицы.Слово);
	КонецЦикла;
	
КонецПроцедуры

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

	ИмяФайлаПакера = "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 """ + ПолноеИмяФайла + """", ПутьРаспаковки);

КонецПроцедуры // РаспаковатьВнешнююОбработку()

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

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

	WshShell = Новый COMОбъект("WScript.Shell");
	#Если Клиент Тогда
	// Баг платформы здесь будет работать. Во время работы данной строки окно продолжает принимать команды! 
	// WSH не использовать при генерации внешних обработок
	Если ИспользоватьWSH Тогда
	#КонецЕсли
		WshShell.CurrentDirectory = ТекущийКаталог;
		СтрокаЗапуска = "cmd.exe /c """ + СтрокаЗапуска + """";
		Если КраткоеИмяФайлаРезультата <> "" Тогда
			СтрокаЗапуска = СтрокаЗапуска + " > " + КраткоеИмяФайлаРезультата;
			СтрокаЗапуска = СтрокаЗапуска + " 2>&1"; //stderr
		КонецЕсли;
		Попытка
			WshShell.Run(СтрокаЗапуска, 0, ОжидатьЗавершения);
		Исключение
			// Для x64 ОС
			СтрокаЗапуска = "%windir%\Sysnative\" + СтрокаЗапуска;
			WshShell.Run(СтрокаЗапуска, 0, ОжидатьЗавершения);
		КонецПопытки;
	#Если Клиент Тогда
	Иначе
		ПолучитьИсполнительСкрытыхКомандСистемы();
		//КонечнаяСтрока = ИсполнительСкрытыхКомандСистемы + " /nowindow /wait /silent /D=""" + ТекущийКаталог + """ " + СтрокаЗапуска;
		КонечнаяСтрока = ИсполнительСкрытыхКомандСистемы + " /nowindow /wait /silent /D=""" + ТекущийКаталог + """ """ + СтрокаЗапуска + """";
		ЗапуститьПриложение(КонечнаяСтрока, , ОжидатьЗавершения);
	КонецЕсли;
	#КонецЕсли
	
КонецПроцедуры // ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения()

Функция ПолучитьИмяФайлаВФорматеDOS(ПолноеИмяФайла) Экспорт
	
	Если VBScript = Неопределено Тогда
		VBScript = Новый COMОбъект("MSScriptControl.ScriptControl");
		VBScript.language = "vbscript";
	КонецЕсли;
	VBScript.addcode("
	|Public Function GetShortPath()
	|Set fso = CreateObject(""scripting.filesystemobject"")
	|Set fsoFile = fso.GetFile(""" + ПолноеИмяФайла + """)
	|GetShortPath = fsoFile.ShortPath
	|End Function
	|");
	DOSИмя = VBScript.Run("GetShortPath");
	Возврат DOSИмя;
	
КонецФункции

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

		
	ЗаполнитьВсе();

	

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



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

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

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


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

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

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

	ТаблицаШаблоновКонтекстов = СтруктураТаблиц.ТаблицаШаблоновКонтекстов;

	

	СтруктураТаблиц = СтруктураФайлов.ТаблицаПараметровИТипов;
	ТаблицаОбщихТипов = СтруктураТаблиц.ТаблицаОбщихТипов;

	ТаблицаПараметров = СтруктураТаблиц.ТаблицаПараметров;

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



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

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

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

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

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

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

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

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

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

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

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

мПлатформа = ирКэш.Получить();
СоответствиеЗамены = Новый Соответствие;

// Баг платформы. Небрежность в файлах справки.
СоответствиеЗамены.Вставить("Командный интерфейс",      "КомандныйИнтерфейс"); // Антибаг 8.2.15.289 http://partners.v8.1c.ru/forum/thread.jsp?id=999202#999202
СоответствиеЗамены.Вставить("<Имя журнала>",      "<Имя журнала документов>");
СоответствиеЗамены.Вставить("ПланВидовХарактристик", "ПланВидовХарактеристик");

СоответствиеЗамены.Вставить("<Имя плана вида характеристики>", "<Имя плана видов характеристик>");

СоответствиеЗамены.Вставить("<Имя плана вида характеристик>", "<Имя плана видов характеристик>");
СоответствиеЗамены.Вставить("<Имя плана видов характеристики>", "<Имя плана видов характеристик>");
СоответствиеЗамены.Вставить("<Имя предопределенного видов характеристики>", "<Имя предопределенного вида характеристик>");
СоответствиеЗамены.Вставить("<Имя вида расчета>", "<Имя плана видов расчета>");

СоответствиеЗамены.Вставить("<Измерения>",    "<Имя измерения>");

СоответствиеЗамены.Вставить("<Измерение>",    "<Имя измерения>");

СоответствиеЗамены.Вставить("<Реквизиты>",    "<Имя реквизита>");

СоответствиеЗамены.Вставить("<Ресурсы>",      "<Имя ресурса>");

СоответствиеЗамены.Вставить("<Имя критерия>", "<Имя критерия отбора>");

СоответствиеЗамены.Вставить("<Имя WS-ссылки>", "<Имя WS-Ссылки>");

СоответствиеЗамены.Вставить("<Имя WSСсылки>", "<Имя WS-Ссылки>");

СоответствиеЗамены.Вставить("<ИмяКонстанты>", "<Имя константы>");

СоответствиеЗамены.Вставить("<ИмяРесурса>",   "<Имя ресурса>");
СоответствиеЗамены.Вставить("<Имя Ресурса>",  "<Имя ресурса>");

СоответствиеЗамены.Вставить("<Имя значения>", "<Имя значения перечисления>");

СоответствиеЗамены.Вставить("<НомерСубконто>", "<Номер субконто>");

СоответствиеЗамены.Вставить("<ИмяПеречисления>", "<Имя перечисления>");

СоответствиеЗамены.Вставить("<имя метода>",   "<Имя метода>");

СоответствиеЗамены.Вставить("<имя свойства>", "<Имя свойства>");
СоответствиеЗамены.Вставить("<Имя внешнего источника данных>", "<Имя внешнего источника>");
                             
ЗаменыВнешнихОбъектов = Новый ТаблицаЗначений;
ЗаменыВнешнихОбъектов.Колонки.Добавить("Образец");
ЗаменыВнешнихОбъектов.Колонки.Добавить("Замена");
СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить();
СтрокаЗамены.Образец = "ВнешнийОтчетТабличнаяЧасть";
СтрокаЗамены.Замена = "ВнешнийОтчетТабличнаяЧасть.<Имя внешнего отчета>.<Имя табличной части>";
СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить();
СтрокаЗамены.Образец = "ВнешняяОбработкаТабличнаяЧасть";
СтрокаЗамены.Замена = "ВнешняяОбработкаТабличнаяЧасть.<Имя внешней обработки>.<Имя табличной части>";
СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить();
СтрокаЗамены.Образец = "ВнешнийОтчет";
СтрокаЗамены.Замена = "ВнешнийОтчетОбъект.<Имя внешнего отчета>";
СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить();
СтрокаЗамены.Образец = "ВнешняяОбработка";
СтрокаЗамены.Замена = "ВнешняяОбработкаОбъект.<Имя внешней обработки>";
СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить();
СтрокаЗамены.Образец = "ТочкаМаршрутаБизнесПроцессаСсылка";
СтрокаЗамены.Замена = "ТочкаМаршрутаБизнесПроцессаСсылка.<Имя бизнес-процесса>";
// Слишком общий шаблон замены!
// Исправлено в 8.1.12

//СоответствиеЗамены.Вставить("<Имя>", "<Имя константы>");


RegExp  = Новый COMОбъект("VBScript.RegExp");

RegExp2 = Новый COMОбъект("VBScript.RegExp");


//шТип = "\s*(?:<[^>""]+""(?:[^""]*)"">)?((?:[А-Яа-я_A-Za-z0-9\-\s\:]+)(?:\.&lt;[^&]+&gt;)*)(?:<[^>""]+>,)?";
//шТип = "\s*(?:<[^>""]+""(?:[^""]*)"">)?((?:[А-Яа-я_A-Za-z0-9\-\s\:\&\;]+))(?:(?:<[^>""]+>)?,)?";

//ОкончаниеВводаТекста
  шТип = "\s*(?:<[^>""]+""(?:[^""]*)"">)?((?:[А-Яа-я_A-Za-z0-9\-\s\:\&]+))(?:(?:<[^>""]+>)?(,|;))?";

типСтрока = Тип("Строка");

