RDT1C/CommonForms/ирОбновлениеОписанияПлатформы/Ext/Form/Module.bsl
Администратор 2e24fe7c16 .
2020-10-20 18:54:26 +03:00

2216 lines
160 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Перем RegExp;
Перем RegExp2;
Перем СоответствиеЗамены;
Перем шТип;
Перем типСтрока;
Перем ЗаменыВнешнихОбъектов;
Перем АрхивСинтаксПомощника;
Перем ИсполнительСкрытыхКомандСистемы;
Перем VBScript;
Перем ФайлРаспаковщикаZIP;
Перем мПлатформа;
Процедура ЗаполнитьСтрокуТипа(НоваяСтрока)
НоваяСтрока.БазовыйТип = ирОбщий.ПервыйФрагментЛкс(НоваяСтрока.Слово);
НоваяСтрока.ТипТипа = "Основной";
Если НоваяСтрока.ЯзыкПрограммы = 0 Тогда
МаркерПеречисления = "Перечисление";
Если Лев(НоваяСтрока.Слово, СтрДлина(МаркерПеречисления)) = МаркерПеречисления Тогда
ИмяСистемногоПеречисления = СтрЗаменить(НоваяСтрока.Слово, МаркерПеречисления, "");
Попытка
Если Строка(Вычислить(ИмяСистемногоПеречисления)) = "Перечисление" + ИмяСистемногоПеречисления Тогда
ДобавитьСвойствоГлобальногоКонтекста(НоваяСтрока, ИмяСистемногоПеречисления);
КонецЕсли;
Исключение
КонецПопытки;
КонецЕсли;
Если Ложь
Или Найти(НоваяСтрока.Слово, "<") > 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 Тогда
СтрокаЗаменыИмениРегистра = "<Имя регистра сведений>";
ИначеЕсли Найти(ЭлементСтруктуры.Значение, "РегистрНакопления") > 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Объект";
НоваяСтрока.ТипСлова = "Метод";
// На это просто забили в синтакс-помощнике
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.Слово = "<Имя страницы>";
НоваяСтрока.ТипКонтекста = "СтраницыПанели";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "СтраницаПанели";
Для ЯзыкПрограммы = 1 По 2 Цикл
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("ИсходнаяДата");
СписокПараметров.Добавить("ЕдиницаИзмерения");
СписокПараметров.Добавить("КоличествоЕдиниц");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "ДОБАВИТЬКДАТЕ";
Иначе
НоваяСтрокаПараметра.Слово = "ДобавитьКДате";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("ВычитаемаяДата");
СписокПараметров.Добавить("ИсходнаяДата");
СписокПараметров.Добавить("ЕдиницаИзмерения");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "РАЗНОСТЬДАТ";
Иначе
НоваяСтрокаПараметра.Слово = "РазностьДат";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("Строка");
СписокПараметров.Добавить("ПерваяПозиция");
СписокПараметров.Добавить("ПоследняяПозиция");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "ПОДСТРОКА";
Иначе
НоваяСтрокаПараметра.Слово = "Подстрока";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("Произвольный");
СписокПараметров.Добавить("ЗаменаNULL");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "ЕСТЬNULL";
Иначе
НоваяСтрокаПараметра.Слово = "ЕстьNull";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
КонецЦикла;
ТаблицаКорневыхОбъектовКонфигурации = ирКэш.ТипыМетаОбъектов(Ложь, Ложь);
РабочийКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(РабочийКаталог);
ФайлРаспаковщикаZIP = мПлатформа.ПолучитьФайлРаспаковщикаZIP(Истина);
// Синтакс-помощник для языка запросов
МаркерЯзыкаЗапросов = "//shquery_ru";
Для Каждого СтрокаСлова Из СловаЯзыкаЗапросов Цикл
НоваяСтрока = ТаблицаКонтекстов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСлова);
НоваяСтрока.Слово = СтрокаСлова.СловоЗапроса;
НоваяСтрока.ТипКонтекста = "Глобальный";
Если Ложь
Или Найти(НоваяСтрока.ПутьКОписанию, МаркерЯзыкаЗапросов) = 1
Или СтрокаСлова.ПутьКОписанию = "//dcsui_ru/SKD_CharacteristicTypes" // Антибаг платформы http://partners.v8.1c.ru/forum/thread.jsp?id=997975#997975
Тогда
НоваяСтрока.ЯзыкПрограммы = 1;
Иначе
НоваяСтрока.ЯзыкПрограммы = 2;
КонецЕсли;
Если НРег(НоваяСтрока.ТипСлова) = НРег("Метод") Тогда
НайденныеСтроки = ТаблицаПараметров.НайтиСтроки(Новый Структура("Слово, ЯзыкПрограммы", НоваяСтрока.Слово, НоваяСтрока.ЯзыкПрограммы));
Если НайденныеСтроки.Количество() = 0 Тогда
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, НоваяСтрока, "ТипКонтекста, Слово, ЯзыкПрограммы");
НоваяСтрокаПараметра.Параметр = "";
НоваяСтрокаПараметра.Номер = 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);
НРегПуть = НРег(ПутьКОписанию);
ПутьКОписаниюКонтекста = "";
ТипЭлементаКоллекции = "";
ТипКонтекста = "";
ТипЗначения = "";
СтрокаВерсииПлатформы = "";
НомерВерсииПлатформы = 0;
ЯзыкПрограммы = ?(Найти(НРегПуть, "/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;
КонецЕсли;
Если Истина
И ЯзыкПрограммы = 0
И Найти(НовоеСлово, " ") > 0
И ТипСлова = "Метод"
Тогда
// http://www.hostedredmine.com/issues/885173
Продолжить;
КонецЕсли;
ФайлОписания = Новый Файл(РабочийКаталог + ПутьКОписанию);
Попытка
Текст.Прочитать(ФайлОписания.ПолноеИмя);
ТекстПрочитан = Истина;
Исключение
ТекстПрочитан = Ложь;
КонецПопытки;
шТег = "(?:\s*<[^>]+>\s*)";
шТегНеКлюч = "(?:\s*<[^>""]+>\s*)";
шТегКлюч = "(?:\s*<(?:div|p)[^>]+>\s*)";
шКонецТегаКлюч = "(?:\s*</(?:div|p)>\s*)";
Если ТекстПрочитан Тогда
Описание = Текст.ПолучитьТекст();
Если Найти(НРегПуть, "/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.Global = Истина;
RegExp.Pattern = "Доступен, начиная с версии (8.*?)\.<";
Результат = RegExp.Execute(Описание);
Если Результат.Count > 0 Тогда
Если Результат.Count > 1 Тогда
Пустышка = 0; // Для отладки
КонецЕсли;
СтрокаВерсииПлатформы = Результат.Item(Результат.Count - 1).SubMatches(0);
НомерВерсииПлатформы = ирОбщий.НомерВерсииПлатформыЛкс(ирОбщий.ПервыйФрагментЛкс(СтрокаВерсииПлатформы, "("));
Если НомерВерсииПлатформы <= 801000 Тогда
НомерВерсииПлатформы = 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ФайлКонтекста = Новый Файл(РабочийКаталог + ПутьКОписаниюКонтекста);
Если Истина
И ФайлКонтекста.Существует()
И ФайлКонтекста.ЭтоФайл()
Тогда
Текст.Прочитать(ФайлКонтекста.ПолноеИмя);
ОписаниеКонтекста = Текст.ПолучитьТекст();
RegExp.Pattern = "(<[^>]+>)+([^\(<]+[^\(<\s])";
Результат = RegExp.Execute(ОписаниеКонтекста);
Если Результат.Count > 0 Тогда
ТипКонтекста = ЗаменитьТегиУгловыхСкобок(Результат.Item(0).SubMatches(1));
КонецЕсли;
КонецЕсли;
Если Найти(НРегПуть, "/global context/") > 0 Тогда
ТипКонтекста = "Глобальный";
ИначеЕсли Найти(НРегПуть, "/script functions/") > 0 Тогда
// Этот раздел был в 8.2. Но в каком то релизе 8.3 убрали
ТипКонтекста = "Общее";
ВызватьИсключение "Обнаружен устаревший раздел Общее";
КонецЕсли;
Если Истина
И ТипКонтекста = ""
И ЯзыкПрограммы = 1
Тогда
Фрагметны = ирОбщий.СтрРазделитьЛкс(НовоеСлово);
Если Истина
И Фрагметны.Количество() > 1
//И Найти( Фрагметны[Фрагметны.ВГраница()], "<") = 0
Тогда
ТипЗначения = НовоеСлово;
НовоеСлово = Фрагметны[Фрагметны.ВГраница()];
Фрагметны.Удалить(Фрагметны.ВГраница());
ТипКонтекста = ирОбщий.СтрСоединитьЛкс(Фрагметны, ".");
// Баг в файлах справки
Если ТипКонтекста = "РегистрСведений" Тогда
НовоеСлово = СтрЗаменить(НовоеСлово , "<Имя регистра>", "<Имя регистра сведений>");
ТипЗначения = СтрЗаменить(ТипЗначения, "<Имя регистра>", "<Имя регистра сведений>");
ИначеЕсли ТипКонтекста = "РегистрНакопления" Тогда
НовоеСлово = СтрЗаменить(НовоеСлово , "<Имя регистра>", "<Имя регистра накопления>");
ТипЗначения = СтрЗаменить(ТипЗначения, "<Имя регистра>", "<Имя регистра накопления>");
КонецЕсли;
КонецЕсли;
КонецЕсли;
RegExp.Global = Истина;
RegExp.Pattern = шТегКлюч + "Вариант синтаксиса:\s*([^<""]+)" + шКонецТегаКлюч;
ВхожденияВариантов = RegExp.Execute(Описание);
ОписанияВариантов = Новый СписокЗначений;
Если ВхожденияВариантов.Count = 0 Тогда
ОписанияВариантов.Добавить(Описание);
Иначе
ТекущаяПозиция = 1;
ТекущийВариант = "";
Для Каждого Вхождение Из ВхожденияВариантов Цикл
Если ТекущаяПозиция > 1 Тогда
ОписанияВариантов.Добавить(Сред(Описание, ТекущаяПозиция, Вхождение.FirstIndex - ТекущаяПозиция), ТекущийВариант);
КонецЕсли;
ТекущаяПозиция = Вхождение.FirstIndex;
ТекущийВариант = Вхождение.SubMatches(0);
КонецЦикла;
ОписанияВариантов.Добавить(Сред(Описание, ТекущаяПозиция), Вхождение.SubMatches(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.Pattern = "<(?:div|p) class=""V8SH_chapter"">\s*(?:<p[^>]*>)?Параметры:?</(?:div|p)>(.*)<(?:div|p) class=""V8SH_chapter"">\s*(?:<p[^>]*>)?Описание(?: варианта метода)?:?</(?:div|p)>";
RegExp.Pattern = шТегКлюч + "(?:<p[^>]*>)?Параметры:?" + шКонецТегаКлюч + "(.*?)(?:" + шТегКлюч + "(?:<p[^>]*>)?Описание(?: варианта метода)?:?" + шКонецТегаКлюч + "|$)";
Результат = RegExp.Execute(ЭлементСписка.Значение);
Если Результат.Count = 0 Тогда
Продолжить;
КонецЕсли;
ОписаниеВарианта = Результат.Item(0).SubMatches(0);
Если ТипСлова = "Таблица" Тогда
RegExp.Pattern = "(<a href=""v8help://SyntaxHelperContext(/[А-Яа-я_A-Za-z0-9/]+params/[А-Яа-я_A-Za-z0-9/]+.html)"">[А-Яа-я_A-Za-z0-9\-\s\(\)]+</a>)";
Иначе
// Грязный прием поиска до первой английском буквы "p"
RegExp.Pattern = шТегКлюч + "(&lt;[^&]*&gt;)"
+ "()?(?:\s*(?:\((необязательный|обязательный)?\)\s*)?" + шКонецТегаКлюч + "(?:Тип:" + шТегНеКлюч + "?((?:" + шТип + ")+))?)?(?:[^p]*?Значение по умолчанию: " + шТег + "?([^<>]+)" + шТег + "?\.)?";
КонецЕсли;
Результат = RegExp.Execute(ОписаниеВарианта);
ЧтениеХмлПараметра = Новый ЧтениеXML;
НомерПараметра = 1;
Для Каждого Item Из Результат Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
СтруктураСтроки = ирОбщий.ПолучитьСтруктуруСвойствОбъектаЛкс(НоваяСтрокаПараметра);
СтруктураСтроки.ТипКонтекста = ТипКонтекста;
Если ТипСлова = "Конструктор" Тогда
СтруктураСтроки.Слово = "<Новый>";
СтруктураСтроки.ВариантСинтаксиса = НовоеСлово;
Иначе
СтруктураСтроки.Слово = НовоеСлово;
СтруктураСтроки.ВариантСинтаксиса = ЭлементСписка.Представление;
КонецЕсли;
СтруктураСтроки.ЯзыкПрограммы = ЯзыкПрограммы;
СтруктураСтроки.Номер = НомерПараметра;
ТекстПараметра = Item.SubMatches(0);
ТекстПоискаТипов = Неопределено;
// Для параметров виртуальных таблиц надо убрать оберку <A>...</A>. В ней находится ссылка на страницу описания параметра, которую пока не используем.
ЧтениеХмлПараметра.УстановитьСтроку(ТекстПараметра);
Попытка
ЧтениеХмлПараметра.Прочитать();
ЧтениеХмлПараметра.Прочитать();
Исключение
КонецПопытки;
Если ЧтениеХмлПараметра.ТипУзла = ТипУзлаXML.Текст Тогда
ТекстПараметра = ЧтениеХмлПараметра.Значение;
КонецЕсли;
СтруктураСтроки.Параметр = ТекстПараметра;
Если ТипСлова <> "Таблица" Тогда
Если Item.SubMatches(2) = "необязательный" Тогда
СтруктураСтроки.Необязательный = Истина;
КонецЕсли;
СтруктураСтроки.Значение = Item.SubMatches(6);
ТекстПоискаТипов = Item.SubMatches(3);
КонецЕсли;
Если Item.SubMatches(1) <> "" Тогда
СтруктураСтроки.ПутьКОписанию = Item.SubMatches(1);
ФайлОписанияПараметра = Новый Файл(РабочийКаталог + СтруктураСтроки.ПутьКОписанию);
Если Истина
И ФайлОписанияПараметра.Существует()
И ФайлОписанияПараметра.ЭтоФайл()
Тогда
Текст.Прочитать(ФайлОписанияПараметра.ПолноеИмя);
RegExp2.Pattern = "Тип параметра:" + шТегНеКлюч + "?((?:" + шТип + ")+)";
Результат2 = RegExp2.Execute(Текст.ПолучитьТекст());
Если Результат2.Count > 0 Тогда
ТекстПоискаТипов = Результат2.Item(0).SubMatches(0);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ТекстПоискаТипов <> Неопределено Тогда
RegExp2.Global = Истина;
RegExp2.Pattern = шТип;
Результат2 = RegExp2.Execute(ТекстПоискаТипов);
СтрокаТипаЗначения = "";
Для Каждого Вхождение2 Из Результат2 Цикл
СтрокаТипаЗначения = СтрокаТипаЗначения + ", " + СокрЛП(Вхождение2.SubMatches(0));
КонецЦикла;
СтруктураСтроки.ТипЗначения = ЗаменитьТегиУгловыхСкобок(Сред(СтрокаТипаЗначения, 3));
КонецЕсли;
СкорректироватьЭлементыСтруктуры(СтруктураСтроки);
ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, СтруктураСтроки);
НомерПараметра = НомерПараметра + 1;
КонецЦикла;
КонецЦикла;
Если ТипКонтекста = "" Тогда
СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", НовоеСлово, ЯзыкПрограммы);
СкорректироватьЭлементыСтруктуры(СтруктураКлюча);
СкорректироватьКлючТипа(СтруктураКлюча);
НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
Если НайденныеСтроки.Количество() = 0 Тогда
НоваяСтрока = ТаблицаОбщихТипов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураКлюча);
Иначе
НоваяСтрока = НайденныеСтроки[0];
КонецЕсли;
НоваяСтрока.БазовыйТип = ирОбщий.ПервыйФрагментЛкс(НовоеСлово);
НоваяСтрока.ПутьКОписанию = ПутьКОписанию;
НоваяСтрока.ТипЭлементаКоллекции = ТипЭлементаКоллекции;
НоваяСтрока.НомерВерсииПлатформы = НомерВерсииПлатформы;
Если Найти(Описание, "<p>Определяет набор ") > 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];
НоваяСтрока.ТипЭлементаКоллекции = "Произвольный";
// Антибаг платформы 8.3.17 https://partners.v8.1c.ru/forum/t/1911561/m/1911561 , http://www.hostedredmine.com/issues/872563
СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", "ОкнаКлиентскогоПриложения", 0);
НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
НоваяСтрока = НайденныеСтроки[0];
НоваяСтрока.ТипТипа = "Основной";
НоваяСтрока.ИД = "f09b329b-17f5-4740-9758-4a1657686858";
СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "ПолеHTMLДокумента", "Документ");
НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
НоваяСтрока = НайденныеСтроки[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Сравнить(Кнопка)
Если ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") Тогда
Возврат;
КонецЕсли;
ирОбщий.СравнитьСодержимоеЭлементаУправленияЛкс(ЭтаФорма, ТекущийЭлемент);
КонецПроцедуры
Процедура КаталогОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗапуститьПриложение(Каталог);
КонецПроцедуры
Процедура ТаблицаШаблоновКонтекстовПриАктивизацииСтроки(Элемент)
ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры
Процедура ТаблицаКонтекстовПриАктивизацииСтроки(Элемент)
ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры
Процедура ТаблицаПараметровПриАктивизацииСтроки(Элемент)
ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры
Процедура ТаблицаОбщихТиповПриАктивизацииСтроки(Элемент)
ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры
Процедура КоманднаяПанель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\:\&\/]+))(?:(?:<[^>""]+>)?(,|;))?";
типСтрока = Тип("Строка");