|
79 | 79 |
|
80 | 80 | КонецФункции |
81 | 81 |
|
| 82 | +Функция Сортировать(Знач ОписаниеОповещения = Неопределено) Экспорт |
| 83 | + |
| 84 | + Если ОписаниеОповещения = Неопределено Тогда |
| 85 | + ОписаниеОповещения = СтандартныйОбработчикСравнения(); |
| 86 | + КонецЕсли; |
| 87 | + |
| 88 | + Лог.Отладка("Сортировать %1", ОписаниеОповещения.ИмяПроцедуры); |
| 89 | + |
| 90 | + ДополнительныеПараметры = Новый Структура; |
| 91 | + ДополнительныеПараметры.Вставить("Обработчик", ОписаниеОповещения); |
| 92 | + |
| 93 | + Ячейка = ОписанияОповещений.Создать("ВыполнитьСортировать", ЭтотОбъект, ДополнительныеПараметры); |
| 94 | + |
| 95 | + Конвейер.Добавить(Ячейка); |
| 96 | + |
| 97 | + Возврат ЭтотОбъект; |
| 98 | + |
| 99 | +КонецФункции |
| 100 | + |
82 | 101 | // Терминальные методы |
83 | 102 |
|
84 | 103 | Функция ВМассив() Экспорт |
|
173 | 192 |
|
174 | 193 | КонецПроцедуры |
175 | 194 |
|
| 195 | +Процедура ВыполнитьСортировать(Результат, ДополнительныеПараметры) Экспорт |
| 196 | + |
| 197 | + Обработчик = ДополнительныеПараметры.Обработчик; |
| 198 | + |
| 199 | + Лог.Отладка("ВыполнитьСортировать %1", Обработчик.ИмяПроцедуры); |
| 200 | + |
| 201 | + Результат = Коллекция; |
| 202 | + |
| 203 | + Если Обработчик.ДополнительныеПараметры = Неопределено Тогда |
| 204 | + Обработчик.ДополнительныеПараметры = Новый Структура; |
| 205 | + КонецЕсли; |
| 206 | + Обработчик.ДополнительныеПараметры.Вставить("Элемент1"); |
| 207 | + Обработчик.ДополнительныеПараметры.Вставить("Элемент2"); |
| 208 | + |
| 209 | + Для й = 0 По Результат.Количество() - 1 Цикл |
| 210 | + Флаг = Ложь; |
| 211 | + к = Результат.Количество() - 1; |
| 212 | + Пока к > й Цикл |
| 213 | + Элемент = Результат[к - 1]; |
| 214 | + СледующийЭлемент = Результат[к]; |
| 215 | + Обработчик.ДополнительныеПараметры.Элемент1 = Элемент; |
| 216 | + Обработчик.ДополнительныеПараметры.Элемент2 = СледующийЭлемент; |
| 217 | + РезультатСортировки = Неопределено; |
| 218 | + ОписанияОповещений.ВыполнитьОбработкуОповещения(Обработчик, РезультатСортировки); |
| 219 | + Если РезультатСортировки > 0 Тогда |
| 220 | + Результат[к - 1] = СледующийЭлемент; |
| 221 | + Результат[к] = Элемент; |
| 222 | + Флаг = Истина; |
| 223 | + КонецЕсли; |
| 224 | + к = к - 1; |
| 225 | + КонецЦикла; |
| 226 | + Если НЕ Флаг Тогда |
| 227 | + Прервать; |
| 228 | + КонецЕсли; |
| 229 | + КонецЦикла; |
| 230 | + |
| 231 | +КонецПроцедуры |
| 232 | + |
| 233 | +Процедура ОбработчикСравнения(РезультатСортировки, ДополнительныеПараметры) Экспорт |
| 234 | + Элемент1 = ДополнительныеПараметры.Элемент1; |
| 235 | + Элемент2 = ДополнительныеПараметры.Элемент2; |
| 236 | + |
| 237 | + Если Элемент1 = Элемент2 Тогда |
| 238 | + РезультатСортировки = 0; |
| 239 | + ИначеЕсли Элемент1 > Элемент2 Тогда |
| 240 | + РезультатСортировки = 1; |
| 241 | + Иначе |
| 242 | + РезультатСортировки = -1; |
| 243 | + КонецЕсли; |
| 244 | +КонецПроцедуры |
| 245 | + |
| 246 | +Функция СтандартныйОбработчикСравнения() |
| 247 | + ФункцияСравнения = ОписанияОповещений.Создать("ОбработчикСравнения", ЭтотОбъект); |
| 248 | + Возврат ФункцияСравнения; |
| 249 | +КонецФункции |
| 250 | + |
176 | 251 | Процедура ПройтиКонвейер() |
177 | 252 |
|
178 | 253 | Лог.Отладка("Прохожу по конвейеру"); |
|
0 commit comments