Опробовано в УТ 10.3 на заказе покупателя (дописанном-переписанном).
Пользоваться просто:
- Открываем обработку.
- Выбираем тип (обработка работает только со справочниками и документами).
- Выбираем нужный объект.
- Выбираем табличную часть (если есть ТЧ "Товары", она выбирается автоматически).
- Нажимаем выполнить.
Обработка должна нормально работать с любыми документами и любыми ТЧ, но все же:
Если вы будете это использовать - то делаете это на свой страх и риск. Перед использованием примите меры безопасности (архивация, или хотябы скопируйте объект и проверьте, как обработка отработает на копии)
Перем ПоследнийТипСсылки;
Процедура КнопкаВыполнитьНажатие(Кнопка)
Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
ЭтоСправочник = Метаданные.Справочники.Содержит(СсылкаНаОбъект.Метаданные());
ЭтоДокумент = Метаданные.Документы.Содержит(СсылкаНаОбъект.Метаданные());
Если НЕ ЭтоСправочник И НЕ ЭтоДокумент Тогда
Предупреждение("Работа с выбранным объектом не поддерживается");
ИначеЕсли ЭлементыФормы.ТабличныеЧасти.ТекущаяСтрока = Неопределено Тогда
Предупреждение("Не выбрана табличная часть");
Иначе
Ответ = Вопрос("Вы уверены, что хотите спутать сортировку табличной части '"
+ ЭлементыФормы.ТабличныеЧасти.ТекущаяСтрока.Представление
+ "' объекта '" + СсылкаНаОбъект + "' ?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет);
Если Ответ = КодВозвратаДиалога.Да Тогда
Об = СсылкаНаОбъект.ПолучитьОбъект();
ТЧ = Об[ЭлементыФормы.ТабличныеЧасти.ТекущаяСтрока.Значение];
ТЗ = ТЧ.Выгрузить();
ТЗ.Колонки.Добавить("_Хаос_", Новый ОписаниеТипов("Число"));
ГСЧ = Новый ГенераторСлучайныхЧисел();
Для Каждого СтрокаТЗ Из ТЗ Цикл
СтрокаТЗ._Хаос_ = ГСЧ.СлучайноеЧисло();
КонецЦикла;
ТЗ.Сортировать("_Хаос_");
ТЧ.Загрузить(ТЗ);
Если ЭтоСправочник Тогда
Об.Записать();
ИначеЕсли ЭтоДокумент Тогда
Об.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
Предупреждение("Обработка выполнена");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура СсылкаНаОбъектПриИзменении(Элемент)
Если ТипЗнч(СсылкаНаОбъект) <> ПоследнийТипСсылки Тогда
ПоследнийТипСсылки = ТипЗнч(СсылкаНаОбъект);
ТабличныеЧасти.Очистить();
Если СсылкаНаОбъект <> Неопределено Тогда
Для Каждого ТЧ Из СсылкаНаОбъект.Метаданные().ТабличныеЧасти Цикл
НовыйЭлемент = ТабличныеЧасти.Добавить(ТЧ.Имя, ТЧ.Синоним);
Если ТЧ.Имя = "Товары" Тогда
ЭлементыФормы.ТабличныеЧасти.ТекущаяСтрока = НовыйЭлемент;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры