Перем 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", "Метод"); ИменаФайлов.Вставить("SKD_Functions_Date", "Метод"); // 8.3.21+ ИменаФайлов.Вставить("SKD_Functions_Numbers", "Метод"); // 8.3.21+ ИменаФайлов.Вставить("SKD_Functions_Expressions", "Метод"); // 8.3.21+ ИменаФайлов.Вставить("SKD_Functions_Strings", "Метод"); // 8.3.21+ Хтмл = Новый COMОбъект("HTMLFile"); ТекстовыйДокумент = Новый ТекстовыйДокумент; // {ОписаниеРегулярногоВыражения.Начало} конструктор из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru) // Перем шИмя, ИмяПараметра, ТипПараметра, ПараметрФункции, ИмяФункции, ФункцияСКД; // {Шаблон.Начало} // + <шИмя> = [_ЁА-ЯA-Z][_ЁА-ЯA-Z0-9]* // + <ИмяПараметра> = <шИмя> // + <ТипПараметра> = [^<]+ // + <ПараметрФункции> = ]*>(?:\s*)?\s*]*>(<ИмяПараметра>)\s*[^<_ЁА-Я]+(?:Тип[^<_ЁА-Я]*]*>(<ТипПараметра>))? // + <ИмяФункции> = <шИмя> // + <ФункцияСКД> = ]*>\s*]*?>\s*(?:\s*)?(<ИмяФункции>)[^$]*?(?:Параметр(?:ы)?:[^$:]*?(?:<ПараметрФункции>[^$]*?)+?(?:[^$:]*?)?)?(?:$|(?=[^<_ЁА-Я]+(?:Тип[^<_ЁА-Я]*]*>(" + ТипПараметра + "))?"; ИмяФункции = "" + шИмя + ""; ФункцияСКД = "]*>\s*]*?>\s*(?:\s*)?(" + ИмяФункции + ")[^$]*?(?:Параметр(?:ы)?:[^$:]*?(?:" + ПараметрФункции + "[^$]*?)+?(?:[^$:]*?)?)?(?:$|(?= Неопределено Тогда НовоеСлово = Item.SubMatches(4); Иначе НовоеСлово = Item.SubMatches(2); КонецЕсли; ПутьКОписанию = Item.SubMatches(5); НРегПуть = НРег(ПутьКОписанию); ПутьКОписаниюКонтекста = ""; ТипЭлементаКоллекции = ""; ТипЗначения = ""; СтрокаВерсииПлатформы = ""; НомерВерсииПлатформы = 0; ЯзыкПрограммы = ?(Найти(НРегПуть, "/tables/") > 0, 1, 0); Если ЯзыкПрограммы = 1 Тогда ТипСлова = "Таблица"; Иначе ТипСлова = "Свойство"; КонецЕсли; Если Найти(НовоеСлово, "#") > 0 Тогда // Почему то в 8.3.19 правильный элемент имеет имя ВыгрузитьЖурналРегистрации#&^@^%&*^#1 https://www.hostedredmine.com/issues/932670 НовоеСлово = ирОбщий.ПервыйФрагментЛкс(НовоеСлово, "#"); КонецЕсли; Если Найти(НРегПуть, "/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"; ИначеЕсли Найти(НРегПуть, "/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\:]+)(\.(<[^&]+>|[А-Я_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]; КонецЕсли; НоваяСтрока.БазовыйТип = ирОбщий.ПервыйФрагментЛкс(НовоеСлово); НоваяСтрока.ПутьКОписанию = ПутьКОписанию; НоваяСтрока.ТипЭлементаКоллекции = ТипЭлементаКоллекции; НоваяСтрока.НомерВерсииПлатформы = НомерВерсииПлатформы; Если Найти(Описание, "

