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