1- // Пояснения по переменным даны в конце модуля
1+ // Пояснения по переменным даны в конце модуля
22Перем ПоказатьСообщенияЗагрузки ;
33Перем ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей ;
44
5+ Перем КэшМодулей ;
6+
57Процедура ПриЗагрузкеБиблиотеки (Путь , СтандартнаяОбработка , Отказ )
68 Вывести("
79 |ПриЗагрузкеБиблиотеки " + Путь);
6668 Если Не ПустаяСтрока (Идентификатор) Тогда
6769 Вывести(СтрШаблон (" модуль %1, файл %2" , Идентификатор, ФайлКласса.ПолноеИмя));
6870 Попытка
69- ДобавитьМодуль (ФайлКласса.ПолноеИмя, Идентификатор);
71+ ДобавитьМодульЕслиРанееНеДобавляли (ФайлКласса.ПолноеИмя, Идентификатор);
7072 Исключение
7173 Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда
7274 ВызватьИсключение ;
145147 Вывести(СтрШаблон (" модуль (по соглашению) %1, файл %2" , Файл.ИмяБезРасширения, Файл.ПолноеИмя));
146148 СтандартнаяОбработка = Ложь ;
147149 Попытка
148- ДобавитьМодуль (Файл.ПолноеИмя, Файл.ИмяБезРасширения);
150+ ДобавитьМодульЕслиРанееНеДобавляли (Файл.ПолноеИмя, Файл.ИмяБезРасширения);
149151 Исключение
150152 Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда
151153 ВызватьИсключение ;
187189 КонецЕсли ;
188190КонецПроцедуры
189191
192+ Процедура ДобавитьМодульЕслиРанееНеДобавляли (ПутьФайла , ИмяМодуля )
193+ Вывести("Добавляю модуль, если ранее не добавляли " + ИмяМодуля);
194+
195+ МодульУжеЕсть = КэшМодулей.Найти(ИмяМодуля) <> Неопределено ;
196+ Если Не МодульУжеЕсть Тогда
197+
198+ Вывести("Добавляю модуль, т.к. он не найден - " + ИмяМодуля);
199+ ДобавитьМодуль(ПутьФайла, ИмяМодуля);
200+ КэшМодулей.Добавить(ИмяМодуля);
201+ Иначе
202+ Вывести("Пропускаю загрузку модуля " + ИмяМодуля);
203+
204+ КонецЕсли ;
205+ КонецПроцедуры
206+
190207Процедура Вывести (Знач Сообщение )
191208 Если ПоказатьСообщенияЗагрузки Тогда
192209 Сообщить (Сообщение);
225242 "OSLIB_LOADER_DUPLICATES" , Ложь );
226243
227244// для установки других значений переменных среды и запуска скриптов можно юзать следующую командную строку
228- // (set OSLIB_LOADER_TRACE=1) && (oscript .\tasks\test.os)
245+ // (set OSLIB_LOADER_TRACE=1) && (oscript .\tasks\test.os)
246+
247+ КэшМодулей = Новый Массив;
0 commit comments