Чтобы не изобретать велосипед, может быть у кого-то есть функция, которая преобразует строку вида "1-3, 7" в массив элементов "1", "2", "3", "7"?
---
допилил, выкладываю. Может, кому пригодится

```1c
    Функция ПреобразоватьСтрокуВМассив(Строчка, РазделительЭлементов = ",", РазделительДиапазона = "-") Экспорт

    Результат = Новый Массив;

    МнСтр = СтрЗаменить(СтрЗаменить(Строчка," ","),РазделительЭлементов,Символы.ПС);

    Для н=1 По СтрЧислоСтрок(МнСтр) Цикл

    ЭлементИлиДиапазон = СтрПолучитьСтроку(МнСтр, н);
    ПозицияРазделительДиапазона = Найти(ЭлементИлиДиапазон, РазделительДиапазона);

    Если ПозицияРазделительДиапазона = 0 Тогда

    Элемент = СтрокаВЧисло(ЭлементИлиДиапазон);
    Если Элемент = Неопределено Тогда
    возврат Неопределено;
    КонецЕсли;

    Результат.Добавить(Элемент);

    Иначе

    НачалоДиапазона = Лев(ЭлементИлиДиапазон, ПозицияРазделительДиапазона-1);
    КонецДиапазона = Сред(ЭлементИлиДиапазон, ПозицияРазделительДиапазона+1);

    ЧислоНачалоДиапазона = СтрокаВЧисло(НачалоДиапазона);
    ЧислоКонецДиапазона = СтрокаВЧисло(КонецДиапазона);
    Если ЧислоНачалоДиапазона = Неопределено
    ИЛИ ЧислоКонецДиапазона = Неопределено Тогда
    возврат Неопределено;
    КонецЕсли;

    Для Элемент = ЧислоНачалоДиапазона По ЧислоКонецДиапазона Цикл
    Результат.Добавить(Элемент);
    КонецЦикла;

    КонецЕсли;

    КонецЦикла;

    возврат Результат;

    КонецФункции

    Функция СтрокаВЧисло(Строка)

    Попытка
    возврат Число(Строка)
    Исключение
    возврат Неопределено;
    КонецПопытки;

    КонецФункции
```

И обратное преобразование массива в строку диапазонов. Массив должен быть упорядоченным

```1c
    Функция ПреобразоватьМассивВСтроку(Массив, РазделительЭлементов = ", ", РазделительДиапазона = "-") Экспорт

    Результат = ";

    ПредыдущееЗначение = Неопределено;
    НачатДиапазон = Ложь;

    Для Каждого Элемент Из Массив Цикл

    ТекущееЗначение = Элемент;
    ПредставлениеЭлемента = Формат(ТекущееЗначение, "ЧГ=");

    Если ПредыдущееЗначение = Неопределено Тогда
    Результат = ПредставлениеЭлемента;
    Иначе

    ЧислоВходитВПоследовательныйДиапазон = (ТекущееЗначение = ПредыдущееЗначение + 1);
    Если ЧислоВходитВПоследовательныйДиапазон Тогда

    Если НЕ НачатДиапазон Тогда
    Результат = Результат + РазделительДиапазона;
    НачатДиапазон = Истина;
    КонецЕсли;

    Иначе

    Если НачатДиапазон Тогда
    Результат = Результат + ПредыдущееЗначение;
    НачатДиапазон = Ложь;
    КонецЕсли;

    Результат = Результат + РазделительЭлементов + ПредставлениеЭлемента;

    КонецЕсли;
    КонецЕсли;

    ПредыдущееЗначение = ТекущееЗначение;

    КонецЦикла;

    //последний элемент
    Если Массив.Количество()>1 Тогда
    Если НачатДиапазон Тогда
    Результат = Результат + ПредставлениеЭлемента;
    КонецЕсли;
    КонецЕсли;

    возврат Результат;

    КонецФункции
```
---
Такой велосипед проще изобрести, хотя...

