Колонка сжато

FastCode 1518 12 22 67

В колонке табличной части находятся целые числа. Необходимо "сжать" ряд чисел, заменив подряд идущие числа их диапазоном. Например: 1, 3, 4, 5, 7, 10, 11, 12, 16 должно превратиться в 1, 3-5, 7, 10-12, 16.

Автор: ildarovich

Функция КолонкаСжато(ДокументСсылка, ИмяТабличнойЧасти, ИмяКолонки, Слэш = ",", Тире = "-")
    Запрос = Новый Запрос("ВЫБРАТЬ Различные " + ИмяКолонки + " ИЗ Документ." + ДокументСсылка.Метаданные().Имя + "." + ИмяТабличнойЧасти + " ГДЕ Ссылка = &Ссылка Упорядочить ПО " + ИмяКолонки);
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Ряд = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(ИмяКолонки);
    Если Ряд.Количество() = 0 Тогда Возврат ""
    КонецЕсли;
    Ряд.Добавить(0); Ряд.Добавить(0);
    Сжато = Строка(Ряд[0]);
    Для ё = 1 По Ряд.Количество() - 3 Цикл
        Если Число(Ряд[ё + 1]) - Число(Ряд[ё - 1]) <> 2 Тогда
            Сжато = Сжато + Слэш + Строка(Ряд[ё])
        ИначеЕсли Число(Ряд[ё + 2]) - Число(Ряд[ё]) <> 2 Тогда
            Сжато = Сжато + Тире
        КонецЕсли
    КонецЦикла;
    Возврат СтрЗаменить(Сжато, Тире + Слэш, Тире)
КонецФункции
2

Комментарии

Константин Аванесов
#1, 04 мая 2020 22:28

А есть какоето практическое применение? какойто готовый кейс? больше похоже на задачку какуюто.


FastCode
#2, 05 мая 2020 12:46

(1) Константин Аванесов, это код из серии Минимализмы (кратчайшее решение некоторых задач). Но если вдруг понадобится в практике, то уже есть готовое решение 😃


См. также

Сжатие длинной Строки

Формат изображения (уменьшить,обрезать,масштабировать,сжать)

КолонкиДляЗагрузкиДанных (БСП)

КолонкиИмеютГруппировку (БСП)

КолонкаМакета (БСП)

УдалитьКолонкуМакета (БСП)

Сжатое представление последовательности дат запросом

Проверить наличие колонки в таблице значений, когда нет доступа к самой таблице и методу Найти у коллекции Колонки

Модератору