|
64 | 64 |
|
65 | 65 | РефлекторПроверкиКоманд = Новый Рефлектор; |
66 | 66 |
|
| 67 | + ДействиеПередВыполнением = Неопределено; |
| 68 | + ДействиеПослеВыполнения = Неопределено; |
| 69 | + |
67 | 70 | УстановитьДействиеВыполнения(КлассРеализацииКоманды); |
68 | 71 | УстановитьДействиеПередВыполнением(КлассРеализацииКоманды); |
69 | 72 | УстановитьДействиеПослеВыполнения(КлассРеализацииКоманды); |
|
98 | 101 |
|
99 | 102 | Функция ПередВыполнениемКоманды(Знач Команда) Экспорт |
100 | 103 |
|
| 104 | + Лог.Отладка("Выполнение метода <ПередВыполнениемКоманды>"); |
| 105 | + Лог.Отладка("Необходимо вывести версию <%1>", Команда.Приложение.ФлагВерсия.Значение); |
101 | 106 | Если Команда.Приложение.ФлагВерсия.Значение Тогда |
102 | 107 |
|
103 | 108 | ВывестиВерсию(); |
|
107 | 112 |
|
108 | 113 | КонецФункции |
109 | 114 |
|
| 115 | +Функция ПослеВыполненияКоманды(Знач Команда) Экспорт |
| 116 | + |
| 117 | +КонецФункции |
| 118 | + |
110 | 119 | Процедура ВывестиВерсию() |
111 | 120 |
|
112 | 121 | Сообщить(Приложение.ВерсияПриложения); |
|
146 | 155 | КонецЕсли; |
147 | 156 |
|
148 | 157 | Если КонечныйИндексКоманды = АргументыCLI.ВГраница() Тогда |
| 158 | + |
| 159 | + ДействиеПередВыполнением.Исполнить(ЭтотОбъект); |
| 160 | + |
149 | 161 | Лог.Отладка("Выполняю полезную работу %1", Имя); |
150 | 162 | ДействиеВыполнения.Исполнить(ЭтотОбъект); |
| 163 | + |
| 164 | + ДействиеПослеВыполнения.Исполнить(ЭтотОбъект); |
| 165 | + |
151 | 166 | Возврат; |
152 | 167 | КонецЕсли; |
153 | 168 |
|
|
177 | 192 |
|
178 | 193 | КонецЦикла; |
179 | 194 |
|
180 | | - |
| 195 | + |
181 | 196 | Если СтрНачинаетсяС(ПервыйАргумент,"-") Тогда |
182 | 197 | ВывестиСправку(); |
183 | 198 | ВызватьИсключение "Не известна опция"; |
|
192 | 207 |
|
193 | 208 | Процедура УстановитьДействиеВыполнения(КлассРеализации, ИмяПроцедуры = "ВыполнитьКоманду") Экспорт |
194 | 209 |
|
195 | | - Если ПроверитьМетодВыполнитьКоманду(КлассРеализации) Тогда |
196 | | - ВызватьИсключение СтрШаблон("У класса <%1> не задан обязательный метод: ВыполнитьКоманду", КлассРеализации); |
| 210 | + Если ПроверитьМетодВыполнитьКоманду(КлассРеализации, ИмяПроцедуры) Тогда |
| 211 | + ВызватьИсключение СтрШаблон("У класса <%1> не задан обязательный метод <%2>", КлассРеализации, ИмяПроцедуры); |
197 | 212 | КонецЕсли; |
198 | 213 |
|
199 | 214 | ДействиеВыполнения = Делегаты.Создать(КлассРеализации, ИмяПроцедуры); |
|
202 | 217 |
|
203 | 218 | Процедура УстановитьДействиеПередВыполнением(КлассРеализации, ИмяПроцедуры = "ПередВыполнениемКоманды") Экспорт |
204 | 219 |
|
205 | | - Если ПроверитьМетодПередВыполнениемКоманды(КлассРеализации) Тогда |
206 | | - |
| 220 | + Лог.Отладка("Установка метода: перед выполнением класс <%1> имя процедуры <%2>", КлассРеализации, ИмяПроцедуры); |
| 221 | + |
| 222 | + Если НЕ ПроверитьМетодПередВыполнениемКоманды(КлассРеализации, ИмяПроцедуры) Тогда |
| 223 | + Лог.Отладка(" >> метод %2 у класс <%1> найден", КлассРеализации, ИмяПроцедуры); |
| 224 | + |
207 | 225 | ДействиеПередВыполнением = Делегаты.Создать(КлассРеализации, ИмяПроцедуры); |
208 | 226 |
|
209 | 227 | ИначеЕсли ДействиеПередВыполнением = Неопределено Тогда |
210 | 228 |
|
| 229 | + Лог.Отладка("Установлен метод перед выполнением в текущий класс"); |
211 | 230 | ДействиеПередВыполнением = Делегаты.Создать(ЭтотОбъект, ИмяПроцедуры); |
212 | | - |
213 | 231 | КонецЕсли; |
214 | 232 |
|
215 | 233 | КонецПроцедуры |
216 | 234 |
|
217 | | -Процедура УстановитьДействиеПослеВыполнения(КлассРеализации, ИмяПроцедуры = "ПослеВыполнениемКоманды") Экспорт |
| 235 | +Процедура УстановитьДействиеПослеВыполнения(КлассРеализации, ИмяПроцедуры = "ПослеВыполненияКоманды") Экспорт |
218 | 236 |
|
219 | | - Если ПроверитьМетодПослеВыполнениемКоманды(КлассРеализации) Тогда |
| 237 | + Лог.Отладка("Установка метода: после выполнением класс <%1> имя процедуры <%2>", КлассРеализации, ИмяПроцедуры); |
220 | 238 |
|
| 239 | + Если НЕ ПроверитьМетодПослеВыполнениемКоманды(КлассРеализации, ИмяПроцедуры) Тогда |
| 240 | + |
| 241 | + Лог.Отладка(" >> метод %2 у класс <%1> найден", КлассРеализации, ИмяПроцедуры); |
| 242 | + |
221 | 243 | ДействиеПослеВыполнения = Делегаты.Создать(КлассРеализации, ИмяПроцедуры); |
222 | 244 |
|
223 | | - ИначеЕсли ДействиеПередВыполнением = Неопределено Тогда |
| 245 | + ИначеЕсли ДействиеПослеВыполнения = Неопределено Тогда |
224 | 246 |
|
| 247 | + Лог.Отладка("Установлен метод после выполнением в текущий класс"); |
225 | 248 | ДействиеПослеВыполнения = Делегаты.Создать(ЭтотОбъект, ИмяПроцедуры); |
226 | 249 |
|
227 | 250 | КонецЕсли; |
|
629 | 652 |
|
630 | 653 | Функция ВыполнитьОписаниеКоманды(КлассКоманды, Подкоманда) |
631 | 654 |
|
632 | | - Если Не ПроверитьМетодОписаниеКоманды(КлассКоманды) Тогда |
| 655 | + Если ПроверитьМетодОписаниеКоманды(КлассКоманды) Тогда |
633 | 656 | Возврат Подкоманда; |
634 | 657 | КонецЕсли; |
635 | 658 |
|
|
644 | 667 | КонецФункции |
645 | 668 |
|
646 | 669 |
|
647 | | -Функция ПроверитьМетодВыполнитьКоманду(ПроверяемыйКласс) |
| 670 | +Функция ПроверитьМетодВыполнитьКоманду(ПроверяемыйКласс, ИмяПроцедуры) |
648 | 671 |
|
649 | | - Возврат ПроверитьМетодКласса(ПроверяемыйКласс, "ВыполнитьКоманду", 1, Ложь); |
| 672 | + Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры , 1, Ложь); |
650 | 673 |
|
651 | 674 | КонецФункции |
652 | 675 |
|
653 | | -Функция ПроверитьМетодПередВыполнениемКоманды(ПроверяемыйКласс) |
| 676 | +Функция ПроверитьМетодПередВыполнениемКоманды(ПроверяемыйКласс, ИмяПроцедуры) |
654 | 677 |
|
655 | | - Возврат ПроверитьМетодКласса(ПроверяемыйКласс, "ПередВыполнениемКоманды", 1, Ложь); |
| 678 | + Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры, 1, Ложь); |
656 | 679 |
|
657 | 680 | КонецФункции |
658 | 681 |
|
659 | | -Функция ПроверитьМетодПослеВыполнениемКоманды(ПроверяемыйКласс) |
| 682 | +Функция ПроверитьМетодПослеВыполнениемКоманды(ПроверяемыйКласс, ИмяПроцедуры) |
660 | 683 |
|
661 | | - Возврат ПроверитьМетодКласса(ПроверяемыйКласс, "ПослеВыполнениемКоманды", 1, Ложь); |
| 684 | + Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, ИмяПроцедуры, 1, Ложь); |
662 | 685 |
|
663 | 686 | КонецФункции |
664 | 687 |
|
665 | 688 | Функция ПроверитьМетодОписаниеКоманды(ПроверяемыйКласс) |
666 | 689 |
|
667 | | - Возврат ПроверитьМетодКласса(ПроверяемыйКласс, "ОписаниеКоманды", 1, Ложь); |
| 690 | + Возврат НЕ ПроверитьМетодКласса(ПроверяемыйКласс, "ОписаниеКоманды", 1, Ложь); |
668 | 691 |
|
669 | 692 | КонецФункции |
670 | 693 |
|
|
694 | 717 | Знач ТребуемоеКоличествоПараметров = 0, |
695 | 718 | Знач ЭтоФункция = Ложь) |
696 | 719 |
|
697 | | - |
698 | 720 | ЕстьМетод = РефлекторПроверкиКоманд.МетодСуществует(ПроверяемыйКласс, ИмяМетода); |
699 | | - |
| 721 | + Лог.Отладка("Проверяемый метод <%1> найден: %2", ИмяМетода, ЕстьМетод); |
700 | 722 | Если Не ЕстьМетод Тогда |
701 | 723 | Возврат Ложь; |
702 | 724 | КонецЕсли; |
703 | 725 |
|
704 | 726 | ТаблицаМетодов = РефлекторПроверкиКоманд.ПолучитьТаблицуМетодов(ПроверяемыйКласс); |
| 727 | + |
705 | 728 | СтрокаМетода = ТаблицаМетодов.Найти(ИмяМетода, "Имя"); |
| 729 | + Лог.Отладка("Поиск строки в таблице методов класса <%1> найдена: %2, общее количество методов класса: %3", ПроверяемыйКласс, НЕ СтрокаМетода = Неопределено, ТаблицаМетодов.Количество()); |
706 | 730 | Если СтрокаМетода = Неопределено Тогда |
707 | 731 | Возврат Ложь; |
708 | 732 | КонецЕсли; |
709 | 733 |
|
710 | 734 | ПроверкаНаФункцию = ЭтоФункция = СтрокаМетода.ЭтоФункция; |
711 | 735 | ПроверкаНаКоличествоПараметров = ТребуемоеКоличествоПараметров = СтрокаМетода.КоличествоПараметров; |
712 | | - |
| 736 | + |
| 737 | + Лог.Отладка("Проверяемый метод <%1> корректен: %2", ИмяМетода, ПроверкаНаФункцию И ПроверкаНаКоличествоПараметров); |
713 | 738 | Возврат ПроверкаНаФункцию |
714 | 739 | И ПроверкаНаКоличествоПараметров; |
715 | 740 |
|
|
0 commit comments