RDT1C/CommonForms/ирОбновлениеОписанияПлатформы/Ext/Form/Module.bsl
Администратор 1f8f6575bc .
2021-09-15 20:09:07 +03:00

2196 lines
164 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.НайтиВхождения(НоваяСтрока.Слово);
Для Каждого Item Из Результат Цикл
Если Item.SubMatches(0) <> Неопределено Тогда
НоваяСтрока.ТипТипа = "Расширение";
Прервать;
КонецЕсли;
КонецЦикла;
НоваяСтрока.НСлово = НРег(НоваяСтрока.НСлово);
// Это другое расширение. Именно то, которое в документации имеется ввиду
Если ирОбщий.ПервыйФрагментЛкс(НоваяСтрока.Слово, " ") = "Расширение" Тогда
НоваяСтрокаРасширения = ТаблицаРасширений.Найти(НоваяСтрока.Слово, "Расширение");
Если НоваяСтрокаРасширения = Неопределено Тогда
НоваяСтрокаРасширения = ТаблицаРасширений.Добавить();
КонецЕсли;
Если Найти(НоваяСтрока.Слово, " тестируемого поля формы ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "ТестируемоеПолеФормы";
ИначеЕсли Найти(НоваяСтрока.Слово, " поля формы ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "ПолеФормы";
ИначеЕсли Найти(НоваяСтрока.Слово, " группы формы ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "ГруппаФормы";
ИначеЕсли Найти(НоваяСтрока.Слово, " таблицы формы ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "ТаблицаФормы";
ИначеЕсли Найти(НоваяСтрока.Слово, " декорации формы ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "ДекроацияФормы";
ИначеЕсли Найти(НоваяСтрока.Слово, " табличного поля ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "ТабличноеПоле";
ИначеЕсли Найти(НоваяСтрока.Слово, " колонки ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "КолонкаТабличногоПоля";
ИначеЕсли Найти(НоваяСтрока.Слово, " поля ввода ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "ПолеВвода";
ИначеЕсли Найти(НоваяСтрока.Слово, " формы клиентского приложения") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "ФормаКлиентскогоПриложения";
ИначеЕсли Найти(НоваяСтрока.Слово, " управляемой формы") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "УправляемаяФорма";
ИначеЕсли Найти(НоваяСтрока.Слово, " формы ") > 0 Тогда
НоваяСтрокаРасширения.ОсновнойТип = "Форма";
КонецЕсли;
НоваяСтрокаРасширения.Расширение = НоваяСтрока.Слово;
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьСвойствоГлобальногоКонтекста(Знач НоваяСтрока, Знач ИмяСвойства)
НоваяСтрока.ТипТипа = "Перечисление";
СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", ИмяСвойства, НоваяСтрока.ЯзыкПрограммы);
НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
Если НайденныеСтроки.Количество() = 0 Тогда
НоваяСтрокаТипа = ТаблицаОбщихТипов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТипа, НоваяСтрока);
ЗаполнитьЗначенияСвойств(НоваяСтрокаТипа, СтруктураКлюча);
ЗаполнитьСтрокуТипа(НоваяСтрокаТипа);
НоваяСтрока.Представление = НоваяСтрока.БазовыйТип;
//НоваяСтрокаТипа.ПутьКОписанию = "";
КонецЕсли;
НоваяСтрокаКонтекста = ТаблицаКонтекстов.Добавить();
НоваяСтрокаКонтекста.ТипКонтекста = "Глобальный";
НоваяСтрокаКонтекста.Слово = ИмяСвойства;
НоваяСтрокаКонтекста.ТипЗначения = НоваяСтрока.Слово;
ЗаполнитьЗначенияСвойств(НоваяСтрокаКонтекста, НоваяСтрока, "ЯзыкПрограммы,ПутьКОписанию,НомерВерсииПлатформы");
НоваяСтрокаКонтекста.ТипСлова = "Свойство";
КонецПроцедуры
Процедура СкорректироватьКлючТипа(Структура)
Попытка
// Выполняется много раз!
Если Строка(Вычислить(Структура.Слово)) = "Перечисление" + Структура.Слово Тогда
Структура.Слово = "Перечисление" + Структура.Слово;
КонецЕсли;
Исключение
КонецПопытки;
КонецПроцедуры // СкорректироватьКлючТипа()
Функция ПолучитьПримитивныеТипыЛкс(Имена = Ложь) Экспорт
МассивИменТипов = Новый Массив;
МассивИменТипов.Добавить("Null");
МассивИменТипов.Добавить("Неопределено");
МассивИменТипов.Добавить("Число");
МассивИменТипов.Добавить("Строка");
МассивИменТипов.Добавить("Дата");
МассивИменТипов.Добавить("Булево");
МассивИменТипов.Добавить("Тип");
Если Имена Тогда
МассивТипов = МассивИменТипов;
Иначе
МассивТипов = Новый Массив;
Для Каждого ИмяТипа Из МассивИменТипов Цикл
МассивТипов.Добавить(Тип(ИмяТипа));
КонецЦикла;
КонецЕсли;
Возврат МассивТипов;
КонецФункции // ЛксПолучитьПримитивныеТипы()
Процедура ЗаполнитьСтатическое()
ТаблицаИменЭлементовКоллекций.Очистить();
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Структура";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя ключа>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ФиксированнаяСтруктура";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя ключа>";
НоваяСтрока.ИмяОбщегоТипа = "ФиксированнаяСтруктура";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Рисунки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя рисунка>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ВидыСубконто";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя вида субконто>";
// Тут не совсем прямо, т.к. у метаданного нет такой коллекции =(
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ВнешниеОбработки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя внешней обработки>";
// Тут не совсем прямо, т.к. у метаданного нет такой коллекции =(
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ВнешниеОтчеты";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя внешнего отчета>";
// Тут не совсем прямо, т.к. у метаданного нет такой коллекции =(
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ТочкиМаршрута";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя точки маршрута бизнес-процесса>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Области";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя области>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПризнакиУчетаСубконто";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя флага учета субконто>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Параметры";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя параметра>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "УсловноеОформление";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента оформления>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ВидыСубконто";
НоваяСтрока.ИмяЭлементаКоллекции = "<Номер субконто>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Индексы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя индекса>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Источники";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя источника>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Колонки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя колонки>";
//НоваяСтрока.ИмяОбщегоТипа = "СтрокаТаблицыЗначений"; // было закомментировано
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ОформленияЯчеек";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя колонки>";
НоваяСтрока.ИмяОбщегоТипа = "Ячейки";
// Заглушка
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Колонки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя колонки списка>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Поля";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя поля>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Свойства";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя свойства>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Методы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя метода>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ОбщиеМодули";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общего модуля>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ТабличныеЧасти";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя табличной части>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Реквизиты";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя реквизита>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Ресурсы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя ресурса>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Измерения";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя измерения>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "РеквизитыАдресации";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя реквизита адресации>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ЗначенияПеречисления";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя значения перечисления>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Графы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя графы журнала>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Перерасчеты";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя перерасчета>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Формы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя формы>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Стили";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя стиля>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ЭлементыСтиля";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента стиля>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Отбор";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента отбора>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "НастройкаОформления";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя настройки>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Движения";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Картинки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя картинки>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "РегистрыСведений";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра сведений>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "РегистрыРасчета";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра расчета>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "РегистрыНакопления";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра накопления>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "РегистрыБухгалтерии";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регистра бухгалтерии>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Справочники";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя справочника>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Документы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя документа>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПланыВидовХарактеристик";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя плана видов характеристик>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПланыВидовРасчета";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя плана видов расчета>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПланыСчетов";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя плана счетов>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПризнакиУчета";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя признака учета>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПланыОбмена";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя плана обмена>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Константы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя константы>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "БизнесПроцессы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя бизнес-процесса>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Задачи";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя задачи>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Обработки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя обработки>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Отчеты";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя отчета>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ЖурналыДокументов";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя журнала документов>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Перечисления";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя перечисления>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Операции";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя операции>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Макеты";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя макета>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Последовательности";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя последовательности>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "КритерииОтбора";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя критерия отбора>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Интерфейсы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя интерфейса>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ОбщиеМакеты";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общего макета>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ОбщиеФормы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общей формы>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "НумераторыДокументов";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя нумератора документов>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "WebСервисы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя WebСервиса>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "WSСсылки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя WS-Ссылки>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Подсистемы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя подсистемы>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Роли";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя роли>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПараметрыСеанса";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя параметра сеанса>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПакетыXDTO";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя ПакетаXDTO>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ОбщиеКартинки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общей картинки>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "РегламентныеЗадания";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя регламентного задания>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ПодпискиНаСобытия";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя подписки на событие>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Языки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя языка>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Предопределенные";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя предопределенного элемента справочника>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Предопределенные";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя предопределенного вида характеристик>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Предопределенные";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя предопределенного счета>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Предопределенные";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя предопределенного объекта>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ЭлементыФормы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента управления>";
НоваяСтрока.ИмяОбщегоТипа = "ЭлементыФормы";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Элементы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента управления>";
НоваяСтрока.ИмяОбщегоТипа = "ВсеЭлементыФормы";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Страницы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя страницы>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Кнопки";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя кнопки>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ВстроенныеТаблицы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя встроенной таблицы>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "<Имя коллекции метаданных>";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя объекта описания метаданного>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "<Имя общего модуля>"; // Несуществующее
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя процедуры или функции>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "События";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя события>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ВнешниеИсточникиДанных";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя внешнего источника>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Таблицы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя таблицы внешнего источника данных>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ОбщиеРеквизиты";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя общего реквизита>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Таблицы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя таблицы>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "ТаблицыИзмерений";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя таблицы измерения>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "Кубы";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя куба>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "СтандартныеРеквизиты";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя стандартного реквизита>";
НоваяСтрока = ТаблицаИменЭлементовКоллекций.Добавить();
НоваяСтрока.ИмяКоллекции = "<Коллекция>";
НоваяСтрока.ИмяЭлементаКоллекции = "<Имя элемента>";
КонецПроцедуры
Процедура ЗаполнитьВсе()
#Если Сервер И Не Сервер Тогда
мПлатформа = Обработки.ирПлатформа.Создать();
#КонецЕсли
СинтаксПомощник = Обработки.ирСинтаксПомощник.Создать();
шТип = СинтаксПомощник.шТип;
шКонецТегаКлюч = СинтаксПомощник.шКонецТегаКлюч;
шТег = СинтаксПомощник.шТег;
шТегКлюч = СинтаксПомощник.шТегКлюч;
шТегНеКлюч = СинтаксПомощник.шТегНеКлюч;
ЭтаФорма.Модифицированность = Истина;
//Если СловаЯзыкаЗапросов.Количество() = 0 Тогда
// Предупреждение("Сначала необходимо загрузить данные ручного ввода");
// Возврат;
//КонецЕсли;
ТаблицаКонтекстов.Очистить();
ТаблицаШаблоновКонтекстов.Очистить();
ТаблицаОбщихТипов.Очистить();
ТаблицаПараметров.Очистить();
ирОбщий.ДобавитьИндексВТаблицуЛкс(ТаблицаОбщихТипов, "БазовыйТип");
ирОбщий.ДобавитьИндексВТаблицуЛкс(ТаблицаОбщихТипов, "Слово, ЯзыкПрограммы");
ЗаполнитьСтатическое();
// Добавим функции языка запросов
//Список = Новый СписокЗначений;
//Список.Добавить("СУММА", "Число");
//Список.Добавить("МАКСИМУМ", "Произвольный");
//Список.Добавить("МИНИМУМ", "Произвольный");
//Список.Добавить("ЗНАЧЕНИЕ", "Произвольный");
//Список.Добавить("СРЕДНЕЕ", "Число");
//Список.Добавить("КОЛИЧЕСТВО", "Число");
//Список.Добавить("ВЫРАЗИТЬ", "Произвольный");
//Список.Добавить("ЕСТЬNULL", "Произвольный");
//Список.Добавить("ПРЕДСТАВЛЕНИЕ", "Строка");
//Список.Добавить("ПРЕДСТАВЛЕНИЕССЫЛКИ", "Строка");
//Список.Добавить("ПОДСТРОКА", "Строка");
//Список.Добавить("РАЗНОСТЬДАТ", "Число");
//Список.Добавить("ДАТАВРЕМЯ", "Дата");
//Список.Добавить("НАЧАЛОПЕРИОДА", "Дата");
//Список.Добавить("КОНЕЦПЕРИОДА", "Дата");
//Список.Добавить("ДЕНЬНЕДЕЛИ", "Число");
//Список.Добавить("ЧАС", "Число");
//Список.Добавить("МИНУТА", "Число");
//Список.Добавить("СЕКУНДА", "Число");
//Список.Добавить("МЕСЯЦ", "Число");
//Список.Добавить("ДЕНЬГОДА", "Число");
//Список.Добавить("НЕДЕЛЯ", "Число");
//Список.Добавить("ДЕНЬНЕДЕЛИ", "Число");
//Список.Добавить("ГОД", "Число");
//Список.Добавить("КВАРТАЛ", "Число");
//Список.Добавить("ДОБАВИТЬКДАТЕ", "Дата");
//// Добавим ключевые слова встроенного языка
//Список = Новый Массив;
//Список.Добавить("Не");
//Список.Добавить("И");
//Список.Добавить("Или");
//Список.Добавить("По");
//Список.Добавить("Экспорт");
//Список.Добавить("Перем");
//Список.Добавить("Процедура");
//Список.Добавить("КонецПроцедуры");
//Список.Добавить("Функция");
//Список.Добавить("КонецФункции");
//Список.Добавить("Возврат");
//Список.Добавить("Перейти");
//Список.Добавить("Для");
//Список.Добавить("Каждого");
//Список.Добавить("Из");
//Список.Добавить("Цикл");
//Список.Добавить("КонецЦикла");
//Список.Добавить("Пока");
//Список.Добавить("Прервать");
//Список.Добавить("Продолжить");
//Список.Добавить("Если");
//Список.Добавить("Тогда");
//Список.Добавить("Иначе");
//Список.Добавить("ИначеЕсли");
//Список.Добавить("КонецЕсли");
//Список.Добавить("Попытка");
//Список.Добавить("Исключение");
//Список.Добавить("КонецПопытки");
//Список.Добавить("ВызватьИсключение");
//Список.Добавить("Выполнить");
//Список.Добавить("Новый");
//Для Каждого КлючевоеСлово Из Список Цикл
// НоваяСтрока = ТаблицаКонтекстов.Добавить();
// НоваяСтрока.Слово = КлючевоеСлово;
// НоваяСтрока.ТипКонтекста = "Общее";
// НоваяСтрока.ТипСлова = "Конструкция";
//КонецЦикла;
// Добавим специальные шаблоны
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.Слово = "<Имя свойства>";
НоваяСтрока.ТипКонтекста = "COMОбъект";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.Слово = "<Имя метода>";
НоваяСтрока.ТипКонтекста = "COMОбъект";
НоваяСтрока.ТипСлова = "Метод";
// А это просто не сочил важным добавить в синтакс-помощник
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.Слово = "<Имя страницы>";
НоваяСтрока.ТипКонтекста = "СтраницыПанели";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "СтраницаПанели";
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.Слово = "<Имя поля>";
НоваяСтрока.ТипКонтекста = "ПоляНастройки";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "ПолеНастройки";
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.Слово = "<Имя элемента>";
НоваяСтрока.ТипКонтекста = "НаборыДанныхСхемыКомпоновкиДанных";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "НаборДанныхЗапросСхемыКомпоновкиДанных, НаборДанныхОбъектСхемыКомпоновкиДанных, НаборДанныхОбъединениеСхемыКомпоновкиДанных";
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.Слово = "<Имя элемента>";
НоваяСтрока.ТипКонтекста = "ПараметрыСхемыКомпоновкиДанных";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "ПараметрСхемыКомпоновкиДанных";
Для ЯзыкПрограммы = 1 По 2 Цикл
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("Год");
СписокПараметров.Добавить("Месяц");
СписокПараметров.Добавить("День");
СписокПараметров.Добавить("Час");
СписокПараметров.Добавить("Минута");
СписокПараметров.Добавить("Секунда");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "ДАТАВРЕМЯ";
Иначе
НоваяСтрокаПараметра.Слово = "ДатаВремя";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("ИсходнаяДата");
СписокПараметров.Добавить("ЕдиницаИзмерения");
СписокПараметров.Добавить("КоличествоЕдиниц");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "ДОБАВИТЬКДАТЕ";
Иначе
НоваяСтрокаПараметра.Слово = "ДобавитьКДате";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("ВычитаемаяДата");
СписокПараметров.Добавить("ИсходнаяДата");
СписокПараметров.Добавить("ЕдиницаИзмерения");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "РАЗНОСТЬДАТ";
Иначе
НоваяСтрокаПараметра.Слово = "РазностьДат";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("Строка");
СписокПараметров.Добавить("ПерваяПозиция");
СписокПараметров.Добавить("ПоследняяПозиция");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "ПОДСТРОКА";
Иначе
НоваяСтрокаПараметра.Слово = "Подстрока";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("Произвольный");
СписокПараметров.Добавить("ЗаменаNULL");
Для Счетчик = 1 По СписокПараметров.Количество() Цикл
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
НоваяСтрокаПараметра.ЯзыкПрограммы = ЯзыкПрограммы;
НоваяСтрокаПараметра.ТипКонтекста = "Глобальный";
Если ЯзыкПрограммы = 1 Тогда
НоваяСтрокаПараметра.Слово = "ЕСТЬNULL";
Иначе
НоваяСтрокаПараметра.Слово = "ЕстьNull";
КонецЕсли;
НоваяСтрокаПараметра.Номер = Счетчик;
НоваяСтрокаПараметра.Параметр = СписокПараметров[Счетчик - 1];
КонецЦикла;
КонецЦикла;
ТаблицаКорневыхОбъектовКонфигурации = ирКэш.ТипыМетаОбъектов(Ложь, Ложь);
РабочийКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(РабочийКаталог);
ФайлРаспаковщикаZIP = мПлатформа.ПолучитьФайлРаспаковщикаZIP(Истина);
// Синтакс-помощник для языка запросов
МаркерЯзыкаЗапросов = "//shquery_ru";
Для Каждого СтрокаСлова Из СловаЯзыкаЗапросов Цикл
НоваяСтрока = ТаблицаКонтекстов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСлова);
НоваяСтрока.Слово = СтрокаСлова.СловоЗапроса;
НоваяСтрока.ТипКонтекста = "Глобальный";
Если Ложь
Или Найти(НоваяСтрока.ПутьКОписанию, МаркерЯзыкаЗапросов) = 1
Или СтрокаСлова.ПутьКОписанию = "//dcsui_ru/SKD_CharacteristicTypes" // Антибаг платформы http://partners.v8.1c.ru/forum/thread.jsp?id=997975#997975
Тогда
НоваяСтрока.ЯзыкПрограммы = 1;
Иначе
НоваяСтрока.ЯзыкПрограммы = 2;
КонецЕсли;
Если НРег(НоваяСтрока.ТипСлова) = НРег("Метод") Тогда
НайденныеСтроки = ТаблицаПараметров.НайтиСтроки(Новый Структура("Слово, ЯзыкПрограммы", НоваяСтрока.Слово, НоваяСтрока.ЯзыкПрограммы));
Если НайденныеСтроки.Количество() = 0 Тогда
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, НоваяСтрока, "ТипКонтекста, Слово, ЯзыкПрограммы");
НоваяСтрокаПараметра.Параметр = "";
НоваяСтрокаПараметра.Номер = 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Синтакс-помощник для языка выражений компоновки
ИмяКниги = "dcsui_ru";
ФайлАрхиваДанных = СинтаксПомощник.АрхивСинтаксПомощникаПоИмени(, ИмяКниги);
ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс(ФайлРаспаковщикаZIP.Имя + " -o " + ФайлАрхиваДанных.ПолноеИмя + " -d " + РабочийКаталог);
ИменаФайлов = Новый Структура;
ИменаФайлов.Вставить("SKD_Functions", "Метод");
ИменаФайлов.Вставить("SKD_AgregOperation", "Метод");
Хтмл = Новый COMОбъект("HTMLFile");
ТекстовыйДокумент = Новый ТекстовыйДокумент;
// {ОписаниеРегулярногоВыражения.Начало} конструктор из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru)
// Перем шИмя, ИмяПараметра, ТипПараметра, ПараметрФункции, ИмяФункции, ФункцияСКД;
// {Шаблон.Начало}
// + <шИмя> = [_ЁА-ЯA-Z][_ЁА-ЯA-Z0-9]*
// + <ИмяПараметра> = <шИмя>
// + <ТипПараметра> = [^<]+
// + <ПараметрФункции> = <LI[^>]*>(?:\s*<DIV[^<]*>)?\s*<STRONG[^>]*>(<ИмяПараметра>)\s*</STRONG>[^<_ЁА-Я]+(?:Тип[^<_ЁА-Я]*<STRONG[^>]*>(<ТипПараметра>)</STRONG>)?
// + <ИмяФункции> = <шИмя>
// + <ФункцияСКД> = <H2[^>]*>\s*<a[^>]*?>\s*(?:</a>\s*)?(<ИмяФункции>)[^$]*?(?:Параметр(?:ы)?:[^$:]*?(?:<ПараметрФункции>[^$]*?)+?(?:[^$:]*?)?)?(?:$|(?=<H2))
// {Шаблон.Конец}
шИмя = "[_ЁА-ЯA-Z][_ЁА-ЯA-Z0-9]*";
ИмяПараметра = "" + шИмя + "";
ТипПараметра = "[^<]+";
ПараметрФункции = "<LI[^>]*>(?:\s*<DIV[^<]*>)?\s*<STRONG[^>]*>(" + ИмяПараметра + ")\s*</STRONG>[^<_ЁА-Я]+(?:Тип[^<_ЁА-Я]*<STRONG[^>]*>(" + ТипПараметра + ")</STRONG>)?";
ИмяФункции = "" + шИмя + "";
ФункцияСКД = "<H2[^>]*>\s*<a[^>]*?>\s*(?:</a>\s*)?(" + ИмяФункции + ")[^$]*?(?:Параметр(?:ы)?:[^$:]*?(?:" + ПараметрФункции + "[^$]*?)+?(?:[^$:]*?)?)?(?:$|(?=<H2))";
// {ОписаниеРегулярногоВыражения.Конец}
RegExp.Global = Истина;
RegExp.Multiline = Ложь;
RegExp.Pattern = ФункцияСКД;
RegExp.IgnoreCase = Истина;
RegExpВложенный = ирОбщий.НовыйВычислительРегВыражений();
RegExpВложенный.Global = Истина;
RegExpВложенный.Multiline = Ложь;
RegExpВложенный.IgnoreCase = Истина;
RegExpВложенный.Pattern = ПараметрФункции;
Для Каждого КлючИЗначение Из ИменаФайлов Цикл
ИмяФайлаСтраницы = КлючИЗначение.Ключ;
ТекстовыйДокумент.Прочитать(РабочийКаталог + "\" + ИмяФайлаСтраницы);
Хтмл.open("text/html");
Хтмл.write(ТекстовыйДокумент.ПолучитьТекст());
Хтмл.close();
ТегиСсылок = Хтмл.GetElementsByTagName("a");
ИменаПолейКлюча = "ТипКонтекста, Слово, ЯзыкПрограммы";
КлючПоиска = Новый Структура(ИменаПолейКлюча);
Для Каждого ТегСсылки Из ТегиСсылок Цикл
МассивФрагментов = ирОбщий.СтрРазделитьЛкс(ТегСсылки.href, "#");
Если МассивФрагментов[0] = "about:blank" Тогда
НоваяСтрока = ТаблицаКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "Глобальный";
НоваяСтрока.ЯзыкПрограммы = 2;
НоваяСтрока.ТипСлова = КлючИЗначение.Значение;
НоваяСтрока.Слово = ТегСсылки.textContent;
НоваяСтрока.ПутьКОписанию = "//" + ИмяКниги + "/" + ИмяФайлаСтраницы + "#" + МассивФрагментов[1];
Если НРег(НоваяСтрока.ТипСлова) = НРег("Метод") Тогда
ЗаполнитьЗначенияСвойств(КлючПоиска, НоваяСтрока);
Если ТаблицаПараметров.НайтиСтроки(КлючПоиска).Количество() = 0 Тогда // на предыдущих проходах цикла могли быть дубли
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, КлючПоиска);
НоваяСтрокаПараметра.Параметр = "";
НоваяСтрокаПараметра.Номер = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Вхождения = RegExp.НайтиВхождения(ТекстовыйДокумент.ПолучитьТекст());
Для каждого Вхождение Из Вхождения Цикл
ИмяФункции = Вхождение.SubMatches(0);
ВложенныеВхождения = RegExpВложенный.НайтиВхождения(Вхождение.Value);
НомерПараметра = 1;
Для каждого ВложенноеВхождение Из ВложенныеВхождения Цикл
ИмяПараметра = ВложенноеВхождение.SubMatches(0);
ТипЗначенияПараметра = ВложенноеВхождение.SubMatches(1);
КлючПоиска = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы, Номер", "Глобальный", ИмяФункции, 2, НомерПараметра);
НайденныеПараметры = ТаблицаПараметров.НайтиСтроки(КлючПоиска);
Если НайденныеПараметры.Количество() = 0 Тогда
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, КлючПоиска);
Иначе
НоваяСтрокаПараметра = НайденныеПараметры[0];
КонецЕсли;
НоваяСтрокаПараметра.Параметр = ИмяПараметра;
НоваяСтрокаПараметра.ТипЗначения = ТипЗначенияПараметра;
НомерПараметра = НомерПараметра + 1;
КонецЦикла;
КонецЦикла;
КонецЦикла;
// Описание тернарного оператора (?) встроенного языка
НоваяСтрока = ТаблицаКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "Глобальный";
НоваяСтрока.ЯзыкПрограммы = 0;
НоваяСтрока.ТипСлова = "Метод";
НоваяСтрока.Слово = "?";
НоваяСтрока.ПутьКОписанию = "//shlang_ru/root_Quest";
НоваяСтрока.ТипЗначения = "Произвольный";
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, НоваяСтрока, "ТипКонтекста, Слово, ЯзыкПрограммы");
НоваяСтрокаПараметра.Параметр = "Логическое выражение";
НоваяСтрокаПараметра.Номер = 1;
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, НоваяСтрока, "ТипКонтекста, Слово, ЯзыкПрограммы");
НоваяСтрокаПараметра.Параметр = "Выражение 1";
НоваяСтрокаПараметра.Номер = 2;
НоваяСтрокаПараметра = ТаблицаПараметров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаПараметра, НоваяСтрока, "ТипКонтекста, Слово, ЯзыкПрограммы");
НоваяСтрокаПараметра.Параметр = "Выражение 2";
НоваяСтрокаПараметра.Номер = 3;
ФайлАрхиваСодержания = СинтаксПомощник.АрхивСинтаксПомощникаПоИмени(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.НайтиВхождения(ИндексОписания);
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Результат.Количество(), "Обработка синтакс-помощника");
Для Каждого Item Из Результат Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
Если Item.SubMatches(4) <> Неопределено Тогда
НовоеСлово = Item.SubMatches(4);
Иначе
НовоеСлово = Item.SubMatches(2);
КонецЕсли;
ПутьКОписанию = Item.SubMatches(5);
НРегПуть = НРег(ПутьКОписанию);
ПутьКОписаниюКонтекста = "";
ТипЭлементаКоллекции = "";
ТипЗначения = "";
СтрокаВерсииПлатформы = "";
НомерВерсииПлатформы = 0;
ЯзыкПрограммы = ?(Найти(НРегПуть, "/tables/") > 0, 1, 0);
Если ЯзыкПрограммы = 1 Тогда
ТипСлова = "Таблица";
Иначе
ТипСлова = "Свойство";
КонецЕсли;
Если Найти(НРегПуть, "/methods/") > 0 Тогда
ТипСлова = "Метод";
ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/methods/") - 1) + ".html";
Если Найти(НовоеСлово, "#") > 0 Тогда
// Почему то в 8.3.19 правильный элемент имеет имя ВыгрузитьЖурналРегистрации#&^@^%&*^#1 https://www.hostedredmine.com/issues/932670
НовоеСлово = ирОбщий.ПервыйФрагментЛкс(НовоеСлово, "#");
КонецЕсли;
ИначеЕсли Найти(НРегПуть, "/properties/") > 0 Тогда
ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/properties/") - 1) + ".html";
ИначеЕсли Найти(НРегПуть, "/events/") > 0 Тогда
ТипСлова = "Событие";
ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/events/") - 1) + ".html";
ИначеЕсли Найти(НРегПуть, "/fields/") > 0 Тогда
ТипСлова = "Поле";
ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/fields/") - 1) + ".html";
ИначеЕсли Найти(НРегПуть, "/ctors/") > 0 Тогда
ТипСлова = "Конструктор";
ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/ctors/") - 1) + ".html";
ИначеЕсли Найти(НРегПуть, "/params/") > 0 Тогда
ТипСлова = "Параметр";
ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/params/") - 1) + ".html";
ИначеЕсли Найти(НРегПуть, "/formparams/") > 0 Тогда
ТипСлова = "Параметр";
ПутьКОписаниюКонтекста = Лев(ПутьКОписанию, Найти(НРегПуть, "/formparams/") - 1) + ".html";
Иначе
//ПутьКОписаниюКонтекста = ПутьКОписанию; // тогда в качестве собственного свойства будет добавляться сам тип котнекста
Пустышка = 0;
КонецЕсли;
Если Истина
И ЯзыкПрограммы = 0
И Найти(НовоеСлово, " ") > 0
И ТипСлова = "Метод"
Тогда
// http://www.hostedredmine.com/issues/885173
Продолжить;
КонецЕсли;
Если ПутьКОписанию = "/objects/Global context/methods/catalog3403/UnloadEventLog2325.html" Тогда
// Вредный дубль метода ВыгрузитьЖурналРегистрации() https://www.hostedredmine.com/issues/932670
Продолжить;
КонецЕсли;
ФайлОписания = Новый Файл(РабочийКаталог + ПутьКОписанию);
Попытка
Текст.Прочитать(ФайлОписания.ПолноеИмя);
ТекстПрочитан = Истина;
Исключение
ТекстПрочитан = Ложь;
КонецПопытки;
Если ТекстПрочитан Тогда
Описание = Текст.ПолучитьТекст();
Если Найти(НРегПуть, "/tables/") > 0 Тогда
RegExp.Global = Ложь;
RegExp.Pattern = "Синтаксис" + шТегНеКлюч + "(([А-Я_A-Z0-9\-\s\:]+)(\.(&lt;[^&]+&gt;|[А-Я_A-Z0-9\-\s\:]+))*)";
Результат = RegExp.НайтиВхождения(Описание);
Если Результат.Количество() > 0 Тогда
НовоеСлово = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(Результат[0].SubMatches(0));
КонецЕсли;
КонецЕсли;
Если ТипСлова = "Конструктор" Тогда
ТипЗначения = "";
Иначе
RegExp.Global = Ложь;
RegExp.Pattern = "Тип:" + шТегНеКлюч + "?((?:" + шТип + ")+)";
СмещениеИндекса = 0;
Если ТипСлова = "Метод" Тогда
RegExp.Pattern = "Возвращаемое значение:" + шТег + "?(?:" + RegExp.Pattern + ")?";
СмещениеИндекса = 1;
КонецЕсли;
Результат = RegExp.НайтиВхождения(Описание);
Если Результат.Количество() > 0 Тогда
RegExp2.Global = Истина;
RegExp2.Pattern = шТип;
Результат2 = RegExp2.НайтиВхождения(Результат[0].SubMatches(0));
СтрокаТипаЗначения = "";
Для Каждого Вхождение2 Из Результат2 Цикл
СтрокаТипаЗначения = СтрокаТипаЗначения + ", " + СокрЛП(Вхождение2.SubMatches(0));
КонецЦикла;
ТипЗначения = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(Сред(СтрокаТипаЗначения, 3));
КонецЕсли;
КонецЕсли;
RegExp.Global = Ложь;
RegExp.Pattern = "Элементы\x20коллекции:" + шТегНеКлюч + "?((?:" + шТип + ")+)";
Результат = RegExp.НайтиВхождения(Описание);
ТипЭлементаКоллекции = "";
Если Результат.Количество() > 0 Тогда
RegExp2.Global = Истина;
RegExp2.Pattern = шТип;
Результат2 = RegExp2.НайтиВхождения(Результат[0].SubMatches(0));
СтрокаТипаЗначения = "";
Для Каждого Вхождение2 Из Результат2 Цикл
СтрокаТипаЗначения = СтрокаТипаЗначения + ", " + СокрЛП(Вхождение2.SubMatches(0));
КонецЦикла;
ТипЭлементаКоллекции = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(Сред(СтрокаТипаЗначения, 3));
КонецЕсли;
RegExp.Global = Истина;
RegExp.Pattern = "Доступен, начиная с версии (8.*?)\.<";
Результат = RegExp.НайтиВхождения(Описание);
Если Результат.Количество() > 0 Тогда
Если Результат.Количество() > 1 Тогда
Пустышка = 0; // Для отладки
КонецЕсли;
СтрокаВерсииПлатформы = Результат[Результат.Количество() - 1].SubMatches(0);
НомерВерсииПлатформы = ирОбщий.НомерВерсииПлатформыЛкс(ирОбщий.ПервыйФрагментЛкс(СтрокаВерсииПлатформы, "("));
Если НомерВерсииПлатформы <= 801000 Тогда
НомерВерсииПлатформы = 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Найти(НРегПуть, "/script functions/") > 0 Тогда
// Этот раздел был в 8.2. Но в каком то релизе 8.3 убрали
ТипКонтекста = "Общее";
ВызватьИсключение "Обнаружен устаревший раздел Общее";
КонецЕсли;
ТипКонтекста = ТипыКонтекстовПутей[ПутьКОписаниюКонтекста];
Если ТипКонтекста = Неопределено Тогда
ТипКонтекста = "";
ФайлКонтекста = Новый Файл(РабочийКаталог + ПутьКОписаниюКонтекста);
Если Истина
И ФайлКонтекста.Существует()
И ФайлКонтекста.ЭтоФайл()
Тогда
Текст.Прочитать(ФайлКонтекста.ПолноеИмя);
ОписаниеКонтекста = Текст.ПолучитьТекст();
RegExp.Pattern = "(<[^>]+>)+([^\(<]+[^\(<\s])";
Результат = RegExp.НайтиВхождения(ОписаниеКонтекста);
Если Результат.Количество() > 0 Тогда
ТипКонтекста = СинтаксПомощник.ИзвлечьИзФрагментаHTMLОбычныйТекст(Результат[0].SubMatches(1));
КонецЕсли;
КонецЕсли;
//Если Найти(НРегПуть, "/global context/") > 0 Тогда
Если ТипКонтекста = "Глобальный контекст" Тогда
ТипКонтекста = "Глобальный";
КонецЕсли;
ТипыКонтекстовПутей[ПутьКОписаниюКонтекста] = ТипКонтекста;
КонецЕсли;
Если Истина
И ТипКонтекста = ""
И ЯзыкПрограммы = 1
Тогда
Фрагметны = ирОбщий.СтрРазделитьЛкс(НовоеСлово);
Если Истина
И Фрагметны.Количество() > 1
//И Найти( Фрагметны[Фрагметны.ВГраница()], "<") = 0
Тогда
ТипЗначения = НовоеСлово;
НовоеСлово = Фрагметны[Фрагметны.ВГраница()];
Фрагметны.Удалить(Фрагметны.ВГраница());
ТипКонтекста = ирОбщий.СтрСоединитьЛкс(Фрагметны, ".");
// Баг в файлах справки
Если ТипКонтекста = "РегистрСведений" Тогда
НовоеСлово = СтрЗаменить(НовоеСлово , "<Имя регистра>", "<Имя регистра сведений>");
ТипЗначения = СтрЗаменить(ТипЗначения, "<Имя регистра>", "<Имя регистра сведений>");
ИначеЕсли ТипКонтекста = "РегистрНакопления" Тогда
НовоеСлово = СтрЗаменить(НовоеСлово , "<Имя регистра>", "<Имя регистра накопления>");
ТипЗначения = СтрЗаменить(ТипЗначения, "<Имя регистра>", "<Имя регистра накопления>");
КонецЕсли;
КонецЕсли;
КонецЕсли;
СинтаксПомощник.ЗагрузитьОписаниеМетода(ТипКонтекста, НовоеСлово, Описание, ТипСлова, ЯзыкПрограммы, ТаблицаПараметров, РабочийКаталог);
Если ТипКонтекста = "" Тогда
СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", НовоеСлово, ЯзыкПрограммы);
СинтаксПомощник.СкорректироватьЭлементыСтруктуры(СтруктураКлюча);
СкорректироватьКлючТипа(СтруктураКлюча);
НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча);
Если НайденныеСтроки.Количество() = 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;
НоваяСтрока = ТаблицаКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "ОбъектМетаданных: Подсистема";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "КоллекцияОбъектовМетаданных";
НоваяСтрока.Слово = "Подсистемы";
НоваяСтрока.ЯзыкПрограммы = 0;
НоваяСтрока = ТаблицаКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.Таблица";
НоваяСтрока.Слово = "Таблица";
НоваяСтрока.ЯзыкПрограммы = 1;
НоваяСтрока = ТаблицаКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.Таблица";
НоваяСтрока.Слово = "Таблица";
НоваяСтрока.ЯзыкПрограммы = 2;
НоваяСтрока = ТаблицаКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.ВременнаяТаблица";
НоваяСтрока.Слово = "ВременнаяТаблица";
НоваяСтрока.ЯзыкПрограммы = 1;
// Добавим колонки временной таблицы
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "ВременнаяТаблица";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "Произвольный";
НоваяСтрока.Слово = "<Имя колонки>";
НоваяСтрока.ЯзыкПрограммы = 1;
// Добавим колонки строки таблицы
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "СтрокаТаблицы";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "Произвольный";
НоваяСтрока.Слово = "<Имя колонки>";
НоваяСтрока.ЯзыкПрограммы = 1;
НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить();
НоваяСтрока.ТипКонтекста = "СтрокаТаблицы";
НоваяСтрока.ТипСлова = "Свойство";
НоваяСтрока.ТипЗначения = "Произвольный";
НоваяСтрока.Слово = "<Имя колонки>";
НоваяСтрока.ЯзыкПрограммы = 2;
// Проставим в типах значения виды (шаблонные имена элементов коллекций)
МассивТаблиц = Новый Массив;
МассивТаблиц.Добавить(ТаблицаКонтекстов);
МассивТаблиц.Добавить(ТаблицаШаблоновКонтекстов);
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТаблицаШаблоновКонтекстов.Количество() + ТаблицаКонтекстов.Количество(),
"Добавление дополнительных шаблонов");
Для Каждого ВременнаяТаблица Из МассивТаблиц Цикл
Для Каждого ВременнаяСтрока Из ВременнаяТаблица Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
МассивФрагментов = ирОбщий.СтрРазделитьЛкс(ВременнаяСтрока.ТипКонтекста);
Если МассивФрагментов.Количество() > 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);
НайденныеСтроки = ТаблицаШаблоновКонтекстов.НайтиСтроки(СтруктураКлюча);
Если НайденныеСтроки.Количество() = 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];
НоваяСтрока.ТипЗначения = "HTMLDocument {HTMLFile}";
СтруктураКлюча = Новый Структура("ТипКонтекста, Слово", "Расширение поля формы для поля HTML-документа", "Документ");
НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча);
НоваяСтрока = НайденныеСтроки[0];
НоваяСтрока.ТипЗначения = "HTMLDocument {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 """ + ПолноеИмяФайла + """", ПутьРаспаковки);
КонецПроцедуры // РаспаковатьВнешнююОбработку()
Процедура ЗаполнитьТаблицы(Кнопка = Неопределено)
ЗаполнитьВсе();
КонецПроцедуры
Процедура ОсновныеДействияФормыСохранитьТаблицы(Кнопка)
Если ТаблицаКонтекстов.Количество() = 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МенеджерТабличногоПоля(Кнопка)
Если ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") Тогда
Возврат;
КонецЕсли;
ирОбщий.ОткрытьМенеджерТабличногоПоляЛкс(ТекущийЭлемент, ЭтаФорма);
КонецПроцедуры
Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт
ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные);
КонецПроцедуры
Процедура ТаблицаШаблоновКонтекстовПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
КонецПроцедуры
Процедура ТаблицаКонтекстовПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
КонецПроцедуры
Процедура ТаблицаПараметровПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
КонецПроцедуры
Процедура ТаблицаОбщихТиповПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
КонецПроцедуры
Процедура ТаблицаРасширенийПриАктивизацииСтроки(Элемент)
ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры
Процедура ТаблицаИменЭлементовКоллекцийПриАктивизацииСтроки(Элемент)
ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры
Процедура ТаблицаРасширенийПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
КонецПроцедуры
Процедура ТаблицаИменЭлементовКоллекцийПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
КонецПроцедуры
мПлатформа = ирКэш.Получить();
RegExp = ирОбщий.НовыйВычислительРегВыражений();
RegExp2 = ирОбщий.НовыйВычислительРегВыражений();