|
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