|
141 | 141 | // Сценарий - Созданный сценарий
|
142 | 142 | //
|
143 | 143 | Функция ВОбъект() Экспорт
|
144 |
| - |
| 144 | + |
145 | 145 | Если Не ЗначениеЗаполнено(мИнтерфейс) Тогда
|
146 | 146 | ОпределитьИнтерфейс();
|
147 | 147 | КонецЕсли;
|
148 | 148 |
|
149 |
| - МетодИнтерфейса = мИнтерфейс.ПолучитьКартуИнтерфейса()[0]; |
| 149 | + Объект = ЛямбдыКешируемыеЗначения.ДостатьИзКеша(мВыражение, мИнтерфейс, мКонтекст, мОбъект); |
| 150 | + ОбработкаДекоратора.СинхронизироватьПоля(мОбъект, Объект); |
150 | 151 |
|
151 |
| - Метод = Новый Метод(МетодИнтерфейса.Имя) |
152 |
| - .Публичный() |
153 |
| - .ТелоМетода(РазобранноеВыражение.Тело); |
154 |
| - |
155 |
| - Если Не МетодИнтерфейса.ЭтоФункция Тогда |
156 |
| - Метод.ЭтоПроцедура(); |
| 152 | + Если Не ЗначениеЗаполнено(Объект) Тогда |
| 153 | + Объект = СоздатьОбъект(); |
| 154 | + ЛямбдыКешируемыеЗначения.ПоложитьВКеш(мВыражение, мИнтерфейс, мКонтекст, мОбъект, Объект); |
157 | 155 | КонецЕсли;
|
158 | 156 |
|
159 |
| - Для Каждого Аннотация Из РазобранноеВыражение.Аннотации Цикл |
160 |
| - |
161 |
| - АннотацияМетода = Новый Аннотация(Аннотация.Имя); |
162 |
| - |
163 |
| - Для Каждого ПараметрАннотации Из Аннотация.Параметры Цикл |
164 |
| - АннотацияМетода.Параметр(ПараметрАннотации.Значение, ПараметрАннотации.Имя); |
165 |
| - КонецЦикла; |
166 |
| - |
167 |
| - Метод.Аннотация(АннотацияМетода); |
168 |
| - |
169 |
| - КонецЦикла; |
170 |
| - |
171 |
| - Для каждого Параметр Из РазобранноеВыражение.Параметры Цикл |
172 |
| - |
173 |
| - ПараметрМетода = Новый ПараметрМетода(Параметр.Имя); |
174 |
| - |
175 |
| - Для Каждого Аннотация Из Параметр.Аннотации Цикл |
176 |
| - |
177 |
| - АннотацияПараметра = Новый Аннотация(Аннотация.Имя); |
178 |
| - |
179 |
| - Для Каждого ПараметрАннотации Из Аннотация.Параметры Цикл |
180 |
| - АннотацияПараметра.Параметр(ПараметрАннотации.Значение, ПараметрАннотации.Имя); |
181 |
| - КонецЦикла; |
182 |
| - |
183 |
| - ПараметрМетода.Аннотация(АннотацияПараметра); |
184 |
| - |
185 |
| - КонецЦикла; |
186 |
| - |
187 |
| - Метод.Параметр(ПараметрМетода); |
188 |
| - |
189 |
| - КонецЦикла; |
190 |
| - |
191 |
| - Построитель = Новый ПостроительДекоратора(мОбъект) |
192 |
| - .Отладка(Отладка) |
193 |
| - .Поле(Новый Поле("Выражение").ЗначениеПоУмолчанию(мВыражение)) |
194 |
| - .Метод(Метод) |
195 |
| - .Метод( |
196 |
| - Новый Метод("ОбработкаПолученияПредставления") |
197 |
| - .ЭтоПроцедура() |
198 |
| - .Параметр(Новый ПараметрМетода("Представление")) |
199 |
| - .Параметр(Новый ПараметрМетода("СтандартнаяОбработка")) |
200 |
| - .ТелоМетода("СтандартнаяОбработка = Ложь; Представление = Выражение;") |
201 |
| - ); |
202 |
| - |
203 |
| - Для каждого ПеременнаяИЗначение Из мКонтекст Цикл |
204 |
| - |
205 |
| - Построитель.Поле( |
206 |
| - Новый Поле(ПеременнаяИЗначение.Ключ) |
207 |
| - .ЗначениеПоУмолчанию(ПеременнаяИЗначение.Значение) |
208 |
| - ); |
209 |
| - |
210 |
| - КонецЦикла; |
211 |
| - |
212 |
| - Объект = Построитель.Построить(); |
213 |
| - |
214 |
| - Рефлектор = Новый РефлекторОбъекта(Объект); |
215 |
| - |
216 |
| - Рефлектор.РеализуетИнтерфейс(мИнтерфейс, Истина); |
217 |
| - |
218 | 157 | Возврат Объект;
|
219 | 158 |
|
220 | 159 | КонецФункции
|
|
295 | 234 |
|
296 | 235 | КонецПроцедуры
|
297 | 236 |
|
| 237 | +Функция СоздатьОбъект() |
| 238 | + |
| 239 | + МетодИнтерфейса = мИнтерфейс.ПолучитьКартуИнтерфейса()[0]; |
| 240 | + |
| 241 | + Метод = Новый Метод(МетодИнтерфейса.Имя) |
| 242 | + .Публичный() |
| 243 | + .ТелоМетода(РазобранноеВыражение.Тело); |
| 244 | + |
| 245 | + Если Не МетодИнтерфейса.ЭтоФункция Тогда |
| 246 | + Метод.ЭтоПроцедура(); |
| 247 | + КонецЕсли; |
| 248 | + |
| 249 | + Для Каждого Аннотация Из РазобранноеВыражение.Аннотации Цикл |
| 250 | + |
| 251 | + АннотацияМетода = Новый Аннотация(Аннотация.Имя); |
| 252 | + |
| 253 | + Для Каждого ПараметрАннотации Из Аннотация.Параметры Цикл |
| 254 | + АннотацияМетода.Параметр(ПараметрАннотации.Значение, ПараметрАннотации.Имя); |
| 255 | + КонецЦикла; |
| 256 | + |
| 257 | + Метод.Аннотация(АннотацияМетода); |
| 258 | + |
| 259 | + КонецЦикла; |
| 260 | + |
| 261 | + Для каждого Параметр Из РазобранноеВыражение.Параметры Цикл |
| 262 | + |
| 263 | + ПараметрМетода = Новый ПараметрМетода(Параметр.Имя); |
| 264 | + |
| 265 | + Для Каждого Аннотация Из Параметр.Аннотации Цикл |
| 266 | + |
| 267 | + АннотацияПараметра = Новый Аннотация(Аннотация.Имя); |
| 268 | + |
| 269 | + Для Каждого ПараметрАннотации Из Аннотация.Параметры Цикл |
| 270 | + АннотацияПараметра.Параметр(ПараметрАннотации.Значение, ПараметрАннотации.Имя); |
| 271 | + КонецЦикла; |
| 272 | + |
| 273 | + ПараметрМетода.Аннотация(АннотацияПараметра); |
| 274 | + |
| 275 | + КонецЦикла; |
| 276 | + |
| 277 | + Метод.Параметр(ПараметрМетода); |
| 278 | + |
| 279 | + КонецЦикла; |
| 280 | + |
| 281 | + Построитель = Новый ПостроительДекоратора(мОбъект) |
| 282 | + .Отладка(Отладка) |
| 283 | + .Поле(Новый Поле("Выражение").ЗначениеПоУмолчанию(мВыражение)) |
| 284 | + .Метод(Метод) |
| 285 | + .Метод( |
| 286 | + Новый Метод("ОбработкаПолученияПредставления") |
| 287 | + .ЭтоПроцедура() |
| 288 | + .Параметр(Новый ПараметрМетода("Представление")) |
| 289 | + .Параметр(Новый ПараметрМетода("СтандартнаяОбработка")) |
| 290 | + .ТелоМетода("СтандартнаяОбработка = Ложь; Представление = Выражение;") |
| 291 | + ); |
| 292 | + |
| 293 | + Контекст = ?(ЗначениеЗаполнено(мКонтекст), мКонтекст, Новый Структура()); |
| 294 | + |
| 295 | + Для каждого ПеременнаяИЗначение Из Контекст Цикл |
| 296 | + |
| 297 | + Построитель.Поле( |
| 298 | + Новый Поле(ПеременнаяИЗначение.Ключ) |
| 299 | + .ЗначениеПоУмолчанию(ПеременнаяИЗначение.Значение) |
| 300 | + ); |
| 301 | + |
| 302 | + КонецЦикла; |
| 303 | + |
| 304 | + Объект = Построитель.Построить(); |
| 305 | + |
| 306 | + Рефлектор = Новый РефлекторОбъекта(Объект); |
| 307 | + |
| 308 | + Рефлектор.РеализуетИнтерфейс(мИнтерфейс, Истина); |
| 309 | + |
| 310 | + Возврат Объект; |
| 311 | + |
| 312 | +КонецФункции |
| 313 | + |
298 | 314 | Процедура ПриСозданииОбъекта(Выражение)
|
299 | 315 |
|
300 | 316 | РазобранноеВыражение = Новый Структура(
|
301 | 317 | "Аннотации, Параметры, Тело"
|
302 | 318 | );
|
303 | 319 |
|
304 | 320 | мВыражение = Выражение;
|
305 |
| - мКонтекст = Новый Структура(); |
306 | 321 | Отладка = Ложь;
|
307 | 322 |
|
308 | 323 | РазобратьВыражение(Выражение);
|
|
0 commit comments