Skip to content

Instantly share code, notes, and snippets.

@Stepa86
Created April 24, 2017 06:11
Show Gist options
  • Save Stepa86/210386940e7f45a25a69fe28028bd56a to your computer and use it in GitHub Desktop.
Save Stepa86/210386940e7f45a25a69fe28028bd56a to your computer and use it in GitHub Desktop.
Пример package-loader.os для отладки подключений библиотек
Перем ВыводитьЛог;
Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ)
ВыводитьЛог = Ложь;
ФайлМанифеста = Новый Файл(ОбъединитьПути(Путь, "lib.config"));
Если ФайлМанифеста.Существует() Тогда
СтандартнаяОбработка = Ложь;
ОбработатьМанифест(ФайлМанифеста.ПолноеИмя, Путь, Отказ);
Иначе
ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ);
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьМанифест(Знач Файл, Знач Путь, Отказ)
_Сообщить( "Подключаю манифест " + Путь, СтатусСообщения.Attention);
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(Файл);
Чтение.ПерейтиКСодержимому();
Если Чтение.ЛокальноеИмя <> "package-def" Тогда
Отказ = Истина;
Чтение.Закрыть();
Возврат;
КонецЕсли;
Пока Чтение.Прочитать() и Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл
Если Чтение.ЛокальноеИмя = "class" Тогда
ФайлКласса = Новый Файл(Путь + "/" + Чтение.ЗначениеАтрибута("file"));
Если ФайлКласса.Существует() и ФайлКласса.ЭтоФайл() Тогда
Идентификатор = Чтение.ЗначениеАтрибута("name");
Если Не ПустаяСтрока(Идентификатор) Тогда
_Сообщить( " Подключаю Класс " + Идентификатор + " - " + ФайлКласса.ПолноеИмя, СтатусСообщения.Ordinary);
ДобавитьКласс(ФайлКласса.ПолноеИмя, Идентификатор);
КонецЕсли;
Иначе
ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте";
КонецЕсли;
Чтение.Прочитать(); // в конец элемента
КонецЕсли;
Если Чтение.ЛокальноеИмя = "module" Тогда
ФайлКласса = Новый Файл(Путь + "/" + Чтение.ЗначениеАтрибута("file"));
Если ФайлКласса.Существует() и ФайлКласса.ЭтоФайл() Тогда
Идентификатор = Чтение.ЗначениеАтрибута("name");
Если Не ПустаяСтрока(Идентификатор) Тогда
_Сообщить( " Подключаю Модуль " + Идентификатор + " - " + ФайлКласса.ПолноеИмя, СтатусСообщения.Ordinary);
ДобавитьМодуль(ФайлКласса.ПолноеИмя, Идентификатор);
КонецЕсли;
Иначе
ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте";
КонецЕсли;
Чтение.Прочитать(); // в конец элемента
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
КонецПроцедуры
Процедура ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ)
_Сообщить( "Подключаю по соглашению " + Путь, СтатусСообщения.Attention);
КаталогКлассов = Новый Файл(ОбъединитьПути(Путь, "Классы"));
КаталогМодулей = Новый Файл(ОбъединитьПути(Путь, "Модули"));
Если КаталогКлассов.Существует() Тогда
Файлы = НайтиФайлы(КаталогКлассов.ПолноеИмя, "*.os");
Для Каждого Файл Из Файлы Цикл
_Сообщить( " Подключаю Класс " + Файл.ИмяБезРасширения + " - " + Файл.ПолноеИмя, СтатусСообщения.Ordinary);
СтандартнаяОбработка = Ложь;
ДобавитьКласс(Файл.ПолноеИмя, Файл.ИмяБезРасширения);
КонецЦикла;
КонецЕсли;
Если КаталогМодулей.Существует() Тогда
Файлы = НайтиФайлы(КаталогМодулей.ПолноеИмя, "*.os");
Для Каждого Файл Из Файлы Цикл
СтандартнаяОбработка = Ложь;
_Сообщить( " Подключаю Модуль " + Файл.ИмяБезРасширения + " - " + Файл.ПолноеИмя, СтатусСообщения.Ordinary);
ДобавитьМодуль(Файл.ПолноеИмя, Файл.ИмяБезРасширения);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура _Сообщить( Знач пТекст, Знач пСтатус = Неопределено)
Если ВыводитьЛог Тогда
Сообщить( пТекст, пСтатус );
КонецЕсли;
КонецПроцедуры
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment