//ирПортативный Перем ирПортативный Экспорт; //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; //ирПортативный Перем ирПривилегированный Экспорт; Перем ФайлСтилейСинтаксПомощника Экспорт; Перем ЗаменыВнешнихОбъектов; Перем СоответствиеЗамены; Перем типСтрока; Перем СрабатываниеЗамен; Перем ВычислительРегВыражений; Перем ВычислительРегВыражений2; Перем мПлатформа; Перем шТег Экспорт; Перем шТегНеКлюч Экспорт; Перем шТегКлюч Экспорт; Перем шКонецТегаКлюч Экспорт; Перем шТип Экспорт; Функция РаспаковатьФайлАрхиваСинтаксПомощника(Знач ПутьКЭлементу, ПрефиксСсылки = "") Экспорт ФайлАрхива = ПолучитьАрхивСинтаксПомощникаПоПутиКЭлементу(ПутьКЭлементу,, Истина); Если ФайлАрхива = Неопределено Тогда Возврат Неопределено; КонецЕсли; #Если Сервер И Не Сервер Тогда мПлатформа = Обработки.ирПлатформа.Создать(); ФайлАрхива = Новый Файл; #КонецЕсли Если Лев(ПутьКЭлементу, 1) = "/" Тогда ПутьКЭлементу = Сред(ПутьКЭлементу, 2); КонецЕсли; МассивФрагментов = ирОбщий.СтрРазделитьЛкс(ПутьКЭлементу, "#"); ПутьКЭлементу = МассивФрагментов[0]; ФайлСтраницы = Новый Файл(ПутьКэшаСинтаксПомощника() + ПутьКЭлементу); Если Не ФайлСтраницы.Существует() Тогда ФайлРаспаковщикаZIP = мПлатформа.ПолучитьФайлРаспаковщикаZIP(Истина); #Если Сервер И Не Сервер Тогда ФайлРаспаковщикаZIP = Новый Файл; #КонецЕсли ПараметрыКоманды = " -o " + ФайлАрхива.Имя + " """ + ПутьКЭлементу + """"; Если ирКэш.ЛиПлатформаWindowsЛкс() Тогда // Так быстрее - 150мс ВК = ирКэш.ВКОбщаяЛкс(); ВК.Run(ФайлРаспаковщикаZIP.ПолноеИмя, ПараметрыКоманды, ПутьКэшаСинтаксПомощника(), Истина, Ложь); Иначе // Так медленнее - 200мс ирОбщий.ЗапуститьСкрытоеПриложениеИДождатьсяЗавершенияЛкс("""" + ФайлРаспаковщикаZIP.ПолноеИмя + """" + ПараметрыКоманды, ПутьКэшаСинтаксПомощника(), Истина); КонецЕсли; КонецЕсли; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ФайлСтраницы.ПолноеИмя); СодержаниеСтраницы = ТекстовыйДокумент.ПолучитьТекст(); Если Найти(СодержаниеСтраницы, "
") > 0 Тогда Маркер = ""; ИначеЕсли Найти(СодержаниеСтраницы, "") > 0 Тогда Маркер = ""; ИначеЕсли Найти(СодержаниеСтраницы, "") > 0 Тогда Маркер = ""; КонецЕсли; Если Маркер <> Неопределено Тогда ТегБазы = "]*>|?ul>"; Текст = ВычислительРегВыражений.Replace(Текст, Символы.ПС); ВычислительРегВыражений.Pattern = "(?:\r?\n){2,}"; Текст = ВычислительРегВыражений.Replace(Текст, Символы.ПС); // Удаление всех оставшихся тегов ВычислительРегВыражений.Pattern = "<[^>]+>"; Текст = ВычислительРегВыражений.Replace(Текст, ""); Текст = СокрЛП(ирОбщий.ДекодироватьТекстИзXMLЛкс(Текст)); Возврат Текст; КонецФункции Процедура СкорректироватьЭлементыСтруктуры(Структура) Экспорт Для Каждого ЭлементСтруктуры Из Структура Цикл Если ТипЗнч(ЭлементСтруктуры.Значение) <> типСтрока Тогда Продолжить; КонецЕсли; Если Найти(ЭлементСтруктуры.Значение, "<Имя регистра>") > 0 Тогда Если Найти(ЭлементСтруктуры.Значение, "РегистрСведений") > 0 Тогда СтрокаЗаменыИмениРегистра = "<Имя регистра сведений>"; ИначеЕсли Найти(ЭлементСтруктуры.Значение, "РегистрНакопления") > 0 Тогда СтрокаЗаменыИмениРегистра = "<Имя регистра накопления>"; КонецЕсли; Прервать; КонецЕсли; КонецЦикла; Для Каждого ЭлементСтруктуры Из Структура Цикл ЗначениеЭлемента = ЭлементСтруктуры.Значение; Если ТипЗнч(ЗначениеЭлемента) <> типСтрока Тогда Продолжить; КонецЕсли; Если Истина И Структура.Свойство("ЯзыкПрограммы") И Структура.ЯзыкПрограммы = 1 И ЗначениеЭлемента <> "Ссылка" Тогда ЗначениеЭлемента = СтрЗаменить(ЗначениеЭлемента, "Ссылка", ""); КонецЕсли; Если СтрокаЗаменыИмениРегистра <> Неопределено Тогда ЗначениеЭлемента = СтрЗаменить(ЗначениеЭлемента, "<Имя регистра>", СтрокаЗаменыИмениРегистра); КонецЕсли; // Выполняется много раз! Тяжелый цикл Для Каждого ЭлементЗамены Из СоответствиеЗамены Цикл //Если ВключитьАнализСрабатыванияЗамен Тогда // Если СрабатываниеЗамен[ЭлементЗамены.Ключ] = 0 И Найти(ЗначениеЭлемента, ЭлементЗамены.Ключ) > 0 Тогда // СрабатываниеЗамен[ЭлементЗамены.Ключ] = 1; // КонецЕсли; //КонецЕсли; ЗначениеЭлемента = СтрЗаменить(ЗначениеЭлемента, ЭлементЗамены.Ключ, ЭлементЗамены.Значение); КонецЦикла; Если Найти(ЗначениеЭлемента, "<") = 0 Тогда СтароеЗначениеЭлемента = ЗначениеЭлемента; Для Каждого СтрокаЗамены Из ЗаменыВнешнихОбъектов Цикл ЗначениеЭлемента = СтрЗаменить(ЗначениеЭлемента, СтрокаЗамены.Образец, СтрокаЗамены.Замена); Если СтароеЗначениеЭлемента <> ЗначениеЭлемента Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; Структура[ЭлементСтруктуры.Ключ] = ЗначениеЭлемента; КонецЦикла; КонецПроцедуры //ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла); //ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf"; //ирПортативный #Если Клиент Тогда //ирПортативный Контейнер = Новый Структура(); //ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер); //ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда //ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля); //ирПортативный ирПортативный.Открыть(); //ирПортативный КонецЕсли; //ирПортативный #Иначе //ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта //ирПортативный #КонецЕсли //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); //ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); мПлатформа = ирКэш.Получить(); #Если Сервер И Не Сервер Тогда мПлатформа = Обработки.ирПлатформа.Создать(); #КонецЕсли шТег = "(?:\s*<[^>]+>\s*)"; шТегНеКлюч = "(?:\s*<[^>""]+>\s*)"; шТегКлюч = "(?:\s*<(?:div|p|b)[^>]*>\s*)"; шКонецТегаКлюч = "(?:\s*(?:div|p|b)>\s*)"; шТип = "\s*(?:<[^>""]+""(?:[^""]*)"">)?((?:[" + мПлатформа.шБукваЦифра + "\-\s\:\&\/]+))(?:(?:<[^>""]+>)?(,|;))?"; СоответствиеЗамены = Новый Соответствие; // Баг платформы. Небрежность в файлах справки. //СоответствиеЗамены.Вставить("Командный интерфейс", "КомандныйИнтерфейс"); // Антибаг 8.2.15.289 http://partners.v8.1c.ru/forum/thread.jsp?id=999202#999202 СоответствиеЗамены.Вставить("<Имя журнала>", "<Имя журнала документов>"); //СоответствиеЗамены.Вставить("ПланВидовХарактристик", "ПланВидовХарактеристик"); //СоответствиеЗамены.Вставить("<Имя плана вида характеристики>", "<Имя плана видов характеристик>"); //СоответствиеЗамены.Вставить("<Имя плана вида характеристик>", "<Имя плана видов характеристик>"); //СоответствиеЗамены.Вставить("<Имя плана видов характеристики>", "<Имя плана видов характеристик>"); //СоответствиеЗамены.Вставить("<Имя предопределенного видов характеристики>", "<Имя предопределенного вида характеристик>"); //СоответствиеЗамены.Вставить("<Имя вида расчета>", "<Имя плана видов расчета>"); //СоответствиеЗамены.Вставить("<Измерения>", "<Имя измерения>"); //СоответствиеЗамены.Вставить("<Измерение>", "<Имя измерения>"); //СоответствиеЗамены.Вставить("<Реквизиты>", "<Имя реквизита>"); //СоответствиеЗамены.Вставить("<Ресурсы>", "<Имя ресурса>"); СоответствиеЗамены.Вставить("<Имя критерия>", "<Имя критерия отбора>"); СоответствиеЗамены.Вставить("<Имя WS-ссылки>", "<Имя WS-Ссылки>"); //СоответствиеЗамены.Вставить("<Имя WSСсылки>", "<Имя WS-Ссылки>"); //СоответствиеЗамены.Вставить("<ИмяКонстанты>", "<Имя константы>"); //СоответствиеЗамены.Вставить("<ИмяРесурса>", "<Имя ресурса>"); //СоответствиеЗамены.Вставить("<Имя Ресурса>", "<Имя ресурса>"); СоответствиеЗамены.Вставить("<Имя значения>", "<Имя значения перечисления>"); //СоответствиеЗамены.Вставить("<НомерСубконто>", "<Номер субконто>"); СоответствиеЗамены.Вставить("<ИмяПеречисления>", "<Имя перечисления>"); //СоответствиеЗамены.Вставить("<имя метода>", "<Имя метода>"); //СоответствиеЗамены.Вставить("<имя свойства>", "<Имя свойства>"); СоответствиеЗамены.Вставить("<Имя внешнего источника данных>", "<Имя внешнего источника>"); // Слишком общий шаблон замены! // Исправлено в 8.1.12 //СоответствиеЗамены.Вставить("<Имя>", "<Имя константы>"); ЗаменыВнешнихОбъектов = Новый ТаблицаЗначений; ЗаменыВнешнихОбъектов.Колонки.Добавить("Образец"); ЗаменыВнешнихОбъектов.Колонки.Добавить("Замена"); СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить(); СтрокаЗамены.Образец = "ВнешнийОтчетТабличнаяЧасть"; СтрокаЗамены.Замена = "ВнешнийОтчетТабличнаяЧасть.<Имя внешнего отчета>.<Имя табличной части>"; СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить(); СтрокаЗамены.Образец = "ВнешняяОбработкаТабличнаяЧасть"; СтрокаЗамены.Замена = "ВнешняяОбработкаТабличнаяЧасть.<Имя внешней обработки>.<Имя табличной части>"; СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить(); СтрокаЗамены.Образец = "ВнешнийОтчет"; СтрокаЗамены.Замена = "ВнешнийОтчетОбъект.<Имя внешнего отчета>"; СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить(); СтрокаЗамены.Образец = "ВнешняяОбработка"; СтрокаЗамены.Замена = "ВнешняяОбработкаОбъект.<Имя внешней обработки>"; СтрокаЗамены = ЗаменыВнешнихОбъектов.Добавить(); СтрокаЗамены.Образец = "ТочкаМаршрутаБизнесПроцессаСсылка"; СтрокаЗамены.Замена = "ТочкаМаршрутаБизнесПроцессаСсылка.<Имя бизнес-процесса>"; типСтрока = Тип("Строка"); ВычислительРегВыражений = ирОбщий.НовыйВычислительРегВыражений(); ВычислительРегВыражений2 = ирОбщий.НовыйВычислительРегВыражений();