diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" index 68f11f1..0a7263f 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" @@ -1,18 +1,40 @@ #Использовать asserts +#Использовать collectionos Перем _ПрименяетсяТолькоНа; -Функция ПрименяетсяТолькоНа() Экспорт - Возврат _ПрименяетсяТолькоНа; +Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт + + НапильникМожетПрименяться = Ложь; + + Если _ПрименяетсяТолькоНа.Количество() = 0 Тогда + НапильникМожетПрименяться = Истина; + ИначеЕсли _ПрименяетсяТолькоНа.Содержит(ОпределениеЖелудя.Имя()) Тогда + НапильникМожетПрименяться = Истина; + Иначе + + Для Каждого ПрозвищеЖелудя Из ОпределениеЖелудя.Прозвища() Цикл + Если _ПрименяетсяТолькоНа.Содержит(ПрозвищеЖелудя) Тогда + НапильникМожетПрименяться = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат НапильникМожетПрименяться; + КонецФункции &Аннотация("Напильник") &Прозвище("Напильник") Процедура ПриСозданииОбъекта(Значение = "", &Повторяемый ПрименяетсяТолькоНа = Неопределено) + _ПрименяетсяТолькоНа = Новый МножествоСоответствие(); Для Каждого МестоПрименения Из ПрименяетсяТолькоНа Цикл Ожидаем.Что(МестоПрименения, "Ограничение применения напильника должно быть задано строкой").ИмеетТип("Строка"); + + _ПрименяетсяТолькоНа.Добавить(МестоПрименения); КонецЦикла; - _ПрименяетсяТолькоНа = ПрименяетсяТолькоНа; КонецПроцедуры diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" index 06de0aa..af09401 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" @@ -4,7 +4,7 @@ Перем _ПрименятьТолькоНапильники; Перем _НеПрименятьНапильники; -Функция НапильникПрименяется(ИмяНапильника) Экспорт +Функция НапильникМожетПрименяться(ИмяНапильника) Экспорт Если _ОтключитьВсеНапильники Тогда Возврат Ложь; diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" index 9e5a47c..1eefdbd 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" @@ -39,6 +39,9 @@ // Массив из ОпределениеЖелудя - Список инициализируемых в данный момент напильников. Перем ИнициализируемыеНапильники; +// Лог - Логгер ФабрикиЖелудей. +Перем Лог; + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -606,13 +609,16 @@ Функция ОпределитьПрименяемыеНапильники(ОпределениеЖелудя) - ПрименяемыеНапильники = КэшПрименяемыхНапильников.Получить(ОпределениеЖелудя.Имя()); + ИмяЖелудя = ОпределениеЖелудя.Имя(); + + ПрименяемыеНапильники = КэшПрименяемыхНапильников.Получить(ИмяЖелудя); Если ПрименяемыеНапильники <> Неопределено Тогда Возврат ПрименяемыеНапильники; КонецЕсли; + Лог.Отладка("Кэш применяемых напильников для желудя %1 пуст. Выполняется расчет...", ИмяЖелудя); + ПрименяемыеНапильники = Новый Массив; - ПрозвищаЖелудя = ОпределениеЖелудя.Прозвища(); АннотацииЗавязи = ОпределениеЖелудя.Завязь().ДанныеМетода().Аннотации; АннотацияОсобоеОбращение = РаботаСАннотациями.НайтиАннотацию(АннотацииЗавязи, "ОсобоеОбращение"); @@ -623,28 +629,28 @@ Для Каждого ОпределениеНапильника Из ОпределенияНапильников Цикл + ИмяНапильника = ОпределениеНапильника.Имя(); + Лог.Отладка("Проверка применения напильника %1", ИмяНапильника); + КорневаяАннотация = ОпределениеНапильника.КорневаяАннотация(); - ПрименяетсяТолькоНа = КорневаяАннотация.ПрименяетсяТолькоНа(); - НапильникМожетПрименяться = Ложь; + НапильникМожетПрименяться = КорневаяАннотация.МожетПрименятьсяНа(ОпределениеЖелудя); - Если ПрименяетсяТолькоНа.Количество() = 0 Тогда - НапильникМожетПрименяться = Истина; - ИначеЕсли ПрименяетсяТолькоНа.Найти(ОпределениеЖелудя.Имя()) <> Неопределено Тогда - НапильникМожетПрименяться = Истина; - Иначе - - Для Каждого ПрозвищеЖелудя Из ПрозвищаЖелудя Цикл - Если ПрименяетсяТолькоНа.Найти(ПрозвищеЖелудя) <> Неопределено Тогда - НапильникМожетПрименяться = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - КонецЕсли; + Лог.Отладка("Напильник %1 может применяться на желуде %2: %3", + ИмяНапильника, + ИмяЖелудя, + НапильникМожетПрименяться + ); Если НапильникМожетПрименяться И ОбъектАннотацииОсобоеОбращение <> Неопределено Тогда - НапильникМожетПрименяться = ОбъектАннотацииОсобоеОбращение.НапильникПрименяется(ОпределениеНапильника.Имя()); + НапильникМожетПрименяться = ОбъектАннотацииОсобоеОбращение.НапильникМожетПрименяться(ИмяНапильника); + + Лог.Отладка( + "Желудь %1 требует особого обращения. Напильник %2 применяется: %3", + ИмяЖелудя, + ИмяНапильника, + НапильникМожетПрименяться + ); КонецЕсли; Если НапильникМожетПрименяться Тогда @@ -653,7 +659,7 @@ КонецЦикла; - КэшПрименяемыхНапильников.Вставить(ОпределениеЖелудя.Имя(), ПрименяемыеНапильники); + КэшПрименяемыхНапильников.Вставить(ИмяЖелудя, ПрименяемыеНапильники); Возврат ПрименяемыеНапильники; @@ -678,6 +684,7 @@ ОпределенияНапильников = Новый Массив(); КэшПрименяемыхНапильников = Новый Соответствие(); + Лог = Логирование.ПолучитьЛог("oscript.lib.autumn.ФабрикаЖелудей"); КонецПроцедуры #КонецОбласти