|
1 | 1 | #Использовать notify |
2 | 2 | #Использовать logos |
| 3 | +#Использовать tempfiles |
3 | 4 |
|
4 | 5 | Перем Лог; |
5 | 6 |
|
6 | 7 | Перем Конвейер; |
7 | 8 | Перем ПотокСлужебный; |
| 9 | +Перем ЛокальныйМенеджерВременныхФайлов; |
| 10 | +Перем ВременныеОписанияОповещений; |
8 | 11 |
|
9 | 12 | // Общее API |
10 | 13 |
|
|
35 | 38 |
|
36 | 39 | КонецФункции |
37 | 40 |
|
38 | | -Функция Различные(ОбработчикСравнения = Неопределено) Экспорт |
| 41 | +Функция Различные(Знач ОбработчикСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт |
39 | 42 |
|
40 | 43 | Если ОбработчикСравнения = Неопределено Тогда |
41 | 44 | ОбработчикСравнения = Потоки.СтандартныйОбработчикСравнения(); |
| 45 | + Иначе |
| 46 | + Если ТипЗнч(ОбработчикСравнения) = Тип("Строка") Тогда |
| 47 | + ОбработчикСравнения = СформироватьВременноеОписаниеОповещения(ОбработчикСравнения, ДополнительныеПараметры); |
| 48 | + КонецЕсли; |
42 | 49 | КонецЕсли; |
43 | 50 |
|
44 | 51 | ПоложитьЯчейкуВКонвейер("Различные", ОбработчикСравнения); |
45 | 52 | Возврат ЭтотОбъект; |
46 | 53 |
|
47 | 54 | КонецФункции |
48 | 55 |
|
49 | | -Функция Обработать(ОписаниеОповещения) Экспорт |
| 56 | +Функция Обработать(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт |
| 57 | + |
| 58 | + Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда |
| 59 | + ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры); |
| 60 | + КонецЕсли; |
50 | 61 |
|
51 | 62 | ПоложитьЯчейкуВКонвейер("Обработать", ОписаниеОповещения); |
52 | 63 | Возврат ЭтотОбъект; |
53 | 64 |
|
54 | 65 | КонецФункции |
55 | 66 |
|
56 | | -Функция Фильтровать(ОписаниеОповещения) Экспорт |
57 | | - |
| 67 | +Функция Фильтровать(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт |
| 68 | + |
| 69 | + Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда |
| 70 | + ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры); |
| 71 | + КонецЕсли; |
| 72 | + |
58 | 73 | ПоложитьЯчейкуВКонвейер("Фильтровать", ОписаниеОповещения); |
59 | 74 | Возврат ЭтотОбъект; |
60 | 75 |
|
61 | 76 | КонецФункции |
62 | 77 |
|
63 | | -Функция Сортировать(Знач ОбработчикСравнения = Неопределено) Экспорт |
| 78 | +Функция Сортировать(Знач ОбработчикСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт |
64 | 79 |
|
65 | 80 | Если ОбработчикСравнения = Неопределено Тогда |
66 | 81 | ОбработчикСравнения = Потоки.СтандартныйОбработчикСравнения(); |
| 82 | + Иначе |
| 83 | + Если ТипЗнч(ОбработчикСравнения) = Тип("Строка") Тогда |
| 84 | + ОбработчикСравнения = СформироватьВременноеОписаниеОповещения(ОбработчикСравнения, ДополнительныеПараметры); |
| 85 | + КонецЕсли; |
67 | 86 | КонецЕсли; |
68 | 87 |
|
69 | 88 | ПоложитьЯчейкуВКонвейер("Сортировать", ОбработчикСравнения); |
|
132 | 151 |
|
133 | 152 | КонецФункции |
134 | 153 |
|
135 | | -Функция ДляКаждого(ОписаниеОповещения) Экспорт |
| 154 | +Функция ДляКаждого(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт |
136 | 155 |
|
137 | 156 | Лог.Отладка("ДляКаждого"); |
138 | | - |
| 157 | + |
| 158 | + Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда |
| 159 | + ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры); |
| 160 | + КонецЕсли; |
| 161 | + |
139 | 162 | ПройтиКонвейер(); |
140 | 163 |
|
141 | 164 | Результат = Новый Массив; |
|
144 | 167 |
|
145 | 168 | ПотокСлужебный.ВыполнитьОбработать(Результат, ДополнительныеПараметры); |
146 | 169 |
|
| 170 | + ОчиститьВременныеОписанияОповещений(); |
| 171 | + |
147 | 172 | Возврат Результат; |
148 | 173 |
|
149 | 174 | КонецФункции |
150 | 175 |
|
151 | | -Функция Минимум(ОбработчикСравнения = Неопределено) Экспорт |
| 176 | +Функция Минимум(Знач ОбработчикСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт |
152 | 177 |
|
153 | 178 | Лог.Отладка("Минимум"); |
154 | 179 |
|
155 | 180 | Если ОбработчикСравнения = Неопределено Тогда |
156 | 181 | ОбработчикСравнения = Потоки.СтандартныйОбработчикСравнения(); |
| 182 | + Иначе |
| 183 | + Если ТипЗнч(ОбработчикСравнения) = Тип("Строка") Тогда |
| 184 | + ОбработчикСравнения = СформироватьВременноеОписаниеОповещения(ОбработчикСравнения, ДополнительныеПараметры); |
| 185 | + КонецЕсли; |
157 | 186 | КонецЕсли; |
158 | 187 |
|
159 | 188 | ПройтиКонвейер(); |
|
164 | 193 |
|
165 | 194 | ПотокСлужебный.ВыполнитьСортировать(Результат, ДополнительныеПараметры); |
166 | 195 |
|
| 196 | + ОчиститьВременныеОписанияОповещений(); |
| 197 | + |
167 | 198 | Если Результат.Количество() = 0 Тогда |
168 | 199 | Возврат Неопределено; |
169 | 200 | Иначе |
|
172 | 203 |
|
173 | 204 | КонецФункции |
174 | 205 |
|
175 | | -Функция Максимум(ОбработчикСравнения = Неопределено) Экспорт |
| 206 | +Функция Максимум(Знач ОбработчикСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт |
176 | 207 |
|
177 | 208 | Лог.Отладка("Максимум"); |
178 | 209 |
|
179 | 210 | Если ОбработчикСравнения = Неопределено Тогда |
180 | 211 | ОбработчикСравнения = Потоки.СтандартныйОбработчикСравнения(); |
| 212 | + Иначе |
| 213 | + Если ТипЗнч(ОбработчикСравнения) = Тип("Строка") Тогда |
| 214 | + ОбработчикСравнения = СформироватьВременноеОписаниеОповещения(ОбработчикСравнения, ДополнительныеПараметры); |
| 215 | + КонецЕсли; |
181 | 216 | КонецЕсли; |
182 | 217 |
|
183 | 218 | ПройтиКонвейер(); |
|
188 | 223 |
|
189 | 224 | ПотокСлужебный.ВыполнитьСортировать(Результат, ДополнительныеПараметры); |
190 | 225 |
|
| 226 | + ОчиститьВременныеОписанияОповещений(); |
| 227 | + |
191 | 228 | Если Результат.Количество() = 0 Тогда |
192 | 229 | Возврат Неопределено; |
193 | 230 | Иначе |
|
196 | 233 |
|
197 | 234 | КонецФункции |
198 | 235 |
|
199 | | -Функция Сократить(Обработчик, НачальноеЗначение = Неопределено) Экспорт |
| 236 | +Функция Сократить(Знач Обработчик, Знач НачальноеЗначение = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт |
200 | 237 |
|
201 | 238 | Лог.Отладка("Сократить"); |
202 | 239 |
|
| 240 | + Если ТипЗнч(Обработчик) = Тип("Строка") Тогда |
| 241 | + Обработчик = СформироватьВременноеОписаниеОповещения(Обработчик, ДополнительныеПараметры); |
| 242 | + КонецЕсли; |
| 243 | + |
203 | 244 | ПройтиКонвейер(); |
204 | 245 |
|
205 | 246 | Результат = НачальноеЗначение; |
|
212 | 253 | ОписанияОповещений.ВыполнитьОбработкуОповещения(Обработчик, Результат); |
213 | 254 | КонецЦикла; |
214 | 255 |
|
| 256 | + ОчиститьВременныеОписанияОповещений(); |
| 257 | + |
215 | 258 | Возврат Результат; |
216 | 259 |
|
217 | 260 | КонецФункции |
|
224 | 267 |
|
225 | 268 | Коллекция = ПотокСлужебный.ПолучитьКоллекцию(); |
226 | 269 | КэшКолонок = ПотокСлужебный.ПолучитьКэшКолонок(); |
227 | | - Лог.Информация(КэшКолонок.Количество()); |
228 | 270 |
|
229 | 271 | Результат = Новый(ТипРезультата); |
230 | 272 |
|
|
264 | 306 |
|
265 | 307 | КонецФункции |
266 | 308 |
|
267 | | -Функция ЛюбойСоответствует(ОписаниеОповещения) Экспорт |
| 309 | +Функция ЛюбойСоответствует(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт |
268 | 310 |
|
269 | 311 | Лог.Отладка("ЛюбойСоответствует"); |
270 | 312 |
|
| 313 | + Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда |
| 314 | + ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры); |
| 315 | + КонецЕсли; |
| 316 | + |
271 | 317 | ПройтиКонвейер(); |
272 | 318 |
|
273 | 319 | Коллекция = ПотокСлужебный.ПолучитьКоллекцию(); |
|
289 | 335 | КонецЕсли; |
290 | 336 | КонецЦикла; |
291 | 337 |
|
| 338 | + ОчиститьВременныеОписанияОповещений(); |
| 339 | + |
292 | 340 | Возврат Результат; |
293 | 341 |
|
294 | 342 | КонецФункции |
295 | 343 |
|
296 | | -Функция ВсеСоответствуют(ОписаниеОповещения) Экспорт |
| 344 | +Функция ВсеСоответствуют(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт |
297 | 345 |
|
298 | 346 | Лог.Отладка("ВсеСоответствуют"); |
299 | 347 |
|
| 348 | + Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда |
| 349 | + ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры); |
| 350 | + КонецЕсли; |
| 351 | + |
300 | 352 | ПройтиКонвейер(); |
301 | 353 |
|
302 | 354 | Коллекция = ПотокСлужебный.ПолучитьКоллекцию(); |
|
317 | 369 | Прервать; |
318 | 370 | КонецЕсли; |
319 | 371 | КонецЦикла; |
| 372 | + |
| 373 | + ОчиститьВременныеОписанияОповещений(); |
320 | 374 |
|
321 | 375 | Возврат Результат; |
322 | 376 |
|
323 | 377 | КонецФункции |
324 | 378 |
|
325 | | -Функция ВсеНеСоответствуют(ОписаниеОповещения) Экспорт |
| 379 | +Функция ВсеНеСоответствуют(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт |
326 | 380 |
|
327 | 381 | Лог.Отладка("ВсеНеСоответствуют"); |
328 | 382 |
|
| 383 | + Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда |
| 384 | + ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры); |
| 385 | + КонецЕсли; |
| 386 | + |
329 | 387 | ПройтиКонвейер(); |
330 | 388 |
|
331 | 389 | Коллекция = ПотокСлужебный.ПолучитьКоллекцию(); |
|
346 | 404 | Прервать; |
347 | 405 | КонецЕсли; |
348 | 406 | КонецЦикла; |
| 407 | + |
| 408 | + ОчиститьВременныеОписанияОповещений(); |
349 | 409 |
|
350 | 410 | Возврат Результат; |
351 | 411 |
|
|
396 | 456 |
|
397 | 457 | КонецПроцедуры |
398 | 458 |
|
| 459 | +Функция СформироватьВременноеОписаниеОповещения(ПользовательскоеВыражение, ДополнительныеПараметры) |
| 460 | + |
| 461 | + Если ДополнительныеПараметры = Неопределено Тогда |
| 462 | + ДополнительныеПараметры = Новый Структура; |
| 463 | + КонецЕсли; |
| 464 | + |
| 465 | + ПутьКФайлуШаблона = ОбъединитьПути(ТекущийСценарий().Каталог, "ШаблонИзолированногоКласса.os"); |
| 466 | + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуШаблона, КодировкаТекста.UTF8NoBom); |
| 467 | + ТекстИзолированногоКласса = ЧтениеТекста.Прочитать(); |
| 468 | + |
| 469 | + ТекстИзолированногоКласса = СтрЗаменить(ТекстИзолированногоКласса, "А = 0;", ПользовательскоеВыражение); |
| 470 | + |
| 471 | + ВременныйФайл = ЛокальныйМенеджерВременныхФайлов.НовоеИмяФайла("os"); |
| 472 | + ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл); |
| 473 | + ЗаписьТекста.Записать(ТекстИзолированногоКласса); |
| 474 | + ЗаписьТекста.Закрыть(); |
| 475 | + |
| 476 | + ВременныйСценарий = ЗагрузитьСценарий(ВременныйФайл); |
| 477 | + |
| 478 | + ОписаниеОповещения = ОписанияОповещений.Создать( |
| 479 | + "ОбработкаОповещения", |
| 480 | + ВременныйСценарий, |
| 481 | + ДополнительныеПараметры |
| 482 | + ); |
| 483 | + |
| 484 | + Возврат ОписаниеОповещения; |
| 485 | + |
| 486 | +КонецФункции |
| 487 | + |
| 488 | +Процедура ОчиститьВременныеОписанияОповещений() |
| 489 | + ЛокальныйМенеджерВременныхФайлов.Удалить(); |
| 490 | + ВременныеОписанияОповещений = Новый Массив; |
| 491 | +КонецПроцедуры |
| 492 | + |
399 | 493 | Процедура Инициализация() |
400 | 494 | Конвейер = Новый Массив; |
| 495 | + ВременныеОписанияОповещений = Новый Массив; |
| 496 | + ЛокальныйМенеджерВременныхФайлов = Новый МенеджерВременныхФайлов; |
401 | 497 | Лог = Логирование.ПолучитьЛог("oscript.lib.stream"); |
402 | 498 |
|
403 | 499 | ПутьКСценарию_ПотокСлужебный = ОбъединитьПути(ТекущийСценарий().Каталог, "ПотокСлужебный.os"); |
|
0 commit comments