1. сортируешь
2. двигаешься по ТЗ1, параллельно заполняя ТЗ2:
пусть нумерация с 1, код алгоритмический
ПредЗнач=ТЗ1[1].Код-100;
Для нс=1 по КолвоСтрок Цикл
ТекЗнач=ТЗ1[нс];
Если (ТекЗнач>ПредЗнач+1) Тогда
ТЗ2.НоваяСтрока();
ТЗ2[НомерТекущейСтроки].НачКод=ТекЗнач;
ТЗ2[НомерТекущейСтроки].КонКод=ТекЗнач;
Иначе
ТЗ2[НомерТекущейСтроки].КонКод=ТекЗнач;
КонецЕсли;
ПредЗнач=ТекЗнач;
КонецЦикла;
Если стоит проблема с размером таблицы и быстродействием, можно попробовать перебирать не каждый элемент, а, например, через пять. Если, например, ТЗ.ПолучитьЗначение(Позиция+5,1)=ТЗ.ПолучитьЗначение(Позиция,1)+5, значит диапазон еще не закончился, нужно идти дальше. Можно попробовать дихотомией таблицу делить...
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший