Перем 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 Тогда
СтароеЗначениеЭлемента = ЗначениеЭлемента;
Для Каждого СтрокаЗамены Из ЗаменыВнешнихОбъектов Цикл
ЗначениеЭлемента = СтрЗаменить(ЗначениеЭлемента, СтрокаЗамены.Образец, СтрокаЗамены.Замена);
Если СтароеЗначениеЭлемента <> ЗначениеЭлемента Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Структура[ЭлементСтруктуры.Ключ] = ЗначениеЭлемента;
КонецЦикла;
КонецПроцедуры // СкорректироватьКлючТипа()
Функция ЗаменитьТегиУгловыхСкобок(Строка)
Строка = СокрЛП(Строка);
Строка = СтрЗаменить(Строка, "<", "<");
Результат = СтрЗаменить(Строка, ">", ">");
// **** пробный режим для ускорения
//RegExp.Global = Истина;
//RegExp.Pattern = "([^&]+)<([^&]+)>";
//Результат = 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\:]+)(\.(<[^&]+>|[А-Яа-я_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 = "
Параметры:?
(.*)Описание:?
";
RegExp.Pattern = "(.*)";
Результат = RegExp.Execute(Описание);
Если Результат.Count > 0 Тогда
ОписаниеПараметров = Результат.Item(0).SubMatches(0);
RegExp.Global = Истина;
Если ТипСлова = "Таблица" Тогда
RegExp.Pattern = "("
+ "[А-Яа-я_A-Za-z0-9\-\s\(\)]+)()?()?";
Иначе
//RegExp.Pattern = "(<[А-Яа-я_A-Za-z0-9\-\s]*>)";
RegExp.Pattern = "(<[А-Яа-я_A-Za-z0-9\-\s]*>)"
+ "()?(?:\s*(?:\((необязательный|обязательный)?\)\s*)?Тип:(?:<[^>""]+>)?((?:" + шТип + ")+))?";
КонецЕсли;
Результат = RegExp.Execute(ОписаниеПараметров);
ЧтениеХмлПараметра = Новый ЧтениеXML;
НомерПараметра = 1;
Для Каждого Item Из Результат Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
СтруктураСтроки = ирОбщий.ПолучитьСтруктуруСвойствОбъектаЛкс(НоваяСтрокаПараметра);
СтруктураСтроки.ТипКонтекста = ТипКонтекста;
СтруктураСтроки.Слово = НовоеСлово;
СтруктураСтроки.ЯзыкПрограммы = ЯзыкПрограммы;
СтруктураСтроки.Номер = НомерПараметра;
ТекстПараметра = Item.SubMatches(0);
// Для параметров виртуальных таблиц надо убрать оберку .... В ней находится ссылка на страницу описания параметра, которую пока не используем.
ЧтениеХмлПараметра.УстановитьСтроку(ТекстПараметра);
Попытка
ЧтениеХмлПараметра.Прочитать();
ЧтениеХмлПараметра.Прочитать();
Исключение
КонецПопытки;
Если ЧтениеХмлПараметра.ТипУзла = ТипУзла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) <> "<" Тогда
Если ПозицияКонцаШаблона > 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].ТипЗначения = "ВнешнийОтчетТабличнаяЧасть.<Имя внешней обработки>.<Имя табличной части>";
ТаблицаКонтекстов.Сортировать("ТипКонтекста, Слово, ТипСлова");
ТаблицаШаблоновКонтекстов.Сортировать("ТипКонтекста, Слово, ТипСлова");
// Первая сортировка по ТипТипа критична!
ТаблицаОбщихТипов.Сортировать("ТипТипа, Слово");
ТаблицаИменЭлементовКоллекций.Сортировать("ИмяЭлементаКоллекции, ИмяКоллекции");
Сообщить("Количество строк таблицы параметров - " + ТаблицаПараметров.Количество());
// Заполним индексы НРЕГ
Состояние("Построение индексов");
Для Каждого СтрокаТаблицы Из ТаблицаШаблоновКонтекстов Цикл
СтрокаТаблицы.НСлово = НРег(СтрокаТаблицы.Слово);
КонецЦикла;
Для Каждого СтрокаТаблицы Из ТаблицаКонтекстов Цикл
СтрокаТаблицы.НСлово = НРег(СтрокаТаблицы.Слово);
КонецЦикла;
Для Каждого СтрокаТаблицы Из ТаблицаОбщихТипов Цикл
СтрокаТаблицы.НСлово = НРег(СтрокаТаблицы.Слово);
КонецЦикла;
КонецПроцедуры
Процедура РаспаковатьФайлВнешнейОбработки(ПолноеИмяФайла, ПутьРаспаковки) Экспорт
ИмяФайлаПакера = "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");
Для Каждого КлючИЗначение Из СтруктураФайлов Цикл
мПлатформа.ПолучитьМакет(КлючИЗначение.Ключ).Записать(ИмяВременногоФайла);
СтруктураФайлов[КлючИЗначение.Ключ] = ЗначениеИзФайла(ИмяВременногоФайла);
КонецЦикла;
УдалитьФайлы(ИмяВременногоФайла);
ЗагрузитьТаблицыИзСтруктурыФайлов(СтруктураФайлов);
Каталог = ХранилищеОбщихНастроек.Загрузить("ИнструментыРазработчикаTormozit", "ирОбновлениеОписанияПлатформы_Каталог");
КонецПроцедуры
Процедура КоманднаяПанель1СтруктураФормы(Кнопка)
ирОбщий.ОткрытьСтруктуруФормыЛкс(ЭтаФорма);
КонецПроцедуры
Процедура КоманднаяПанель1ОткрытьТаблицу(Кнопка)
Если ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") Тогда
Возврат;
КонецЕсли;
ирОбщий.ОткрытьЗначениеЛкс(ТекущийЭлемент.Значение, Ложь,,,,, ТекущийЭлемент);
КонецПроцедуры
Процедура ПриЗакрытии()
ХранилищеОбщихНастроек.Сохранить("ИнструментыРазработчикаTormozit", "ирОбновлениеОписанияПлатформы_Каталог", Каталог);
КонецПроцедуры
Процедура КоманднаяПанель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\:]+)(?:\.<[^&]+>)*)(?:<[^>""]+>,)?";
//шТип = "\s*(?:<[^>""]+""(?:[^""]*)"">)?((?:[А-Яа-я_A-Za-z0-9\-\s\:\&\;]+))(?:(?:<[^>""]+>)?,)?";
//ОкончаниеВводаТекста
шТип = "\s*(?:<[^>""]+""(?:[^""]*)"">)?((?:[А-Яа-я_A-Za-z0-9\-\s\:\&]+))(?:(?:<[^>""]+>)?(,|;))?";
типСтрока = Тип("Строка");