Определяет набор ") > 0 Тогда Если Истина И Найти(Описание, ">Значения<") > 0 // Отбрасываем ПараметрыЗаписиJSON https://www.hostedredmine.com/issues/946885 // Отбрасываем перечислимые свойства метаданных. Например ПериодичностьНомераДокумента https://www.hostedredmine.com/issues/946885 И Не Найти(Описание, "ПеречислимыеСвойстваОбъектовМетаданных") > 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; НоваяСтрока = ТаблицаКонтекстов.Добавить(); НоваяСтрока.ТипКонтекста = "ОбъектМетаданных: Подсистема"; НоваяСтрока.ТипСлова = "Свойство"; НоваяСтрока.ТипЗначения = "КоллекцияОбъектовМетаданных"; НоваяСтрока.Слово = "Подсистемы"; НоваяСтрока.ЯзыкПрограммы = 0; НоваяСтрока = ТаблицаКонтекстов.Добавить(); НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>"; НоваяСтрока.ТипСлова = "Свойство"; НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.Таблица"; НоваяСтрока.Слово = "Таблица"; НоваяСтрока.ЯзыкПрограммы = 1; НоваяСтрока = ТаблицаКонтекстов.Добавить(); НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>"; НоваяСтрока.ТипСлова = "Свойство"; НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.Таблица"; НоваяСтрока.Слово = "Таблица"; НоваяСтрока.ЯзыкПрограммы = 2; НоваяСтрока = ТаблицаКонтекстов.Добавить(); НоваяСтрока.ТипКонтекста = "ВнешнийИсточникДанных.<Имя внешнего источника>"; НоваяСтрока.ТипСлова = "Свойство"; НоваяСтрока.ТипЗначения = "ВнешнийИсточникДанных.<Имя внешнего источника>.ВременнаяТаблица"; НоваяСтрока.Слово = "ВременнаяТаблица"; НоваяСтрока.ЯзыкПрограммы = 1; // Добавим колонки временной таблицы НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить(); НоваяСтрока.ТипКонтекста = "ВременнаяТаблица"; НоваяСтрока.ТипСлова = "Свойство"; НоваяСтрока.ТипЗначения = "Произвольный"; НоваяСтрока.Слово = "<Имя колонки>"; НоваяСтрока.ЯзыкПрограммы = 1; // Добавим колонки строки таблицы НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить(); НоваяСтрока.ТипКонтекста = "СтрокаТаблицы"; НоваяСтрока.ТипСлова = "Свойство"; НоваяСтрока.ТипЗначения = "Произвольный"; НоваяСтрока.Слово = "<Имя колонки>"; НоваяСтрока.ЯзыкПрограммы = 1; НоваяСтрока = ТаблицаШаблоновКонтекстов.Добавить(); НоваяСтрока.ТипКонтекста = "СтрокаТаблицы"; НоваяСтрока.ТипСлова = "Свойство"; НоваяСтрока.ТипЗначения = "Произвольный"; НоваяСтрока.Слово = "<Имя колонки>"; НоваяСтрока.ЯзыкПрограммы = 2; // Проставим в типах значения виды (шаблонные имена элементов коллекций) МассивТаблиц = Новый Массив; МассивТаблиц.Добавить(ТаблицаКонтекстов); МассивТаблиц.Добавить(ТаблицаШаблоновКонтекстов); Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТаблицаШаблоновКонтекстов.Количество() + ТаблицаКонтекстов.Количество(), "Добавление дополнительных шаблонов"); Для Каждого ВременнаяТаблица Из МассивТаблиц Цикл Для Каждого ВременнаяСтрока Из ВременнаяТаблица Цикл ирОбщий.ОбработатьИндикаторЛкс(Индикатор); МассивФрагментов = ирОбщий.СтрРазделитьЛкс(ВременнаяСтрока.ТипКонтекста); Если МассивФрагментов.Количество() > 1 Тогда ПозицияКонцаШаблона = Найти(МассивФрагментов[МассивФрагментов.ВГраница() - 1], "<"); Если Лев(ВременнаяСтрока.Слово, 1) <> "<" Тогда Если ПозицияКонцаШаблона > 0 Тогда АтрибутШаблона = МассивФрагментов[МассивФрагментов.ВГраница()]; МассивФрагментов.Удалить(МассивФрагментов.ВГраница()); СтруктураКлюча = Новый Структура; СтруктураКлюча.Вставить("ТипКонтекста", ирОбщий.СтрСоединитьЛкс(МассивФрагментов, ".")); СтруктураКлюча.Вставить("Слово", АтрибутШаблона); Если Ложь Или ВременнаяСтрока.ТипСлова = "Поле" Или ВременнаяСтрока.ТипСлова = "Параметр" Или (Истина И ВременнаяСтрока.ТипСлова = "Таблица" И МассивФрагментов.Количество() > 1) Тогда СтруктураКлюча.Вставить("ТипСлова", "Таблица"); Иначе СтруктураКлюча.Вставить("ТипСлова", "Свойство"); КонецЕсли; Если Найти(АтрибутШаблона, "<") > 0 Тогда ТаблицаДобавления = ТаблицаШаблоновКонтекстов; Иначе ТаблицаДобавления = ТаблицаКонтекстов; КонецЕсли; Если ТаблицаДобавления.НайтиСтроки(СтруктураКлюча).Количество() = 0 Тогда ДополнительнаяСтрока = ТаблицаДобавления.Добавить(); ЗаполнитьЗначенияСвойств(ДополнительнаяСтрока, СтруктураКлюча); ДополнительнаяСтрока.ТипЗначения = ВременнаяСтрока.ТипКонтекста; ДополнительнаяСтрока.ЯзыкПрограммы = ВременнаяСтрока.ЯзыкПрограммы; //СтруктураКлюча = Новый Структура; //СтруктураКлюча.Вставить("Слово", ДополнительнаяСтрока.ТипКонтекста); //СтруктураКлюча.Вставить("ЯзыкПрограммы", ДополнительнаяСтрока.ЯзыкПрограммы); //СтрокиТипа = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча); //Если СтрокиТипа.Количество() > 0 Тогда // ДополнительнаяСтрока.ПутьКОписанию = СтрокиТипа[0].ПутьКОписанию; //КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если ВременнаяСтрока.Слово = "<Имя табличной части>" Тогда АтрибутШаблона = МассивФрагментов[МассивФрагментов.ВГраница()]; ГлавныйТип = МассивФрагментов[0]; МаркерОбъекта = "Объект"; Если ВременнаяСтрока.ЯзыкПрограммы = 0 Тогда КорневойТип = СтрЗаменить(ГлавныйТип, МаркерОбъекта, ""); ТипТабличнойЧастиЗапроса = КорневойТип + "." + АтрибутШаблона + "." + ВременнаяСтрока.Слово; ТипСтрокиТабличнойЧасти = КорневойТип + "ТабличнаяЧастьСтрока." + АтрибутШаблона + "." + ВременнаяСтрока.Слово; ТипТабличнойЧасти = КорневойТип + "ТабличнаяЧасть." + АтрибутШаблона + "." + ВременнаяСтрока.Слово; //ВременнаяСтрока.ТипЗначения = ТипТабличнойЧасти; Если Прав(ГлавныйТип, СтрДлина(МаркерОбъекта)) = МаркерОбъекта Тогда СтруктураДобавляемыхТипов = Новый Соответствие; СтруктураДобавляемыхТипов.Вставить(ТипСтрокиТабличнойЧасти,); СтруктураДобавляемыхТипов.Вставить(ТипТабличнойЧасти, ТипСтрокиТабличнойЧасти); Для Каждого ДобавляемыйТип Из СтруктураДобавляемыхТипов Цикл СтруктураКлюча = Новый Структура("Слово, ЯзыкПрограммы", ДобавляемыйТип.Ключ, ВременнаяСтрока.ЯзыкПрограммы); СинтаксПомощник.СкорректироватьЭлементыСтруктуры(СтруктураКлюча); СкорректироватьКлючТипа(СтруктураКлюча); НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча); Если НайденныеСтроки.Количество() = 0 Тогда НоваяСтрокаТипа = ТаблицаОбщихТипов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрокаТипа, СтруктураКлюча); Иначе НоваяСтрокаТипа = НайденныеСтроки[0]; КонецЕсли; НоваяСтрокаТипа.ТипЭлементаКоллекции = ирОбщий.ПервыйФрагментЛкс(ДобавляемыйТип.Значение); ЗаполнитьСтрокуТипа(НоваяСтрокаТипа); КонецЦикла; КонецЕсли; Иначе // **** Для вложенных запросов придется переделать ТипКонтекстаШаблона = ВременнаяСтрока.ТипКонтекста + "." + ВременнаяСтрока.Слово; ВременнаяСтрока.ТипЗначения = ТипКонтекстаШаблона; ВременнаяСтрока.ТипСлова = "Таблица"; // Добавлено 05.06.2022 https://www.hostedredmine.com/issues/946046 КонецЕсли; Если Прав(ГлавныйТип, СтрДлина(МаркерОбъекта)) = МаркерОбъекта Тогда ДобавитьСистемныеСвойстваСистемнойТЧ(КорневойТип, ТипСтрокиТабличнойЧасти, ТипТабличнойЧастиЗапроса, АтрибутШаблона); ДополнительнаяСтрокаШаблона = ТаблицаШаблоновКонтекстов.Добавить(); ДополнительнаяСтрокаШаблона.ТипКонтекста = ТипСтрокиТабличнойЧасти; ДополнительнаяСтрокаШаблона.ТипСлова = "Свойство"; ДополнительнаяСтрокаШаблона.Слово = "<Имя реквизита>"; ДополнительнаяСтрокаШаблона.ТипЗначения = "Произвольный"; ДополнительнаяСтрокаШаблона.ЯзыкПрограммы = 0; ДополнительнаяСтрокаШаблона = ТаблицаШаблоновКонтекстов.Добавить(); ДополнительнаяСтрокаШаблона.ТипКонтекста = ТипТабличнойЧастиЗапроса; ДополнительнаяСтрокаШаблона.ТипСлова = "Поле"; ДополнительнаяСтрокаШаблона.Слово = "<Имя реквизита>"; ДополнительнаяСтрокаШаблона.ТипЗначения = "Произвольный"; ДополнительнаяСтрокаШаблона.ЯзыкПрограммы = 1; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); // системные ТЧ в запросе - виды субконто и виды расчета СтрокиСистемныхТЧ = ТаблицаКонтекстов.НайтиСтроки(Новый Структура("ТипСлова, ТипЗначения, ЯзыкПрограммы", "Поле", "РезультатЗапроса", 1)); МассивТаблиц = Новый Массив; МассивТаблиц.Добавить(ТаблицаКонтекстов); МассивТаблиц.Добавить(ТаблицаШаблоновКонтекстов); Для Каждого СтрокаСистемнойТЧ Из СтрокиСистемныхТЧ Цикл ТипЗначенияТЧ = СтрокаСистемнойТЧ.ТипКонтекста + "." + СтрокаСистемнойТЧ.Слово; СтрокаСистемнойТЧ.ТипЗначения = ТипЗначенияТЧ; СтрокаСистемнойТЧ.ТипСлова = "Таблица"; Фрагменты = ирОбщий.СтрРазделитьЛкс(СтрокаСистемнойТЧ.ТипКонтекста); ТипСтрокиТабличнойЧасти = СтрокаСистемнойТЧ.Слово + "Строка." + Фрагменты[1]; Если СтрокаСистемнойТЧ.Слово = "ВидыСубконто" Тогда ТипСтрокиТабличнойЧасти = Фрагменты[0] + ТипСтрокиТабличнойЧасти; КонецЕсли; ДобавитьСистемныеСвойстваСистемнойТЧ(КорневойТип, ТипСтрокиТабличнойЧасти, ТипЗначенияТЧ, Фрагменты[1]); Для Каждого ВременнаяТаблица Из МассивТаблиц Цикл Для Каждого СтрокаРеквизита Из ВременнаяТаблица.НайтиСтроки(Новый Структура("ТипКонтекста, ТипСлова, ЯзыкПрограммы", ТипСтрокиТабличнойЧасти, "Свойство", 0)) Цикл НоваяСтрока = ВременнаяТаблица.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРеквизита); НоваяСтрока.ТипКонтекста = ТипЗначенияТЧ; НоваяСтрока.ТипСлова = "Поле"; НоваяСтрока.ЯзыкПрограммы = 1; КонецЦикла; КонецЦикла; КонецЦикла; // Заполним в таблицах контекстов и шаблонов контекстов типы значений по базовым типам // Тип значения "ДокументСсылка" => "ДокументСсылка.<Имя документа>" МассивТаблиц = Новый Массив; МассивТаблиц.Добавить(ТаблицаКонтекстов); МассивТаблиц.Добавить(ТаблицаШаблоновКонтекстов); Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТаблицаШаблоновКонтекстов.Количество() + ТаблицаКонтекстов.Количество(), "Установка <> в типах значений"); Для Каждого ВременнаяТаблица Из МассивТаблиц Цикл Для Каждого ВременнаяСтрока Из ВременнаяТаблица Цикл ирОбщий.ОбработатьИндикаторЛкс(Индикатор); //СтруктураКлюча = Новый Структура("БазовыйТип", ВременнаяСтрока.ТипЗначения); МассивФрагментов = ирОбщий.СтрРазделитьЛкс(ВременнаяСтрока.ТипЗначения, ",", Истина); НовыйТипЗначения = ""; Для Каждого Фрагмент Из МассивФрагментов Цикл СтруктураКлюча = Новый Структура("БазовыйТип", Фрагмент); НайденныеСтроки = ТаблицаОбщихТипов.НайтиСтроки(СтруктураКлюча); НовыйФрагмент = Фрагмент; Если НайденныеСтроки.Количество() > 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; НоваяСтрока.ТипСлова = "Свойство"; КонецЦикла; // литерал ДАТАВРЕМЯ в языке выражений компоновки забыли описать в синтакс-помощнике СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", "Глобальный", "ДАТАВРЕМЯ", 1); НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча); НоваяСтрока = ТаблицаКонтекстов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденныеСтроки[0]); НоваяСтрока.Слово = "ДатаВремя"; НоваяСтрока.ЯзыкПрограммы = 2; // Скорректируем описания типов метаданных СтруктураКлюча = Новый Структура("ТипЗначения", "КоллекцияОбъектовМетаданных"); НайденныеСтроки = ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча); Для Каждого СтрокаМетаданных Из НайденныеСтроки Цикл // Исключения Если СтрокаМетаданных.Слово = "ОбщиеФормы" Тогда ИмяТипаКоллекции = "Формы"; ИначеЕсли СтрокаМетаданных.Слово = "ОбщиеМакеты" Тогда ИмяТипаКоллекции = "Макеты"; Иначе ИмяТипаКоллекции = СтрокаМетаданных.Слово; КонецЕсли; СтрокаМетаданных.ТипЗначения = "КоллекцияМетаданных: " + ИмяТипаКоллекции; СтрокаМетаТипа = мПлатформа.ОписаниеТипаМетаОбъектов(, ИмяТипаКоллекции); Если СтрокаМетаТипа = Неопределено Тогда ирОбщий.СообщитьЛкс("Не найдено описание элемента для коллекции """ + ИмяТипаКоллекции + """", СтатусСообщения.Важное); Продолжить; КонецЕсли; СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", СтрокаМетаданных.ТипЗначения, "<Имя объекта описания метаданного>", 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); НайденныеСтроки = ТаблицаШаблоновКонтекстов.НайтиСтроки(СтруктураКлюча); ТаблицаШаблоновКонтекстов.Удалить(НайденныеСтроки[0]); // Антибаг 8.3.7 Типом табличной части внешних объектов указан тип Строка СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", "ВнешняяОбработкаОбъект.<Имя внешней обработки>", "<Имя табличной части>", 0); ТаблицаШаблоновКонтекстов.НайтиСтроки(СтруктураКлюча)[0].ТипЗначения = "ВнешняяОбработкаТабличнаяЧасть.<Имя внешней обработки>.<Имя табличной части>"; СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", "ВнешнийОтчетОбъект.<Имя внешнего отчета>", "<Имя табличной части>", 0); ТаблицаШаблоновКонтекстов.НайтиСтроки(СтруктураКлюча)[0].ТипЗначения = "ВнешнийОтчетТабличнаяЧасть.<Имя внешней обработки>.<Имя табличной части>"; // Антибаг 8.3.11 Типом табличной части внешних объектов указан тип Строка СтруктураКлюча = Новый Структура("ТипКонтекста, Слово, ЯзыкПрограммы", "РегистрРасчетаМенеджер.<Имя регистра расчета>", "Перерасчеты", 0); ТаблицаКонтекстов.НайтиСтроки(СтруктураКлюча)[0].ТипЗначения = "ПерерасчетыМенеджер.<Имя регистра расчета>"; ТаблицаКонтекстов.Сортировать("ТипКонтекста, Слово, ТипСлова"); ТаблицаШаблоновКонтекстов.Сортировать("ТипКонтекста, Слово, ТипСлова"); // Первая сортировка по ТипТипа критична! ТаблицаОбщихТипов.Сортировать("ТипТипа, Слово"); ТаблицаИменЭлементовКоллекций.Сортировать("ИмяЭлементаКоллекции, ИмяКоллекции"); ирОбщий.СообщитьЛкс("Количество строк таблицы параметров - " + ТаблицаПараметров.Количество()); // Заполним индексы НРЕГ Состояние("Построение индексов"); Для Каждого СтрокаТаблицы Из ТаблицаШаблоновКонтекстов Цикл СтрокаТаблицы.НСлово = НРег(СтрокаТаблицы.Слово); КонецЦикла; Для Каждого СтрокаТаблицы Из ТаблицаКонтекстов Цикл СтрокаТаблицы.НСлово = НРег(СтрокаТаблицы.Слово); КонецЦикла; Для Каждого СтрокаТаблицы Из ТаблицаОбщихТипов Цикл СтрокаТаблицы.НСлово = НРег(СтрокаТаблицы.Слово); КонецЦикла; Если ВключитьАнализСрабатыванияЗамен Тогда ирОбщий.ИсследоватьЛкс(СинтаксПомощник.СрабатываниеЗамен); КонецЕсли; КонецПроцедуры Процедура ДобавитьСистемныеСвойстваСистемнойТЧ(Знач КорневойТип, Знач ТипСтрокиТабличнойЧасти, Знач ТипТабличнойЧастиЗапроса, Знач АтрибутШаблона) ДополнительнаяСтрокаКонтекста = ТаблицаКонтекстов.Добавить(); ДополнительнаяСтрокаКонтекста.ТипКонтекста = ТипСтрокиТабличнойЧасти; ДополнительнаяСтрокаКонтекста.ТипСлова = "Свойство"; ДополнительнаяСтрокаКонтекста.Слово = "НомерСтроки"; ДополнительнаяСтрокаКонтекста.ТипЗначения = "Число"; ДополнительнаяСтрокаКонтекста.ЯзыкПрограммы = 0; ДополнительнаяСтрокаКонтекста = ТаблицаКонтекстов.Добавить(); ДополнительнаяСтрокаКонтекста.ТипКонтекста = ТипТабличнойЧастиЗапроса; ДополнительнаяСтрокаКонтекста.ТипСлова = "Поле"; ДополнительнаяСтрокаКонтекста.Слово = "НомерСтроки"; ДополнительнаяСтрокаКонтекста.ТипЗначения = "Число"; ДополнительнаяСтрокаКонтекста.ЯзыкПрограммы = 1; ДополнительнаяСтрокаКонтекста = ТаблицаКонтекстов.Добавить(); ДополнительнаяСтрокаКонтекста.ТипКонтекста = ТипТабличнойЧастиЗапроса; ДополнительнаяСтрокаКонтекста.ТипСлова = "Поле"; ДополнительнаяСтрокаКонтекста.Слово = "Ссылка"; ДополнительнаяСтрокаКонтекста.ТипЗначения = КорневойТип + "." + АтрибутШаблона; ДополнительнаяСтрокаКонтекста.ЯзыкПрограммы = 1; КонецПроцедуры Процедура РаспаковатьФайлВнешнейОбработки(ПолноеИмяФайла, ПутьРаспаковки) Экспорт ИмяФайлаПакера = "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 = ирОбщий.НовыйВычислительРегВыражений();