http://www.forum.mista.ru/topic.php?id=311202

```1c
    МнСтр=СтрЗаменить(ИсходнаяСтрока,Разделитель,Символы.ПС);
    Для н=1 По СтрЧислоСтрок(МнСтр) Цикл
    Массив.Добавить(Число(СтрПолучитьСтроку(МнСтр,н)));
    КонецЦикла;
```

я бы добавил предварительное удаление пробелов

```1c
    МнСтр=СтрЗаменить(СтрЗаменить(ИсходнаяСтрока," ","),",",Символы.ПС);
```

и проверку на интервал

```1c
    Массив = Новый Массив;
    МнСтр=СтрЗаменить(СтрЗаменить(ИсходнаяСтрока," ","),",",Символы.ПС);
    Для н=1 По СтрЧислоСтрок(МнСтр) Цикл
    НайденныйИнтервал=СтрПолучитьСтроку(МнСтр,н);
    Если Найти(НайденныйИнтервал,"-")>0 Тогда
    МнСтр2=СтрЗаменить(ИсходнаяСтрока,"-",Символы.ПС);
    Если СтрЧислоСтрок(МнСтр2)=2 Тогда
    НачалоИнтервала=Число(СтрПолучитьСтроку(МнСтр2,1));
    КонецИнтервала=Число(СтрПолучитьСтроку(МнСтр2,2));
    Если КонецИнтервала>=НачалоИнтервала Тогда
    Для нн=НачалоИнтервала По КонецИнтервала Цикл
    Массив.Добавить(нн);
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    Иначе
    Массив.Добавить(Число(СтрПолучитьСтроку(МнСтр,н)));
    КонецЕсли;

    КонецЦикла;
```

не проверял, допиливайте ;)
---
похоже, написать будет быстрее, чем найти в интернетах.
---
Посмотрите тут. Переделать не сложно.
---
Такой велосипед проще изобрести, хотя...

http://www.forum.mista.ru/topic.php?id=311202

```1c
    МнСтр=СтрЗаменить(ИсходнаяСтрока,Разделитель,Символы.ПС);
    Для н=1 По СтрЧислоСтрок(МнСтр) Цикл
    Массив.Добавить(Число(СтрПолучитьСтроку(МнСтр,н)));
    КонецЦикла;
```

я бы добавил предварительное удаление пробелов

```1c
    МнСтр=СтрЗаменить(СтрЗаменить(ИсходнаяСтрока," ","),",",Символы.ПС);
```

и проверку на интервал

```1c
    Массив = Новый Массив;
    МнСтр=СтрЗаменить(СтрЗаменить(ИсходнаяСтрока," ","),",",Символы.ПС);
    Для н=1 По СтрЧислоСтрок(МнСтр) Цикл
    НайденныйИнтервал=СтрПолучитьСтроку(МнСтр,н);
    Если Найти(НайденныйИнтервал,"-")>0 Тогда
    МнСтр2=СтрЗаменить(ИсходнаяСтрока,"-",Символы.ПС);
    Если СтрЧислоСтрок(МнСтр2)=2 Тогда
    НачалоИнтервала=Число(СтрПолучитьСтроку(МнСтр2,1));
    КонецИнтервала=Число(СтрПолучитьСтроку(МнСтр2,2));
    Если КонецИнтервала>=НачалоИнтервала Тогда
    Для нн=НачалоИнтервала По КонецИнтервала Цикл
    Массив.Добавить(нн);
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    Иначе
    Массив.Добавить(Число(СтрПолучитьСтроку(МнСтр,н)));
    КонецЕсли;

    КонецЦикла;
```

не проверял, допиливайте ;)
---
Поправил слегка
---
допилил, выкладываю. Может, кому пригодится

