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