-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Возможность ограничения применения напильников на желуде #89
Changes from 5 commits
77deecd
095d509
4e3243a
b6d9f67
14e2fca
1e47b09
6c9e2f9
e20022d
bf19afb
a4cf36a
97da09e
0107502
75c6b08
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,18 @@ | ||
#Использовать asserts | ||
|
||
Перем _ПрименяетсяТолькоНа; | ||
|
||
Функция ПрименяетсяТолькоНа() Экспорт | ||
Возврат _ПрименяетсяТолькоНа; | ||
КонецФункции | ||
|
||
&Аннотация("Напильник") | ||
&Прозвище("Напильник") | ||
Процедура ПриСозданииОбъекта(Значение = "") | ||
Процедура ПриСозданииОбъекта(Значение = "", &Повторяемый ПрименяетсяТолькоНа = Неопределено) | ||
|
||
Для Каждого МестоПрименения Из ПрименяетсяТолькоНа Цикл | ||
Ожидаем.Что(МестоПрименения, "Ограничение применения напильника должно быть задано строкой").ИмеетТип("Строка"); | ||
КонецЦикла; | ||
|
||
_ПрименяетсяТолькоНа = ПрименяетсяТолькоНа; | ||
КонецПроцедуры |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
#Использовать asserts | ||
|
||
Перем _ОтключитьВсеНапильники; | ||
Перем _ПрименятьТолькоНапильники; | ||
Перем _НеПрименятьНапильники; | ||
Comment on lines
+3
to
+5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Добавьте описания переменных |
||
|
||
Функция НапильникПрименяется(ИмяНапильника) Экспорт | ||
|
||
Если _ОтключитьВсеНапильники Тогда | ||
Возврат Ложь; | ||
КонецЕсли; | ||
|
||
Если _ПрименятьТолькоНапильники.Количество() > 0 Тогда | ||
Возврат _ПрименятьТолькоНапильники.Найти(ИмяНапильника) <> Неопределено; | ||
Иначе | ||
Возврат _НеПрименятьНапильники.Найти(ИмяНапильника) = Неопределено; | ||
КонецЕсли; | ||
|
||
КонецФункции | ||
|
||
&Аннотация("ОсобоеОбращение") | ||
Процедура ПриСозданииОбъекта( | ||
ОтключитьВсеНапильники = Ложь, | ||
&Повторяемый ПрименятьТолькоНапильник = Неопределено, | ||
&Повторяемый НеПрименятьНапильник = Неопределено | ||
) | ||
|
||
Для Каждого МестоПрименения Из ПрименятьТолькоНапильник Цикл | ||
Ожидаем.Что(МестоПрименения, "Ограничение ""только"" применения напильника должно быть задано строкой") | ||
.ИмеетТип("Строка"); | ||
КонецЦикла; | ||
|
||
Для Каждого МестоПрименения Из НеПрименятьНапильник Цикл | ||
Ожидаем.Что(МестоПрименения, "Ограничение ""не"" применения напильника должно быть задано строкой") | ||
.ИмеетТип("Строка"); | ||
КонецЦикла; | ||
|
||
Если ОтключитьВсеНапильники И ПрименятьТолькоНапильник.Количество() > 0 Тогда | ||
ВызватьИсключение "Нельзя одновременно отключать все напильники и задавать ограничения ""только"""; | ||
КонецЕсли; | ||
|
||
Если ОтключитьВсеНапильники И НеПрименятьНапильник.Количество() > 0 Тогда | ||
ВызватьИсключение "Нельзя одновременно отключать все напильники и задавать ограничения ""не"""; | ||
КонецЕсли; | ||
|
||
Если ПрименятьТолькоНапильник.Количество() > 0 И НеПрименятьНапильник.Количество() > 0 Тогда | ||
ВызватьИсключение "Нельзя одновременно задавать ограничения ""только"" и ""не"""; | ||
КонецЕсли; | ||
|
||
_ОтключитьВсеНапильники = ОтключитьВсеНапильники; | ||
_ПрименятьТолькоНапильники = ПрименятьТолькоНапильник; | ||
_НеПрименятьНапильники = НеПрименятьНапильник; | ||
|
||
КонецПроцедуры |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,9 +27,15 @@ | |
|
||
// Соответствие, в котором хранятся все определения желудей, являющихся напильниками. | ||
// * Ключ - Строка - имя желудя. | ||
// * Значение - ОпределениеЖелудя - определение желудя. | ||
// * Значение - ОпределениеЖелудя - определение напильника. | ||
Перем ОпределенияНапильниковПоИмени; | ||
|
||
// Соответствие - Соответствие, в котором хранится список применяемых к конкретному | ||
// желудю напильников. | ||
// * Ключ - Строка - имя желудя. | ||
// * Значение - ОпределениеЖелудя - определение напильника. | ||
Перем КэшПрименяемыхНапильников; | ||
|
||
// Массив из ОпределениеЖелудя - Список инициализируемых в данный момент напильников. | ||
Перем ИнициализируемыеНапильники; | ||
|
||
|
@@ -106,20 +112,22 @@ | |
|
||
Функция ДобавитьДуб(ТипДуба) Экспорт | ||
|
||
ИмяКорневойАннотации = "Завязь"; | ||
ОпределениеЖелудя = ДобавитьЖителяЛеса(ТипДуба, "", "Дуб"); | ||
МетодыЗавязи = ОпределениеЖелудя.НайтиМетодыСАннотациями("Завязь"); | ||
МетодыЗавязи = ОпределениеЖелудя.НайтиМетодыСАннотациями(ИмяКорневойАннотации); | ||
|
||
Для Каждого МетодЗавязи Из МетодыЗавязи Цикл | ||
|
||
ИмяЖелудя = ПрочитатьИмяЖелудя(МетодЗавязи.Аннотации, "Завязь", МетодЗавязи.Имя); | ||
ИмяЖелудя = ПрочитатьИмяЖелудя(МетодЗавязи.Аннотации, ИмяКорневойАннотации, МетодЗавязи.Имя); | ||
ТипЖелудя = ПрочитатьТипЖелудя(МетодЗавязи, МетодЗавязи.Аннотации); | ||
|
||
ОпределениеЗавязи = СоздатьОпределениеЖелудя( | ||
ИмяЖелудя, | ||
ТипЖелудя, | ||
ТипДуба, | ||
МетодЗавязи, | ||
МетодЗавязи.Аннотации | ||
МетодЗавязи.Аннотации, | ||
ИмяКорневойАннотации | ||
Comment on lines
+118
to
+133
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Метод |
||
); | ||
СохранитьОпределениеЖелудя(ОпределениеЗавязи); | ||
|
||
|
@@ -145,7 +153,7 @@ | |
Возврат ОпределениеНапильника; | ||
КонецФункции | ||
|
||
Функция НайтиЖелудь(ИмяЖелудя, ПрилепляемыеЧастицы) Экспорт | ||
|
||
ОпределениеЖелудя = Поделка.ПолучитьОпределениеЖелудя(ИмяЖелудя); | ||
|
||
|
@@ -208,7 +216,10 @@ | |
ИнициализируемыеНапильники.Удалить(ИндексНапильника); | ||
Иначе | ||
Если НЕ ОпределениеЖелудя.Спецификация() = СостоянияПриложения.Инициализация() Тогда | ||
Для Каждого ОпределениеНапильника Из ОпределенияНапильников Цикл | ||
|
||
ПрименяемыеНапильники = ОпределитьПрименяемыеНапильники(ОпределениеЖелудя); | ||
|
||
Для Каждого ОпределениеНапильника Из ПрименяемыеНапильники Цикл | ||
nixel2007 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Если ОпределениеНапильника.Имя() = ОпределениеЖелудя.Имя() Тогда | ||
Продолжить; | ||
|
@@ -301,7 +312,8 @@ | |
ТипЖителяЛеса, | ||
ТипЖителяЛеса, | ||
Конструктор, | ||
Аннотации | ||
Аннотации, | ||
АннотацияНадКонструктором | ||
); | ||
СохранитьОпределениеЖелудя(ОпределениеЖелудя); | ||
|
||
|
@@ -313,7 +325,14 @@ | |
|
||
КонецФункции | ||
|
||
Функция СоздатьОпределениеЖелудя(ИмяЖелудя, ТипЖелудя, ТипВладельцаСвойств, Конструктор, Аннотации) | ||
Функция СоздатьОпределениеЖелудя( | ||
ИмяЖелудя, | ||
ТипЖелудя, | ||
ТипВладельцаСвойств, | ||
Конструктор, | ||
Аннотации, | ||
ИмяКорневойАннотации | ||
) | ||
|
||
Завязь = СоздатьЗавязь(ТипВладельцаСвойств, Конструктор); | ||
|
||
|
@@ -323,6 +342,7 @@ | |
Порядок = ПрочитатьПорядок(Аннотации); | ||
Верховный = ПрочитатьПризнакВерховногоЖелудя(Аннотации); | ||
Спецификация = ПрочитатьСпецификацию(Аннотации); | ||
КорневаяАннотация = ПрочитатьКорневуюАннотацию(Аннотации, ИмяКорневойАннотации); | ||
|
||
// TODO: Унести в Приемку &Дуб | ||
// Если Спецификация = СостоянияПриложения.Инициализация() | ||
|
@@ -345,13 +365,16 @@ | |
Прозвища, | ||
Порядок, | ||
Верховный, | ||
Спецификация | ||
Спецификация, | ||
КорневаяАннотация | ||
); | ||
|
||
Возврат ОпределениеЖелудя; | ||
|
||
КонецФункции | ||
|
||
#Область СозданиеЗавязи | ||
|
||
Функция СоздатьЗавязь(ТипВладельцаСвойств, Конструктор) | ||
|
||
Если НРег(Конструктор.Имя) = НРег("ПриСозданииОбъекта") | ||
|
@@ -385,6 +408,10 @@ | |
|
||
КонецФункции | ||
|
||
#КонецОбласти | ||
|
||
#Область ЧтениеПараметровЖелудя | ||
|
||
Функция ПрочитатьИмяЖелудя(Аннотации, АннотацияНадМетодом, ЗначениеПоУмолчанию) | ||
|
||
Аннотация = РаботаСАннотациями.НайтиАннотацию(Аннотации, АннотацияНадМетодом); | ||
|
@@ -503,6 +530,19 @@ | |
|
||
КонецФункции | ||
|
||
Функция ПрочитатьКорневуюАннотацию(Аннотации, ИмяКорневойАннотации) | ||
|
||
КорневаяАннотация = РаботаСАннотациями.НайтиАннотацию(Аннотации, ИмяКорневойАннотации); | ||
ОпределениеАннотации = Поделка.ПолучитьОпределениеАннотации(КорневаяАннотация.Имя); | ||
|
||
ОбъектАннотации = ОпределениеАннотации.СоздатьОбъектАннотации(КорневаяАннотация); | ||
|
||
Возврат ОбъектАннотации; | ||
|
||
КонецФункции | ||
|
||
#КонецОбласти | ||
|
||
Процедура ДобавитьОпределениеНапильника(ОпределениеНапильника, Системный = Ложь) | ||
|
||
Порядок = ОпределениеНапильника.Порядок(); | ||
|
@@ -525,6 +565,7 @@ | |
|
||
// Реинициализация сортированного списка напильников для возможности их использования в заготовках. | ||
ОпределенияНапильников = ПолучитьСписокОпределенийЖелудей("Напильник"); | ||
КэшПрименяемыхНапильников.Очистить(); | ||
nixel2007 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
ОпределенияНапильниковПоИмени.Вставить(ОпределениеНапильника.Имя(), ОпределениеНапильника); | ||
|
||
КонецПроцедуры | ||
|
@@ -563,6 +604,61 @@ | |
|
||
КонецПроцедуры | ||
|
||
Функция ОпределитьПрименяемыеНапильники(ОпределениеЖелудя) | ||
|
||
ПрименяемыеНапильники = КэшПрименяемыхНапильников.Получить(ОпределениеЖелудя.Имя()); | ||
Если ПрименяемыеНапильники <> Неопределено Тогда | ||
Возврат ПрименяемыеНапильники; | ||
КонецЕсли; | ||
|
||
ПрименяемыеНапильники = Новый Массив; | ||
ПрозвищаЖелудя = ОпределениеЖелудя.Прозвища(); | ||
|
||
АннотацииЗавязи = ОпределениеЖелудя.Завязь().ДанныеМетода().Аннотации; | ||
АннотацияОсобоеОбращение = РаботаСАннотациями.НайтиАннотацию(АннотацииЗавязи, "ОсобоеОбращение"); | ||
ОпределениеАннотацииОсобоеОбращение = Поделка.ПолучитьОпределениеАннотации("ОсобоеОбращение"); | ||
Если АннотацияОсобоеОбращение <> Неопределено Тогда | ||
ОбъектАннотацииОсобоеОбращение = ОпределениеАннотацииОсобоеОбращение.СоздатьОбъектАннотации(АннотацияОсобоеОбращение); | ||
КонецЕсли; | ||
|
||
Для Каждого ОпределениеНапильника Из ОпределенияНапильников Цикл | ||
|
||
КорневаяАннотация = ОпределениеНапильника.КорневаяАннотация(); | ||
ПрименяетсяТолькоНа = КорневаяАннотация.ПрименяетсяТолькоНа(); | ||
|
||
НапильникМожетПрименяться = Ложь; | ||
|
||
Если ПрименяетсяТолькоНа.Количество() = 0 Тогда | ||
НапильникМожетПрименяться = Истина; | ||
ИначеЕсли ПрименяетсяТолькоНа.Найти(ОпределениеЖелудя.Имя()) <> Неопределено Тогда | ||
НапильникМожетПрименяться = Истина; | ||
Иначе | ||
|
||
Для Каждого ПрозвищеЖелудя Из ПрозвищаЖелудя Цикл | ||
Если ПрименяетсяТолькоНа.Найти(ПрозвищеЖелудя) <> Неопределено Тогда | ||
НапильникМожетПрименяться = Истина; | ||
Прервать; | ||
КонецЕсли; | ||
КонецЦикла; | ||
|
||
КонецЕсли; | ||
|
||
Если НапильникМожетПрименяться И ОбъектАннотацииОсобоеОбращение <> Неопределено Тогда | ||
НапильникМожетПрименяться = ОбъектАннотацииОсобоеОбращение.НапильникПрименяется(ОпределениеНапильника.Имя()); | ||
КонецЕсли; | ||
|
||
Если НапильникМожетПрименяться Тогда | ||
ПрименяемыеНапильники.Добавить(ОпределениеНапильника); | ||
КонецЕсли; | ||
|
||
КонецЦикла; | ||
|
||
КэшПрименяемыхНапильников.Вставить(ОпределениеЖелудя.Имя(), ПрименяемыеНапильники); | ||
|
||
Возврат ПрименяемыеНапильники; | ||
|
||
КонецФункции | ||
|
||
#КонецОбласти | ||
|
||
#Область Инициализация | ||
|
@@ -580,6 +676,7 @@ | |
|
||
ОпределенияНапильниковПоИмени = Новый Соответствие(); | ||
ОпределенияНапильников = Новый Массив(); | ||
КэшПрименяемыхНапильников = Новый Соответствие(); | ||
|
||
КонецПроцедуры | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Добавьте описание переменной
_ПрименяетсяТолькоНа
для улучшения читаемости кода. Это поможет другим разработчикам быстрее понять её назначение.