```1c
    Функция ПреобразоватьСтрокуВМассив(Строчка, РазделительЭлементов = ",", РазделительДиапазона = "-") Экспорт

    Результат = Новый Массив;

    МнСтр = СтрЗаменить(СтрЗаменить(Строчка," ","),РазделительЭлементов,Символы.ПС);

    Для н=1 По СтрЧислоСтрок(МнСтр) Цикл

    ЭлементИлиДиапазон = СтрПолучитьСтроку(МнСтр, н);
    ПозицияРазделительДиапазона = Найти(ЭлементИлиДиапазон, РазделительДиапазона);

    Если ПозицияРазделительДиапазона = 0 Тогда

    Элемент = СтрокаВЧисло(ЭлементИлиДиапазон);
    Если Элемент = Неопределено Тогда
    возврат Неопределено;
    КонецЕсли;

    Результат.Добавить(Элемент);

    Иначе

    НачалоДиапазона = Лев(ЭлементИлиДиапазон, ПозицияРазделительДиапазона-1);
    КонецДиапазона = Сред(ЭлементИлиДиапазон, ПозицияРазделительДиапазона+1);

    ЧислоНачалоДиапазона = СтрокаВЧисло(НачалоДиапазона);
    ЧислоКонецДиапазона = СтрокаВЧисло(КонецДиапазона);
    Если ЧислоНачалоДиапазона = Неопределено
    ИЛИ ЧислоКонецДиапазона = Неопределено Тогда
    возврат Неопределено;
    КонецЕсли;

    Для Элемент = ЧислоНачалоДиапазона По ЧислоКонецДиапазона Цикл
    Результат.Добавить(Элемент);
    КонецЦикла;

    КонецЕсли;

    КонецЦикла;

    возврат Результат;

    КонецФункции

    Функция СтрокаВЧисло(Строка)

    Попытка
    возврат Число(Строка)
    Исключение
    возврат Неопределено;
    КонецПопытки;

    КонецФункции
```

И обратное преобразование массива в строку диапазонов. Массив должен быть упорядоченным

```1c
    Функция ПреобразоватьМассивВСтроку(Массив, РазделительЭлементов = ", ", РазделительДиапазона = "-") Экспорт

    Результат = ";

    ПредыдущееЗначение = Неопределено;
    НачатДиапазон = Ложь;

    Для Каждого Элемент Из Массив Цикл

    ТекущееЗначение = Элемент;
    ПредставлениеЭлемента = Формат(ТекущееЗначение, "ЧГ=");

    Если ПредыдущееЗначение = Неопределено Тогда
    Результат = ПредставлениеЭлемента;
    Иначе

    ЧислоВходитВПоследовательныйДиапазон = (ТекущееЗначение = ПредыдущееЗначение + 1);
    Если ЧислоВходитВПоследовательныйДиапазон Тогда

    Если НЕ НачатДиапазон Тогда
    Результат = Результат + РазделительДиапазона;
    НачатДиапазон = Истина;
    КонецЕсли;

    Иначе

    Если НачатДиапазон Тогда
    Результат = Результат + ПредыдущееЗначение;
    НачатДиапазон = Ложь;
    КонецЕсли;

    Результат = Результат + РазделительЭлементов + ПредставлениеЭлемента;

    КонецЕсли;
    КонецЕсли;

    ПредыдущееЗначение = ТекущееЗначение;

    КонецЦикла;

    //последний элемент
    Если Массив.Количество()>1 Тогда
    Если НачатДиапазон Тогда
    Результат = Результат + ПредставлениеЭлемента;
    КонецЕсли;
    КонецЕсли;

    возврат Результат;

    КонецФункции
```
---
```1c
    стр = "1-3, 7";
    м = Новый Массив;
    Для ном=1 По СтрДлина( стр ) Цикл
    Если КодСимвола( Сред(стр,ном,1) )>=КодСимвола( "0" )
    и КодСимвола( Сред(стр,ном,1) )<=КодСимвола( "9" ) Тогда

    м.Добавить( КодСимвола( Сред(стр,ном,1) )-КодСимвола( "0" ) );

    КонецЕсли;

    КонецЦикла;
```