Имя: Пароль:
1C
1C 7.7
v7: Получить диапазоны значений
0 DeMi4
 
29.08.12
09:31
Есть таблица значений с разными кодами надо из нее получить значения
Например
1
2
3
4
10
11
12
15

Получить ТЗ следующего вида
1-4
10-12
15

Подскажите как можно так перебрать
Вот то что пришло в голову мне

тзДиапозоны = СоздатьОбъект( "ТаблицаЗначений" );
   тзДиапозоны.НоваяКолонка( "НачалоДиапозона" );
   тзДиапозоны.НоваяКолонка( "КонецДиапозона" );
   тзДиапозоны.НоваяКолонка( "ШиринаДиапозона" );
   НачалоДиапозона = тзДК.ПолучитьЗначение(1,1);
   КонецДиапозона = тзДК.ПолучитьЗначение(1,1);
   КолСтрокТЗ = тзДК.КоличествоСтрок();
   Для НС = 2 По КолСтрокТЗ Цикл
       тзДК.ПолучитьСтрокуПоНомеру( НС );
       Если ( тзДК.КодКарты = КонецДиапозона + 1 ) И (НС <> КолСтрокТЗ) Тогда
           КонецДиапозона = тзДК.КодКарты;
       Иначе
           тзДиапозоны.НоваяСтрока();
           тзДиапозоны.НачалоДиапозона = НачалоДиапозона;
           тзДиапозоны.КонецДиапозона    = КонецДиапозона;
           тзДиапозоны.ШиринаДиапозона = тзДиапозоны.КонецДиапозона - тзДиапозоны.НачалоДиапозона + 1;
           НачалоДиапозона = тзДК.КодКарты;
           КонецДиапозона = тзДК.КодКарты;
       КонецЕсли;    
   КонецЦикла;
1 olegves
 
29.08.12
09:36
сформулируй пояснее вопрос
2 DeMi4
 
29.08.12
09:39
То есть в ТЗ есть какие коды ( сортировка по возрастанию ). Надо найти возможные диапозоны этих кодов
3 KUBIK
 
29.08.12
09:40
(2) а диапазоны где брать?
4 andrewks
 
29.08.12
09:41
1. сортируешь
2. двигаешься по ТЗ1, параллельно заполняя ТЗ2:

пусть нумерация с 1, код алгоритмический

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