по третьей функции:Код
Функция ПолучитьФормуЛкс(ПолноеИмяФормы, Параметры = Неопределено, Владелец = Неопределено, Уникальность = Неопределено, Окно = Неопределено, ТолькоВнешниеФормы = Ложь, Знач НачатьОтслеживание = Истина) Экспорт
ПроверитьФормыСсылокЛкс();
//Начлао
//НПолноеИмяФормы = НРег(ПолноеИмяФормы);
НПолноеИмяФормы = (ПолноеИмяФормы);
//Конец
Фрагменты = ирОбщий.СтрРазделитьЛкс(НПолноеИмяФормы, "::");
Если Фрагменты.Количество() > 2 Тогда
// Внешняя обработка/отчет
Менеджер = ирОбщий.МенеджерВнешнегоОбъектаЛкс(Фрагменты[1]);
ИмяФормы = ирОбщий.СтрРазделитьЛкс(Фрагменты[2])[2];
Если Не ЗначениеЗаполнено(ИмяФормы) Тогда
ОсновнаяФорма = Менеджер.Метаданные().ОсновнаяФорма;
Если ОсновнаяФорма <> Неопределено Тогда
ИмяФормы = ОсновнаяФорма.Имя;
КонецЕсли;
КонецЕсли;
Результат = Менеджер.ПолучитьФорму(ИмяФормы, Владелец, Уникальность);
Иначе
Фрагменты = ирОбщий.СтрРазделитьЛкс(НПолноеИмяФормы);
#Если Сервер И Не Сервер Тогда
Фрагменты = Новый Массив;
#КонецЕсли
Если Истина
И Фрагменты.Количество() = 4
//Начало
//И Фрагменты[2] = "форма"
И НРег(Фрагменты[2]) = "форма"
//конец
Тогда
ИмяФормы = Фрагменты[3];
Иначе
ИмяФормы = Неопределено;
КонецЕсли;
КонецЕсли;
Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда
#Если Сервер И Не Сервер Тогда
// Такой прием нужен для обхода ошибка компиляции в портативном режиме
// http://www.hostedredmine.com/issues/883626
Если Истина
И (Ложь
//Начало
//Или Фрагменты[0] = "обработка"
//Или Фрагменты[0] = "отчет")
Или НРег(Фрагменты[0]) = "обработка"
Или Нрег(Фрагменты[0]) = "отчет")
//Конец
И Фрагменты.Количество() > 2
//начало
//И Найти(Фрагменты[1], "ир") = 1
И Найти(НРег(Фрагменты[1]), "ир") = 1
//конец
И Не ирОбщий.СтрокиРавныЛкс(Фрагменты[1], Метаданные.Обработки.ирДинамическийСписок.Имя)
Тогда
Если Не ТолькоВнешниеФормы Тогда
ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(Фрагменты[0] + "." + Фрагменты[1]);
#Если Сервер И Не Сервер Тогда
ОбъектМД = Метаданные.Обработки.ирАнализДанных;
#КонецЕсли
КонецЕсли;
Если ОбъектМД = Неопределено Тогда
ВызватьИсключение "Не найден объект метаданных " + ПолноеИмяФормы;
КонецЕсли;
Если ОбъектМД = Метаданные.Обработки.ирПлатформа Тогда
Менеджер = ирКэш.Получить(); // Так управляемые формы нельзя получать
Иначе
Менеджер = Новый (ирОбщий.ПеревестиСтроку(Фрагменты[0]) + ирОбщий.ПеревестиСтроку("Менеджер") + "." + Фрагменты[1]);
КонецЕсли;
Если Не ЗначениеЗаполнено(ИмяФормы) И ОбъектМД.ОсновнаяФорма <> Неопределено Тогда
// Нужно для отчетов. Иначе будет ошибка "неизвестный идентификатор формы"
ИмяФормы = ОбъектМД.ОсновнаяФорма.Имя;
ПолноеИмяФормы = ПолноеИмяФормы + "." + ИмяФормы;
КонецЕсли;
Результат = Менеджер.ПолучитьФорму(ИмяФормы, Владелец, Уникальность);
КонецЕсли;
Если Результат = Неопределено Тогда
// Форма не инструмента или управляемая форма инструмента или форма отчета подсистемы при запрещенном использовании обычных форм
Результат = ПолучитьФорму(ПолноеИмяФормы, Параметры, Владелец, Уникальность, Окно);
КонецЕсли;
//Если Найти(ПолноеИмяФормы, "Обработка.ирПлатформа.") = 1 Тогда
// Попытка
// ЭтоЗапрещено = Результат.ЭтотОбъект.Метаданные().ПолноеИмя() = ирОбщий.ПеревестиСтроку("Обработка") + ".ирПлатформа";
// Исключение
// ЭтоЗапрещено = Ложь;
// КонецПопытки;
// Если ЭтоЗапрещено Тогда
// ирОбщий.СообщитьЛкс("Создан лишний экземпляр обработки ирПлатформа");
// КонецЕсли;
//КонецЕсли;
#КонецЕсли
Иначе
Если Не ТолькоВнешниеФормы Тогда
ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(Фрагменты[0] + "." + Фрагменты[1]);
КонецЕсли;
Если ОбъектМД = Неопределено Тогда
//начало
//Если Фрагменты[1] = "ирпортативный" Тогда
Если НРег(Фрагменты[1]) = "ирпортативный" Тогда
//конец
Результат = ирПортативный.ПолучитьФорму(ИмяФормы, Владелец, Уникальность);
Иначе
ТипМетаданных = Фрагменты[0];
Менеджер = ирПортативный.ПолучитьМенеджерТипаМетаданныхЛкс(ТипМетаданных);
ПолноеИмяФайла = ирПортативный.ПолноеИмяФайлаПортативногоОбъектаМетаданныхЛкс(Фрагменты[1], ТипМетаданных);
Результат = Менеджер.ПолучитьФорму(ПолноеИмяФайла, ИмяФормы, Владелец, Уникальность);
КонецЕсли;
Иначе
Результат = ирПортативный.ПолучитьФормуЛкс(ПолноеИмяФормы, Параметры, Владелец, Уникальность, Окно);
КонецЕсли;
КонецЕсли;
Если ТипЗнч(Результат) = Тип("Форма") Тогда
ирОбщий.СлужебныеДанныеФормыЛкс(Результат).Вставить("ИмяФормы", ПолноеИмяФормы);
КонецЕсли;
Если Результат <> Неопределено И НачатьОтслеживание Тогда
НачатьОтслеживаниеФормыЛкс(Результат);
КонецЕсли;
Возврат Результат;
КонецФункции
тут в начале отказ от использования нижнего регистра, так как в линуксе регистр имеет значение.
Далее по коду, где идет сравнение со строками в нижнем регистре, фрагменты приводятся к нижнему регистру только для сравнения.